Azioni

MintNetInstall

Da MontelLUG WIKI.

Procedimento per installazione di rete di Linux Mint (note di Samuele):


Disclaimer

Ora, qualcuno ha preso una mail mia di promemoria sparata in mailing list e l'ha copiata qui. Siccome c'è il rischio molto alto che queste pagine vengano indicizzate da un qualche motore di ricerca andando così ad incrementare l'entropia di istruzioni confusionarie e scarsamente utili che si trovano in rete riguardo ad un certo argomento, mi vedo costretto nonostante il mio profondo odio per la scrittura, per il linguaggio del wiki, e per gli how-to che non spiegano in modo impeccabile un certo argomento, a metterci mano per dare a questa pagina una parvenza di decenza e renderla un minimo utile a quel povero disgraziato che in preda ad una crisi isterica causata da n-mila tentativi andati a vuoto approda su questa pagina. Siccome l'argomento è lungo, non la finirò in un colpo solo e la riprenderò in mano soltanto quando riuscirò a sedermi davanti ad un pc senza aver passato la giornata a lottare con un branco di luser scassa cocomeri per i motivi più insignificanti. Il titolo riporta "installazione di rete di Linux Mint". In realtà il procedimento con qualche adattamento può essere adattato anche ad altre distro (spiegherò più avanti perché sarebbe bene ammazzare chi imposta il processo di boot delle varie distro).

Se qualcuno ha suggerimenti da dare o si accorge di castronerie da corregere è pregato di editare il wiki o mandare una mail a info (scioso) montellug (punto) it.

Chi, come, dove, quando e perché

Perché

Allora, partiamo dall'ultima domanda: perché. Esistono tanti bei metodi per installare linux, si può partire con il floppy, il cdrom, la chiavetta usb, la clonazione del disco, l'installazione manuale in stile Linux From Scratch, debootstrap, l'installazione da rete e qualche altro sistema che mi sono dimenticato di menzionare o non conosco. Quindi, perché uno sano di mente dovrebbe mettere su tutto l'ambaradam sottostante per installare linux?

  • l'installazione delle principali distribuzioni moderni è mortalmente noiosa (qualche settimana fà ho provato a fare l'installazione di una ubuntu 12.04. Mi ha chiesto solo il partizionamento, l'hostname, l'utente e la password. Un paio d'anni e ci leggeranno direttamente il pensiero);
  • fà sempre bene sperimentare qualcosa di nuovo;
  • si evita di dover masterizzare cd (solo questo punto vale tutta la fatica);
  • se avete una rete decente (o non provate ad installare 40 pc in contemporanea su una rete a 100 mbit, con 8 switch da 8 porte presi all'ipermercato collegati in cascata) l'installazione è più veloce;
  • applicate un metodo che il Luser 2.0 figlio del cugino del vicino di casa tutto iphone, ipad, isarca$$0 che sa tutti i programmi del mondo, che lui si che è bravo ecc. non sa;
  • vedere n pc che si installano in contemporanea, facendo tutto da soli (magari anche si accendono se supportano il wake on lan) premendo solo un bottone... non ha prezzo;
  • altri motivi a vostra scelta.

Quando

Quando è il caso di usare questo tipo di installazione? Sicuramente non se dobbiamo installare tre pc per ieri (cioè la norma) e non l'abbiamo mai provata prima. Se però vi installate il server (d'ora in poi la "supermucca" in onore di apt-get moo e del mio HP LH3000 che ha fatto da mirror dei repository in qualche linux day passato), anche sul vostro pc portatile (i pacchetti occupano poca roba, il resto sono le iso che normalmente scaricate) e lo avete a portata di mano, vi renderete conto che tenderete ad usarla sempre. In caso di installazioni di molti pc in contemporanea, beh, questa è la morte sua.

Dove

Ovvio: può essere usata dappertutto se avete a che fare con linux. Con windows, le cose si complicano un pochino e non ho avuto modo di provarle, né l'opportunità di poterle applicare e quindi la motivazione per rompermi i cocomeri a studiarla.

Chi

Inteso come chi può farla, beh, tendenzialmente si può dire che è abbastanza semplice e possono farla tutti. Usare il server già installato è idiot-proof quindi può veramente farlo chiunque. Per preparare il server è richiesto solo di essere un po' svegli, che se qualcosa non va essere in grado di ricercare la soluzione, e avere voglia di imparare un po' di basi di quei 4 protocolli/servizi in croce che vengono usati.

Inteso come chi sono i protagonisti della nostra storia, eccoli qui:

  • PXE (Preboot eXecution Enviroment);
  • DHCP (Dinamic Host Configuration Protocol);
  • TFTP (Trivial File Transfer Protocol);
  • NFS (Network File System);
  • Linux (la vostra distro preferita con forse qualche aggiustamento).

