El archivo que el servidor TFTP entregará a los nodos es un kernel de Linux funcional. Éste asume el control del sistema y realiza el arranque normal. Ya que la configuración en las estaciones es bastante particular, el kernel debe contar internamente con las funciones necesarias para inicializar el dispositivo de red, obtener su configuración de un servidor remoto, y montar su sistema de archivos raíz a través de NFS. Una vez realizadas estas funciones, el kernel invoca al proceso init (funcionamiento tradicional en un sistema Unix) y el arranque prosigue normalmente.
La naturaleza modular del kernel de Linux permite una gran eficiencia y versatilidad en el manejo de los módulos que controlan a los dispositivos e implementan ciertas características a nivel kernel. Esto es práctico si se cuenta con almacenamiento local, pero en el caso de un nodo sin dichas facilidades, se requiere que el kernel contenga internamente todas las funciones necesarias para su arranque, al menos hasta el montaje del sistema de archivos raíz. En el ámbito de Linux, se dice que los módulos necesarios deben compilarse monolíticamente dentro del kernel. En este caso necesitamos compilar monolíticamente las siguientes opciones en el kernel:
Para configurar el kernel con las opciones requeridas, se pasa al
directorio
/usr/src/linux, que contiene el código fuente del
kernel de Linux. Se puede utilizar la utilería make
menuconfig, que presenta un menú fácil de utilizar, y se seleccionan
las opciones especificadas (cuídese de especificar ``y'' para compilar
las opciones en forma monolítica).
Otra posibilidad es editar directamente el archivo de configuración del kernel (.config), donde existe variables que especifican las opciones de configuración que se desean. Las opciones requeridas son las siguientes:
CONFIG_IP_PNP=y CONFIG_IP_PNP_DHCP=y CONFIG_IP_PNP_BOOTP=y CONFIG_NET_VENDOR_3COM=y CONFIG_EL3=y CONFIG_NE2K_PCI=y CONFIG_NFS_FS=y CONFIG_ROOT_NFS=y
El archivo de configuración completo, utilizado para crear el kernel de los nodos, se encuentra en el apéndice (B.2)
Una vez realizada la configuración se procede a la compilación del kernel. Esto se realiza con los siguientes comandos, desde el directorio /usr/src/linux:
# make dep # make clean # make bzImage
Este proceso toma entre algunos minutos y unas horas, dependiendo de
la capacidad del sistema donde se realice la compilación. Al término,
el kernel está en el archivo
/usr/src/linux/arch/i386/bzImage.
Este kernel es adecuado para un sistema normal, pero para uso en un nodo del cluster se requiere un paso adicional. Se requiere que la imagen ejecutable cargada por el programa Etherboot contenga información adicional, que permita al cargador de arranque colocar la imagen en la locación de memoria correcta para su ejecución.
La distribución Etherboot contiene un programa para agregar esta
información al kernel, denominado mknbi. Este programa
permite crear archivos con formato NBI (Network Bootable Image). Para
esto debemos pasar al directorio
etherboot-4.6.7/mknbi-1.0 y
realizar lo siguiente:
# make # make install # /usr/local/lib/mknbi/mknbi --target=linux \ --output=/tftpboot/vmlinuz-nbi-2.2 \ /usr/src/linux/arch/i386/boot/bzImage
Estos comandos generan la utilería mknbi y sus archivos
auxiliares y la instalan bajo /usr/local/lib/mknbi. El último
comando invoca la utilería mknbi, especificando generar una
imagen binaria para Linux, tomando el archivo de origen
/usr/src/linux/arch/i386/boot/bzImage, que es el kernel que
acabamos de compilar, y dejando la imagen en formato NBI en el archivo
/tftpboot/vmlinuz-nbi-2.2. Nótese que esta ubicación
corresponde a la especificada en el parámetro filename para
todos los hosts, en el archivo de configuración de DHCP. Es decir,
tras realizar este proceso la imagen del kernel queda lista para ser
cargada por los nodos.
En este momento podemos volver a intentar el arranque de uno de los nodos. En esta ocasión el nodo obtendrá su configuración y logrará cargar el kernel. El kernel realiza su proceso de arranque normal, pero se detendrá con un mensaje de error al intentar montar el sistema de archivos raíz por NFS. Se aprecia que el siguiente paso deberá ser configurar el servidor de NFS y proporcionar un directorio raíz adecuado para que el nodo lo monte y realice el resto del arranque de manera tradicional.