<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <HTML> <HEAD> <TITLE>Diskless Linux Mini Howto</TITLE> </HEAD> <BODY> <H1>Diskless Linux Mini Howto</H1> <H2>di Robert Nemkin <CODE>buci@math.klte.hu</CODE>. Tradotto da Salvatore Meschini <CODE> <A HREF="mailto:smeschini@ermes.it">smeschini@ermes.it</A></CODE></H2>v0.0.3, 12 Settembre 1996. Tradotto il 30 agosto 1998. <P><HR> <EM> Questo documento descrive come impostare un sistema Linux privo di unità disco ed i diritti d'autore appartengono a Robert Nemkin. La polizza del copyright è GPL. L'autore ringrazia Bela Kis <bkis@cartan.math.klte.hu> per aver tradotto in inglese questo documento. </EM> <HR> <H2><A NAME="s1">1. Modifiche</A></H2> <P> <UL> <LI>v0.0.3 12 Settembre 1996: Correzione di alcuni errori</LI> </UL> <P> <H2><A NAME="s2">2. Come impostare un Linux box senza avere unità a disco</A></H2> <P>Questo documento tratta l'impostazione di una stazione Linux priva di dischi ("diskless"). Ciò può essere necessario per eseguire Linux su PC che non ha né dischi rigidi né floppy drive. Se si opera in una rete con un altro sistema Unix fornito di bootp, tftp, un server NFS, ed è disponibile un programmatore di eprom allora è possibile configurare ed usare Linux senza avere drive. <P> <H2><A NAME="s3">3. Altra documentazione</A></H2> <P> <UL> <LI>NFS-root Mini Howto</LI> <LI>Linux NET-2/3-HOWTO a cura di Terry Dawson, <CODE>94004531@postoffice.csu.edu.au</CODE></LI> <LI><CODE>/usr/src/linux/README</CODE> configurazione e compilazione di nuovi kernel</LI> </UL> <P> <H2><A NAME="s4">4. Hardware</A></H2> <P>Tutto ciò che è descritto nel documento è stato provato con la configurazione seguente: <UL> <LI>Sun-OS 4.1.3 come boot server</LI> <LI>Slackware 2.3 + Linux 1.2.8 + wd 8013 ethercard.</LI> <LI>Una LAN Ethernet funzionante</LI> </UL> <P> <H2><A NAME="s5">5. Idee basilari</A></H2> <P>L'idea fondamentale è la seguente: il PC prenderà il suo indirizzo IP dal boot server attraverso il protocollo bootp. È necessario usare 0.0.0.0 come indirizzo IP iniziale ed il kernel del server mediante il protocollo tftp. <BLOCKQUOTE>La fase di avvio fatta attraverso dei segmenti (via router) non è cosa da poco, dunque conviene mettere sia il server che i terminali senza dischi nello stesso segmento LAN oppure configurare un indirizzo di sostegno UDP nel router verso l'indirizzo del server. Fate riferimento al manuale del vostro router per ottenere ulteriori informazioni.</BLOCKQUOTE> <P>Seguite i passi indicati: <P> <H2>5.1 Impostazione del PC</H2> <P>Prendete il pacchetto nfsboot (il pacchetto è disponibile su diversi mirror, nella directory <CODE>/pub/Linux/system/Linux-boot</CODE>. Nfsboot contiene un'immagine booteprom della scheda wd8013 che può essere programmata direttamente nella EPROM. <P>Ci sono anche metodi alternativi per preparare il PC: <UL> <LI> Se la vostra macchina ha una qualche unità disco, allora è possibile usare un programmino DOS oppure </LI> <LI>l'immagine binaria per floppy contenuta nel pacchetto precedentemente indicato.</LI> </UL> <P>Se preferite adottare la seconda soluzione allora dovete scrivere l'immagine su un floppy utilizzando il comando dd <P>Queste immagini contengono un client bootp ed uno tftp. Dovete preparare un Linux kernel che supporti l'opzione nfs-root. <UL> <LI>Se state usando l'ultimo kernel stabile, linux-1.2.13, allora dovete applicare il patch al kernel sfruttando il file incluso nel pacchetto nfsboot <BLOCKQUOTE>Fate riferimento a patch(1)</BLOCKQUOTE> </LI> <LI>Se decidete di usare l'ultimo kernel della serie linux-1.3.x, allora sarà necessario configurare l'opzione nfs-root.</LI> </UL> <P>Potete scegliere se configurare o meno il supporto per il block device (floppy o hard disk), ma dovete configurare il supporto per tcp/ip, per le schede ethernet e per il filesystem nfs. Poi ricompilate il kernel come fate di solito. <P> <P> <H2>5.2 Impostazione di bootpd sul server</H2> <P>Bootpd può essere reperito nel pacchetto <CODE>bootpd-2.4.tar.gz</CODE> (disponibile nella directory <CODE>/pub/Linux/system/Network/boot.net</CODE> del vostro Linux mirror preferito). Scaricate il pacchetto, compilatelo ed installatelo. Se il sistema Unix presente sul server è Slackware Linux allora potete saltare questo passo poiché la distribuzione contiene un bootpd. Il demone può essere eseguito direttamente digitando il comando <P> <BLOCKQUOTE><CODE> <HR> <PRE> bootpd -s </PRE> <HR> </CODE></BLOCKQUOTE> oppure usando inetd. In questo caso avete bisogno di editare: <UL> <LI> /etc/inetd.conf per rimuovere il simbolo hash (#) dall'inizio di queste righe: <BLOCKQUOTE><CODE> <HR> <PRE> # tftp dgram udp wait root /usr/sbin/in.tftpd tftpd /export # bootps dgram udp wait root /usr/sbin/in.bootpd bootpd </PRE> <HR> </CODE></BLOCKQUOTE> </LI> <LI> inserite o decommentate le seguenti due linee in /etc/services: <BLOCKQUOTE><CODE> <HR> <PRE> bootps 67/tcp # BOOTP server tftp 69/udp # TFTP server </PRE> <HR> </CODE></BLOCKQUOTE> </LI> <LI>riavviate inetd con <BLOCKQUOTE><CODE> <HR> <PRE> kill -HUP <id del processo inetd>. </PRE> <HR> </CODE></BLOCKQUOTE> </LI> </UL> <P> <H2>5.3 Configurazione di bootpd sul server.</H2> <P>Per prima cosa, bootpd ha un file di configurazione chiamato bootpdtab che di solito si trova in /etc. Bisogna modificarlo inserendo gli indirizzi IP del vostro gateway, del server dns e gli indirizzi ethernet della macchina sprovvista di unità a disco. Un esempio del file /etc/bootptab: <BLOCKQUOTE><CODE> <HR> <PRE> global.prof:\ :sm=255.255.255.0:\ :ds=192.168.1.5:\ :gw=192.168.1.19:\ :ht=ethernet:\ :bf=linux: macchina1:hd=/export/root/machine1:tc=global.prof:ha=0000c0863d7a:ip=192.168.1.140: macchina2:hd=/export/root/machine2:tc=global.prof:ha=0800110244e1:ip=192.168.1.141: macchina3:hd=/export/root/machine3:tc=global.prof:ha=0800110244de:ip=192.168.1.142: </PRE> <HR> </CODE></BLOCKQUOTE> <P>global.prof è un modello generale per le entrate host, dove <UL> <LI>il campo sm contiene il subnet mask</LI> <LI>il campo ds contiene l'indirizzo del Domain Name Server</LI> <LI>il campo gw contiene l'indirizzo del gateway predefinito</LI> <LI>il campo ht contiene il tipo di hardware LAN</LI> <LI>il campo bf contiene il nome del file di avvio</LI> </UL> <P>Inoltre ogni macchina deve avere una linea: <UL> <LI>il primo campo contiene il nome dell'host, </LI> <LI>il campo hd contiene la directory del file di avvio,</LI> <LI>il modello globale può essere incluso con il campo tc,</LI> <LI>il campo ha contiene l'indirizzo hardware della scheda ethernet,</LI> <LI>il campo ip contiene l'indirizzo IP assegnato.</LI> </UL> <P> <P> <H2>5.4 Capire tftp</H2> <P>TFTP (<CODE>Trivial File Transfer Protocol</CODE>) è un protocollo per il trasferimento di file, come ftp, ma molto più semplice da codificare nelle EPROM. TFTP può essere usato in due modi: <UL> <LI> tftp ingenuo: significa che il client può accedere all'intero file system della vostra macchina. È semplice ma rappresenta un enorme buco nella sicurezza del sistema (chiunque può prelevare il vostro file delle password con tftp).</LI> <LI> tftp sicuro: il server tftp usa una chiamata di sistema di tipo chroot.2 per cambiare la propria directory root. Qualunque cosa all'esterno della nuova directory root sarà completamente inaccessibile. Poiché la directory chroot diventa la nuova directory root, il parametro hd presente nel file bootpdtab deve riflettere la nuova situazione. Per esempio: quando si usa il tftp ingenuo, il campo hd contiene il percorso completo alla directory di boot: <CODE>/export/root/machine1</CODE>. Quando invece si usa il tftp sicuro con /export come directory di root, /export diviene / ed il campo hd deve essere <CODE>/root/macchina1</CODE>.</LI> </UL> Quasi tutte le implementazioni di Unix contengono il server tftp, probabilmente non ci sarà bisogno di installarne uno. <P> <H2>5.5 Impostazione di una configurazione minimale di Linux su un server remoto.</H2> <P>Una configurazione minimale dovrebbe contenere i pacchetti a, ap, n ed x della distribuzione Slackware. Installare altri pacchetti non è un errore, comunque i pacchetti appena menzionati sono sufficienti ai fini di creare un terminale X senza unità disco. Per l'installazione c'è bisogno di un sistema Linux funzionante. Trovate dello spazio libero sul disco della macchina remota ed esportatelo come lettura-scrittura. Montate la directory esportata da qualche parte (es. /mnt) sul file system del terminale Linux. Avviate il setup di Linux e cambiate l'opzione root nel setup da / a /mnt. Poi installate i pacchetti che ritenete necessari come fate di solito. Se volete usare al massimo un terminale Linux allora non dovete apportare nessun altro cambiamento. Se invece pensate di aver bisogno di più macchine senza unità disco, allora il setup tradizionale non funzionerà perché alcuni file e directory devono risultare private per la macchina. Il problema può essere risolto spostando la directory /usr (non contiene dati privati) e creando una sotto-directory separata per ogni terminale. Per esempio, se /export/linux/macchina1 fosse montata su /mnt allora la struttura delle directory dopo il setup iniziale risulterebbe simile a questa: <BLOCKQUOTE><CODE> <HR> <PRE> /export/linux/macchina1/bin /export/linux/macchina1/sbin /export/linux/macchina1/lib /export/linux/macchina1/etc /export/linux/macchina1/var /export/linux/macchina1/usr </PRE> <HR> </CODE></BLOCKQUOTE> <P>Dopo i cambiamenti la struttura diventerà: <BLOCKQUOTE><CODE> <HR> <PRE> /export/linux/macchina1/bin /export/linux/macchina1/sbin /export/linux/macchina1/lib /export/linux/macchina1/etc /export/linux/macchina1/var /export/linux/usr </PRE> <HR> </CODE></BLOCKQUOTE> <P>Ora dovete creare le sotto-directory per le altre macchine. Da adesso in poi si assuma che i sistemi senza dischi siano chiamati macchina1, macchina2, macchina3, ecc.; In seguito sarà possibile usare il seguente script bash per impostare le altre directory <BLOCKQUOTE><CODE> <HR> <PRE> cd /export/linux for x in macchina2 macchina3 ; do mkdir $x; cd $x (cd ../macchina1; tar cf - *) | tar xvf - done </PRE> <HR> </CODE></BLOCKQUOTE> <P>Poi create il seguente export: <UL> <LI>/export/linux/usr sola lettura per tutti.</LI> <LI>/export/linux/macchina1 solo alla macchina1 con diritti rw,root.</LI> <LI>/export/linux/macchina2 solo alla macchina2 con diritti rw,root.</LI> <LI>/export/linux/macchina3 solo alla macchina3 con diritti rw,root.</LI> </UL> nel modo seguente <BLOCKQUOTE> il formato di questo esempio è conforme alla sintassi del SunOs 4.1.3 per i file exports</BLOCKQUOTE> : <BLOCKQUOTE><CODE> <HR> <PRE> # Questo file è /etc/export # per terminali remoti Linux X (by Buci) # questa linea va indicata una sola volta /export/root/usr -access=linuxnet # queste linee vanno indicate una volta per ogni host /export/root/machine1 rw=machine1,root=machine1 /export/root/machine2 rw=machine2,root=machine2 /export/root/machine3 rw=machine3,root=machine3 </PRE> <HR> </CODE></BLOCKQUOTE> Non dimenticate di eseguire exportfs -a. <P> <H2>5.6 Configurazione del server tftp</H2> <P> <P>È giunto il momento di configurare il server tftp. Se non avete bisogno del tftp sicuro allora tutto è abbastanza facile ed i vostri client possono essere avviati dalla directory /export. <P>Se preferite usare il tftp sicuro allora dovete creare una struttura delle directory /export/linux completa sotto /tftpboot (con un solo kernel reale e links simbolici per le altre macchine), oppure lasciate che /export sia la directory di avvio del tftpd sicuro. Se avete una directory tftpboot separata allora ci sarà bisogno solo della struttura delle directory originale con un solo kernel e links simbolici per gli altri terminali. Potete ottenere questo setup digitando i comandi seguenti: <BLOCKQUOTE><CODE> <HR> <PRE> mkdir -p /tftpboot/export/linux/macchina1 cd /tftpboot/export/linux/macchina1 cp /export/linux/macchina1/<nome del kernel> . </PRE> <HR> </CODE></BLOCKQUOTE> <P>In seguito digitate: <P> <BLOCKQUOTE><CODE> <HR> <PRE> mkdir -p /tftpboot/export/linux/macchina2 cd ../macchina2 ln -s ../macchina2/<nome del kernel> </PRE> <HR> </CODE></BLOCKQUOTE> <P> <H2>5.7 Parte finale</H2> <P> <P>Infine dovete inserire <BLOCKQUOTE><CODE> <HR> <PRE> /sbin/mount nfs_server:/export/linux/usr /usr </PRE> <HR> </CODE></BLOCKQUOTE> <P>come prima linea di <P> <BLOCKQUOTE><CODE> <HR> <PRE> /export/linux/<macchinax>/etc/rc.d/rc.S </PRE> <HR> </CODE></BLOCKQUOTE> dove <macchinax> sta per macchina1, macchina2, ecc. <P> <H2><A NAME="s6">6. Requisiti relativi alla memoria e allo spazio su disco; velocità</A></H2> <P> Io ho provato questo metodo solo con la Slackware 2.3; per altre distribuzioni/versioni i numeri seguenti possono cambiare. <UL> <LI>Spazio su disco: 28MB + 6.5MB/per ogni macchina</LI> <LI> RAM: Io uso X con 8 MB. Per sistemi con solo 4MB suppongo sia necessario dello spazio swap, createlo -- separatamente per ogni macchina -- in /tmp. Non dimenticate di lanciare il comando mkswap.</LI> <LI> Velocità: non ho avuto problemi con un 486 DX2/66 con 8 mega di RAM.</LI> </UL> <P> <H2><A NAME="s7">7. Problemi</A></H2> <P> <UL> <LI> Mi sono imbattuto in uno strano errore: nella sotto-directory /dev SunOS ha rovinato i dispositivi, perciò ho dovuto rieseguire MAKEDEV montando le sotto-directory su un sistema Linux dotato di unità disco (la causa del problema sta nelle differenze tra il nfs (network filesystem) di Linux e quello di SunOS: tutti e due usano 32 bit per indicare il numero Major e Minor del dispositivo, ma Linux usa campi a 16 bit per entrambi, SunOs usa campi a 14 bit per la parte Major e a 18 bit per quella Minor.).</LI> <LI>Quando il sistema Linux senza unità disco viene avviato, esiste un unico instradamento incluso nella tabella di instradamento al server tftp, così avete bisogno di impostare correttamente le tabelle di instradamento. Potete contare su due possibili scelte: <UL> <LI> configurare a mano ogni rc.S per ogni macchina </LI> <LI> usare un client bootp e scrivere uno script di configurazione generalizzato</LI> </UL> </LI> </UL> <P> <H2><A NAME="s8">8. Errori e possibili ulteriori espansioni di questo documento</A></H2> <P> <UL> <LI>Elenco corretto degli altri documenti disponibili</LI> <LI>SunOs è basato su BSD. Inclusione della configurazione del server basato su SVR4 (cioè Solaris)</LI> <LI> Nonostante Linux sia abbastanza simile a SunOs come server bootp/tftp, un esempio di server basato su Linux potrebbe essere utile.</LI> <LI> Aggiornamento di questo documento al pacchetto etherboot corrente.</LI> <LI> Elenco delle differenze tra il network filesystem del kernel 1.2.13 e quello del più recente 1.3.x che contiene il patch nfs-root.</LI> <LI> Necessità di provare altre schede ethernet oltre alla wd8013</LI> <LI> Aggiunta delle informazioni di configurazione per bootpc, un client bootp per Linux utile ad impostare le tabelle di instradamento corrette.</LI> <LI> Refusi ed altri errori: per favore segnalateli a <CODE>buci@math.klte.hu</CODE>. Grazie.</LI> </UL> <P> </BODY> </HTML>