Come

Se non sono riuscito nel mio intento di farvi passare la voglia di leggere quanto segue e di farvi male... qui sotto è spiegato il come. Buon tedio a tutti!

Requisiti hardware & software

  • Hardware:
    • Un pc che faccia da server con scheda di rete;
    • Uno o più pc (per le prove vanno bene, anzi forse anche meglio delle virtual machine) sempre con scheda di rete; sua suprema tirannia IL PRESIDENTE ha provato a far fare il boot da rete al suo mac book senza esito (magari pretende che il server sia un i-coso, boh), quindi se avete un mac e non vi funziona, prima di suicidarvi, provate con un'altro pc;
    • In caso di più pc uno switch e relativi cavi;
  • Software; i seguenti software possono risiedere tutti su uno stesso pc o su diversi pc, cambia poco. Nel corso della guida farò riferimento ad uno stesso pc.
    • DHCP: con questo dovreste avere familiarità tutti. Qui useremeo qualche opzione in più di questo protocollo. E' molto probabile che il vostro router/firewall che fa da dhcp server in casa o al lavoro non abbia queste opzioni. In questo caso dovrete installare il software a parte;
    • TFTP server
    • NFS server
    • Il file iso di una distribuzione (per semplicità partiamo con una ubuntu (ho provato una 9.04 e una 10.04) oppure una mint (provato con una 12)).

Collegamenti hardware

Su questo punto siete in grado di arrangiarvi. Se non lo siete... vi mancano un po' troppe cose da conoscere. Imparatevi prima cos'è una rete locale, come è composta, come funziona, cos'è il TCP/IP, un file system, un kernel, un sistema operativo, un device, un disco, la ram, una tabella delle partizioni, una iso ecc. e poi tornate qui. Nei pc client dovete abilitare il boot da rete (PXE boot). Come si abilita dipende dal BIOS del pc in questione. In alcuni casi è già abilitato e basta solo impostarne la priorità al momento del boot (prima del boot da hard disk), in altri bisogna cercare una voce nel BIOS con la quale lo si abilita. Alcuni BIOS più vecchi non prevedono il boot da rete, in questi casi la cosa potrebbe essere delegata alla scheda di rete (se è una di quelle furbe). Nel caso non abbiate né il pc, né la scheda di rete che supporta il boot di rete, esistono delle iso in grado di fare il boot da cd o usb (es.: gpxe) che una volta caricate permettono di fare il boot da rete. Qualcuno qui potrebbe obiettare che a sto punto tanto vale masterizzarsi un cd. Allora, intanto questo cd lo potete riutilizzare più volte per qualsiasi distro, secondo, se avete tanti pc da installare, appena fatto il boot ed il s. o. comincia a caricarsi, potete togliere il cd ed usarlo su ogni una delle restanti macchine una alla volta, mentre con il normale cd dovete tenerlo dentro al pc fino al termine dell'installazione. Potrebbe essere utile abilitare anche il wake on lan.

Qualche accenno di storia: RARP/BOOTP/PXE

Perché il pc possa partire, è necessario che carichi prendendolo da qualche parte il sistema operativo. Nel caso di boot da rete, sono necessarie due cose:

  • configurare l'indirizzo di rete;
  • trovare il sistema operativo da qualche parte;

Nonostante sia integrato nella quasi totalità dei pc degli ultimi anni, la possibilità di fare il boot da rete risale a molti anni fà (1984). Inizialmente era il protocollo RARP (Reverse Address Resolution Protocol), protocollo tramite il quale un host, partendo dal MAC address riesce ad ottenere l'indirizzo ip associato. Se la richiesta è inviata in modalità broadcast, e vi è un server RARP questo fornirà un indirizzo ip all'host. Se la richiesta veniva fatta in fase di boot, poteva essere usata per fare l'avvio da rete. Questa funzionalità è stata resa obsoleta da BOOTP e DHCP. Il RARP è un protocollo a layer 2. Il BOOTP invece si basa su UDP il che permetteva di avere il server BOOTP anche in una sottorete diversa da quella del client. Inizialmente, per fare il boot tramite BOOTP era necessario l'uso di un floppy che facesse avviare il PC ed inoltrasse la richiesta BOOTP in rete. Poi sono state sviluppate delle schede di rete che implementavano nel loro firmware questo protocollo (nelle schede di rete di qualche anno fà è possibile vedere uno zoccolo vuoto dove inserire il chip per avere questa funzionalità). Nel 1999 da parte di Intel è stato definito il protocollo PXE, che è l'attuale standard. In breve, questo protocollo all'avvio ricerca un server DHCP, il quale server, oltre a fornire l'indirizzo ip del cliente fornisce anche il nome del programma da eseguire (NBP, Network Bootstrap Program) ed il server dove reperirlo. Poi, provvede tramite il protocollo TFTP a scaricarlo nella ram del client e ad eseguirlo.

