Servidor PXE. Concepto e Instalación

PXE hace referencia al entorno de ejecución de prearranque (Preboot eXecution Environment). Es un entorno para arrancar e instalar el sistema operativo en ordenadores 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. 

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, un ordenador de mesa, portátil o cualquier otra máquina que esté equipada con código de arranque PXE.

El firmware del cliente trata de encontrar un servicio de redirección PXE en la red para recabar información sobre los servidores de arranque PXE disponibles.  Para lograr esta tarea lo primero que hace el cliente es solicitar al servidor PXE una IP vía DHCP, configurado en el mismo servidor. Tras analizar la respuesta, el firmware del cliente solicitará al servidor de arranque el file path de un network bootstrap program (NBP), lo descargará en la memoria RAM del ordenador mediante TFTP, que también habrá de configurarse. Probablemente lo verificará, y finalmente lo ejecutará. Si se utiliza un único NBP para todos los clientes PXE se puede especificar mediante BOOTP sin necesidad de un proxy DHCP, pero aún será necesario un servidor TFTP.

Una vez el cliente ha arrancado, a través de la configuración del propio servidor PXE, se le ofrece un menú con las ISOs que podrá instalar. Estas IOSs habrán de ser descargadas por el cliente vía FTP, servidor que también hay que configurar. Además, en el ejemplo, el servidor monta estas isos vía NFS.

Al final el servidor PXE consta de DHCP, TFTP (servicio xinet.d), FTP (vsftp) y NFS.

Nota importante: Sé que las distros están bastante atrasadas. También se que existe gPXE, el cual ayuda a hacer este trabajo aun más fácil. Pero la intención de esta guía es proporcionar una base de conocimiento útil y un panorama de cómo funcionan las cosas.

Al final este tutorial nos brindará un Servidor desde el cual podemos instalar en cuestión de minutos las distintas distribuciones de GNU/Linux que se muestran vía PXE (arranque por red) en el número de computadoras que haya en nuestra red local.

Instalar y configurar los servicios

[root@pxe-server ]# yum install dhcp vsftpd tftp-server syslinux

[root@pxe-server ]# nano /etc/dhcpd.conf

ddns-update-style interim;

not authoritative;

option domain-name “codigolibre.org”;

option domain-name-servers 196.3.81.132, 200.88.127.22;

option subnet-mask 255.255.255.0;

subnet 10.42.43.0 netmask 255.255.255.0

{

authoritative;

range 10.42.43.50 10.42.43.100;

allow unknown-clients;

allow booting;

allow bootp;

next-server 10.42.43.3;

filename “pxelinux.0”;

}

Nota: La dirección 10.42.43.3 pertenece al mismo servidor pxe-server.

Editar el fichero /etc/xinetd.d/tftp

[root@pxe-server ]# nano /etc/xinetd.d/tftp

Buscamos la línea: disable=yes, y la ponemos así:

disable=no

Editar el fichero /etc/exports que le pertenece a NFS y añadir lo siguiente:

[root@pxe-server ]# nano /etc/exports

/var/ftp/ubuntu 10.42.43.0/255.255.255.0(rw,sync)

/var/ftp/kubuntu 10.42.43.0/255.255.255.0(rw,sync)

/var/ftp/clonezilla 10.42.43.0/255.255.255.0(rw,sync)

/var/ftp/sysrescue 10.42.43.0/255.255.255.0(rw,sync)

Editar el fichero /etc/fstab que le pertenece a mountd y añadir lo siguiente:

[root@pxe-server ]# nano /etc/fstab

/home/fedora.iso /var/ftp/fedora/i386/ udf,iso9660 user,auto,loop 0 0

/home/CentOS.iso /var/ftp/centos/5/i386/ udf,iso9660 user,auto,loop 0 0

/home/kubuntu.iso /var/ftp/kubuntu/ udf,iso9660 user,auto,loop 0 0

/home/Ubuntu.iso /var/ftp/ubuntu/ udf,iso9660 user,auto,loop 0 0

/home/Clonezilla.iso /var/ftp/clonezilla/ udf,iso9660 user,auto,loop 0 0

/home/Sysrescue.iso /var/ftp/sysrescue/ udf,iso9660 user,auto,loop 0 0

/home/opensuse.iso /var/ftp/opensuse/ udf,iso9660 user,auto,loop 0 0

Obviamente es importante que ya hayas descargado previamente los .ISO de cada distro. Verifica si debes descargar LiveCD o DVD según lo indica más adelante cada entrada Label del fichero default.

Crear los directorios necesarios Directorios donde se van a montar los .ISO

[root@pxe-server ]# mkdir -p /var/ftp/centos/5/i386/

[root@pxe-server ]# mkdir -p /var/ftp/fedora/i386/

[root@pxe-server ]# mkdir -p /var/ftp/ubuntu/

[root@pxe-server ]# mkdir -p /var/ftp/clonezilla/

[root@pxe-server ]# mkdir -p /var/ftp/sysrescue/

[root@pxe-server ]# mkdir -p /var/ftp/opensuse/

[root@pxe-server ]# mkdir -p /var/ftp/kubuntu/

Directorios donde estará la configuración PXE:

[root@pxe-server ]# mkdir -p /tftpboot/images/

[root@pxe-server ]# mkdir -p /tftpboot/images/ubuntu/

[root@pxe-server ]# mkdir -p /tftpboot/images/fedora/i386/

[root@pxe-server ]# mkdir -p /tftpboot/images/centos/5/i386/

[root@pxe-server ]# mkdir -p /tftpboot/images/sysrescue/

[root@pxe-server ]# mkdir -p /tftpboot/images/clonezilla/

[root@pxe-server ]# mkdir -p /tftpboot/images/opensuse/

