[[TOC(HeadingÍndice)]]
Esta receta sirve para poder incluir módulos de red del Kernel del cliente !OpenGnSys y poder realizar correctamente la conexión al servidor. Con estas modificaciones se creará un nuevo cliente !OpenGnSys personalizado que puede adaptarse al hardware que no fuese reconocido durante arranque del cliente normal.
Nota: Los ejemplos que describen este procesos se basan en la adaptación del arranque para ordenadores Apple iMac 21.5 con tarjeta de red Broadcom BCM57766, que no es reconocida por el cliente !OpenGnSys 1.0.5 basado en Kernel 3.8.
Debemos averiguar el modelo de la interfaz de red (NIC) de un ordenador que no ha sido reconocida por el cliente PXE de !OpenGnSys.
En el caso de que ese equipo tenga GNU/Linux instalado, ajecutar:
lspci | grep Ethernet
En el ejemplo, el dato obtenido en un iMac 21.5 es:
03:00.0 Ethernet controller: Broadcom Corporation NetXtreme BCM57766 Gigabit Ethernet PCIe (rev 01)
Será necesario disponer de:
sudo apt-get install -y linux-headers-$(uname -r) dkms build-essential
Nota: la orden "uname -r
" se utiliza para conocer la versión exacta del kernel que se está utilizando.
Existen 2 posibilidades principales para compilar el módulo.
Si el problema del driver de red se soluciona en una revisión posterior del kernel, puede instalarse paquete del código fuente para usarlo como base para compilar el módulo. Debe ejecutarse:
sudo apt-get install linux-source-VersiónKernel
En el caso del driver tg3
para tarjetas Broadcom, el problema se soluciona en las últimas revisiones del kernel 3.8 y se puede instalar el paquete linux-source-3.8.0
.
Nota: tener en cuenta que esta solución requiere varios cientos de MB de almacenamiento, para descargar todo el código fuente del kernel y luego compilar el módulo necesario.
Descargar de la página web del fabricante el código fuente específico para el driver requerido.
Nota: se desaconseja utilizar esta opción para crear el módulo tg3
, ya que la página web de Broadcom ofrece un código fuente para el driver que da errores de compilación con la versión 3.8 del kernel.
El método más adecuado para compilar módulos independientes para el kenrel de Linux es utilizar DKMS, que utiliza como base los paquetes de código predefinidos para el núcleo actual.
Los pasos a seguir son los siguientes:
tg3
con versión 3.128
): sudo mkdir /usr/src/Módulo-Versión
Copiar o descomprimir en ese directorio el código fuente del módulo.
Crear en el directorio anterior el fichero dkms.conf
para configuración de DKMS, con el formato:
#!sh
PACKAGE_NAME="Módulo"
PACKAGE_VERSION="Versión"
BUILT_MODULE_NAME[0]="Módulo"
DEST_MODULE_LOCATION[0]=/CaminoInstalaciónMódulo
AUTOINSTALL="yes"
El camino de instalación suele estar bajo /kernel
, aunque también podría estar bajo /updates
o /extra
(para el driver tg3
, el Camino es /kernel/drivers/net/ethernet/broadcom
).
En algunos casos puede ser necesario "retocar" alguno de estos ficheros del directorio: Makefile
o modules-order
, para compilar solo el módulo requerido.
Compilar el módulo:
sudo dkms build -m Módulo -v Versión
Si no hay errores, el módulo generado estará en el fichero /var/lib/dkms/Módulo/Versión/VersiónKernel/Arquitectura/module/Módulo.ko
.
El siguiente paso es reconstruir el fichero Initrd del cliente !OpenGnSys incluyendo el nuevo módulo generado.
Solo si usamos un lápiz USB con el Initrd, montar su sistema de archivos.
Crear un directorio temporal y descomprimir el Initrd del cliente !OpenGnSys:
sudo mkdir /tmp/initrd
cd /tmp/initrd
sudo gzip -dc CaminoInitrd/oginitrd.img | cpio -im
sudo cp -va /var/lib/dkms/Módulo/Versión/VersiónKernel/Arquitectura/module/Módulo.ko lib/modules/VersiónKernel/CaminoInstalaciónMódulo
Nota: Atención al camino relativo donde copiar el módulo generado.
sudo find . | cpio -H newc -oa | gzip -9c >CaminoInitrd/oginitrd.img
Por último, deben retocarse los ficheros de arranque PXE para todos los equipos que deben cargar el driver específico, añadiendo el valor adecuado en la opción ognetmodule
.
Nota: en el caso de los iMac, estos equipos no pueden realizar el arranque por PXE, así que debe usarse un lápiz USB con un cargador GRUB que realice la carga inicial; por lo tanto, en vez de modificar el fichero correspondiente PXE, debe editarse de igual modo el fichero grub.cfg
con la configuración de GRUB.
Para modificar el arranque PXE realizar los siguientes pasos:
cd /opt/opengnsys/tftpboot/menu.lst/templates
sudo cp -va PlantillaBase PlantillaNueva
Nota: Tener muy en cuenta el modo de trabajo de la plantilla base, bien usuario normal o bien administrador.
ognetmodule
, modificando la línea kernel
: kernel ... ognetmodule=Módulo ...
Notas:
INFOHOST
.linux
en vez de kernel
, pero la modificación es simialr.Se han localizado algunos problemas potenciales en la carga del nuevo módulo generado, por lo que esta sección presenta algunas soluciones conocidas.
Si el módulo generado tiene dependencias con otros módules que deben cargarse previamente, puede ser necesario retocar el proceso de arranque del cliente para cargar correctamente todos estos módulos. Para ello debe editarse usarse el proceso para retocar el Initrd del cliente y editar el fichero scripts/ogfunctions
y modificar la función ogLoadNetModule
,- sustituyendo la línea completa que ejecuta la orden insmod
por la siguiente:
modprobe ${ognetmodule}
El proceso completo de arranque de !OpenGnSys se compone de una fase inicial que carga los ficheros del Kernel Linux y su Initrd asociado (que contiene los módulos básicos para conectarse con el servidor) y un segundo sistema de ficheros SquashFS servido por la red con una distribución más completa para gestionar el cliente.
Es importante tener en cuenta que puede que el módulo del Kernel que está en el Initrd puede no coincidir con el correspondiente al del 2º sistema de ficheros que se mezcla con SquashFS. En el caso de querer operar con un módulo actualizado tras finalizar el arranque del cliente, el fichero generado también tendría que copiarse en el fichero ogclient.sqfs
, pero ésto no será necesario en la mayoría de los casos, puesto que el módulo se carga al principio del proceso de arranque.