SDB:Puesta en marcha de un servidor PXE

Saltar a: navegación, buscar
En este artículo veremos cómo utilizar openSUSE para poner en marcha un servidor PXE en nuestra red local. Dicho servidor nos permitirá arrancar a través de la red la instalación de un sistema operativo sin necesidad de grabar un disco CD/DVD o utilizar un pendrive. También nos servirá para arrancar un sistema Live u otras herramientas de diagnosis, antivirus, etc., en nuestras máquinas sin sistema operativo instalado o averiadas. Supondremos que ya existe un servidor DHCP funcionando en la red y no queremos interactuar con él ni tocar su configuración (como puede ser el caso de un router doméstico). Haremos todo esto profundizando un poco en la sintaxis de SYSLINUX así como en las distintas opciones que podemos ir encontrando, ya que la documentación al respecto en castellano es algo escasa y se encuentra bastante más dispersa que en inglés.
Probado en openSUSE Artículos recomendados Artículos relacionados
Icon-checked.png

[openSUSE Leap 15.0]

Icon-manual.png PXE Icon-ayuda.png Instalación de openSUSE

Prácticamente todos los ordenadores hoy en día soportan arranque mediante PXE. Revisa la EFI/BIOS de tu equipo y actívalo.

Knotes 128x128.png

Instalación de los paquetes necesarios

En un sistema ya instalado ejecutamos lo siguiente en una terminal:

# zypper in atftp dhcp-server nfs-kernel-server syslinux ImageMagick

Configurar el sistema y los servicios

Configurar una IP estática

Vamos a cambiar la configuración IP de nuestra máquina para que utilice una IP estática. Podemos utilizar YaST para esto.

En una red local con pocos ordenadores podemos elegir un valor de IP alto para evitar conflictos con las direcciones que asigna el DHCP.

Knotes 128x128.png


En mi caso usaré la siguiente configuración:

Configuración de red estática
Dirección IP 192.168.1.200
Máscara 255.255.255.0
Servidores DNS 1.1.1.1 y 1.0.0.1
Puerta de enlace 192.168.1.1
Nombre de host servidorpxe


Abrimos YaST y elegimos Sistema → Ajustes de red:

Yast-network-config1-eng.png


En la primera pestaña elegimos Método de configuración de red: Servicio wicked:

Yast-network-config2-eng.png


En la siguiente pestaña seleccionamos la tarjeta de red a configurar y a continuación elegimos el botón Editar:

Yast-network-config3-eng.png


Toma nota del nombre del dispositivo (señalado en el recuadro). Lo usaremos más adelante.

En esta ventana elegimos Dirección IP asignada estáticamente y escribimos la dirección IP y a continuación la máscara de subred (puedes escribir directamente 255.255.255.0):

Yast-network-config4-eng.png


Pulsa Siguiente y volverás a la ventana anterior. Seguimos con la pestaña Nombre de Host/DNS:

Yast-network-config5-eng.png


Por último, en la pestaña Encaminamiento especificamos la puerta de enlace de nuestra red (Gateway IPv4 por defecto):

Yast-network-config6-eng.png

Configura el servicio DHCP

Antes de tocar nada haz una copia de los archivos que necesitas cambiar, por si tienes que volver atrás:

# cp /etc/sysconfig/dhcpd /etc/sysconfig/dhcpd.bak
# cp /etc/dhcpd.conf /etc/dhcpd.conf.bak

Luego edita el archivo /etc/sysconfig/dhcpd y en la línea DHCPD_INTERFACE="" añade el nombre de interfaz del que tomaste nota en el paso anterior. Aquí muestro la parte del fichero que nos interesa. Deja el resto tal como está, no es necesario cambiar nada más:

## Path:        Network/DHCP/DHCP server
## Description: DHCPv4 server settings
## Type:        string
## Default:     ""
## ServiceRestart: dhcpd
#
# Interface(s) for the DHCPv4 server to listen on.
#
# A special keyword is ANY, it will cause dhcpd to autodetect available
# interfaces.
#
# Examples: DHCPD_INTERFACE="eth0 eth1 eth2"
#           DHCPD_INTERFACE="ANY"
# 
DHCPD_INTERFACE="eth0"

