SDB:Puesta en marcha de un servidor PXE
Probado en openSUSE | Artículos recomendados | Artículos relacionados | |||
PXE | 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. |
Contenido
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. |
En mi caso usaré la siguiente configuración:
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:
En la primera pestaña elegimos Método de configuración de red: Servicio wicked:
En la siguiente pestaña seleccionamos la tarjeta de red a configurar y a continuación elegimos el botón Editar:
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):
Pulsa Siguiente y volverás a la ventana anterior. Seguimos con la pestaña Nombre de Host/DNS:
Por último, en la pestaña Encaminamiento especificamos la puerta de enlace de nuestra red (Gateway IPv4 por defecto):
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ú:
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. |
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.
Análogamente se pueden arrancar distribuciones equivalentes basadas en Debian.
El caso de openSUSE
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). |
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:
Enlaces externos
- Artículo de la Wikipedia sobre el PXE
- Clonezilla
- Ejemplos diversos de arranque de varias distribuciones
- Fallo que produce el problema de la versión Live de openSUSE 13.1 que impide el arranque desde PXE
- Registro del bug sobre el problema de la versión openSUSE Leap 15.0 Live que impide el arranque desde PXE
- Hiren's BootCD
- Información sobre MEMDISK
- PXE boot installation