PXE boot – DHCP & TFTP
Mi capita spesso di fare delle installazioni, spesso ripetitive, e vorrei che alcune funzionalità che mi servono fossero sempre a disposizione. Ad esempio, vorrei avere sempre sottomano il SystemRescueCD oppure poter fare installazioni ripetitive di server VMware vSphere Hypervisor 5.5 o di CentOS 6.5; il tutto senza alcun dvd o penne USB.
Per potere fare ciò, è possibile ricorrere all’accoppiata DHCP e TFTP; il primo servizio fornisce al PC/Server che ne fa richiesta un indirizzo ip valido da utilizzare e fornisce anche l’indirizzo IP del server TFTP da cui scaricare il sistema.
Installiamo i due servizi in un server linux CentOS 6.5; cominciamo dal server DHCP:
# yum -y install syslinux syslinux-tftpboot mtools dhcp # chkconfig dhcpd on
Editiamo il file di configurazione del servizio dhcpd, in maniera tale da inserire le istruzioni minimali per il boot (modificate il file in base alla vostra rete):
- il range di IP assegnati dal dhcpd va dal 192.168.66.26 al 192.168.66.30, cioè al massimo 5 indirizzi IP;
- tali indirizzi IP verrano assegnati solo a quelle macchine il cui MAC Address è inserito nella lista “my_servers”;
- l’indirizzo IP del tftp server è quello indicato nella stringa next-server;
# vi /etc/dhcp/dhcpd.conf ddns-update-style ad-hoc; allow booting; allow bootp; class "my_servers" { match hardware; } subclass "my_servers" 1:0C:AA:D9:47:F4:45; #Server_001 subclass "my_servers" 1:0C:AA:D9:47:F4:46; #Server_002 subnet 192.168.66.0 netmask 255.255.255.0 { pool { range 192.168.66.26 192.168.66.30; allow members of "my_servers"; next-server 192.168.66.19; filename = "pxelinux.0"; } }
Una volta configurato il dhcpd server, facciamo partire il servizio e procediamo alla configurazione del tftp server:
# service dhcpd start # yum -y install tftp-server xinetd
Editiamo la configurazione del tftp server :
# vi /etc/xinetd.d/tftp service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -v -s /tftpboot disable = no per_source = 11 cps = 100 2 flags = IPv4 }
e riavviamo xinetd per avviare il servizio tftpd:
# service xinetd restart
Cominciamo a creare la struttura per il nostro tftp server:
# cd /tftpboot # mkdir -p images/VMWare_5.5 # mkdir -p images/SystemRescueCD_4.0.1 # mkdir -p images/CentOS_6.5 # mkdir pxelinux.cfg # umount /mnt/tmp
Editiamo il file che creerà il menù per il nostro Server_001 con mac address 0C:AA:D9:47:F4:45:
# vi pxelinux.cfg/01-0C-AA-D9-47-F4-45 default menu.c32 prompt 0 timeout 300 MENU TITLE Main Menu LABEL local MENU LABEL Boot local hard drive LOCALBOOT 0 LABEL SystemRescueCD MENU LABEL SystemRescueCD KERNEL images/SystemRescueCD_4.0.1/rescue64 APPEND initrd=images/SystemRescueCD_4.0.1/initram.igz boottftp=tftp://192.168.66.19/images/SystemRescueCD_4.0.1/sysrcd.dat LABEL VMWare 5.5 Install MENU LABEL VMWare 5.5 KERNEL images/VMWare_5.5/mboot.c32 APPEND -c images/VMWare_5.5/boot.cfg LABEL CentOS 6.5 64-bit MENU CentOS 6.5 64-bit KERNEL images/CentOS_6.5/vmlinuz APPEND initrd=images/CentOS_6.5/initrd.img ramdisk_size=100000
SystemRescueCD
Scarichiamo il file iso di SystemRescueCD dal sito http://www.sysresccd.org/Download; al momento in cui scrivo, la versione è la 4.0.1; montiamo il file appena scaricato in una directory temporanea e copiamo i file che ci interessano nella cartella images/SystemRescueCD:
# cd /usr/src # wget http://prdownloads.sourceforge.net/systemrescuecd/sysresccd-x86/systemrescuecd-x86-4.0.1.iso # mkdir /mnt/tmp # mount -o loop /usr/src/systemrescuecd-x86-4.0.1.iso /mnt/tmp # cp /mnt/tmp/isolinux/rescue64 /mnt/tmp/isolinux/initram.igz /mnt/tmp/sysrcd.* /tftpboot/images/SystemRescueCD_4.0.1 # umount /mnt/tmp
VMware vSphere Hypervisor 5.5
Prepariamo anche la directory per il vmware ESXi 5.5; scarichiamolo dal sito della VMWare (previa registrazione) nella directory /usr/src:
# cd /usr/src # mount -o loop /usr/src/VMware-VMvisor-Installer-5.5.0-1331820.x86_64.iso /mnt/tmp # rsync -a /mnt/tmp/ /tftpboot/images/VMWare_5.5/ # chmod +w /tftpboot/images/VMWare_5.5 # umount /mnt/tmp
VMWare vorrebbe che tutti i files fossero nella root del servizio tftp; per modificare tale tipo di configurazione (e dunque usare il path relativo che abbiamo configurato), dobbiamo:
1. editare il file di configurazione di boot del vmware e rimuovere tutti gli “/”; per fare questo:
2. aggiungere la direttiva “prefix” al file, in maniera tale da specificare la directory dal quale fare il boot;
Eseguiamo il seguente comando per adempiere ai punti precedenti:
# sed -e "s#/##g" -e "3s#^#prefix=/images/`basename $PWD`/n#" -i.bak /tftpboot/images/VMWare_5.5/boot.cfg
CentOS 6.5
Passiamo infine alla configurazione per la CentOS; scarichiamo il file .iso della CentOS per un’installazione minimal nella cartella /usr/src; successivamente copiamo i file che servono al boot della CentOS nella cartella del tftp server:
# mount -o loop /usr/src/CentOS-6.5-x86_64-minimal.iso /mnt/tmp # cp /mnt/tmp/images/pxeboot/* /tftpboot/images/CentOS_6.5 # umount /mnt/tmp
La configurazione per la CentOS è praticamente finita.
Conclusioni
La nostra accoppiata DHCP/TFTP è pronta; non ci resta che completare le configurazioni per gli altri server in maniera tale da abilitare il PXE boot per tutti i server che ci interessano; successivamente andiamo nel nostro server “Server_001”, entriamo nella configurazione del bios e configuriamo il boot in maniera tale che faccia il boot tramite interfaccia lan/PXE; se è tutto corretto (soprattutto il mac address del nostro server è uno di quelli per cui abbiamo creato il menu), ci comparirà un menù con cui potremo scegliere cosa installare/eseguire sul nostro server (SystemRescueCD, VMWare, CentOS).