viernes, 2 de agosto de 2013

CentOS 6 PXE Server con DHCP Server en pfSense

Hace mucho quería montar en Casa un PXE para poder instalar Sistemas Operativos por medio de la Red y contar con un System Rescue sin tener que quemar un CD o usar un Pendrive USB, ya tenia en mente usar PXE solo me faltaba configurar mi CentOS con un tftp Server y montar las imagenes .iso de Linux que quería instalar por Red, por ultimo agregar las opciones de bootpxe al DHCP que esta en mi Firewall pfSense.
La motivación de montar un PXE surgió porque quería revivir un viejo Servidor al cual usaría para Video Vigilancia con Motion que dicho sea de paso luego creare otra entrada donde explicare como Instalar Motion con dos Pico 2000 y con mas de una cámara.
Luego surgió un ultimo desafío y es que mi viejo Server no trae el firmware para bootear por Red con lo cual para este en particular tuve que crear un Disco de Arranque de Red con el driver apropiado para la NIC del Server.

Nota: Ya que si bien están todos los pasos para configurar el CentOS y tener operativo un PXE Server esta guia supone que usted tenga conocimientos de Linux.

En esta guia veremos:

  • Como configurar un PXE Server en CentOS
  • Como crear el Menu del PXE Boot
  • Como configurar el Network Boot del DHCP Server de pfSense
  • Como crear un Disco de Arranque de Red gPXE con  ROM-o-matic (Opcional)



Lo que vamos a necesitar para el Deploy:

  • CentOS 6 Instalado para el PXE Server
  • pfSense
  • Las imagenes .iso de 32 y 64 bits de CentOS
  • La imagen .iso del SystemRecuCD
  • Un Desktop, Notebook, Server o Virtual Machine para pruebas
  • Un diskette de 1.44 (Opcional)



Pasos:

Instalar en el CentOS Apache, tftp server y el paquete syslinux:

# yum install -y httpd tftp-server syslinux

Agregar a los runlevels y encender el Servicio de Apache:

# chkconfig httpd on
# service httpd start

Crear en la raíz del sistema los siguientes directorios:

# mkdir -p /tftpboot/pxelinux.cfg

Copiar los siguientes archivos al directorio creado:

# cp /usr/share/syslinux/{pxelinux.0,menu.c32,memdisk,mboot.c32,chain.c32} /tftpboot/

Crear el Menú para el PXE Boot:

# vim /tftpboot/pxelinux.cfg/default

El Siguiente es un ejemplo del archivo default, los label 1-7 son las opciones que saldrán en el Menú de PXE, en la guia daré los pasos para el funcionamiento del label 1, 2 y 5:

default menu.c32
prompt 0
timeout 300
ONTIMEOUT 7

MENU TITLE ########## PXE Boot Menu ##########
label 1
   menu label ^1) Install CentOS 6 i386
   kernel centos/6/i386/vmlinuz
   append initrd=centos/6/i386/initrd.img method=http://172.16.1.142/pxe/centos/6/i386 devfs=nomount

label 2
   menu label ^2) Install CentOS 6 x86_64
   kernel centos/6/x86_64/vmlinuz
   append initrd=centos/6/x86_64/initrd.img method=http://172.16.1.142/pxe/centos/6/x86_64 devfs=nomount

label 3
   menu label ^3) Install Fedora 16 x86_64
   kernel fedora/16/x86_64/vmlinuz
   append initrd=fedora/16/x86_64/initrd.img repo=http://172.16.1.142/pxe/fedora/16/x86_64 xdriver=vesa nomodeset

label 4
   menu label ^4) Install Fedora 19 x86_64
   kernel fedora/19/x86_64/vmlinuz
   append initrd=fedora/19/x86_64/initrd.img repo=http://172.16.1.142/pxe/fedora/19/x86_64

label 5
   menu label ^5) SystemRescueCD 3.7.1
   kernel SystemRescueCD/3.7.1/isolinux/rescue32
   append initrd=SystemRescueCD/3.7.1/isolinux/initram.igz netboot=tftp://172.16.1.142/SystemRescueCD/3.7.1/sysrcd.dat

label 6
   menu label ^6) Windows 7 PE (x64)
   KERNEL Boot/startrom.0

