Lihuen
RSSRSS AtomAtom

Diferencia entre revisiones de «Configurar clientes livianos con placas de red ISA en LTSP 5»

(Generando la imagen)
(Generando la imagen)
Línea 169: Línea 169:
 
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/placas_isa/
 
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/placas_isa/
 
  mkinitramfs 2.6.18-4-486 -o /var/lib/tftpboot/ltsp/placas_isa/initramfs-2.6.18-4-486-placasisa
 
  mkinitramfs 2.6.18-4-486 -o /var/lib/tftpboot/ltsp/placas_isa/initramfs-2.6.18-4-486-placasisa
 +
El siguiente paso es configurar pxelinux para que use nuestra imagen initramfs y le pase los argumentos que querramos
 +
==Configurando pxelinux==
 +
Ahora podremos pasarle a nuestros clientes los argumentos DEBUG (detiene el booteo por unos segundos luego de intentar cargar los modulos de la placa de red), NIC (determina que modulo cargar), IO (Corresponde al argumento io al cargar el módulo) e IRQ (corresponde al argumento irq al cargar el módulo), para que nuestra copia de pxelinux utilice nuestra imagen initrd y pase los argumentos correspondientes al kernel debemos editar el archivo /var/lib/tftpboot/ltsp/placas_isa/pxelinux.cfg/default
 +
Simplemente si teníamos
 +
DEFAULT vmlinuz ro initrd=initrd.img root=/dev/nfs ip=dhcp
 +
Pondremos el nombre de nuestra imagen initrd, de nuestro kernel y las opciones que precisemos. Por ejemplo para una placa de red que use el módulo ne
 +
DEFAULT vmlinuz-2.6.18-4-486 ro initrd=initramfs-2.6.18-4-486-placasisa root=/dev/nfs ip=dhcp NIC=ne IO=0x300
 +
Otro ejemplo para placas 3com
 +
DEFAULT vmlinuz-2.6.18-4-486 ro initrd=initramfs-2.6.18-4-486-placasisa root=/dev/nfs ip=dhcp NIC=3c509
 +
Si el sistema está fallando al cargar el módulo y queremos ver porque
 +
DEFAULT vmlinuz-2.6.18-4-486 ro initrd=initramfs-2.6.18-4-486-placasisa root=/dev/nfs ip=dhcp NIC=3c509 DEBUG

Revisión de 20:15 7 sep 2008

Placas de Red ISA

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.

Configurando el servidor

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/.

Generando la nueva imagen initrd en el servidor

Para esto hay que:

  • Instalar initramfs-tools
  • Configurarlo
  • Generar una imagen para el kernel 2.6.18-4-486 (por ejemplo)
  • Copiarla al directorio donde pusimos la copia de pxelinux.0

Configurando initamfs-tools

Luego de instalar initramfs-tools, debemos que configurarlo de la siguiente manera:

  • Archivo: /etc/initramfs-tools/modules
ne
3c509

(Estos son módulos del kernel que deben ser cargados, en general son suficientes para casi cualquier placa isa)

  • Archivo: /etc/initramfs-tools/initramfs.conf
#
# 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
 
  • Debemos crear el script /etc/initramfs-tools/scripts/nfs-top/placas.sh con el contenido de abajo y ponerle permisos de ejecución:
#!/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

Generando la imagen

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/placas_isa/

mkinitramfs 2.6.18-4-486 -o /var/lib/tftpboot/ltsp/placas_isa/initramfs-2.6.18-4-486-placasisa

El siguiente paso es configurar pxelinux para que use nuestra imagen initramfs y le pase los argumentos que querramos

Configurando pxelinux

Ahora podremos pasarle a nuestros clientes los argumentos DEBUG (detiene el booteo por unos segundos luego de intentar cargar los modulos de la placa de red), NIC (determina que modulo cargar), IO (Corresponde al argumento io al cargar el módulo) e IRQ (corresponde al argumento irq al cargar el módulo), para que nuestra copia de pxelinux utilice nuestra imagen initrd y pase los argumentos correspondientes al kernel debemos editar el archivo /var/lib/tftpboot/ltsp/placas_isa/pxelinux.cfg/default Simplemente si teníamos

DEFAULT vmlinuz ro initrd=initrd.img root=/dev/nfs ip=dhcp

Pondremos el nombre de nuestra imagen initrd, de nuestro kernel y las opciones que precisemos. Por ejemplo para una placa de red que use el módulo ne

DEFAULT vmlinuz-2.6.18-4-486 ro initrd=initramfs-2.6.18-4-486-placasisa root=/dev/nfs ip=dhcp NIC=ne IO=0x300

Otro ejemplo para placas 3com

DEFAULT vmlinuz-2.6.18-4-486 ro initrd=initramfs-2.6.18-4-486-placasisa root=/dev/nfs ip=dhcp NIC=3c509

Si el sistema está fallando al cargar el módulo y queremos ver porque

DEFAULT vmlinuz-2.6.18-4-486 ro initrd=initramfs-2.6.18-4-486-placasisa root=/dev/nfs ip=dhcp NIC=3c509 DEBUG