A continuación edita el fichero /etc/dhcpd.conf Así tengo yo el mío:

option domain-name "WORKGROUP";
option domain-name-servers 1.1.1.1, 1.0.0.1;

# default-lease-time 600;
# max-lease-time 7200;

ddns-updates off;
ddns-update-style none;

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
#authoritative;

# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
#log-facility local7;

# Este servidor DHCP solamente atenderá peticiones DHCP de tipo PXE
allow booting;
allow bootp;

# Reglas para identificar peticiones DHCP desde clientes PXE y Etherboot 

class "pxe" {
match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
}
class "etherboot" {
match if substring (option vendor-class-identifier, 0, 9) = "Etherboot";
}

# Las direcciones de ese tipo quedarán englobadas en esta subnet
subnet 192.168.1.0 netmask 255.255.255.0 {
 pool {
  range 192.168.1.201 192.168.1.220; # con estas hay de sobra
  filename "pxelinux.0";
  server-name "192.168.1.200"; # Coincide con la IP del servidor
  next-server 192.168.1.200; # Dirección del servidor TFTP
  option subnet-mask 255.255.255.0;
  option broadcast-address 192.168.1.255;
  option routers 192.168.1.1;
  allow members of "pxe"; # permitido sólo para clientes PXE
  allow members of "etherboot"; # y también para los de etherboot
 }
}

Lo que hacemos en este fichero es configurar el comportamiento de nuestro servidor DHCP y definir su scope (el intervalo de direcciones que repartirá a las máquinas que hagan las peticiones).

  • En el campo domain-name escribe un nombre de dominio de tu elección.
  • No quites el comentario a la línea #authoritative; si ya hay un servidor DHCP funcionando en tu red.
  • Nuestro servidor sólo atenderá las peticiones DHCP extendidas del tipo PXE, dejando el resto para el servidor DHCP de nuestra red. Las peticiones DHCP que nos interesan las filtramos mediante las dos reglas que se han definido.

Por último se indican las opciones que definen la configuración que nuestro servidor envía a las máquinas cliente.

  • En el campo range defino que mi servidor repartirá un máximo de 20 direcciones simultáneas (que irán desde la 192.168.1.201 hasta la 192.168.1.220). En mi caso es más que de sobra.
  • Al campo filename le damos el valor pxelinux.0 y a los campos server-name y next-server el de la IP que le hayamos dado al servidor.

Configura el servicio TFTP

Haz también una copia del archivo de configuración antes de cambiarlo:

# cp /etc/sysconfig/atftpd /etc/sysconfig/atftpd.bak

Ahora edita el archivo /etc/sysconfig/atftpd y comprueba que lo tengas de esta manera:

## Path:    Network/FTP/Atftpd
## Description: ATFTP Configuration
## Type:    string
## Default: "tftp"
#
#  daemon user (tftp)
#
ATFTPD_USER="tftp"

## Type:    string
## Default: "tftp"
#
#  daemon user (tftp)
#
ATFTPD_GROUP="tftp"

## Type:    string
## Default: ""
##
## INFO:
## "--daemon, --user, --group, --logfile" can not be removed/replaced here as
## atftp is started with them as default opts: "--daemon --user atftp --group atftp "
## and
## logging to file is set as default: "--logfile /var/log/atftpd/atftp.log "
#
# atftpd options
#
ATFTPD_OPTIONS=""

## Type:    yesno
## Default: no
#
# Use inetd instead of daemon
#
ATFTPD_USE_INETD="no"

## Type:    string
## Default: "/srv/tftpboot"
## was "/tftpboot" but
## "/tftpboot" is not allowed anymore in FHS 2.2.
#
#  TFTP directory must be a world readable/writable directory.
#  By default /srv/tftpboot is assumed.
#
ATFTPD_DIRECTORY="/srv/tftpboot"