[root@pxe-server ]# mkdir -p /tftpboot/images/kubuntu/

[root@pxe-server ]# mkdir -p /tftpboot/pxelinux.cfg/

De cada distro debemos copiar su initrd y su kernel (vmlinuz*) y pegarlos en el directorio de cada distro ubicado en el árbol /tftpboot/images. En el caso de SystemRescueCD el kernel se llama rescuecd y no vmlinuz*, y en el caso de openSUSE el kernel se llama linux.

Copiar los siguientes ficheros a /tftpboot/

[root@pxe-server ]# cp /usr/lib/syslinux/pxelinux.0 /tftpboot/

[root@pxe-server ]# cp /usr/lib/syslinux/menu.c32 /tftpboot/

Crear y editar el archivo de configuración del menú PXE:

[root@pxe-server ]# nano /tftpboot/pxelinux.cfg/default

DEFAULT menu.c32

MENU TITLE GNU/Linux PXE Installation Server

PROMPT 0

TIMEOUT 300

LABEL SystemRescueCD 1.5.5 (LiveCD)

KERNEL images/sysrescue/rescuecd

APPEND initrd=images/sysrescue/initram.igz netboot=nfs://10.42.43.3:/var/ftp/sysrescue/ setkmap=es scandelay=1 docache vga=normal ramdisk_size=32768

LABEL Clonezilla 1.2.2 (LiveCD)

KERNEL images/clonezilla/vmlinuz1

APPEND initrd=images/clonezilla/initrd1.img boot=live union=aufs netboot=nfs nfsroot=10.42.43.3:/var/ftp/clonezilla/ vga=normal ramdisk_size=32768

LABEL CentOS 5.4 (DVD-i386)

KERNEL images/centos/5/i386/vmlinuz

APPEND initrd=images/centos/5/i386/initrd.img ip=dhcp method=ftp://10.42.43.3/centos/5/i386/ vga=normal ramdisk_size=32768

LABEL Fedora 14 (DVD-i386)

KERNEL images/fedora/i386/vmlinuz

APPEND initrd=images/fedora/i386/initrd.img ip=dhcp method=ftp://10.42.43.3/fedora/14/i386/ vga=normal ramdisk_size=32768

LABEL Ubuntu 10.10 (LiveCD-i386)

KERNEL images/ubuntu/live/vmlinuz

APPEND initrd=images/ubuntu/live/initrd.lz vga=normal boot=casper netboot=nfs nfsroot=10.42.43.3:/var/ftp/ubuntu/ ramdisk_size=32768

LABEL Kubuntu 10.10 (LiveCD-i386)

KERNEL images/kubuntu/vmlinuz

APPEND initrd=images/kubuntu/initrd.lz vga=normal boot=casper netboot=nfs nfsroot=10.42.43.3:/var/ftp/kubuntu/ ramdisk_size=32768

LABEL OpenSUSE 11.3 (DVD-i386)

KERNEL images/opensuse/linux

APPEND initrd=images/opensuse/initrd root=/dev/ram0 load_ramdisk=1 splash=silent showopts ramdisk_size=4096 install=ftp://10.42.43.3/opensuse/

Luego de esto le damos todos los permisos a todo el árbol /tftpboot

[root@pxe-server ]# chmod -R 777 /tftpboot/

Inicializar los daemons correspondientes:

[root@pxe-server ]# service vsftpd restart

[root@pxe-server ]# service xinetd restart

[root@pxe-server ]# service nfs restart

[root@pxe-server ]# service dhcpd restart

Opcional: Establecer que los daemons se inicializen automáticamente durante el arranque del sistema:

[root@pxe-server ]# chkconfig vsftpd –level 345 on

[root@pxe-server ]# chkconfig xinetd –level 345 on

[root@pxe-server ]# chkconfig nfs –level 345 on

[root@pxe-server ]# chkconfig dhcpd –level 345 on

NOTA IMPORTANTE: Recordar que para inicializar el DHCPD es necesario tener una tarjeta de red configurada en la misma subred en la que trabajará el servidor. Además es imprescindible deshabilitar SELINUX y el FIREWALL.

4 thoughts on “Servidor PXE. Concepto e Instalación

    • julio 4, 2013 at 9:49 pm
      Permalink

      Buenas, esto lo puedes montar en cualquier distribucion Fedora, RHEL, o CentOS. Cambiando minimamente alguna cosa, en Debian si te gusta mas.

      Reply
  • noviembre 14, 2013 at 5:09 pm
    Permalink

    Hola yo tengo implementado el servidor PXE en centos desde el cual puedo instalar Windows 7, Windows 8, Centos y Ubuntu, pero justo con éste ultimo tengo problemas.

    Cuando termino de instalar y reinicar la maquina, no funciona la red, es decir mi eth0 esta desactivada y a travez de ifconfig -a se ve que es reconocida x ubuntu, y x mas q la levanto, configuro la IP y DNS no trabaja pero si puedo hacer PING a las demas maquinas de mi red local.

    Para hacer q funcione correctamente tengo que editar vim /etc/NetworkManager/nm-system-settings.conf /etc/NetworkManager/nm-system-settings.conf y donde dice managed=false tengo que cambiarlo a true i reiniciar para que recien funcione mi tarjeta de red con asignacion DHCP y sin la opcion de volver a desactivar el Ifupdon.

    Desearia saber que puedo hacer para el ubuntu se instale correctamente sin éste incoveniente.

    PD: ya probe incluso con la version 12 y 13 de ubuntu y pasa el mismo error y en maquinas distintas.

    Saludos

    Reply
  • abril 22, 2015 at 4:04 pm
    Permalink

    Uso Serva, el servidor de PXE mas facila de usar…

    Reply

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *