Ubuntu, uno per tutti

Posted on Mar. 09, 2009 at 04:56 PM

Mettiamo il caso che dobbiate installare la vostra distribuzione preferita, non su uno, né su due, ma su un numero imprecisato di computer, diciamo pure qualche decina, e non vogliate stare a passare il CD, o la pennetta, dall'uno all'altro, ed aspettare ogni volta che l'installazione abbia termine. C'è un modo molto semplice di risolvere la cosa: eseguendo una installazione via rete!

In pratica, è sufficiente avere Ubuntu installato solo su di un computer, assieme ad una immagine ISO del cd di istallazione, come lo stesso LiveCD usato per installare il primo computer: io ho usato quello della versione 8.10 Interpid Ibex. Gli altri computer, connessi alla stessa rete locale del primo, vedranno il suo CD di istallazione, che partirà come se fosse inserito nel lettore CD locale, e potrete così eseguire il processo in contemporanea (o quasi) su tutti i computer, cavandovela in un solo pomeriggio, a patto di rispondere alle domande di istallazione, per ognuno dei computer.

I passi da compiere sono ben spiegati nella documentazione di Ubuntu, a cui si rimanda la loro descrizione. Qui invece, voglio spendere qualche parola in più, perché prima di operare, è opportuno avere le idee chiare di ciò che sta per accadere.

Il concetto fondamentale da tenere a mente nell'eseguire i passi indicati dalla guida, è che i computer in rete eseguiranno praticamente tre processi di boot distinti:

  1. il primo avviene tramite il PXE del BIOS del computer su cui installare, che carica dal server TFTP che è presente nel computer da cui partiamo, il kernel pxelinux, ottenibile scaricando dalla rete il pacchetto netboot.tar.gz presente in http://archive.ubuntu.com/ubuntu/dists/intrepid/main/installer-i386/current/images/netboot/
  2. il secondo boot avviene ancora tramite il server TFTP, ma il kernel utilizzato questa volta è quello presente nella directory /casper del CD, debitamente copiato nella directory giusta
  3. il terzo boot, infine, avviene caricando via server NFS, il kernel predisposto per l'esecuzione del LiveCD

Tenuto questo a mente, possiamo riassumere i passi ufficiali come

  • configurare ed installare il server DHCP che consente di assegnare un indirizzo IP locale durante la fase di boot via PXE. Il file /etc/dhcp3/dhcpd.conf dovrà quindi contenere
    • il DNS attivo per la rete locale
    • il default gateway
    • l'intervallo di indirizzi entro cui assegnare
ovvero, se il computer il DNS ed il GW della LAN risiedono su 192.168.1.1:
option domain-name-servers 192.168.1.1;
option routers 192.168.1.1;
default-lease-time 600;
max-lease-time 7200;
filename="pxelinux.0";
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.200 192.168.1.254;
}
e quindi, lanciare il DHCP con sudo service dhcp3-server start
  • configurare il TFTP, cambiando RUN_DAEMON da "no" a "yes" in /etc/default/tftpd-hpa, e mandarlo in esecuzione, con sudo service openbsd-inetd start
  • scaricare il file http://archive.ubuntu.com/ubuntu/dists/intrepid/main/installer-i386/current/images/netboot/netboot.tar.gz e scomprimerlo, ottenendo la directory netboot, il cui contenuto va copiato in /var/lib/tftpboot in modo che li sia presente il link a pxelinux.0
  • montare la ISO del CD (che abbiamo lasciato sulla Scrivania) su /mnt, eseguendo sudo mount -o loop /home/alef/Scrivania/Ubuntu_8.10_i386.iso /mnt
  • copiare i files /mnt/casper/vmlinuz e /mnt/casper/initrd.gz in /var/lib/tftpboot/casper
  • aggiungere al file /var/lib/tftpboot/ubuntu-installer/i386/pxelinux.cfg/default le tre linee
    LABEL live
    kernel /casper/vmlinuz
    append initrd=/casper/initrd.gz boot=casper netboot=nfs nfsroot=192.168.0.10:/mnt --
in cui l'IP mostrato è quello del computer che stiamo utilizzando per ospitare il server DHCP, il server TFTP, il server NFS, e la ISO del CD. In questo modo, il secondo boot avviene a partire dai files presenti nella directory /casper del CD, serviti via TFTP, a cui poi seguirà un nuovo boot, montando via NFS il CD originale, che si comporterà quindi come se fosse presente localmente.
  • non rimane ora che esportare via NFS il filesystem del CD della distro, ovvero
    • installare nfs-kernel-server
    • aggiungere in /etc/exports la linea /mnt *(ro,sync,no_root_squash)
    • ri-lanciare l'NFS con il comando sudo service nfs-kernel-server restart

E' tutto!! Ora non vi resta che accendere uno dei computer su cui installare Ubuntu da rete, agire sulla tastiera per convincerlo a fare il boot via PXE, e... lasciare che si compia la magia!!