## Type:    string
## Default: ""
#
#  Whitespace seperated list of IP addresses which ATFTPD binds to.
#  One instance of the service is started on each IP address.
#  By default atftpd will listen on all available IP addresses/interfaces.
#
ATFTPD_BIND_ADDRESSES=""

Como has visto, el servicio se impersonará con la cuenta de usuario tftp perteneciente al grupo del mismo nombre, asegúrate de que existen (puedes usar YaST para esto). Si no existieran dichas cuentas el servicio fallaría al arrancar. Toma nota también del directorio raíz del servidor TFTP, /srv/tftpboot.

Configurar el arranque automático de los servicios

Ejecuta lo siguiente para reiniciar los servicios y activarlos durante el arranque:

# service dhcpd restart && service nfsserver restart && systemctl start atftpd.socket
# chkconfig dhcpd on && chkconfig nfsserver on && systemctl enable atftpd.socket

No olvides abrir los servicios tftp y nfs en el firewall si lo tienes activado:

# firewall-cmd --add-service={tftp,nfs} --zone=public --permanent
# firewall-cmd --reload

Si algo fallara, vuelve a revisarlo todo con calma desde el principio.

Dando forma al entorno PXE

En la raíz del servidor TFTP copiamos los siguientes archivos y creamos un par de directorios:

# cd /srv/tftpboot
# mkdir pxelinux.cfg
# mkdir imagenes
# cp /usr/share/syslinux/pxelinux.0 .
# cp /usr/share/syslinux/vesamenu.c32 .
# cp /usr/share/syslinux/reboot.c32 .
# touch pxelinux.cfg/default
# touch pxelinux.cfg/sistemas
# touch pxelinux.cfg/tools
# convert /usr/share/wallpapers/openSUSEdefault/screenshot.jpg -resize 1024x768 pxelinux.cfg/wallpaper.jpg

El fichero wallpaper.jpg es una imagen que usaré como imagen de fondo de mi menú. Se aceptan los archivos de imagen con dimensiones de 1024x768 o 640x480 píxeles y extensiones .jpg o .png. Si prefieres una interfaz de texto y no quieres cargar una imagen de fondo copia el archivo menu.c32 en lugar de vesamenu.c32.

En el directorio imagenes crearemos un subdirectorio por cada ISO que queramos arrancar. En cada uno de ellos almacenaremos el kernel y el ramdisk necesarios.

El archivo default será nuestro punto de entrada al menú de arranque; sistemas y tools los usaremos para mostrar por un lado los sistemas operativos y por otro el resto de herramientas. He elegido dividir el menú en varias pantallas para lograr dos cosas: para favorecer un diseño más limpio; y además al hacerlo así entenderemos más cosas acerca de la sintaxis de estos ficheros. Si te resulta demasiado lioso basta con que crees únicamente el fichero default y lo incluyas todo dentro de él.

El menú de arranque principal

Edita el archivo /srv/tftpboot/pxelinux.cfg/default y añade lo siguiente:

DEFAULT vesamenu.c32
PROMPT 0
TIMEOUT 300
ONTIMEOUT 0
NOESCAPE 1

MENU TITLE Opciones de arranque
MENU RESOLUTION 1024 768
MENU BACKGROUND pxelinux.cfg/wallpaper.jpg
MENU COLOR SEL 0 #FF00DFDF #EE000000 STD
MENU COLOR HOTSEL 0 #FF00DFDF #EE000000 STD
MENU AUTOBOOT El arranque predeterminado se activa en # segundo{,s}.
MENU TABMSG Presiona [TAB] para editar las opciones de arranque.

LABEL 0
        MENU LABEL ^0. Arrancar desde el disco duro
        LOCALBOOT 0
        TEXT HELP
        Para arrancar desde el disco duro pulsa Enter.
        ENDTEXT

MENU SEPARATOR

