Guida al Netboot su Gentoo Linux
1.
Introduzione
Nota:
Questo documento è al momento centrato su SPARC e ha come scopo quello di fare
impostare il proprio server netboot su di una macchina con già installato Gentoo
Linux.
|
Questo documento descrive come impostare un ambiente con boot da rete per
sistemi Sun Microsystem SPARC o su computer basati su UltraSPARC. Questo
documento presuppone che si abbia già una macchina con Gentoo Linux da usare
come server di netboot.
Siccome il protocollo ARP tipicamente non redirige su differenti subnet di rete,
entrambi i netboot server e netboot client necessitano di essere nella stessa
subnet.
Una panoramica generica di quanto succede durante il processo di netboot è la
seguente:
-
Il client invia una richiesta ARP inversa (RARP) per avere un indirizzo IP.
- Una macchina server ritorna la risposta al client con l'indirizzo IP:
-
Il client può così tentare di scaricare un immagine di boot dal server RARP
utilizzando il protocollo TFTP.
- Quando l'immagine è scaricata, il client netboot avvia l'immagine.
In base a questa panoramica, c'è la necessità di installare un demone ARP e un
demone TFTP.
2.
Installazione del software e configurazione
Il demone per ARP
È già presente un demone ARP nel proprio sistema, e fa parte del pacchetto
net-misc/iputils.
Impostazione di elementi comuni per rarpd: /etc/ethers
Bisogna impostare il file /etc/ethers, che indica quali host
rarpd devono rispondere quando viene inviata una richiesta, e a che
indirizzo devono rispondere.
Il file /etc/ethers deve contenere l'indirizzo MAC della periferica
di rete da cui si dovrà fare il netboot e il suo hostname. Gli spazi delimitano
gli indirizzi MAC dal nome dell'host e ogni copia MAC hostname deve essere su di
una riga. Il seguente esempio per per un host chiamato sparc-netboot.gentoo.org:
Codice 2.1: Esempio di /etc/ethers |
08:00:20:77:1f:3e sparc-netboot.gentoo.org
|
Nota:
Se l'indirizzo MAC inizia o è 0, si può scegliere di omettere il primo 0 (per
esempio 08:00:20:77:1f:3e diventa 8:0:20:77:1f:3e).
|
Siccome il file /etc/ethers viene controllato ogni volta che viene
ricevuta una richiesta, quando si aggiunge un nuovo host non c'è bisogno di
riavviare il servizio rarpd.
Traduzione degli hostnames: /etc/hosts
Dal momento che ogni elemento del file /etc/ethers possiede un
hostname, il server netboot necessita di poter tradurre il nome dell'host con il
suo relativo indirizzo IP. Questo può essere fatto in due modi: tramite
/etc/hosts oppure tramite il nameserver del server netboot.
Un elemento del file /etc/hosts deve essere molto simile a quello
che probabilmente esiste da quando si ha installato Gentoo sul server netboot.
Per esempio, per il proprio host, sparc-netboot.gentoo.org, presupporre che
abbia un IP 10.0.1.15. Così il file /etc/hosts sarà simile a:
Codice 2.2: /etc/hosts |
10.0.1.15 sparc-netboot.gentoo.org
|
Nota:
In base all'ambiente, per avviare l'host da rete si potrebbe avere la necessità
di dover consultare l'amministratore di rete per avere un indirizzo IP oppure
l'indirizzo del server.
|
Se si usa un nameserver, l'amministratore del server DNS deve aggiungere un
record per l'hostname, nell'esempio di questa guida sparc-netboot.gentoo.org,
deve puntare ad un appropriato indirizzo IP. Consultare il proprio
amministratore del server DNS e/o la documentazione per il software DNS del
server DNS per sapere come aggiungere un elemento.
Nota:
Se sia /etc/hosts che il nameserver hanno un elemento per l'host
che necessita di fare in boot da rete, viene usato per primo
/etc/hosts (a meno che l'ordine di /etc/nsswitch.conf
non sia diverso da quello predefinito).
|
Impostare rarpd
Anche se ci sono più opzioni di quelle spiegate qui, queste opzioni dovrebbero
permettere di cominciare. Dato che attualmente non c'è nessuno script init.d
per rarpd, un'aggiunta sarà necessaria al file
/etc/conf.d/local.start se si vogliono abilitare i servizi
rarpd all'avvio. Un esempio di aggiunta è la seguente;
Codice 2.3: /etc/conf.d/local.start |
/usr/sbin/rarpd -v -e eth0
|
La spiegazione dell'opzione mostrata è questa (presa dalla pagina di manuale):
-
-v modo verbose
-
-e non controlla la presenza di un'immagine di boot, risponde se
l'indirizzo MAC si traduce in un IP valido utilizzando
/etc/ethers e il DNS
- eth0 rappresenta l'interfaccia rarpd da associare
Per maggiori informazioni, consultare man 8 rarpd.
Il Demone tftpd
La scelta di un demone TFTP si basa su due possibilità, net-ftp/atftp
e net-ftp/tftp-hpa. Per operare correttamente
bisogna installare soltanto uno di questi due.
Impostazione degli elementi comuni di tftpd
Ogni servizio TFTP necessita di una directory in cui mettere i file per i client
tftp. La directory che verrà usata in questa guida sarà /tftpboot.
Quando le richieste dei client verranno ricevute, tale directory apparirà come
la directory root (/) per i client. Si può inoltre specificare di
eseguire il servizio TFTP come utente e gruppo nobody.
Se la directory scelta non esiste ancora, deve essere creata con il comando
mkdir. Il comando di esempio per /tftpboot è;
Codice 2.4: Creazione della directory /tftpboot |
# /bin/mkdir /tftpboot
|
Dopo bisogna cambiare il proprietario di /tftpboot in modo che sia
dell'utente nobody e gruppo nobody.
Codice 2.5: Cambiamento del proprietario |
# chown nobody:nobody /tftpboot
|
Il servizio atftp
Per prima cosa, installare il pacchetto atftp come segue;
Codice 2.6: Installazione di atftp |
# emerge atftp
|
Dopo che il pacchetto net-misc/atftp è stato installato, deve essere
configurato. Se si desidera che il servizio tftp sia avviato ad ogni boot è
necessario inserirlo nel file /etc/conf.d/local.start in quanto
atftp non ha un suo init.d, inetd o script
xinetd. Se si vuole usare inetd o xinetd per controllare il
servizio tftp, guardare le loro rispettive pagine di manuale.
Qui di seguito viene mostrato un esempio di file
/etc/conf.d/local.start per atftpd.
Codice 2.7: /etc/conf.d/local.start |
/usr/sbin/in.tftpd -v --daemon /tftpboot
|
La spiegazione del comando appena mostrato è (presa dalle pagine di manuale);
-
-v Aumenta o imposta il livello di log. Nessun argomento aumenta di
uno il valore corrente. Come impostazione predefinita il livello è
LOG_NOTICE, guardare syslog(3) per il livello di log. I livelli disponibili
sono da 0 (LOG_EMERG) a 7 (LOG_DEBUG).
-
--daemon Gira come demone. Non usare questa opzione se atftpd viene
avviato tramite inetd.
Per maggiori informazioni, consultare man 8 atftpd.
Il demone tftp-hpa
Prima di tutto, installare il pacchetto tftp-hpa:
Codice 2.8: Installazione di tftp-hpa |
# emerge tftp-hpa
|
tftp-hpa possiede un suo init.d ed il relativo file di
configurazione conf.d. Controllare per sicurezza che INIITFTPD_PATH
e INITFTP_OPTS in /etc/conf.d/in.tftpd siano impostati come nel
seguente esempio;
Codice 2.9: /etc/conf.d/in.tftpd |
INTFTPD_PATH="/tftpboot"
INTFTPD_OPTS="-s -v -l ${INTFTPD_PATH}"
|
Il demone TFTP può ora essere avviato tramite lo script init.d:
Codice 2.10: Avviare in.tftpd |
# /etc/init.d/in.tftpd start
|
Per maggiori opzioni, consultare man 8 tftpd.
3.
Preparazione di una immagine tftpboot utilizzabile dal client
Assicurarsi di avere un'immagine da usare per l'avvio da rete. Controllare nel
proprio mirror
distfiles locale la disponibilità
dell'immagine appropriata. Ora assumere che si stia pianificando di avviare un
host sparc64 usando l'immagine gentoo-sparc64-20100128.tftpboot.
dopo aver recuperato l'immagine, copiarla in /tftpboot:
Codice 3.1: Copiare l'immagine |
# cp gentoo-sparc64-20100128.tftpboot /tftpboot
# chmod 644 /tftpboot/gentoo-sparc64-20100128.tftpboot
|
Adesso, quando il client netboot fa una richiesta TFTP, controlla l'essistenza
di un file che è il numero esadecimale del suo corrente indirizzo IP, e in
alcune piattaforme un suffisso .ARCH. Il numero esadecimale deve
essere formato da caratteri in stampatello.
Per l'IP d'esempio in questa guida, 10.0.1.15, l'equivalente in esadecimale
sarà:
Codice 3.2: Convertire in esadecimale |
# printf "%.2X%.2X%.2X%.2X\n" 10 0 1 15
|
Codice 3.3: Esempio di indirizzo IP |
decimale 10 0 1 15
esadecimale 0A 00 01 0F
|
Così, per il client netboot d'esempio, quando esso farà un boot tftp cercherà un
file chiamato 0A00010F.
Se si è veramente pigri (come l'autore di questa guida), per avere il nome del
file corretto si può far fare il netboot dell'host e poi guardare nei log del
server per vedere quale file viene cercato.
Assicurarsi che sia li servizio rarpd che il demone TFTP scelti in
precedenza siano avviati, poi avviare l'host come descritto nel capitolo
Netboot del client.
Il client viene avviato dopo che è stato dato il comando per l'avvio da rete.
Controllare in seguito il log di sistema per individuare un riferimento a
in.tftpd.
L'esempio di una linea aggiunta al log di un netboot server che utilizza
sysklogd e tftp-hpa assomiglierà alla seguente:
Codice 3.4: Log per un netboot server |
Jan 3 22:48:59 stargazer in.tftpd[8368]: RRQ from 10.0.1.15 filename 0A00010F
|
Il nome del file è mostrato sopra, dopo "filename" della linea del log che in
questo caso è 0A00010F.
Un modo per tenere sotto controllo quale immagine netboot si sta usando e per
permettere a più macchine di usare la stessa immagine, è quello di usare un link
simbolico per creare il file con il valore esadecimale. Per creare questa
immagine, usando in nostro esempio per sparc64 e
gentoo-sparc64-20100128.tftpboot,, usare il seguente comando:
Codice 3.5: Creare un collegamento al file d'immagine |
# /bin/ln -s /tftpboot/gentoo-sparc64-20100128.tftpboot \
/tftpboot/0A00010F
|
Adesso tutto è impostato per l'avvio da rete!
4.
Netboot del client
Sun SPARC, da OpenBoot PROM (OBP), dare il comando;
Codice 4.1: Boot di OBP |
ok boot net
|
Alternativa per alcune macchine:
Codice 4.2: Boot di OBP, alternativa |
ok boot net-tpe
|
Nota:
Se il proprio sistema al boot non si presenta con OBP, bisognerà premere i tasti
Stop e A, o inviare un segnale di break dalla console seriale prima che il
sistema avvii il sistema operativo. Se la propria macchina non trova un sistema
operativo, si può anche provare il boot dall'interfaccia di rete (che è quello
che si desidera) o restituire un prompt di OBP.
|
Questo inizializza il processo di avvio da rete. Verranno visualizzate delle
stringhe esadecimali. Quando l'immagine avrà finito di essere caricata,
interverrà il kernel che avvierà il processo di boot del sistema operativo. In
questo caso con sparc64, si verrà lasciato ad una shell dalla quale puoi
iniziare il processo di installazione.
5.
Problemi
Preparazione dei prerequisiti del software
Se il netboot server è un sistema Gentoo Linux e si hanno problemi con
l'installazione dei pacchetti rarpd e tftpd, cercare sui
Forum di Gentoo e su
Gentoo Bugzilla per vedere se i propri
stessi problemi sono stati riscontrati da qualcun'altro. Se
non si trova niente, o la soluzione trovata non funziona, allora aprire un
nuovo bug.
È stato dato il comando per il netboot ma l'avvio si blocca
Questo succede presumibilmente perchè il file system che si sta cercando di
caricare da tftpboot non è disponibile. Nei sistemi SPARC, si vedrà
probabilmente il seguente avviso:
Codice 5.1: L'avvio si blocca |
Rebooting with command: boot
Boot device: net File and args:
|
Controllare ancora che esista il file del client in /tftpboot.
Si può vedere il nome del file che viene richiesto nel log di sistema. Quando il
file richiesto esisterà, il client proverà a caricarlo. A volte, quando non c'è
il file, il client mette in attesa il download fino a quando il file compare.
Per risolvere questo problema, ritornare al prompt OBP, e dare nuovamente il
comando "boot net". L'host ora dovrebbe avviare il download dell'immagine
tftpboot ed avviare il sistema operativo.
Si sta tentando di fare l'avvio da rete ma tutto quello che si vede è il
messaggio "Timeout waiting for ARP/RARP packet".
Questo può essere dovuto da diversi problemi:
-
Assicurarsi che nel file /etc/ethers esista la voce per il
client in questione. Se l'indirizzo MAC è sbagliato e/o il server non può
associare il nome dell'host per il client, non può rispondere con le
informazioni dovute.
-
Verificare che lo switch o l'hub di rete che collegano server e client siano
connessi e permettano al traffico RARP di viaggiare liberamente. Se la
richiesta del client non può raggiungere il server, o vice versa, l'host non
può procedere.
-
Nessuno risponde alla richiesta del client perchè non ci sono servizi in
ascolto. Verificare che il servizio rarpd è avviato correttamente.
-
Il client non pensa che la sua interfaccia di rete sia collegata ad un
hub/switch. Controllare che la porta dello switch o dell'hub relativa
all'interfaccia di rete abbia il led acceso. Se il led è acceso, controllare
le impostazioni di tpe-link-test? presenti in OBP con il comando;
printenv tpe-link-test?. Si dovrebbe ricevere un messaggio tipo
tpe-link-test? false true. La prima colonna rappresenta
il nome del parametro, la seconda colonna, mostra il valore corrente del
parametro, mentre la terza colonna mostra il valore predefinito per il
parametro. Nell'esempio riportato, si può vedere che il valore corrente è
false, che significa che il client non sta controllando se può stabilire la
connessione con lo switch o l'hub prima di mandare una richiesta RARPD.
Molte volte questa è la causa del problema.
Per cambiare i valori di tpe-link-test? tramite il prompt OBP, dare il seguente
comando;
Codice 5.2: Cambiamento del valore di tpe-link-test |
ok setenv tpe-link-test? true
tpe-link-test? = true
|
Questo mostra che il valore di tpe-link-test? è ora true. Provare di nuovo a
riavviare il client.
I contenuti di questo documento sono rilasciati sotto la licenza Creative
Commons - Attribution / Share Alike.
|