Al igual que ya se vio en Windows, es posible que se necesiten realizar instalaciones masivas por red en una infraestructura Linux. Para ello se requieren de los servicios que permiten la ejecución del paso de imágenes por red (tftp), del arranque pxe de las máquinas clientes así como las comunicaciones por red (apache2).

Para el siguiente ejemplo se contará con la siguiente infraestructura

  • Ubuntu server 16.04 IP 192.168.10.2 (red internat státic enp0s8) IP 169.12.123.4 (red host dhcp enp0s3)
  • Imagen de red Ubuntu desktop 18.04
  • Maquinas vacías con tarjeta de red interna

Antes de empezar se configura el servidor dhcp en la tarjeta de red interna para repartir el rango 192.168.10.10 – 192.168.10.100

Una vez hecho esto se instalan los paquetes necesarios para la comunican por red y el servidor tftp:

sudo apt-get install apache2 tftpd-hpa inetutils-inetd

Servidor PXE / TFTPD

Se trata del servicio que pasa por red una imagen a las máquinas clientes que se conectan mediante la cual pueden iniciar sin tener nada instalado en el disco duro. El archivo de configuración se encuentra en la ruta /etc/default/tftpd-hpa. En este archivo se debe agregar las siguientes lineas

RUN_DAEMON="yes"
OPTIONS="-l -s /var/lib/tftpboot"

Esta nueva configuración permite que el demonio tftp se pueda ejecutar al inicio de la máquina, permitiendo que cualquier máquina pueda arrancar mediante pxe

El siguiente paso es editar el fichero de configuraciones de las herramientas de red instaladas mediante el paquete inetutils-inetd, el cual se encuentra en la ruta /etc/inetd.conf y se añade la siguiente linea

tftp    dgram   udp    wait    root    /usr/sbin/in.tftpd -s /var/lib/tftpboot

y se reinicia el servicio mediante systemctl restart tftpd-hpa.

Una vez hecho todos estos pasos el servidor tftp está configurado y listo para ser utilizado. Tan solo quedaría la configuración de la imagen o imágenes que se quiere pasar por red a las máquinas que inicien mediante pxe.

Agregar imágenes al servidor

Para poder agregar una imagen se necesita una imagen de sistema sistema operativo que se quiera instalar. Además de esta imagen de sistema se necesitan los archivos de instalación de red, los cuales pueden o no estar presentes en el disco de instalación. En el siguiente enlace se pueden encontrar los referentes a distribuciones Ubuntu. Para este ejemplo se utilizará una imagen de Ubuntu Server 16.04 que ya incluye la imagen de red.

1.- Montar el cd y copiar contenido

El primer paso es montar el cd en una carpeta cualquiera para poder ver todo su contenido. Hay que tener en cuenta que el cd por defecto está situado en /dev/cdrom

sudo /dev/cdrom /montaje

Una vez montado se copiará el contenido en la carpeta /montaje/install/netboot/*  en la carpta /var/lib/tftpboot. Esto servirá para poder seleccionar la imagen por red una vez los clientes arranquen por PXE. Se utiliza la opción f para forzar la tarea y r para que lo haga de forma recursiva

sudo cp -fr /montaje/install/netboot/* /var/lib/tftpboot/

2.- Copiar la imagen completa

Con el primer paso se ha conseguido pasar la imagen de instalación mínima por red, pero falta depositar la imagen completa en el servidor. Para ello se crea una carpeta en /var/www/html/ubuntu (depende de la distribución) y se copia el contenido completo del cd (desde la carpeta creada)

sudo cp -fr /montaje/* /var/www/html/ubuntu/

3.- Agregar la opción al menú de arranque

Cuando una máquina arranca por PXE se le pasa un fichero de configuración con todos los punteros de los sistemas operativos que puede seleccionar. En este fichero situado en /var/lib/tftpboot/pxelinux.cfg/ y llamado default se agrega la opción del kernel correspondiente. En este ejemplo se trata del kernel asociado a Ubuntu server 16.04 pero hay que tener en cuenta cual es el kernel a pasar. Para ello se agregan las siguientes lineas al fichero:

label linux
        kernel ubuntu-installer/amd64/linux
        append ks=http://192.168.10.2/ks.cfg vga=normal initrd=ubuntu-installer/amd64/initrd.gz
ramdisk_size=16432 root=/dev/rd/0 rw  --

También hay que tener en cuenta indicar de forma correcta la dirección IP del servidor donde está situada la imagen (en este ejemplo 192.168.10.2)

4.- Configuración del servidor DHCP

Por último se debe configurar el servidor DHCP para que transmita direcciones IP a las máquinas que arrancan por red y les otorga el archivo de configuración pxelinux.0 .Para ello se agregan las siguientes lineas (incluidas las de la concesión ya explicadas en entradas anteriores)

subnet 192.168.10.0 net mask 255.255.255.0 {
  range 192.168.10.10 192.168.10.100
  default-lease-time 600
  max-lease-time 7200
}

allow booting;
allow bootp;
option option-128 code 128 = string;
option option-129 code 129 = text;
next-server 192.168.10.2;
filename "pxelinux.0";

Con todo esto quedarían configurados los servicios por lo que quedaría resetearlos y comprobar que funcionan correctamente. Adicionalmente se puede configurar el firewall para que permita las comunicaciones mediante tftp (por defecto debería dejarlas)

sudo systemctl restart isc-dhcp-server
sudo systemctl restart tftpd-hpa
// comprobación de los servicios
sudo systemctl status isc-dhcp-server
sudo systemctl status tftpd-hpa
sudo ufw allow tftp