LABEL 1
        MENU LABEL ^1. Reiniciar
        COM32 reboot.c32

MENU SEPARATOR

LABEL 2
        MENU LABEL ^2. Herramientas
        KERNEL vesamenu.c32
        APPEND pxelinux.cfg/tools
        TEXT HELP
        Antivirus, clonado, herramientas de particionado, etc.
        ENDTEXT

MENU SEPARATOR

LABEL 3
        MENU LABEL ^3. Sistemas operativos
        KERNEL vesamenu.c32
        APPEND pxelinux.cfg/sistemas
        TEXT HELP
        Muestra la lista de sistemas operativos disponibles
        ENDTEXT

Guarda los cambios al archivo y reinicia una máquina cliente (puede que tengas que pulsar la tecla F12 durante el arranque para activar el arranque PXE). Comprueba que accedes al menú:

Menú principal de nuestro servidor PXE. Por el momento sólo son funcionales las dos primeras entradas del menú.


Repasemos un poco la sintaxis del fichero que hemos creado:

  • DEFAULT vesamenu.c32 define que cargaremos el menú en modo VESA. Si prefieres el modo texto copia el archivo menu.c32 en /srv/tftpboot/ y cambia esta línea a DEFAULT menu.c32.
  • PROMPT 0 para mostrar esta ventana sin pulsar ninguna tecla desde que cargue el PXE exitosamente. Prueba a cambiar el 0 por un 1 y ver qué pasa, debes pulsar Enter para que cargue el menú principal.
  • TIMEOUT 300 define un tiempo de espera de 30 segundos antes de cargar la opción predeterminada.
  • ONTIMEOUT 0 define cuál será la entrada predeterminada del menú. Elegirá la que he nombrado como 0 (pueden usarse nombres, yo he usado números).
  • NOESCAPE 1 para evitar la salida del menú si se pulsa la tecla Escape. Como he definido entradas para reiniciar y arrancar desde el disco duro local puedo deshabilitar la salida a través de Escape.
  • MENU TITLE Menu de arranque título de la pantalla que aparecerá a modo de cabecera.
  • MENU RESOLUTION 1024 768 resolución a la que se mostrara el menú. Si tienes problemas cámbiala a 640 480 u omite la línea.
  • MENU BACKGROUND pxelinux.cfg/wallpaper.jpg ruta y nombre de la imagen que usaremos como fondo del menú. Puede ser distinto para cada ventana, pero recuerda las limitaciones: únicamente cargarán archivos .jpg o .png con una resolución de píxeles estándar (1024x768, 640x480, etc.). Las dimensiones de la imagen deben coincidir con las de la directiva RESOLUTION de la línea anterior.
  • MENU AUTOBOOT El arranque predeterminado se activa en # segundo{,s}. permite reemplazar el mensaje predeterminado que indica los segundos de salida del menú. Si se omite, el mensaje aparecerá en inglés.
  • MENU TABMSG Presiona [TAB] para editar las opciones de arranque. permite reemplazar el mensaje predeterminado que permite sobrescribir los parámetros de arranque a la hora de lanzar una entrada. Si se omite, el mensaje aparecerá en inglés.
  • LABEL 0 sirve para dar nombre a una entrada del menú.
  • MENU LABEL ^0. Arrancar desde el disco duro etiqueta que se mostrará. El símbolo ^ define una tecla rápida de acceso.
  • LOCALBOOT 0 con esta orden podemos arrancar la máquina desde el disco duro local.
  • TEXT HELP y ENDTEXT lo que escribamos entre estas dos líneas se mostrará en la parte inferior como texto de ayuda explicativo al seleccionar cada entrada del menú.

Crear el primer arranque

Descarga al servidor las ISO que quieras lanzar a través de PXE y almacénalas en algún directorio. Veamos cómo crear una entrada para instalar openSUSE a través de la red:

Crea un directorio en /mnt llamado openSUSE-DVD-x86_64

# mkdir /mnt/openSUSE-DVD-x86_64

