Flashear la BIOS de equipos NEC PowerMate VL4 vía PXE | Algo de Linux

viernes, 7 de octubre de 2011

Flashear la BIOS de equipos NEC PowerMate VL4 vía PXE

PROBLEMA A RESOLVER:
Nuestros terminales ligeros son NEC PowerMate VL4 sin disquetera ni CD-ROM. El problema que tenemos actualmente es que, tras unos años en funcionamiento, se están agotando las pilas. Como consecuencia, se borran  los ajustes de la CMOS y los equipos dejan de arrancar porque la opción de arranque por defecto es el Floppy.

SOLUCIÓN:
Cambiar los ajustes por defecto de la BIOS para que el primer dispositivo de arranque sea "On Board LAN", es decir,  la tarjeta de red integrada.
Lo interesante de esta actualización es que fijaremos los ajustes por defecto en la ROM de la BIOS y no en la CMOS. Así, aunque se agoten las pilas de los equipos, las opciones que deseamos tener, seguirán establecidas y no se perderan, como sucedería si estuvieran almacenadas en la CMOS y se agotara la pila.

AJUSTES FIJADOS COMO PREDETERMINADOS:
Éstos son los ajustes que he establecido por defecto en la ROM modificada:
  • Fijado como primer dispositivo de arranque "On Board LAN", es decir, la tarjeta de red integrada y activado como "Show only" para que no pueda ser modificado por el usuario.
  • Desactivado segundo y tercer dispositivo de arranque para que el usuario no pueda cambiarlo.
  • Desactivado el arranque desde otros dispositivos.
  • Desactivadas opciones de establecer passwords de setup y de usuario. Así los usuarios no van a poder cambiarlos en caso de reseteo de los valores de la CMOS.

HERRAMIENTAS:
Como nuestra bios es AWARD, para flashearla u obtener un backup tan sólo tendríamos que copiar la herramienta AWDFLASH.EXE y la imagen de la BIOS que vamos a grabar en nuestra máquina. 
Ya que necesitaba un disquete de arranque, para flashear/obtener copia de la BIOS, he creado una imagen de un floppy con las siguientes herramientas, que me permitirá hacer algunas cosas más con la imagen de la BIOS, como por ejemplo, personalizarla:
  • awd822a.exe -> Flash loader for Award BIOS. Permite flashear/hacer backup de la BIOS.
  • modbin62.04.03.exe -> Nos permite modificar ajustes por defecto de BIOS Award.

PASOS SEGUIDOS:

Primero.- Crear un floppy disk con las herramientas mencionadas anteriormente que nos servirán para trabajar con nuestras BIOS Award.
Como comentaba al principio, nuestros terminales ligeros no disponen de disquetera ni de unidad de CDROM. Además, tampoco disponen de arranque vía USB, por tanto, nuestra mejor opción para actualizar la BIOS de los mismos es cargar una imagen de floppy mediante PXE, haciendo uso de memdisk (También se puede usar GRUB para arrancar una imagen de floppy, pero, como el sistema de terminales ligeros hace uso de PXE, vamos a aprovecharlo).
  
1.- Lo primero que necesitamos es un disquete de arranque.  
      Como se requiere un sistema operativo DOS para nuestros fines y podemos evitar usar versiones propietarias, descargamos FreeDOS, un sistema DOS compatible completamente free. Y como necesitamos espacio en nuestro floppy, descargamos la versión "OEM Bootdisk", que contiene lo justo:
  • AUTOEXEC.BAT
  • COMMAND.COM
  • CONFIG.SYS
  • KERNEL.SYS
  • README
  • sys.com

Así que descargamos la versión FreeDOS OEM Bootdisk:
# wget http://www.linuxinsight.com/files/FDOEM.144.gz
Y descomprimimos:
# gunzip FDOEM.144.gz
Obtendremos un fichero llamado FDOEM.144
      
En el siguiente enlace de Dropbox también econtraremos una imagen de un floppy de 1.44MB: http://dl.dropbox.com/u/5004198/floppies/dosdisk144.img
# wget http://dl.dropbox.com/u/5004198/floppies/dosdisk144.img
2.- Descargamos de internet las herramientas que queramos incluir en nuestro disquete. Por ejemplo:
  • awd822a.exe
  • modbin62.04.03.exe 
