  Diskless Linux Mini Howto
  di Robert Nemkin buci@math.klte.hu. Tradotto da Salvatore
  Meschini  smeschini@ermes.it
  v0.0.3, 12 Settembre 1996. Tradotto il 30 agosto 1998.

  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@car
  tan.math.klte.hu> per aver tradotto in inglese questo documento.

  1.  Modifiche


    v0.0.3 12 Settembre 1996: Correzione di alcuni errori


  2.  Come impostare un Linux box senza avere unit a disco

  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.


  3.  Altra documentazione


    NFS-root Mini Howto

    Linux NET-2/3-HOWTO a cura di Terry Dawson,
     94004531@postoffice.csu.edu.au

    /usr/src/linux/README configurazione e compilazione di nuovi kernel


  4.  Hardware

  Tutto ci che  descritto nel documento  stato provato con la
  configurazione seguente:

    Sun-OS 4.1.3 come boot server

    Slackware 2.3 + Linux 1.2.8 + wd 8013 ethercard.

    Una LAN Ethernet funzionante


  5.  Idee basilari

  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. (-- 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.--)

  Seguite i passi indicati:




  5.1.  Impostazione del PC

  Prendete il pacchetto nfsboot (il pacchetto  disponibile su diversi
  mirror, nella directory /pub/Linux/system/Linux-boot.  Nfsboot
  contiene un'immagine booteprom della scheda wd8013 che pu essere
  programmata direttamente nella EPROM.

  Ci sono anche metodi alternativi per preparare il PC:

     Se la vostra macchina ha una qualche unit disco, allora 
     possibile usare un programmino DOS oppure

    l'immagine binaria per floppy contenuta nel pacchetto
     precedentemente indicato.

  Se preferite adottare la seconda soluzione allora dovete scrivere
  l'immagine su un floppy utilizzando il comando dd

  Queste immagini contengono un client bootp ed uno tftp. Dovete
  preparare un Linux kernel che supporti l'opzione nfs-root.

    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  (-- Fate riferimento a patch(1)--)

    Se decidete di usare l'ultimo kernel della serie linux-1.3.x,
     allora sar necessario configurare l'opzione nfs-root.

  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.



  5.2.  Impostazione di bootpd sul server

  Bootpd pu essere reperito nel pacchetto bootpd-2.4.tar.gz
  (disponibile nella directory /pub/Linux/system/Network/boot.net 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



       ______________________________________________________________________
               bootpd -s
       ______________________________________________________________________




  oppure usando inetd. In questo caso avete bisogno di editare:

    /etc/inetd.conf per rimuovere il simbolo hash (#) dall'inizio di
     queste righe:



       ______________________________________________________________________
       # tftp   dgram   udp     wait    root    /usr/sbin/in.tftpd     tftpd /export
       # bootps dgram   udp     wait    root    /usr/sbin/in.bootpd    bootpd
       ______________________________________________________________________

    inserite o decommentate le seguenti due linee in /etc/services:



       ______________________________________________________________________
       bootps          67/tcp          # BOOTP server
       tftp            69/udp          # TFTP server
       ______________________________________________________________________





    riavviate inetd con



       ______________________________________________________________________
               kill -HUP <id del processo inetd>.
       ______________________________________________________________________





  5.3.  Configurazione di bootpd sul server.

  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:


       ______________________________________________________________________

       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:
       ______________________________________________________________________




  global.prof  un modello generale per le entrate host, dove

    il campo sm contiene il subnet mask

    il campo ds contiene l'indirizzo del Domain Name Server

    il campo gw contiene l'indirizzo del gateway predefinito

    il campo ht contiene il tipo di hardware LAN

    il campo bf contiene il nome del file di avvio

  Inoltre ogni macchina deve avere una linea:

    il primo campo contiene il nome dell'host,

    il campo hd contiene la directory del file di avvio,

    il modello globale pu essere incluso con il campo tc,

    il campo ha contiene l'indirizzo hardware della scheda ethernet,

    il campo ip contiene l'indirizzo IP assegnato.



  5.4.  Capire tftp

  TFTP (Trivial File Transfer Protocol)  un protocollo per il
  trasferimento di file, come ftp, ma molto pi semplice da codificare
  nelle EPROM. TFTP pu essere usato in due modi:

    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).

    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: /export/root/machine1.  Quando invece si usa il tftp
     sicuro con /export come directory di root, /export diviene / ed il
     campo hd deve essere /root/macchina1.

     Quasi tutte le implementazioni di Unix contengono il server tftp,
     probabilmente non ci sar bisogno di installarne uno.


  5.5.  Impostazione di una configurazione minimale di Linux su un
  server remoto.

  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:








  ______________________________________________________________________
  /export/linux/macchina1/bin
  /export/linux/macchina1/sbin
  /export/linux/macchina1/lib
  /export/linux/macchina1/etc
  /export/linux/macchina1/var
  /export/linux/macchina1/usr
  ______________________________________________________________________




  Dopo i cambiamenti la struttura diventer:


       ______________________________________________________________________
       /export/linux/macchina1/bin
       /export/linux/macchina1/sbin
       /export/linux/macchina1/lib
       /export/linux/macchina1/etc
       /export/linux/macchina1/var
       /export/linux/usr
       ______________________________________________________________________




  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


       ______________________________________________________________________

               cd /export/linux
               for x in macchina2 macchina3 ; do
                       mkdir $x; cd $x
                       (cd ../macchina1; tar cf - *) | tar xvf -
               done
       ______________________________________________________________________





  Poi create il seguente export:

    /export/linux/usr               sola lettura per tutti.

    /export/linux/macchina1         solo alla macchina1 con diritti
     rw,root.

    /export/linux/macchina2         solo alla macchina2 con diritti
     rw,root.

    /export/linux/macchina3         solo alla macchina3 con diritti
     rw,root.

     nel modo seguente (--  il formato di questo esempio  conforme alla
     sintassi del SunOs 4.1.3 per i file exports--) :





  ______________________________________________________________________

  # 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
  ______________________________________________________________________




  Non dimenticate di eseguire exportfs -a.


  5.6.  Configurazione del server tftp


   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.

  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:


       ______________________________________________________________________
             mkdir -p /tftpboot/export/linux/macchina1
             cd /tftpboot/export/linux/macchina1
             cp /export/linux/macchina1/<nome del kernel> .
       ______________________________________________________________________




  In seguito digitate:



       ______________________________________________________________________
             mkdir -p /tftpboot/export/linux/macchina2
             cd ../macchina2
             ln -s ../macchina2/<nome del kernel>
       ______________________________________________________________________





  5.7.  Parte finale


  Infine dovete inserire




  ______________________________________________________________________
     /sbin/mount nfs_server:/export/linux/usr /usr
  ______________________________________________________________________




  come prima linea di



       ______________________________________________________________________
          /export/linux/<macchinax>/etc/rc.d/rc.S
       ______________________________________________________________________




  dove <macchinax> sta per macchina1, macchina2, ecc.


  6.  Requisiti relativi alla memoria e allo spazio su disco; velocit


  Io ho provato questo metodo solo con la Slackware 2.3; per altre
  distribuzioni/versioni i numeri seguenti possono cambiare.

    Spazio su disco: 28MB + 6.5MB/per ogni macchina

    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.

    Velocit: non ho avuto problemi con un 486 DX2/66 con 8 mega di
     RAM.


  7.  Problemi



    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.).

    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:

    configurare a mano ogni rc.S per ogni macchina

    usare un client bootp e scrivere uno script di configurazione
     generalizzato


  8.  Errori e possibili ulteriori espansioni di questo documento



    Elenco corretto degli altri documenti disponibili

    SunOs  basato su BSD. Inclusione della configurazione del server
     basato su SVR4 (cio Solaris)

    Nonostante Linux sia abbastanza simile a SunOs come server
     bootp/tftp, un esempio di server basato su Linux potrebbe essere
     utile.

    Aggiornamento di questo documento al pacchetto etherboot corrente.

    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.

    Necessit di provare altre schede ethernet oltre alla wd8013

    Aggiunta delle informazioni di configurazione per bootpc, un client
     bootp per Linux utile ad impostare le tabelle di instradamento
     corrette.

    Refusi ed altri errori: per favore segnalateli a buci@math.klte.hu.
     Grazie.












