Añade al fichero /etc/fstab un punto de montaje para la ISO en ese directorio:

# echo '/ruta/a/la/iso/openSUSE-Leap-15.0-DVD-x86_64.iso /mnt/openSUSE-DVD-x86_64/ udf,iso9660 user,auto,loop 0 0' >> /etc/fstab

Móntala mediante:

# mount -a

¡Listo! Exportemos ahora ese directorio mediante NFS:

# echo '/mnt/openSUSE-DVD-x86_64 *(ro,no_root_squash,async,no_subtree_check)' >> /etc/exports

A continuación reinicia el servidor NFS:

# service nfsserver restart

Ahora crea un subdirectorio dentro de /srv/tftpboot/imagenes para almacenar los ficheros que necesita esta imagen para arrancar: el kernel y el ramdisk. Estos ficheros hay que copiarlos dentro de nuestro directorio /srv/tftpboot/ porque el servidor los enviará a los clientes para que puedan arrancar. En el caso que nos ocupa el kernel es un archivo llamado linux y el ramdisk initrd. Ambos se encuentran dentro de la ISO en la ruta boot/x86_64/loader/. Entonces:

# mkdir /srv/tftpboot/imagenes/openSUSE-DVD-x86_64
# cp /mnt/openSUSE-DVD-x86_64/boot/x86_64/loader/linux /srv/tftpboot/imagenes/openSUSE-DVD-x86_64/
# cp /mnt/openSUSE-DVD-x86_64/boot/x86_64/loader/initrd /srv/tftpboot/imagenes/openSUSE-DVD-x86_64/

Por último ya sólo queda editar el fichero /srv/tftpboot/pxelinux.cfg/sistemas y añadir lo siguiente:

DEFAULT vesamenu.c32
PROMPT 300

MENU TITLE Sistemas operativos
MENU RESOLUTION 1024 768
MENU COLOR SEL 0 #FF00DFDF #EE000000 STD
MENU COLOR HOTSEL 0 #FF00DFDF #EE000000 STD
MENU BACKGROUND pxelinux.cfg/wallpaper.jpg
MENU TABMSG Presiona [TAB] para editar las opciones de arranque.

LABEL 0
        MENU LABEL ^0. Inicio
        KERNEL vesamenu.c32
        APPEND pxelinux.cfg/default
        TEXT HELP
        Vuelve a la pantalla anterior.
        ENDTEXT

MENU SEPARATOR

LABEL EMPTY
        MENU LABEL Sistemas de 64 bits:
        MENU DISABLE

LABEL 1
        MENU LABEL ^1. openSUSE Leap 15.0 x64
        LINUX imagenes/openSUSE-DVD-x86_64/linux
        INITRD imagenes/openSUSE-DVD-x86_64/initrd
        APPEND install=nfs://192.168.1.200/mnt/openSUSE-DVD-x86_64/ splash=silent ramdisk_size=512000 ramdisk_blocksize=4096 language=es_ES keytable=es quiet quiet showopts
        TEXT HELP
        Instala openSUSE Leap 15.0 64 bits
        ENDTEXT

Sustituye las rutas y las direcciones IP por las que correspondan en tu caso, guarda los cambios al fichero y prueba de nuevo con una máquina cliente. Elige la entrada del menú correspondiente (en la primera pantalla selecciona Sistemas operativos y luego openSUSE Leap 15.0 x64) y la máquina recibirá el kernel y el ramdisk para seguidamente abrir el instalador de YaST.

El ramdisk de openSUSE permite acceder al contenido del DVD a través de NFS, lo cual es mucho más óptimo que hacerlo a través de TFTP. Ya veremos que hay casos en los que podemos pasar como parámetro directamente una ruta a la ISO o cargarla en memoria directamente si es de pequeño tamaño. Pero en este caso no es lo más eficiente.

Veamos qué podemos seguir aprendiendo de la sintaxis de estos ficheros:

  • KERNEL vesamenu.c32
  • APPEND pxelinux.cfg/default estas dos líneas nos permiten pasar de una pantalla a otra.
  • MENU separator permite introducir una línea vacía.

