Vamos a ver cómo montar un pxe server. Muy útil por ejemplo para arrancar un cd de rescate desde la red, o una iso, o un livecd:

  • Primero debemos tener un servidor de tftp. En debian por ejemplo, basta con tftpd-hpa. Configuramos como raíz por ejemplo /var/lib/tftpboot
server:/# cat /etc/default/tftpd-hpa
#Defaults for tftpd-hpa
RUN_DAEMON="yes"
OPTIONS="-l -s /var/lib/tftpboot -vv"
  • Descargamos los archivos memdisk.3.71, memdisk.4.05menu.c32 y pxelinux.0 y los guardamos en la raíz del tftp. Haced un enlace simbólico «memdisk» al memdisk que queráis. Yo actualmente lo tengo apuntando al 4.05 (ln -s memdisk.4.05 memdisk)
  • También necesitamos un servidor de dhcp. Con dhcp3-server por ejemplo, esta sería la configuración (parte de ella) para que pueda arrancar cualquier cliente por pxe:
/etc/dhcp3/dhcpd.conf

class "pxeclients" {
match if substring(option vendor-class-identifier, 0, 9) = "PXEClient";
filename "pxelinux.0";
next-server <tftp_server_ip>;
}
  • Crear el archivo de configuración de pxe (incluyo algunos ejemplos):
server:/var/lib/tftpboot# cat pxelinux.cfg/default
default menu.c32
prompt 0

label Lubuntu 12.10 x64
kernel lubuntu-12.10/casper/vmlinuz
append root=/dev/nfs boot=casper netboot=nfs nfsroot=<nfs_server_ip>:/var/lib/tftpboot/lubuntu-12.10 initrd=lubuntu-12.10/casper/initrd.lz quiet splash --

label Ubuntu 12.04 LTS x64
kernel ubuntu-12.04/casper/vmlinuz
append root=/dev/nfs boot=casper netboot=nfs nfsroot=<nfs_server_ip>:/var/lib/tftpboot/ubuntu-12.04 initrd=ubuntu-12.04/casper/initrd.lz quiet splash --

label Linux Mint 13 Mate x64
kernel linuxmint-13-mate/casper/vmlinuz
append root=/dev/nfs boot=casper netboot=nfs nfsroot=<nfs_server_ip>:/var/lib/tftpboot/linuxmint-13-mate initrd=linuxmint-13-mate/casper/initrd.lz quiet splash --

label Linux Mint 13 Cinnamon x64
kernel linuxmint-13-cinnamon/casper/vmlinuz
append root=/dev/nfs boot=casper netboot=nfs nfsroot=<nfs_server_ip>:/var/lib/tftpboot/linuxmint-13-cinnamon initrd=linuxmint-13-cinnamon/casper/initrd.lz quiet splash --

label Debian 7.0.0 x64
kernel debian-7.0.0/live/vmlinuz
append boot=live live-config netboot=nfs nfsroot=<nfs_server_ip>:/var/lib/tftpboot/mountpoints/debian-7.0.0 initrd=debian-7.0.0/live/initrd.img

label Parted Mmagic 2012_10_10
linux memdisk
initrd isos/pmagic_2012_10_10.iso
APPEND iso vmalloc=300M

label Hirens CD v15
kernel memdisk
append iso initrd=isos/Hirens.BootCD.15.2.iso raw

label System Rescue CD v3.1.1
kernel isos/systemrescuecd-3.1.1/systemrescuecd64.kernel
append initrd=isos/systemrescuecd-3.1.1/initram.systemrescuecd.igz dodhcp nfsboot=<nfs_server_ip>:/var/lib/tftpboot/isos/systemrescuecd-3.1.1

label Clonezilla-live-2.1.1-25-amd64
MENU LABEL Clonezilla Live (Ramdisk)
KERNEL isos/clonezilla-live-2.1.1-25-amd64/vmlinuz
APPEND initrd=isos/clonezilla-live-2.1.1-25-amd64/initrd.img boot=live config noswap nolocales edd=on nomodeset ocs_live_run="ocs-live-general" ocs_live_extra_param="" keyboard-layouts="" ocs_live_batch="no" locales="" vga=788 nosplash noprompt fetch=tftp://$SERVER/isos/clonezilla-live-2.1.1-25-amd64/filesystem.squashfs

Como veis en mi ejemplo, tengo algunos live cd exportados por nfs para arrancar en un cliente sin discos. El directorio nfsroot es la ruta al directorio dentro del servidor nfs donde está montada la iso correspondiente. También tengo un par de isos para cargar en ram y arrancar.

Creo que no me dejo nada…

Más info:
http://www.syslinux.org/wiki/index.php/SYSLINUX#LABEL_command
http://www.syslinux.org/wiki/index.php/MEMDISK

UPDATE: versión UEFI

Para equipos con UEFI en vez de BIOS, la cosa cambia un poco. Descarga el archivo BOOTx64.EFI y grubnetx64.efi.signed en la raíz del tftpboot. Crea un symlink grubx64.efi -> grubnetx64.efi.signed. Crea el directorio «grub» y dentro el grub.cfg que quieras (un grub.cfg de grub2):

menuentry 'Linux Mint 17 MATE x64' --class os {
     insmod net
     insmod efinet
     insmod tftp
     insmod gzio
     insmod part_gpt
     insmod efi_gop
     insmod efi_uga
     set net_default_server=192.168.1.100
     echo 'Network status: '
     net_ls_cards
     net_ls_addr
     net_ls_routes

     echo 'Loading Linux ...'
     linux (tftp)/mountpoints/linuxmint-17-x64-mate/casper/vmlinuz root=/dev/nfs boot=casper netboot=nfs nfsroot=10.243.135.33:/var/lib/tftpboot/mountpoints/linuxmint-17-x64-mate noquiet nosplash
     initrd (tftp)/mountpoints/linuxmint-17-x64-mate/casper/initrd.lz 
}

También tienes que modificar el archivo de config del dhcp:

...
option arch code 93 = unsigned integer 16;
...
class "pxeclients" {
 match if substring(option vendor-class-identifier, 0, 9) = "PXEClient";
 if option arch = 00:07 {
      filename "BOOTx64.EFI";
 }
 else{
	filename "pxelinux.0";
 }
 next-server 192.168.1.100;
}
Cómo montar un servidor PXE
Etiquetado en:        

Deja una respuesta

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