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.05, menu.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;
}