Guida passo passo al boot via ethernet
Introduzione
I computer con architettura Intel, hanno raggiunto in tempi relativamente recenti lo status di
workstation. Uno degli aspetti che ne ha limitato l'uso in ambienti come reti di server e workstation Unix fino a pochi anni fa, erano le limitazioni intrinseche del BIOS e la capacità di booting solo da dispositivi ''ovvi'' come dischi, cd-rom o floppy.
Quando si devono amministrare parecchie decine o centinaia di macchine - come capita spesso in ambienti come certi campus universitari o certe aziende - la possibilità di installare un
boot server e di bootstrappare le workstation di lavoro via rete, per la installazione, per l'uso come sistemi
disk less o semplicemente allo scopo di centralizzare le configurazioni e le aree di lavoro su un unico server, diventa una
feature largamente appetibile.
In alcuni casi inoltre, come un laptop, il PC potrebbe essere acquistato senza floppy (dispositivo ormai in disuso anche su parecchi desktop) e senza cd-rom, ipotesi non trascurabile nel caso di certi ultra-portatili (che lo hanno tipicamente esterno e opzionale, quindi $$$). Volendo installare GNU/Linux su tali macchine, può tornare utile il boot di rete, generalmente ormai disponibile. Non molti portatili infatti consentono di effettuare il boot da dispositivi USB.
Per quanto riguarda la possibilità di controllo remoto delle console delle workstation - altra caratteristica estremamente importante in ambienti professionali - si sono fortunatamente diffusi anche dei dispositivi KVM (
keyboard-video-mouse) intelligenti che consentono di controllare non solo la console, ma anche l'alimentazione e l'
awakening dei PC, soprattutto in configurazione
rackable. Tutte cose che, in larga parte, workstation e server Unix blasonati (Sun, Digital, SGI, ecc.) erano in grado di fare già vent'anni fa, grazie a
firmware decisamente ben fatti, rispetto all'ancora oggi primitivo
BIOS dei PC. Ma questa è un'altra storia...
A rigore di logica, per effettuare il boot del sistema via rete - per esempio TCP/IP - la macchina deve essere in grado di ricevere l'assegnazione del suo indirizzo e nome, unitamente all'indirizzo del boot server, al percorso del kernel sul server ed eventuali altri parametri di boot, direttamente via ethernet, con un opportuno protocollo. I protocolli usati a tale scopo sono diversi, i più noti sono BOOTP, MOP e DHCP. Nel seguito ci concentreremo solo su DHCP, che di fatto è anche quello più complesso da utilizzare ed è il più largamente usato per i PC.
A questo si deve aggiungere un protocollo
semplice di trasferimento file che consenta di caricare il kernel e quindi effettuare il boot (tranne per MOP, per la verità). Invariabilmente il protocollo più utilizzato a tale scopo è una variante di FTP che si chiama TFTP (trivial FTP appunto).
Vedremo nel seguito quindi i due aspetti fondamentali di configurazione di un boot server (completo di server DHCP e server TFTP) e di configurazione di un boot client, con lo scopo di installare il sistema operativo. Questa scelta ci permette di concentrarci sulle sole configurazioni per il boot, in quanto la preparazione di un sistema con boot
stabilmente via rete (come un sistema diskless) è tipicamente cosa molto più complessa. E' infatti necessario modificare profondamente il sistema degli
init script della distribuzione per il client e produrre un acconcio filesystem generale per l'uso diskless via NFS.
Nota: quanto segue fa riferimento alla configurazione di un sistema Debian GNU/Linux ''sarge'', ma può essere adattato all'uso di qualsiasi distribuzione che preveda l'installazione via rete tra quelle possibili .
Configurazione di un server di boot
Come precedentemente indicato occorre configurare un boot server come server DHCP e server TFTPD. I due servizi non devono necessariamente risiedere sulla stessa macchina per la verità, ma ipotizzeremo per semplicità che la stessa macchina sia usata per entrambi i servizi.
Configurazione di un server DHCP come boot server
Supponiamo che la nostra LAN abbia subnet
192.168.0.0/24 con gateway
192.168.0.1, nameserver principale
192.168.0.2 e secondario
192.168.0.3, e che il nostro boot server sia
192.168.0.4. Il boot server potrà usare un range di 20 indirizzi dinamici 192.168.0.200-219 da assegnare alle macchine che ne fanno richiesta. Per semplicità supponiamo di non avere l'esigenza di assegnare staticamente degli indirizzi a macchine specifiche, cosa peraltro fattibile.
L'installazione di un server DHCP è immediata, è sufficiente installare la versione disponibile in Debian con
apt-get install dhcp3-server |
Si tratta poi di configurare il file
/etc/dhcp3/dhcpd.conf come segue:
allow booting; |
subnet 192.168.0.0 netmask 255.255.255.0 { |
range 192.168.0.200 192.168.0.219; |
option routers 192.168.0.1; |
option domain-name-servers 192.168.0.2, 192.168.0.3; |
option broadcast-address 192.168.0.255; |
option domain-name "pincopallo.com"; |
filename "pxelinux.0"; |
next-server 192.168.0.4; |
} |
Le righe in grassetto in particolare sono quelle necessarie a consentire il boot in protocollo PXE usando un file di configurazione
pxelinux.0 mantenuto sul server
192.168.0.4. Si possono configurare
stanzas differenti a seconda delle esigenze, per specificare file di boot diversi, generalmente in base a uno specifico indirizzo ethernet di client. Questo accorgimento è opportuno ad esempio per evitare che, inavvertitamente, venga fatto il boot automatico di macchine in giro per la LAN ad ogni avvio di queste ultime, causando le ire degli ignari proprietari...
Configurazione di un server TFTP
Anche l'installazione di un server TFTP in Debian è immediata:
apt-get install tftpd-hpa |
Si noti che il server da installare per sarge è quello indicato, altri programmi possono avere problemi con il protocollo di boot PXE.
Una volta installato ci si accerti che sia stata aggiunta una riga
tftp dgram udp wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /var/lib/tftpboot |
al file
/etc/inetd.conf nella ipotesi si avere
inetd installato (il default). Se il daemon è in ascolto eseguendo
netstat -an si vedrà una riga tipo:
udp 0 0 0.0.0.0:69 0.0.0.0:* |
Diversamente è sufficiente eseguire
per dare la "sveglia" a
inetd e attivare la modifica. Nel caso di filtri netfilter inbound attivi (regole di
iptables per intenderci), ci si accerti di aprire la porta incoming
69/udp alla LAN
192.168.0.0/24.
La directory
/var/lib/tftpboot è quella direttamente accessibile a un client TFTP per scaricare un qualsiasi file di cui sia noto il sub-path. Se si è curiosi sul funzionamento di TFTP rispetto al tradizionale protocollo FTP, è sufficiente installare anche il client
tftp e fare qualche prova. Per il seguito non è necessario farlo, comunque.
Installazione dei file di boot
Il sistema di installazione per
sarge può essere scaricato dal link
http://ftp.it.debian.org/debian/dists/sarge/main/installer-i386/current/images/netboot/netboot.tar.gz
o da un qualsiasi mirror sparso per il pianeta. Si dovrà scompattare il
TarPalla nella directory di lavoro di tftpd ovvero
cd /var/lib/tftpboot |
tar xzvf /path/to/netboot.tar.gz |
ln -s debian-installer/i386/pxelinux.0 |
ln -s debian-installer/i386/pxelinux.cfg |
I due link al programma
pxelinux.0 e alla sua directory di configurazione
pxelinux.cfg servono a semplificare la configurazione dei path. In particolare tale directory contiene il solo file
default che è quello da modificare nel caso occorrano particolari altri parametri per il boot del
debian-installer.
Per conoscenza il file
default standard ha il contenuto seguente per il programma
pxelinux.0:
display debian-installer/i386/boot-screens/syslinux.txt
default linux
F1 debian-installer/i386/boot-screens/f1.txt
F2 debian-installer/i386/boot-screens/f2.txt
F3 debian-installer/i386/boot-screens/f3.txt
F4 debian-installer/i386/boot-screens/f4.txt
F5 debian-installer/i386/boot-screens/f5.txt
F6 debian-installer/i386/boot-screens/f6.txt
F7 debian-installer/i386/boot-screens/f7.txt
F8 debian-installer/i386/boot-screens/f8.txt
F9 debian-installer/i386/boot-screens/f9.txt
F0 debian-installer/i386/boot-screens/f10.txt
label linux
kernel debian-installer/i386/linux
append vga=normal initrd=debian-installer/i386/initrd.gz \
ramdisk_size=9438 root=/dev/rd/0 devfs=mount,dall rw --
label expert
kernel debian-installer/i386/linux
append DEBCONF_PRIORITY=low vga=normal \
initrd=debian-installer/i386/initrd.gz ramdisk_size=9438 \
root=/dev/rd/0 devfs=mount,dall rw --
label linux26
kernel debian-installer/i386/2.6/linux
append vga=normal initrd=debian-installer/i386/2.6/initrd.gz \
ramdisk_size=10948 root=/dev/rd/0 devfs=mount,dall rw --
label expert26
kernel debian-installer/i386/2.6/linux
append DEBCONF_PRIORITY=low vga=normal \
initrd=debian-installer/i386/2.6/initrd.gz ramdisk_size=10948 \
root=/dev/rd/0 devfs=mount,dall rw --
prompt 1
eimeout 0
Si noti che append deve essere seguito da una riga unica, il carattere \ di continuazione è stato solo inserito per comodità di formattazione nel testo
Configurazione di un client per il boot via ethernet
Le macchine con BIOS relativamente nuovo non richiedono nulla di particolare per il boot
PXE, semplicemente è necessario inserirlo tra i boot possibili e nel giusto ordine nel setup del PC. Fatto quello, la macchina farà il boot e inizierà la fase di installazione in modo totalmente automatico, assegnandosi preventivamente un indirizzo IP disponibile nel pool prescelto.
Nel caso in cui la macchina non preveda il boot via rete, è sempre possibile utilizzare un apposito floppy/cdrom di boot, avendo l'accortezza di sceglierne uno con il supporto per la propria scheda di rete, per esempio
cat eb-5.4.0-3c509.zdsk > /dev/fd0 |
L'opportuna ROM può essere scelta su
http://rom-o-matic.net/. E' necessario selezionare accuratamente l'immagine corretta per il proprio chipset. Maggiore documentazione in merito è disponibile su
http://etherboot.sourceforge.net/
--
FrancescoLovergine - 19 Aug 2005
Inizio pagina