3.- Una vez que tenemos la imagen del disquete de arranque, lo montamos en un directorio y añadimos las herramientas.

Montamos la imagen del Floppy Bootdisk en un directorio temporal:

# mkdir /tmp/floppy
# mount -t vfat -o loop FDOEM.144 /tmp/floppy

Y le añadimos las herramientas que necesitemos:

# cp awd822a.exe /tmp/floppy/
# cp modbin62.04.03.exe /tmp/floppy/modbin6.exe
      
He renombrado modbin para que el nombre del archivo no tenga más de 8 caracteres, ya que la actualización se hace en un sistema operativo DOS.
   
También me ha parecido interesante añadir el editor de textos de freedos edit.exe, por si en algún momento tengo que editar ficheros en formato dos, como, por ejemplo el AUTOEXEC.BAT. Como en mi máquina tengo instalado dosemu, lo he copiado desde allí:
# cp /usr/lib/dosemu/freedos/bin/edit.exe /tmp/floppy/
Por último, he pensado que la imagen debería permitir elegir con qué imagen flashear la rom, así que he añadido CHOICE.COM, que permite dar opción al usuario a elegir entre varias opciones desde el autoexec.bat:
# cp choice.com /tmp/floppy/
Y listo. Ahora mi floppy contendrá lo siguiente:    
  • AUTOEXEC.BAT
  • COMMAND.COM
  • CHOICE.COM
  • edit.exe
  • MODBIN6.EXE
  • sys.com
  • awd822a.exe
  • CONFIG.SYS
  • KERNEL.SYS
  • README
4.- Desmontamos y copiamos la imagen del disquete a un lugar seguro:
# umount /tmp/floppy  
# cp FDOEM.144 /home/miusuario/Dropbox/bios/
5.- Comprobar que nuestro disquete funciona:
# qemu -fda /home/miusuario/Dropbox/bios/FDOEM.144

Segundo.- Obtener una copia de nuestra BIOS en un fichero.
Ahora que ya tenemos una imagen de un disquete autoarrancable con las herramientas necesarias, vamos a hacer un backup de la BIOS de un equipo NEC para trabajar sobre ella y hacerle los ajustes planificados. Para ello:
  
1.- Grabamos la imagen en un disquete:
# dd if=/home/miusuario/Dropbox/bios/FDOEM.144 of=/dev/fd0 bs=10k count=144
2.- Como tengo equipos NEC con disquetera, voy a usar uno de ellos para hacer un backup de la BIOS.         

Seleccionamos como primer dispositivo de arranque "Floppy" en la BIOS, introducimos el disquete en el equipo del que vamos a obtener copia de la BIOS y reiniciamos para arrancar desde el mismo.
  
Se iniciará FreeDOS y se quedará esperando en la línea de comandos:
A:\
Escribiremos el comando para hacer la copia y pulsamos Enter:
A:\ awd822a /pn /sy backup.bin

donde: /pn -> program no (no flashear la BIOS)
            /sy -> save yes (guardar un backup de la BIOS actual)
                
Cuando el proceso termine, tendremos una copia de la bios en un fichero llamado backup.bin
           
Apagamos el equipo del que hemos hecho la copia.
      
3.- Introducimos el disquete en nuestro equipo para hacer una nueva imagen del mismo, ahora que tiene, el backup.bin, además de las herramientas y creamos la imagen:
# dd if=/dev/fd0 of=/home/miusuario/Dropbox/bios/fbiosnec.img bs=10k count=144  
4.- Montamos la imagen del disquete (fbiosnec.img) en un directorio temporal:

# mount -t vfat -o loop fbiosnec.img /tmp/floppy
5.- Una vez montado, copiamos el fichero de backup a un lugar seguro para tener una copia, por ejemplo, a mi carpeta de Dropbox:
# cp /tmp/floppy/backup.bin /home/miusuario/Dropbox/bios
La primera copia (backup.bin) nos va a servir para tener un backup de la BIOS original.

