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

Icon-manual.png Icon-ayuda.png

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

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. (Las imágenes se corresponden con la versión de YaST en inglés, pero incluiré también sus nombres en castellano por si es tu caso).

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: 80.58.61.250 y 80.58.61.254
Puerta de enlace: 192.168.1.1

Abrimos YaST y elegimos Network Devices → Network Settings (Dispositivos de red → Ajustes de red):

Yast-network-config1-eng.png

En la primera pestaña elegimos Traditional Method with ifup (Método Tradicional con ifup):

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 Edit (Editar):

Yast-network-config3-eng.png

Toma nota del nombre del dispositivo (Device Name, señalado en el recuadro), lo usaremos más adelante.

En esta ventana elegimos Statically assigned IP Adress (Dirección IP estática asignada) y escribimos la dirección IP (IP Address) y a continuación la máscara de subred (Subnet Mask, puedes escribir directamente 255.255.255.0):

Yast-network-config4-eng.png

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

Yast-network-config5-eng.png

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

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/dhcp.bak
# cp /etc/dhcp.conf /etc/dhcp.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="enp0s3"

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

option domain-name "WORKGROUP";
option domain-name-servers 80.58.61.250, 80.58.61.254;

# 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;

# Solamente se atenderán peticiones DHCP de tipo PXE
allow booting;
allow bootp;

# Reglas para identificar peticiones DHCP desde clientes PCE 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 sevidor 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:

## 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="--daemon --user tftp -v"

## 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=""

Comprueba que lo tengas de esa manera. 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 atftpd restart && service nfsserver restart
# chkconfig dhcpd on && chkconfig atftpd on && chkconfig nfsserver on

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
# cp /ruta/al/fichero/wall.jpg pxelinux.cfg/

El fichero wall.jpg es una imagen que usaré de fondo de mi menú. Se aceptan los archivos de imagen con un tamaño de 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: por un lado un diseño más limpio; y por otro lado 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 /stv/tftpboot/pxelinux.cfg/default y añade lo siguiente:

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

MENU TITLE Menu de arranque
MENU BACKGROUND pxelinux.cfg/wall.jpg

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, gestion de particiones...
        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 BACKGROUND pxelinux.cfg/wall.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 640x480 píxeles.
  • 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 del menú como texto de ayuda 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

Edita el fichero /etc/fstab y crea un punto de montaje para la ISO en ese directorio:

/ruta/a/la/iso/openSUSE-13.1-DVD-x86_64.iso /mnt/openSUSE-DVD-x86_64/ udf,iso9660 user,auto,loop 0 0

Móntala mediante:

# mount -a

¡Listo! Exportemos ahora ese directorio mediante NFS. Edita el archivo /etc/exports y añade:

/mnt/openSUSE-DVD-x86_64        *(ro,no_root_squash,async,no_subtree_check)

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 BACKGROUND pxelinux.cfg/wall.jpg

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:

LABEL 1
        MENU LABEL ^1. openSUSE 13.1 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 13.1 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 ve a Sistemas operativos y luego openSUSE 13.1 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, si esta es de pequeño tamaño, cargarla en memoria directamente. 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.
  • LABEL empty define una entrada del menú no seleccionable.

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

  • LABEL nombre que le damos a la entrada.
  • MENU LABEL etiqueta que veremos en la pantalla.
  • 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 BACKGROUND pxelinux.cfg/metal.jpg 

 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 

 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: 

 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

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

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

Crea un subdirectorio debian en /srv/tftpboot/imagenes y copia dentro los archivos vmlinuz e initrd.img que hay dentro de la ISO:

# mkdir /srv/tftpboot/imagenes/debian-Live
# cp /mnt/debian/live/vmlinuz /srv/tftpboot/imagenes/debian-Live/
# cp /mnt/debian/live/initrd.img /srv/tftpboot/imagenes/debian-Live/

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

MENU separator

LABEL empty
       MENU LABEL Sistemas Live:

LABEL 2
       MENU LABEL ^2. Debian 7 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 locales=es_ES.UTF-8 keyboard-layouts=es quiet
       TEXT HELP
       Arranca Debian en modo Live
       ENDTEXT

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

Captura de Debian 7.2 Live arrancado desde 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.

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.

Para evitar 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