Una entrada típica para arrancar un sistema operativo incluirá las siguentes líneas:

  • LABEL nombre interno que le damos a la entrada.
  • MENU LABEL etiqueta que veremos en la pantalla.
  • MENU DISABLE convierte esta entrada del menú en no seleccionable.
  • KERNEL define la ruta y el nombre del kernel a enviar. También podemos usar la palabra LINUX si vamos a cargar un kernel de Linux.
  • INITRD define la ruta y el nombre del ramdisk que se cargará en memoria.
  • APPEND aquí especificaremos los parámetros adicionales de arranque.

Dotando de versatilidad a nuestro servidor añadiendo algunas herramientas

Añadamos algunas herramientas últiles y veamos qué diferencias presentan unas y otras. Edita el archivo /srv/tftpboot/pxelinux.cfg/tools y añade:

 DEFAULT vesamenu.c32 
 PROMPT 300 

 MENU TITLE Herramientas
 MENU RESOLUTION 1024 768
 MENU COLOR SEL 0 #FF00DFDF #EE000000 STD
 MENU COLOR HOTSEL 0 #FF00DFDF #EE000000 STD
 MENU BACKGROUND pxelinux.cfg/wallpaper.jpg
 MENU TABMSG Presiona [TAB] para editar las opciones de arranque. 

 LABEL 0 
         MENU LABEL ^0. Inicio 
         KERNEL vesamenu.c32 
         APPEND pxelinux.cfg/default 
         TEXT HELP 
         Vuelve a la pantalla anterior. 
         ENDTEXT 

 MENU SEPARATOR 

 LABEL EMPTY 
         MENU LABEL Utilidades
         MENU DISABLE

 LABEL 1 
         MENU LABEL ^1. Hiren's Boot CD 15.2 
         KERNEL imagenes/hiren/memdisk 
         INITRD imagenes/hiren/Hiren.BootCD.15.2.iso 
         APPEND iso vmalloc=640M 
         TEXT HELP 
         Arranca el Hiren's Boot CD 15.2 
         ENDTEXT 

 MENU SEPARATOR 

 LABEL EMPTY 
         MENU LABEL Clonado de discos:
         MENU DISABLE

 LABEL 2
         MENU LABEL ^2. Clonezilla Live (64 bits) 
         KERNEL imagenes/clonezilla/x64/vmlinuz 
         INITRD imagenes/clonezilla/x64/initrd.img 
         APPEND boot=live username=user hostname=saucy live-config quiet union=overlayfs noswap edd=on locales=es_ES.UTF-8 keyboard-layouts=es ocs_live_run="ocs-live-general" ocs_live_batch=no video=uvesafb:mode_option=1024x768-32 ip=frommedia splash netboot=nfs nfsroot=192.168.1.200:/mnt/clonezillax64/

 LABEL 3
         MENU LABEL ^3. Clonezilla Live (32 bits) 
         KERNEL imagenes/clonezilla/x86/vmlinuz 
         INITRD imagenes/clonezilla/x86/initrd.img 
         APPEND boot=live username=user hostname=saucy live-config quiet union=overlayfs noswap edd=on locales=es_ES.UTF-8 keyboard-layouts=es ocs_live_run="ocs-live-general" ocs_live_batch=no video=uvesafb:mode_option=1024x768-32 ip=frommedia splash netboot=nfs nfsroot=192.168.1.200:/mnt/clonezillax86/

 LABEL 4
         MENU LABEL ^4. Clonezilla Live (32 bits sin KMS) 
         KERNEL imagenes/clonezilla/x86/vmlinuz 
         INITRD imagenes/clonezilla/x86/initrd.img 
         APPEND boot=live username=user hostname=saucy config quiet union=overlayfs noswap edd=on nomodeset locales=es_ES.UTF-8 keyboard-layouts=es ocs_live_run="ocs-live-general" ocs_live_extra_param="" ocs_live_batch=no video=uvesafb:mode_option=1024x768-32 ip=frommedia  splash i915.blacklist=yes rad$ netboot=nfs nfsroot=192.168.1.200:/mnt/clonezillax86
         TEXT HELP 
         KMS OFF. Por si no carga el sistema grafico. 
         ENDTEXT

