Ejecutar Debian GNU/Linux sobre red mediante PXE

Con este método podremos usar un ordenador sin disco duro como cliente ligero. El sistema operativo se cargará via red mediante PXE y un directorio compartido en un servidor nfs.

Instalaremos un servidor dhcp y un servidor tftp. El servidor dhcp se encargará de ofrecer la configuración de red a nuestro cliente y el nombre de la imagen que debe descargar via tftp.

En nuestro servidor dhcp crearemos una entrada similar a la siguiente, siendo pxelinux.0 un fichero que debemos poner en el raíz del servidor tftp, y que bajamos de http://ftp.debian.org/debian/dists/etch/main/installer-i386/current/images/netboot/pxelinux.0


group {
 next-server 192.168.0.101;
 filenamename "pxelinux.0";
  host asus {
   hardware ethernet 00:1D:60:DE:15:3B;
   fixed-address 192.168.0.127 ;
  }
}
	

Debemos crear un directorio donde se almacenará el sistema completo, que luego exportaremos vía nfs para que la pueda leer el cliente ligero. En nuestro caso /media/datos/pxeboot por hallarse en la partición más grande del servidor.

Ahora instalaremos el sistema base en ese directorio con el comando debootstrap etch /pxeroot

Posteriormente debemos editar la configuración de red de ese sistema base según el hardware del cliente ligero. También editaremos el fichero hosts y el hostname para adaptarlos a nuestras necesidades. En el fichero /etc/network/interfaces no debemos olvidarnos de configurar el dispositivo de loopback, tal como:


auto lo
auto eth0
iface lo inet loopback
iface eth0 inet dhcp # o estática, según el caso
	

Importante

Según la tarjeta de red del cliente, puede que necesitemos especificar su driver en /etc/initramfs-tools/modules y/o cambiar eth0 por el que corresponda en /etc/network/interfaces y en /etc/initramfs-tools/initramfs.conf (parámetro "DEVICE", que en mi caso resultó ser eth2). Mediante chroot actualizaremos el initrd con el comando update-initramfs -u. Para averiguar qué interfaz nos corresponde, podemos abrir con un editor de textos el fichero initrd generado y buscar el módulo de nuestra tarjeta de red. Al lado debería especificarse el interfaz que el kernel asignará a dicha tarjeta.

Debemos crear un fichero fstab como este:

# /etc/fstab: static filename system information.
# <filename system>     <mount point>   <type>          <options>       <dump>  <pass>
/dev/ram0/      auto            defaults        0               0
proc            /proc           proc            defaults        0       1
tmpfs           /tmp            tmpfs           defaults        0       1

Por último entraremos en el sistema vía chroot para instalar un kernel mediante apt

Ya casi terminamos. Ahora debemos copiar el kernel y el initrd que acabamos de instalar en el directorio raíz del servidor tftp, de modo que el cliente pueda descargarlos. Posteriormente crearemos una carpeta llamada pxelinux.cfg en el raíz del tftpd, y dentro pondremos el fichero default:


DISPLAY boot.txt
F1 f1.txt
...

DEFAULT linux

LABEL linux
    kernel vmlinuz
    append vga=791 initrd=initrd.img ramdisk_size=14332 root=/dev/nfs nfsroot=192.168.0.1:/pxeroot rw --

PROMPT 0
TIMEOUT 0

Sugerencia

Podemos presentar un mensaje de bienvenida mediante el fichero boot.txt y mostrar ayuda al pulsar F1 mediante F1.txt

Ahora configuraremos el directorio compartido mediante nfs. Pondremos en /etc/exports la siguente línea:


/media/datos/pxeroot/    192.168.0.0/255.255.255.0(rw,sync,no_root_squash,no_subtree_check)

Ya solo nos queda reiniciar los servicios nfs y dhcp e iniciar el cliente...

Importante

Si nuestro cliente ligero no es capaz de montar el directorio nfs, editaremos /etc/initramfs-tools/initramfs.conf en el sistema base del cliente ligero, cambiando la línea:


BOOT=local

por:


BOOT=nfs

después de lo cual debemos ejecutar "update-initramfs -u" y "mknod /dev/nfs b 0 255"