Preboot eXecution Environment (PXE) (Entorno de ejecución de prearranque), es un entorno para arrancar e instalar el sistema operativo en computadoras a través de una red, de manera independiente de los dispositivos de almacenamiento de datos disponibles (como discos duros) o de los sistemas operativos instalados.
PXE fue introducido como parte del framework Wired for Management por Intel y fue descrito en la especificación (versión 2.1) publicada por Intel y Systemsoft el 20 de septiembre de 1999. PXE utiliza varios protocolos de red como IP, UDP, DHCP y TFTP, y conceptos como Globally Unique Identifier (GUID), Universally Unique Identifier (UUID) y Universal Network Device Interface (UNDI).
El término cliente PXE sólo se refiere al papel que la máquina juega en el proceso de arranque mediante PXE. Un cliente PXE puede ser un servidor, una computadora de mesa, portátil o cualquier otra máquina que esté equipada con código de arranque PXE.
Pasos para instalar un servidor de PXE en Centos 7.9
- Tener un servidor con Centos 7.9
- Debe tener de preferencia una IP fija
Es importante que tengas un servidor de DHCP para que PXE pueda funcionar. El Servidor puede estas en Linux o wn Windows aqui te dejo una guia rapida de : Crear un Servidor de DHCP en Centos
Configurando el servidor de PXE
Ahora, instale los siguientes paquetes para configurar el entorno PXE:
# yum install httpd xinetd syslinux tftp-server -y
Ir a/usr/share/syslinux
# cd /usr/share/syslinux/
Copiar los siguientes archivos de configuracion de TFTP al directorio /var/lib/tftpboot
# cp -r /usr/share/syslinux/* /var/lib/tftpboot
editemos el archivo /etc/xinet.d/tftp
# nano /etc/xinetd.d/tftp
Habilitar el servidor de TFTP. Cambiar disable=yes a disable=no
Vamos a crear 3 directorios desde donde presentaremos 3 sistemas operativos diferentes para elegir su uso o instalacion
# mkdir /var/lib/tftpboot/centos7_x64_Minimal
# mkdir /var/lib/tftpboot/centos7_x64_livecd_genome
# mkdir /var/lib/tftpboot/windows2012r2_x64
# mkdir /var/lib/tftpboot/debian_live_107
Monte el archivo ISO de instalación de CentOS en cualquier directorio de su elección, por ejemplo /mnt. Yo ya tengo una imagen ISO de CentOS 7 de 64 bits en mi directorio /trabajo/isos.
# mount -o loop /trabajo/isos/CentOS-7-x86_64-Minimal-2009.iso /mnt/
Copiemos el contenido del ISO en nuestra carpeta de TFTP
# cp -fr /mnt/* /var/lib/tftpboot/centos7_x64_Minimal -v
# chmod -R 755 /var/lib/tftpboot/centos7_x64_Minimal
hacemos los mismos pasos para los otros dos ISOS
# umount /mnt
# mount -o loop /trabajo/isos/CentOS-7-livecd-GNOME-x86_64.iso /mnt/
# cp -fr /mnt/* /var/lib/tftpboot/centos7_x64_livecd_genome/ -v
# chmod -R 755 /var/lib/tftpboot/centos7_x64_livecd_genome
# umount /mnt
# mount -o loop /trabajo/isos/win2012r2.iso /mnt/
# cp -fr /mnt/* /var/lib/tftpboot/windows2012r2_x64/
# chmod -R 755 /var/lib/tftpboot/windows2012r2_x64
# umount /mnt
# mount -o loop /trabajo/isos/debian-live-10.7.0-amd64-gnome.iso /mnt/
# cp -fr /mnt/* /var/lib/tftpboot/debian_live_107
# chmod -R 755 /var/lib/tftpboot/debian_live_107
Creamos una configuracion de nuestro servidor web Apache, quien va a servir los archivos via http.
# nano /etc/httpd/conf.d/pxeboot.conf
El archivo obviamente esta vacio, asi que le agregamos estas lineas:
Alias /centos7_x64 /var/lib/tftpboot/centos7_x64_Minimal/
<Directory /var/lib/tftpboot/centos7_x64_Minimal>
Options +Indexes +FollowSymLinks
AllowOverride None
Require all granted
</Directory>
Alias /centos7_live /var/lib/tftpboot/centos7_x64_livecd_genome/
<Directory /var/lib/tftpboot/centos7_x64_livecd_genome>
Options +Indexes +FollowSymLinks
AllowOverride None
Require all granted
</Directory>
Alias /win2012r2 /var/lib/tftpboot/windows2012r2_x64/
<Directory /var/lib/tftpboot/windows2012r2_x64>
Options Indexes FollowSymLinks
Order Deny,Allow
Deny from all
Allow from 127.0.0.1 192.168.1.0/24
</Directory>
Alias /debian_live_107 /var/lib/tftpboot/debian_live_107/
<Directory /var/lib/tftpboot/debian_live_107/>
Options +Indexes +FollowSymLinks
AllowOverride None
Require all granted
</Directory>
Ahora creamos el directorio de configuracion del servidor de PXE
# mkdir /var/lib/tftpboot/pxelinux.cfg
Ahora creamos la confguracion de PXE
# nano /var/lib/tftpboot/pxelinux.cfg/default
default menu.c32
prompt 0
timeout 300
ONTIMEOUT local
menu title ########## PXE Boot Menu ##########
label 1
menu label ^1) Instalar CentOS 7 Minimal
kernel centos7_x64_Minimal/images/pxeboot/vmlinuz
append initrd=centos7_x64_Minimal/images/pxeboot/initrd.img method=http://192.168.1.83/centos7_x64 devfs=nomount
label 2
menu label ^2) Ejecutar Centos LiveCD 79 x64
kernel centos7_x64_livecd_genome/isolinux/vmlinuz0
append initrd=centos7_x64_livecd_genome/isolinux/initrd0.img root=live rootfstype=auto ro rd.live.image method=http://192.168.1.83/centos7_live/LiveOS/squashfs.img devfs=nomount
label 3
menu label ^3) Todavia en Proyecto
kernel windows2012r2_x64/images/pxeboot/vmlinuz
append initrd=windows2012r2_x64/images/pxeboot/initrd.img method=http://192.168.1.83/win2012r2 devfs=nomount
label 4
menu label ^4) Arranque desde el disco local
label 5
menu label ^5) Ejecutar Debian Live 10.7.0 x64
kernel debian_live_107/live/vmlinuz-4.19.0-13-amd64
append initrd=debian_live_107/live/initrd.img-4.19.0-13-amd64 debian_live_107/live/vmlinuz-4.19.0-13-amd64 boot=live components method=http://192.168.1.83/debian_live_107/live/filesystem.squashfs
Ahora tenemos que decirle al DHCP Server que vamos a habilitar opciones de bootp, estas opciones se ponen al final
# nano /etc/dhcp/dhcpd.conf
Adicionamos estas entradas al archivo
allow booting;
allow bootp;
option option-128 code 128 = string;
option option-129 code 129 = text;
next-server 192.168.1.83;
filename "pxelinux.0";
# systemctl restart xinetd
# systemctl restart httpd
# systemctl restart dhcpd
# habilitar los servicios para arranque automatico
# systemctl enable xinetd
# systemctl enable httpd
# systemctl enable dhcpd
# deshabilitamos el firewall. En otra entrega haremos las configuraciones apropiadas
# systemctl disable firewalld
# systemctl stop firewalld