Installazione del software

In linux esistono n sitemi diversi per installare il software, usate il sistema che preferite. L'importante è che riusciate ad installare un tftp server (nel mio caso tftpd-hpa), un dhcp server (isc-dhcp o dhcp3, anche qui, mi verrebbe da picchiare chi ha rinominato o sostituito su debian & co. dhcp3 con isc e spostato di posto i file di configurazione. No, non ho voglia di andarmi a leggere le mail sulle varie ml per capire le pippe mentali che hanno portato a ciò), un nfs server (nfs-kernel-server).

Configurazione del software

TFTP

Come detto sopra, ho usatto tftpd-hpa. Una volta installato nel mio pc, mi sono trovato il programma configurato per girare tramite inetd. Questo l'ho scoperto dopo almeno un'ora di imprecazioni perché il tftp non mi leggeva il file di configurazione come lo avevo impostato io. Per disabilitarlo basta editare /etc/inetd.conf. Se lo usate tramite inetd dovete modificare i parametri di lancio dentro al file /etc/inetd.con altrimenti, se lo usate in modalità demone stand-alone, dovete editare:

samuele-host:/# cat /etc/default/tftpd-hpa 
# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"

L'unica cosa da prestare attenzione è TFTP_DIRECTORY che è la directory dove andremo a posizionare tutti i file utili per il boot da rete.

DHCP

Rispetto ad una configurazione standard di DHCP, sono stati specificati due parametri, filename e next-server:

samuele-host:/# cat /etc/dhcp/dhcpd.conf 
<... resto del file>
subnet 192.168.1.0 netmask 255.255.255.0 {
       range 192.168.1.70 192.168.1.100;
       filename "pxelinux.0";
       next-server 192.168.1.50;
       option subnet-mask 255.255.255.0;
       option broadcast-address 192.168.1.255;
       option routers 192.168.1.50;
}
  • filename: è il nome del file contenente NBP
  • next-server: è il nome/ip del server dove si trova il file pxelinux.0, cioè del nostro server TFTP.

Attenti che se avete altri server DHCP in rete, potrebbero nascere dei conflitti.

Struttura delle cartelle nella root TFTP

Allora, nella root del server TFTP (/var/lib/tftpboot) va copiato l'NBP che è pxelinux.0 e potete trovare ad esempio nei repository di debian in:

main/installer-i386/current/images/netboot/debian-installer/i386/pxelinux.0

Va poi creata una directory pxelinux.cfg all'interno della quale si trovano i file di configurazione che l'NBP legge. A seconda dell'indirizzo ip del client può essere specificato un file di configurazione diverso. Es.: posso avere un file di configurazione per i pc con indirizzo 192.168.0.*, un'altro per 192.168.1.*, un file solo ed esclusivamente per il pc 192.168.1.1 ed un file di configurazione per tutti gli altri casi. Per fare questo, bisogna convertire l'indirizzo ip in esadecimale:

192.168.0.0 = C0 A8 00 00

La configurazione dei client 192.168.0.* va nel file: C0A800

La configurazione dei client 192.168.1.* va nel file: C0A801

La configurazione dei client 192.168.1.1 va nel file: C0A80101

La configurazione di tutti gli altri client va nel file: default


Nel nostro caso useremo un solo file per tutti. Cosa mettere all'interno di questo file lo vedremo qui sotto.

Configurazione di NFS

E' giunto il momento di configurare il server nfs. Basta inserire all'interno del file /etc/exports le condivisioni:

samuele-host:/# cat /etc/exports 
/var/lib/tftpboot/ubuntu *(rw,sync,no_wdelay,no_root_squash,insecure) 
/var/lib/tftpboot/backtrack *(rw,sync,no_wdelay,no_root_squash,insecure)
/var/lib/tftpboot/skole *(rw,sync,no_wdelay,no_root_squash,insecure)
/var/lib/tftpboot/mint *(rw,sync,no_wdelay,no_root_squash,insecure)
/var/lib/tftpboot/xbmc *(rw,sync,no_wdelay,no_root_squash,insecure)

Nelle directory esportate ho montato direttamente l'iso della distribuzione in oggetto. Non create un link simbolico all'iso montata da qualche altra parte. Il TFTP gira in chroot quindi non riesce ad accedervi. Volevo anche mettere la iso di debian, ma non basta, i file inclusi non vanno bene per il boot di rete e bisogna seguire la procedura che indicano nel loro sito. Con le iso altre distribuzionei tipo centos/fedora/suse non ho ancora avuto modo di provare.