label 7
   menu label ^7) Boot from local drive
   localboot


Hay que modificar el archivo de configuración del tftp server para que tome nuestro directorio de tftpboot y como el servicio de tftp funciona on-demand luego hay que reiniciar el servicio del que depende... xinetd

# vim /etc/xinetd.d/tftp

Modificar las siguientes variables:

server_args = -s /tftpboot
disable = no

Reiniciar el xinetd

# service xinetd restart

Como ya se habran dado cuenta el metodo de instalacion es por http para la Instalacion de los CentOS con lo cual el Instalador buscara los paquetes en la url de nuestro servidor y para lograr eso vamos a crear algunos directorios dentro del Documento Root del Apache para finalmente montar las imagenes .iso

# mkdir -p /var/www/html/pxe/centos/6/{i386,x86_64}

Creamos algunos direcotrios en el root del tftpboot a fin de organizar las distribuciones:

# mkdir -p /tftpboot/centos/6/{i386,x86_64}
# mkdir -p /tftpboot/SystemRescueCD/3.7.1


Agregamos las siguientes entradas al final del fstab para que tengamos siempre disponible los paquetes para la instalacion de los CentOS.

# vim /etc/fstab

/<Path>/CentOS-6.4-i386-minimal.iso   /var/www/html/pxe/centos/6/i386       udf,iso9660    ro,loop        0 0
/<Path>/CentOS-6.4-x86_64-minimal.iso   /var/www/html/pxe/centos/6/x86_64       udf,iso9660    ro,loop        0 0
/<Path>/systemrescuecd-x86-3.7.1.iso       /tftpboot/SystemRescueCD/3.7.1      udf,iso9660    ro,loop        0 0

Montamos los cambios del fstab:

# mount -a

Copiamos el Kernel y el Init Ram Disk a los directorios creados anteriormente estos archivos son los que cargara por tftp el PXE luego de cargar el Menu.

cp /var/www/html/pxe/centos/6/i386/isolinux/{vmlinuz,initrd.img} /tftpboot/centos/6/i386/
cp /var/www/html/pxe/centos/6/x86_64/isolinux/{vmlinuz,initrd.img} /tftpboot/centos/6/x86_64/

Si tenemos activo el firewall de linux modificamos el iptables para que que acepte las conexiones de tftp y http:

# vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m udp -p udp --dport 69 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

Configuracion de pfSense:

Para configurar el DHCP hay que ir a Services, DHCP Server:


 Luego hacer clic en Advance de Enable network booting para desplegar mas opciones.


Tildar Enables network booting, en Enter the IP of next-server poner la IP del CentOS con PXE, y en the file name poner: /pxelinux.0



Crear un Disco de Arranque de Red gPXE con  ROM-o-matic:

Cuando llego el momento de probar el PXE en mi Server me di cuenta que no contaba con ninguna opción para bootear por Red así que tuve que buscar una solución y me encontré con el sitio web de rom-o-matic que se trata de un proyecto open para bootear por Red, la web es bastante intuitiva asi que solo me faltaba identificar cual era el modelo de la NIC de Red, para eso ejecute el comando lspci.


# lspci | grep -i ethernet
00:04.0 Ethernet controller: Intel Corporation 82557/8/9/0/1 Ethernet Pro 100 (rev 08)

En la web de rom-o-matic seleccionamos el link del ultimo release en producción, luego seguír los pasos 1, 2 y 4.
Con el archivo ya descargado ejecutamos lo siguiente para copiar la imagen a un diskette:

# cat gpxe-1.0.1-eepro100.bin > /dev/fd0


Algunos screenshots del PXE Boot y del PXE Menu:









Saludos!

Hernan

2 comentarios:

  1. El problema pasado ya lo solucione solo me gustaría que me explicaras la configuración para instalar un windows Gracias

    ResponderEliminar
    Respuestas
    1. Estimado disculpe la demora en responder, ser esposo, padre, estudiante y empleado demanda mucho tiempo.
      Seguro que para esta altura usted ya descubrio como lograrlo, caso contrario le recomiendo probar el UDA www.ultimatedeployment.org que de manera sencilla lo guiara en lo que usted necesita.

      Saludos

      Eliminar