La segunda copia (biosnec.bin) es la que vamos a modificar para que contenga los ajustes que queremos.       
      
6.- Aprovechando que en mi equipo tengo wine, abrimos una consola de wine en un terminal:

# cd /tmp/floppy/
# wineconsole cmd
Se nos abrirá una consola dos de wine en el directorio /tmp/floppy:      
Z:\tmp\floppy>
Como ya hemos guardado una copia de la imagen de la bios, renombramos el fichero del floppy:
Z:\tmp\floppy> ren backup.bin biosnec.bin
Y, por último, abrimos MODBIN6.EXE para realizar los ajustes que queremos hacer en la BIOS:
Z:\tmp\floppy> MODBIN6
MODBIN6 detectará todas las copias de las BIOS que haya. Como en el disquete sólo hay una (biosnec.bin), tan sólo se mostrará ésta. Pulsamos ENTER para cargarla. Se abrirá el programa y ya podremos hacer nuestros ajustes.
      
Cuando terminemos de hacer los ajustes en la copia de la BIOS, guardamos y cerramos la ventana "Wine Command Prompt".
      
7.- Al principio, usé una imagen de disquete de 1.44MB, suficiente cuando queremos almacenar una copia de la bios, pero como posteriormente pensé en incluir la imagen original de la bios, la imagen retocada, y modificar el autoxec para permitir elegir al usuario con qué imagen flashear, el disquete de 1.44MB se me quedaba pequeño. Así que opté por usar una imagen de floppy de 2.88MB, que nos deja más espacio libre en disco para añadir nuestras herramientas.

Podemos descargar la imagen del floppy desde http://dl.dropbox.com/u/5004198/floppies/dosdisk288.img:
# wget http://dl.dropbox.com/u/5004198/floppies/dosdisk288.img
Montamos la imagen de este nuevo floppy en una carpeta temporal y le copiamos el contenido del otro disquete:
# mkdir /tmp/floppy288
# mount -t vfat -o loop dosdisk288.img /tmp/floppy288
# cp /tmp/floppy/* /tmp/floppy288/
Además, copiamos la imagen de la BIOS original:
# cp /home/miusuario/Dropbox/bios/backup.bin /tmp/floppy288
8.- No olvidemos que tenemos montada la imagen del disquete fbiosnec.img en /tmp/floppy y la imagen del disquete dosdisk288.img en /tmp/floppy288 y que tenemos que desmontarlas. La desmontamos:
# umount /tmp/floppy
# umount /tmp/floppy288
9.- Editamos el autoexec.bat del floppy de actualización fbiosnec.img.
Aquí dejo una copia del que he preparado: http://dl.dropbox.com/u/5004198/floppies/autoexec.bat
# wget http://dl.dropbox.com/u/5004198/floppies/autoexec.bat
10.- Y hacemos una copia de nuestro floppy:
# cp dosdisk288.img /home/miusuario/Dropbox/bios/fbiosnec.img                         
Tercero.- Crear una imagen iso de CD autoarrancable.
Como no cuesta nada, ahora que tenemos un floppy de arranque, podemos crear también una imagen de CD autoarrancable, por si la necesitamos en algún momento.
  
* Si nuestra máquina es Debian Lenny, tenemos que usar mkisofs:
# mkisofs -o fbiosnec.iso -b fbiosnec.img fbiosnec.img
* Si nuestra máquina es Debian Squeeze:
# genisoimage -o fbiosnec.iso -b fbiosnec.img fbiosnec.img

Cuarto.- Preparar PXE para cargar la imagen de nuestro floppy disk mediante memdisk.

Bien. Ahora ya tenemos una imagen de un floppy con el que podemos flashear automáticamente la BIOS de nuestros equipos. Como ya comentamos al principio, para flashearlos nuestra mejor opción es cargar una imagen del floppy que hemos creado mediante PXE, haciendo uso de memdisk aprovechando que el sistema de terminales ligeros hace uso de PXE.
  