L'idea di partenza era quella di avere un server con le varie iso e permettere di fare il boot di una qualsiasi di esse. Purtroppo a seconda del metodo con il quale può essere fatta l'iso (e ce ne sono diversi) i file contenuti in essa potrebbero non andare bene, quindi bisogna valutare caso per caso.

Personalmente ho avuto un problemino con il server nfs per il quale ho fatto una fatica boia a trovare la soluzione. Finché installavo un solo pc attaccato con cavo cross al server, oppure i client erano in macchine virtuali non ho avuto problemi. Nel momento in cui i pc diventavano più di uno ho cominciato ad avere problemi. I client riportavano in console "NFS server is not responding, still trying". Le ricerche su google mi reindirizzavano su forum con le soluzioni più improbabili. Inoltre in nessun tutorial si parlava di questo problema (quindi, a questo punto, o sono io sfigato che mi capitano tutte le rogne di sto mondo, oppure chi fa i tutorial si limita a scopiazzare). Il problema alla fine era questo: il kernel di linux, di default legge e scrive via NFS blocci di 1 MB. Ogni frame ethernet normalmente è lunga al massimo 1500 byte. Questo comportava che se su tutte le oltre 700 frame che servono per inoltrare 1 MB anche una sola risultava persa (o il client non riusciva più a riordinarle ecc.), il client le richiedeva di nuovo tutte. Infatti, avevo un traffico bestiale di rete in confronto ad i dati trasferiti. Qui adesso salta fuori il secondo problema. Il parametro con le dimensioni dei pacchetti NFS, rsize e wsize, non si specifica lato server ma client. Come? Una rapida ricerca, mi ha dato che il kernel di linux, tra i parametri della share nfs dove monta root si può indicare anche la dimensione della frame: bastava dare

nfsroot=192.168.1.50:/var/lib/tftpboot/mint,rsize=8192,wsize=8192

Inspiegabilmente il parametro non veniva recepito. Prova e riprova un pomeriggio in varie salse, aggiungendo spazi, togliendo virgole ecc. Non c'è verso. Ad un certo punto, intercetto su un forum il post di uno che si lamenta di come vengono interpretati i parametri di boot di CASPER (programma che permette il boot delle live). Parlano di un'opzione nfsopts. Dopo un altro po' di googlate scopro che questo CASPER le opzioni le accetta in modo diverso dal kernel. Mi chiedo io, ma pareva brutto e complicato fare che accettasse gli stessi parametri *CON LA STESSA* sintassi del kernel? Presumo di no, altrimenti la gente non sbaglierebbe e non direbbe abbastanza parolacce. Per quello che serviva a me la sintassi è:

nfsroot=192.168.1.50:/var/lib/tftpboot/mint NFSOPTS="-o rsize=8192" 

Da notare che tutti i parametri sono in minuscolo mentre NFSOPTS deve essere obbligatoriamente in maiuscolo. Lascio alla vostra fervida fantasia cosa avrei fatto se avessi avuto di frontre a me chi ha scritto, revisionato, convalidato, scritto la documentazione, testato il parser dei parametri di CASPER. Dopo che sono riuscito a passare questo parametro al kernel per il boot della iso, l'installazione è proceduta in modo rapido e senza riportare errori var NFS. A farmi venire ancora il fegato più grosso, è stato l'indicizzatore di google, perché cercando NFSOPTS, mi ha dato tra i primi risultati questa pagina:

http://www.informit.com/articles/article.aspx?p=1328789&seqNum=8

dove il paragrafo che spiegava il parametro NFSOPTS è intitolato: "NFS Server Is Not Responding". Putt4|\|4, |\/|153r14, \/4cc4, l4dr4, |\/|4l3d3tt4. La stessa stringa esatta, sputata, spiaccicata di ricerca che ho digitato per quasi un giorno, spulciato in modo sequenziale tutti i risultati che mi dava e su quella pagina non ci sono capitato. Che dire, a tutto c'è un limite, tranne che alla sfiga.

File di configurazione per il boot di iso

DISPLAY boot.txt

LABEL mint

      KERNEL mint/casper/vmlinuz
      APPEND root=/dev/nfs boot=casper netboot=nfs

nfsroot=192.168.1.50:/var/lib/tftpboot/mint initrd=mint/casper/initrd.lz ro splash --


PROMPT 1 TIMEOUT 0

* ./boot.txt 
<pre>

- Boot Menu -
=============

mint 
  • Montare la iso di mint in /var/lib/tftpboot/mint

Configurazione per il netboot di una normale installazione linux

/ *(ro,sync,no_wdelay,no_root_squash,insecure)

Conclusioni