E’ già stato trattato in un altro articolo di questo Blog l’installazione di una Debian usando una distribuzione Gentoo come server di boot.
Avendo un PC o Laptop (o comunque similare) che non possiede CD-Rom (o che non funziona, come nel mio caso) e non avendo possibilità di fare il boot direttamente da USB (ad esempio, nel mio caso, il BIOS è bloccato da password e – per il momento – non la conosco), probabilmente – se supportata – l’unica soluzione che rimane è quella di eseguire il boot della macchina tramite rete LAN (Ethernet).
Nel mio caso ho usato una distribuzione Debian/Lenny per fare da boot server.
Sommariamente i passaggi da fare sono i seguenti:
- Procurarsi la ISO della distribuzione (nel mio caso “ubuntu-11.04-desktop-i386.iso“)
- Installare il Server DHCP (io ho usato udhcpd) e configurarlo
- Installare il Server TFTP (io ho usato atftpd)
- Preparare la directory che deve contenere i files di configurazione e i dati per il boot (boot-manager, configurazione, kernel linux, ecc…): tftpboot
- Installare il pacchetto per il bootloader Syslinux
- Montare la ISO e condividerla con NFS via rete
- Eseguire il BOOT di rete con il computer su cui si vuole installare Linux (in genere, appena lo si accende, bisogna premere F12 per effettuare il Network Boot).
Alla fine, nel mio caso, è stato un totale fallimento perché Ubuntu sparava valanghe di errori – che non ho ben capito a cosa erano dovuti – ma sono arrivato – anche se per poco, perché poi è crashato – alla schermata desktop dove c’era “Installa Ubuntu”.
Sintenticamente, elenco le cose salienti nel dettaglio.
Installato il Server udhcpd (il classico: apt-get install udhcpd ) bisogna creare un file di configurazione ( /etc/udhcpd.conf ) simile al seguente:
start 192.168.0.201 end 192.168.0.254 interface eth0 max_leases 54 siaddr 192.168.0.200 boot_file pxelinux.0 option subnet 255.255.255.0 option dns 208.67.222.222
Dove:
- “start” ed “end” indicano il range di indirizzi IP che il Server DHCP potrà assegnare alla macchina che deve eseguire il boot. Nel mio caso ho dato da .201 a .254 (compresi) per evitare che non fossero in conflitto con il Server DHCP del Router ADSL (che si ferma a .199, nel mio caso).
- “interface” è la scheda di rete da usare, solitamente “eth0”.
- “max_leases” è il numero di IP massimo assegnabile.
- “siaddr” è l’IP del Server Boot (nel mio caso la Debian che sta all’IP 192.168.0.200)
- “boot_file” è il file di boot che poi vedremo in seguito.
- “option subnet” è la maschera di rete
- “option dns” è importante e rappresenta il Server DNS affinché sia possibile poi navigare su Internet; qui andrebbe personalizzato, anche se quello sopra dovrebbe funzionare perfettamente.
Il servizio si avvia con:
/etc/init.d/udhcpd start
Installare atftpd ( apt-get install atftpd ) e verificare che nel file “/etc/inetd.conf” sia presente questa riga (cambiarla, se necessario, e ri-avviare il servizio inetd ):
tftp dgram udp4 wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd --tftpd-timeout 300 --retry-timeout 5 --mcast-port 1758 --mcast-addr 239.239.239.0-255 --mcast-ttl 1 --maxthread 100 --verbose=5 --logfile /var/log/atftpd.log /tftpboot
In particolare bisogna fare attenzione a dove il server tftp prevede sia la directory radice (spesso è “/var/lib/tftpboot” e ciò non funziona con i files di configurazione che fornisco).
Da utente root, creare la cartella “/tftpboot” con:
mkdir /tftpboot mkdir /tftpboot/pxelinux.cfg mkdir /tftpboot/ubuntu-installer mkdir /tftpboot/ubuntu-installer/iso
Se, come nel mio caso, avete problemi con Ubuntu, potete prevedere anche la possibilità di usare Debian con le seguenti directory aggiuntive:
mkdir /tftpboot/debian-installer mkdir /tftpboot/debian-installer/i386
Ora andiamo a riempire queste cartelle; per prima cosa andiamo a creare i files di configurazione.
E’ il passaggio più complicato perché: il nome del file di configurazione dipende dal MAC address della macchina che deve eseguire il boot.
In altri termini: la macchina sulla quale dobbiamo installare Ubuntu ha un indirizzo fisico di rete fisso che va utilizzato per determinare il nome del file di configurazione.
Ad esempio, nel mio caso, l’indirizzo è “00f1ff4d-751c-d811-95fb-000e7f7aafc6“; è un qualcosa che si dovrebbe leggere sulla macchina che esegue il boot – durante lo stesso – o anche in un qualche file di LOG su Linux (vedere pure l’altra guida per questo aspetto).
Io ho creato 2 file (uno per Ubuntu e uno per Debian); quello per Ubuntu l’ho chiamato “00f1ff4d-751c-d811-95fb-000e7f7aafc6.ubuntu” e il suo contenuto è il seguente:
default install label install menu label ^Install menu default kernel ubuntu-installer/linux append root=/dev/nfs boot=casper netboot=nfs nfsroot=192.168.0.200:/tftpboot/ubuntu-installer/iso initrd=/tftpboot/ubuntu-installer/iso/casper/initrd.lz quiet splash --
mentre, quello di Debian, l’ho chiamato “00f1ff4d-751c-d811-95fb-000e7f7aafc6.debian” e contiene:
default install label install menu label ^Install menu default kernel debian-installer/i386/linux append vga=normal initrd=debian-installer/i386/initrd.gz — quiet
Per stabilire quale dei due files di configurazione utilizzare per il boot, si rende necessario creare un link simbolico di questo tipo:
ln -s 00f1ff4d-751c-d811-95fb-000e7f7aafc6.ubuntu 00f1ff4d-751c-d811-95fb-000e7f7aafc6
Per chi è interessato a Debian è necessario prelevare dal sito i files per il boot e collocarli in “/tftpboot/debian-installer/i386“; ottenendo:
# ls -l /tftpboot/debian-installer/i386 totale 7360 drwxrwxrwx 2 nobody nogroup 1024 2011-07-31 16:50 boot-screens -rwxrwxrwx 1 nobody nogroup 6014747 2010-11-24 22:09 initrd.gz -rwxrwxrwx 1 nobody nogroup 1469808 2010-11-24 22:13 linux -rwxrwxrwx 1 nobody nogroup 15820 2010-11-24 22:15 pxelinux.0 drwxrwxrwx 2 nobody nogroup 1024 2011-07-31 16:50 pxelinux.cfg
Ora installiamo syslinux ( apt-get install syslinux ) e copiamo il bootloader:
cp /usr/lib/syslinux/pxelinux.0 /tftpboot/
Se non si trova dove previsto, cercarlo con:
find /usr -iname pxelinux.0
Dobbiamo quindi impostare correttamente i permessi e gli utenti delle cartelle e files creati con:
chown -R nobody:nogroup /tftpboot chmod -R 777 /tftpboot
Per quanto riguarda Ubuntu bisogna prendere la iso e copiarla dentro “/tftpboot/ubuntu-installer“, quindi, montarla con questo comando:
mount -t iso9660 /tftpboot/ubuntu-installer/ubuntu-11.04-desktop-i386.iso /tftpboot/ubuntu-installer/iso/ -o loop=/dev/loop1,ro
quindi configurare il Server NFS (per installarlo: apt-get install nfs-kernel-server ) aggiungendo questa riga al file “/etc/exports“:
/tftpboot *(ro,sync,no_wdelay,insecure_locks,no_root_squash,insecure,subtree_check)
e riavviare il Server NFS con:
/etc/init.d/nfs-kernel-server restart
Per completare la sistemazione della cartella di boot, dobbiamo creare un link simbolico al kernel linux per Ubuntu:
ln -s /tftpboot/ubuntu-installer/iso/casper/vmlinuz /tftpboot/ubuntu-installer/linux
Bene, ora è giunto il momento di eseguire il boot della macchina e incrociare le dita (più giri, fino a quando non si staccano …) e pregare.
Non per “tirarla” ma è quasi impossibile vada al primo colpo. Bisogna armarsi di pazienza e capire cosa non funziona come previsto. Spesso è un problema di percorso o di permesso. Nel mio caso sono “abbastanza attrezzato” perché ho un router, uno switch, ecc…, ma qualcuno potrebbe essere in situazioni più critiche “computer -> computer” e, in questo caso, magari servono cavi di rete incrociati, ecc…