Boot Master

Boot Master es un proyecto para configurar un bootloader que pueda ser controlado remotamente.

Como actualmente está basado en Linux, lo llamamos Boot Master Linux.

Actualmente, Boot master Linux es un sistema Linux minimo para las PC de los laboratorios. Permite iniciar Windows o Linux de otras particiones, o hacer modificaciones y/u otras acciones automatizadas, via scripts obtenidos desde la red.

El bootloader (grub) y el Boot master Linux son estaticos. El bootloader de la PC solo inicia el Boot master Linux.

Ventajas

  • No habria necesidad de actualizar el bootloader (grub) o Boot master Linux, son estaticos.
  • Boot master Linux puede ejecutar scripts obtenidos desde la red, por lo que esos scripts podrian actualizar los diferentes Linux automaticamente, o por ejemplo, iniciar (arrancar) Linux específicos (por ejemplo para encender todo el cluster por las noches).

Una idea primordial es que con este Boot master Linux estatico se pueda actualizar cada PC cuando se requiera. Por ejemplo, en nuestras ideas imaginamos que Boot master Linux contendria al menos un script que sepa de donde obtener y como se llama algun script de actualizacion de la PC. Por ejemplo, que hiciera algo como :

wget http://repoubuntu/scripts/hacer.sh

El "hacer.sh" seria algo centralizado que nos permite ejecutar sobre el host cualquier cosa, y modificarlo cada vez que sea necesario. Podria ser lo suficiente inteligente para saber que hacer tomando la MAC de la PC en donde se ejecuta.

  • Ademas, Boot master Linux seria un bootloader dinamico (via kexec) para Windows o los Linux de otras particiones.

Funcionamiento de Boot master Linux

El grub de la PC inicia automaticamente Boot master Linux.

Boot master Linux presenta un menú de arranque al usuario, el cual permite seleccionar Windows o Linux. Paralelamente, Boot master Linux intenta obtener el script  http://10.0.5.7/scripts/hacer.sh. Si lo obtiene lo ejecuta.

Internamente, Boot master Linux realiza las siguientes acciones :

  1. Monta las particiones 3, 4, ..
  2. Obtiene de cada /boot, de esas particiones, los vmlinuz* y los initrd*
  3. Presenta un menu al usuario para elegir iniciar Windows o algun Linux
  4. Si el usuario elige una opcion la ejecuta, sino, luego de un lapso de tiempo (10 seg) inicia el sistema por default (Windows)
  5. Utiliza kexec para iniciar el Linux seleccionado o Windows
  6. Ademas, al momento de mostrar el menú al usuario (5.) intenta obtener un script del servidor. Si lo obtiene, lo ejecuta. Por ejemplo, util para que el grupo hpc pueda iniciar a traves de wakeonlan y Boot master Linux los Linux para el cluster. Tambien podria ser util, para indicarle a Boot master linux que debe actualizar alguna particion Linux.

La espera por "ciertos" paquetes la imagino sencilla, algo como :

while true ; do

wget http://repoubuntu/scripts/hacer.sh && ./hacer.sh && exit 0 ; sleep 2

done

Si Boot master Linux obtiene "hacer.sh" entonces lo ejecuta.

  1. El botón de Power apaga la PC.

Implementacion

Una posible implementacion se está llevando a cabo utilizando RIPLinux y grub4dos.

RIPLinux esta basada en slackware, y es una distribucion mantenida (existen versiones de 2011).  http://www.tux.org/pub/people/kent-robotti/looplinux/rip/

La distro trae un kernel actual, soporta kexec, y ya trae, en el rootfs todas las herramientas necesarias (y las tools de kexec).

grub4dos puede ser utilizado desde kexec. La ultima version :  http://download.gna.org/grub4dos/grub4dos-0.4.4.zip

El menu de arranque que es presentado al usuario y la obtencion del script para controlar el host es controlado por un script : bootmaster/boot-menu.sh

Se ha testeado

  • iniciamos un Linux (compuesto solo de un kernel y un initrd) obtenido desde RIPLinux.
  • hemos testeado el boot y el uso de kexec. Se ha podido iniciar (boot) el ubuntu instalado en la PC.
  • hemos testeado el boot de Windows XP con kexec, usando la ultima version de grub4dos. (testeado sobre una maquina de laboratorio de biblioteca)
  • hemos testeado la red. Via udhcpc se obtiene una ip desde el dhcp server.
  • hemos testeado la instalacion del master linux usando grub2 y el propio master linux. El grub2 del host inicia automaticamente el Linux que hará de bootloader.
  • hemos testeado un menu de arranque que automaticamente presenta las opciones al usuarios con respecto a los Linux que esten instalados en el host, mas Windows
  • hemos testeado el control de la maquina via red. El menu de arranque obtiene un script de la red y lo ejecuta.
  • hemos testeado el tiempo que demora Boot master Linux en iniciar y mostrar el menu de arranque : 10 segundos.
  • hemos testeado el wakeonlan. En el setup de la BIOS debe estar la opcion "Power On Ring" habilitada. Desde Linux encendemos una PC con : "sudo wakeonlan MAC"

"Armado" de Boot master Linux

  • Se desempaqueta el archivo rootfs.cgz obtenido de la iso de RIPLinux : gzip -dc ../rootfs.cgz | cpio -iumdv
  • Se agrega una password a root en /etc/shadow
  • Se elimina el contenido de /etc/issue
  • Se copia el directorio grub4dos/ bajo /opt/
  • Se modifica /etc/inittab : se agrega "2>&1 > /dev/null" a la linea de rc.S
  • Se modifica /etc/rc.d/rc.M :
    • Se elimina la seccion que ejecuta y selecciona el keymap
    • Se agrega al principio del script "udhcpc eth0"
    • Se agrega como anteultimo comando /bin/boot-menu.sh
  • Se copia boot-menu.sh bajo /bin/
  • Se eliminan algunos archivos y directorios innecesarios : /usr/man/, /usr/lib/libclamav*, /usr/bin/smbclient, /usr/bin/photorec, /lib/firmware/, /opt/compaq/
  • Se arma el initrd final : find ./ | cpio -H newc -o > ../riplinux-initrd ; gzip ../riplinux-initrd

Algunas notas recordatorias

Iniciando Windows

kexec --append="--config-file=\"root (hd0,0);chainloader +1\"" -l grub.exe ; kexec -e

Grub2Dos

Se agregó la última versión de grub4dos al rootfs (initrd) del bootloader linux, bajo el directorio /opt/grub4dos-*/

Instalar el bootloader en el MBR

grub-install --root-directory=/path/root/mount/point /dev/sda

Extras para RIPLinux

Se puede agregar mas software desde el repositorio de slackware actual (13.x) (por las pruebas iniciales no seria necesario).

Instalación

En las maquinas de los laboratorios deberia estar instalado en la particion 2. Solo contiene un Kernel mas initrd, por lo que seria una mini particion 2.

Todas las maquinas de laboratorio tendrian un bootloader (grub), windows, Boot master Linux, y otros Linux (para estudiantes, para cluster, etc).

En nuestro esquema actual la particion 1 de las PC de los laboratorios contendría Windows, la partición 2 Boot master Linux. Las particiones restantes serían utilizadas para los Linux de laboratorio, cluster, etc.