Vayamos directamente a la primera entrada interesante:

 LABEL 1 
         MENU LABEL ^1. Hiren's Boot CD 15.2 
         KERNEL imagenes/hiren/memdisk 
         INITRD imagenes/hiren/Hiren.BootCD.15.2.iso 
         APPEND iso vmalloc=640M 
         TEXT HELP 
         Arranca el Hiren's Boot CD 15.2 
         ENDTEXT 

El Hiren's Boot CD es un CD de arranque que contiene utilidades muy variadas. Lo utilizaremos como ejemplo de imagen que arranca enviando directamente la ISO a memoria mediante TFTP. Estos tipos de imágenes se arrancan usando el mismo kernel que nos proporciona syslinux, llamado memdisk. Así que lo podemos obtener de la misma ISO o copiarlo desde /usr/share/syslinux:

Crea un directorio para el Hiren dentro de /srv/tftpboot/imagenes/:

# mkdir /srv/tftpboot/imagenes/hiren

Copia en él el kernel de arranque y la propia ISO:

# cp /usr/share/syslinux/memdisk /srv/tftpboot/hiren/
# cp /ruta/a/la/iso/Hiren.BootCD.15.2.iso /srv/tftpboot/hiren/

Este método de arranque funciona correctamente en algunas máquinas pero falla en otras. En una máquina virtual arranca sin problemas.

Knotes 128x128.png

Las 3 entradas restantes son un ejemplo de cómo jugar con los parámetros de arranque para arrancar Clonezilla de distintas maneras. Presta atención a la línea APPEND en cada una de las entradas. Ten en cuenta que hay una ISO distinta para cada arquitectura y aunque los ficheros vmlinux e initrd.img se llamen igual en ambos casos, en realidad son distintos entre sí, por lo que hay que crear subdirectorios distintos para almacenarlos. Como ya habrás concluido es necesario montar la ISO y compartirla mediante NFS (sigue el procedimiento explicado más arriba). La última de las entradas es una variante con un sistema gráfico distinto.

Arrancar desde un sistema Live

Descarga la ISO de Debian Live del sitio oficial y cópiala al servidor.

Móntala en un subdirectorio de /mnt y expórtalo mediante NFS:

# mkdir /mnt/debian-live

# echo '/ruta/a/la/iso/debian-live-9.7.0-amd64-kde.iso /mnt/debian-live udf,iso9660 user,auto,loop 0 0' >> /etc/fstab
# mount -a

# echo '/mnt/debian-live *(ro,no_root_squash,async,no_subtree_check)' >> /etc/exports
# service nfsserver restart && service firewalld restart

Crea un subdirectorio debian-live en la ruta /srv/tftpboot/imagenes y copia dentro los archivos vmlinuz e initrd.img que hay dentro de la ISO (fíjate en el cambio de nombre, SYSLINUX no entiende los nombres de ficheros largos):

# mkdir /srv/tftpboot/imagenes/debian-live
# cp /mnt/debian/live/vmlinuz-4.9.0-8-amd64 /srv/tftpboot/imagenes/debian-live/vmlinuz
# cp /mnt/debian/live/initrd.img-4.9.0-8-amd64 /srv/tftpboot/imagenes/debian-live/initrd.img

Edita el archivo /srv/tftpboot/pxelinux.cfg/sistemas y añade la siguiente entrada al final:

MENU SEPARATOR

LABEL EMPTY
       MENU LABEL Sistemas Live:
       MENU DISABLE

MENU SEPARATOR

