LTSP 5 recomienda utilizar los kernels e imagenes initrd incluidos en la distribución, pero si queremos dar soporte a placas de red isa tendremos que crear nuestra propia imagen initrd. En la documentación de versiones anteriores de LTSP podemos ver instrucciones para hacer funcionar estas placas de red, pero estas configuraciones no funcionan si no hay una imagen initrd con determinadas características del lado del cliente.
La forma sugerida para dar soporte a las placas de red isa era agregar algo como lo siguiente en el archivo de configuración /etc/dhcp3/dhcpd.conf
option option-128 code 128 = string; option option-129 code 129 = text; group { use-host-decl-names on; option log-servers 192.168.0.1; host ws102 { hardware ethernet cc:cc:cc:cc:cc:cc; option option-128 e4:45:74:68:00:00; option option-129 "NIC=ne IO=0x300"; fixed-address 192.168.0.40; filename "/ltsp/vmlinuz"; } }
Ahora vamos a hacer algo distinto, vamos a utilizar pxelinux para enviar la imagen del kernel e imagen initrd al cliente (tal como lo hace la configuración por defecto) solo que vamos a hacer que los clientes con placas ISA reciban una configuración distinta. Así que agregamos la siguiente configuración en lugar de la que se usaba antes:
group { use-host-decl-names on; option log-servers 192.168.0.1; host ws102 { hardware ethernet 00:0c:29:84:02:d3; #Lo siguiente ya no será utilizado #option option-128 e4:45:74:68:00:00; #option option-129 "NIC=ne IO=0x300"; fixed-address 192.168.0.40; filename "/ltsp/placas_isa/pxelinux.0"; #Esta va a ser la carpeta que contenga nuestra imagen initrd modificada } }
En /var/lib/tftpboot/ltsp vamos a encontrar el archivo pxelinux.0 utilizado por defecto, ahora debemos crear la carpeta placas_isa tal como se la nombro en el archivo de configuración de dhcp más arriba y copiar los siguientes archivos dentro de ella:
pxelinux.0 pxelinux.cfg vmlinuz-2.6.18-4-486
Note que la versión del kernel puede ser distinta, aunque recomendamos que sea para la arquitectura 486 y no 686 de modo que nuestro kernel funcione en la mayor variedad posible de hardware (si un cliente liviano se reinicia mientras está booteando es probable que estemos usando un kernel para una arquitectura más nueva que la soportada por el cliente).
Note también que en el siguiente paso crearemos una imagen initrd, esta imagen contiene módulos del kernel, por lo tanto hay que tener cuidado de generarla para la versión de kernel que copiemos en /var/lib/tftpboot/ltsp/placas_isa/.
Para esto hay que:
Luego de instalar initramfs-tools, debemos que configurarlo de la siguiente manera:
ne 3c509
(Estos son módulos del kernel que deben ser cargados, en general son suficientes para casi cualquier placa isa)
# # initramfs.conf # Configuration file for mkinitramfs(8). See initramfs.conf(5). # # # MODULES: [ most | netboot | dep | list ] # # most - Add all framebuffer, acpi, filesystem, and harddrive drivers. # # dep - Try and guess which modules to load. # # netboot - Add the base modules, network modules, but skip block devices. # # list - Only include modules from the 'additional modules' list # MODULES=netboot # BUSYBOX: [ y | n ] # # Use busybox if available. # BUSYBOX=y # # NFS Section of the config. # # # BOOT: [ local | nfs ] # # local - Boot off of local media (harddrive, USB stick). # # nfs - Boot using an NFS drive as the root of the drive. # BOOT=nfs # # DEVICE: ... # # Specify the network interface, like eth0 # DEVICE=eth0 # # NFSROOT: [ auto | HOST:MOUNT ] # NFSROOT=auto
#!/bin/sh PREREQ="" prereqs() { echo "$PREREQ" } case $1 in prereqs) prereqs exit 0 ;; esac getParam(){ # Recibe el argumento buscado y la linea donde buscarlo e imprime el valor del argumento for param in $2; do if [ "$(echo $param | cut -d= -f1)" == "$1" ]; then echo $param | cut -d= -f2 break fi done } kernelArgs=$(cat /proc/cmdline) NIC=$(getParam NIC "$kernelArgs") if [ "$NIC" != "" ]; then nicArgs="" IO=$(getParam IO "$kernelArgs") IRQ=$(getParam IRQ "$kernelArgs") if [ "$IO" != "" ]; then nicArgs="$nicArgs io=$IO" fi if [ "$IRQ" != "" ]; then nicArgs="$nicArgs irq=$IRQ" fi echo -e "Cargando modulo para la placa indicada como argumento al kernel,\ncomando: modprobe $NIC$nicArgs" modprobe $NIC$nicArgs fi DEBUG=$(getParam DEBUG "$kernelArgs") if [ "$DEBUG" == "yes" ]; then echo -e "Pausa por la opcion debug, esperando 20 segundos...\a" sleep 20 fi
Esto es muy simple, el siguiente comando va a generar una imagen initrd para el kernel versión 2.6.18-4-486 (debemos tenerlo instalado en el servidor aunque no lo estemos usando) en el directorio /var/lib/tftpboot/ltsp/
mkinitramfs 2.6.18-4-486 -o /var/lib/tftpboot/ltsp/