Las instrucciones que hacen arrancar un terminal ligero se encuentran en el fichero: /var/lib/tftpboot/ltsp/i386/pxelinux.cfg/default
   
Si mostramos el contenido de éste fichero:   
# cat /var/lib/tftpboot/ltsp/i386/pxelinux.cfg/default
Veremos que tan sólo contiene una línea de comentario y otra que carga la imagen de los terminales:
# Para usar nbd
DEFAULT vmlinuz ro initrd=initrd.img quiet
Así que lo retocaremos un poco para que podamos lanzar la imagen de nuestro disquete cuando queramos. Además, ya de paso, vamos a añadir la posibilidad de iniciar Plop Boot Manager, por si en algún momento necesitamos arrancar los equipos desde usb. Pero, antes, vamos a preparar el entorno:
  
1.- Creamos un directorio llamado Floppy dentro /var/lib/tftpboot/ltsp/i386 en el servidor de terminales:
# mkdir /var/lib/tftpboot/ltsp/i386/Floppy
Más que nada para ser organizados y si en algún momento, necesitamos otro disquete para otros fines, lo añadiremos aquí también.
  
2.- Copiamos la imagen del disquete para flashear la bios en /var/lib/tftpboot/ltsp/i386/Floppy/
# cp /home/miusuario/Dropbox/bios/fbiosnec.img /var/lib/tftpboot/ltsp/i386/Floppy/
3.- Copiamos memdisk a /var/lib/tftpboot/ltsp/i386/
# cp /opt/ltsp/i386/usr/lib/syslinux/memdisk /var/lib/tftpboot/ltsp/i386/
4.- Descargamos Plop Boot Manager y lo descomprimimos:
# cd /home/miusuario/Dropbox/bios/
# wget http://download.plop.at/files/bootmngr/plpbt-5.0.12.zip
# unzip plpbt-5.0.12.zip
Se creará un directorio: plpbt-5.0.12. Dentro de él encontraremos un fichero: plpbt.bin. Lo copiamos a /var/lib/tftpboot/ltsp/i386/
      
5.- Copiamos plpbt.bin a /var/lib/tftpboot/ltsp/i386/

# cp plpbt.bin /var/lib/tftpboot/ltsp/i386/
6.- Hacemos una copia de seguridad del fichero default:
# mv /var/lib/tftpboot/ltsp/i386/pxelinux.cfg/default /var/lib/tftpboot/ltsp/i386/pxelinux.cfg/default.orig
7.- Creamos una nueva copia del fichero default:
# nano /var/lib/tftpboot/ltsp/i386/pxelinux.cfg/default

Con el contenido que listamos a continuación:

# Fichero /var/lib/tftpboot/ltsp/i386/pxelinux.cfg/default

DEFAULT ltsp

# Para usar nbd
LABEL ltsp
           kernel vmlinuz
           append ro initrd=initrd.img quiet
 
# Para flashear la BIOS del terminal
LABEL flashbios
           kernel memdisk
           append rw initrd=Floppy/fbiosnec.img

# PLOP Boot Manager
LABEL plp
           linux plpbt.bin
Si nos fijamos en el fichero, podemos ver que tiene tres entradas:
  • ltsp (Para iniciar el terminal ligero)
  • flashbios (Para flashear la bios del terminal ligero)
  • plp (Para iniciar Plop Boot Manager)     
Y que, por defecto, se inicia la máquina mediante ltsp.
     
Si en algún momento queremos flashear la bios de los terminales conectados a un servidor, no tenemos más que cambiar la entrada:
DEFAULT ltsp
por:
DEFAULT flashbios
Al encender los terminales, arrancarán la imagen del floppy que flashea la BIOS.

Y, si en algún momento, queremos arrancar Plop Boot Manager, por ejemplo, para disponer de arranque USB en los terminales, cambiamos la línea DEFAULT a:
DEFAULT plp

1 comentario:

Anónimo dijo...

Muchas gracias Esteban.
Me sirvió para modificar los valores por defecto de la bios.
La clave: awfl789.exe con el que hice la copia de la BIOS y el modbin con el que la modifique (la copia).
Saludos.