LABEL 2
       MENU LABEL ^2. Debian 9.7.0 Live x64
       KERNEL imagenes/debian-live/vmlinuz
       INITRD imagenes/debian-live/initrd.img
       APPEND boot=live config netboot=nfs nfsroot=192.168.1.200:/mnt/debian-live locales=es_ES.UTF-8 keyboard-layouts=es quiet
       TEXT HELP
       Arranca un sistema Debian Live con entorno de escritorio Plasma
       ENDTEXT

Sustituye las rutas y las IP por las que correspondan en tu caso. Seguidamente pruébalo.

Captura de Debian 9.7.0 Live con escritorio Plasma arrancada desde nuestro servidor PXE

Análogamente se pueden arrancar distribuciones equivalentes basadas en Debian.

El caso de openSUSE

La versión 13.1 de openSUSE tiene un fallo que le impide arrancar correctamente a través de PXE. Dicho fallo ya ha sido corregido de cara a las siguientes versiones (enlace al final del artículo). Aún así veremos qué sintaxis debemos usar y cómo corregirlo si nos interesa usar la 13.1

Knotes 128x128.png

Añade lo siguiente al archivo /srv/tftpboot/pxelinux.cfg/sistemas:

LABEL 3
       MENU LABEL ^3. openSUSE 13.1 Live x64
       LINUX imagenes/openSUSE-Live/linux
       INITRD imagenes/openSUSE-Live/initrd
       APPEND splash=silent isofrom_device=nfs:192.168.1.200:/ruta/a/la/iso isofrom_system=openSUSE-13.1-KDE-Live-x86_64.iso language=es_ES keytable=es quiet quiet showopts
       TEXT HELP
       Arranca openSUSE en modo Live
       ENDTEXT

Corrige las rutas y la dirección del servidor NFS según sea tu caso. Esta es la sintaxis que debería funcionar, pero actualmente lo impide un fallo en el paquete Kiwi. Según esto ya ha sido corregido para futuras versiones de openSUSE, momento en el que esta sintaxis será válida.

Los pasos a seguir serían sacar el kernel y el ramdisk a un subdirectorio del servidor TFTP y dejar la ISO en una ruta accesible a través de NFS (no es necesario montarla).

# mkdir /tmp/live && mkdir /srv/tftpboot/imagenes/openSUSE-Live
# mount -o loop -t iso9660 /ruta/a/la/iso /tmp/live
# cp /tmp/live/boot/x86_64/loader/linux /srv/tftpboot/imagenes/openSUSE-Live/
# cp /tmp/live/boot/x86_64/loader/initrd /srv/tftpboot/imagenes/openSUSE-Live/
# umount /tmp/live

Si aún así quieres echarla a andar, el procedimiento a seguir sería extraer el initrd y parchearlo usando el siguiente repo: http://download.opensuse.org/repositories/Virtualization:/Appliances. Coloca el archivo resultante en tu servidor TFTP y haz la prueba.

Al parecer la versión Leap 15.0 Live arrastra el mismo problema. Hay un bug abierto sobre este tema (enlace al final del artículo).

Knotes 128x128.png

Consideraciones finales

Como has visto hay diferentes métodos de arrancar un sistema operativo a través de PXE. Con un servidor de este tipo en marcha en tu red luego ya únicamente tendrás que descargarte las ISO que quieras usar y averiguar la sintaxis a aplicar en cada caso. A cambio obtienes un método muy rápido de instalación que además prescinde de medios físicos.

Si en algún momento encuentras problemas de conectividad comprueba que tengas desactivado el cortafuegos en el servidor.

Si montas el servidor PXE en una máquina virtual ten en cuenta que debes cambiar la configuración de su tarjeta de red al modo Bridged/Puente para que su funcionamiento sea transparente a nivel de red. Las opciones para esto variarán según el software de virtualización que utilices. Por ejemplo, en VirtualBox la opción se cambia seleccionando la máquina, pulsando Configuración y buscando en la pestaña Red esta opción:

Así debería quedar configurada la tarjeta de red

Enlaces externos