## Teoria del funzionamento

L'avvio di un "thin client" prevede diversi passi. Comprendere cosa accade durante tutto il processo rende molto più semplice risolvere gli eventuali problemi che possono insorgere.

I servizi di base necessari per l'avvio di un "thin client" LTSP sono quattro:

- DHCP

- TFTP

- NFS

- SSH

### L'ambiente chroot di LTSP

Per poter trasformare un computer in un "thin client", è necessario eseguire una versione ridotta di GNU/Linux sulla workstation. Bisogna perciò avviare questa versione ridotta di GNU/Linux attraverso la rete, poiché probabilmente il computer sarà privo di un proprio disco fisso. Questa installazione ridotta di GNU/Linux deve trovarsi da qualche parte, e il posto più indicato è sul server.

Questa versione ridotta di GNU/Linux, creata per permettere un avvio efficiente attraverso la rete, è chiamata l'ambiente chroot. È possibile averne molti, in base ai diversi tipi di architettura della CPU. Vengono normalmente archiviati sul server nella directory `/opt/ltsp`, con una sottodirectory per ogni architettura. Per esempio, in un laboratorio composto di Mac Power PC e di vecchi PC, saranno presenti le directory `/opt/ltsp/ppc` e `/opt/ltsp/i386`.

### Il processo di avvio di un thin client

1. Caricare il kernel Linux nella memoria del "thin client". È possibile farlo in diversi modi, tra cui:

   1. Bootrom (Etherboot,PXE)

   2. Dischetto

   3. Disco fisso

   4. CD-ROM

   5. Dispositivi di memoria USB

   Ognuno dei metodi di avvio precedenti verrà spiegato in questo capitolo.

2. Una volta caricato il kernel nella memoria, inizierà l'esecuzione.

3. Il kernel inizializzerà il sistema e tutte le periferiche riconosciute.

4. Ora arriva la parte veramente interessante: durante il caricamento del kernel, viene caricata in memoria anche un'immagine "initramfs".

5. Normalmente, quando il kernel finisce l'avvio, lancia il nuovo gestore di eventi upstart, che si occupa di avviare un server o una workstation. In questo caso, il kernel carica un piccolo script shell chiamato /init che risiede alla radice dell'initramfs.

6. Lo script /init comincia montando i filesystem /proc e /sys, avvia udev per cercare e inizializzare l'hardware, specialmente le schede di rete, necessario a ogni aspetto dell'avvio da ora in avanti. Allo stesso tempo, crea un piccolo "ram disk" in cui poter scrivere le configurazione locali necessarie (per esempio la configurazione del `xorg.conf`).

7. L'interfaccia di loopback è configurata. Questa è l'interfaccia di rete che ha come indirizzo IP 127.0.0.1.

8. Viene ora eseguito un piccolo client DHCP, chiamato ipconfig, per effettuare un'altra richiesta al server DHCP. Questa richiesta, effettuata a livello utente, ottiene le informazioni contenute nel file dhcpd.conf, come il server nfs di root, il gateway predefinito e altri importanti parametri.

9. Quando ipconfig ottiene un risposta dal server, le informazioni ricevute sono usate per configurare l'interfaccia ethernet e determinare da quale server montare via NFS la root.

10. Fino a questo momento, il filesystem di root è stato il "ram disk". Ora, /init monterà il nuovo filesystem di root via NFS. La directory esportata dal server è, nelle configurazioni standard, /opt/ltsp/i386. Non può montare il nuovo filesystem direttamente come /, deve essere prima montato come /root. Poi, eseguendo run-init, si effettua la transizione dall'attuale filesystem di root a un nuovo filesystem. Una volta terminato, il filesystem NFS viene montato come /. A questo punto, ogni directory su cui servono permessi di scrittura per un avvio regolare, come /tmp o /var, viene montata.

11. Una volta completato il montaggio del nuovo filesystem di root, lo script /init ha terminato il suo compito ed è ora necessario avviare il vero programma /sbin/init.

12. Il programma init leggerà la directory `/etc/event.d` e avvierà la configurazione dell'ambiente per il "thin client". Da ora, upstart comincerà a leggere i comandi di avvio presenti in `/etc/rcS.d`.

13. Eseguirà il comando S32ltsp-client-setup per configurare molti degli aspetti dell'ambiente del "thin client", come la scheda video presente sul computer, ecc...

14. Il programma init avvierà l'esecuzione dei comandi presenti nella directory `/etc/rc2.d`

15. Uno dei comandi presenti in `/etc/rc2.d` è S20ltsp-client, che viene eseguito mentre il "thin client" si avvia.

16. Viene quindi letto il file `lts.conf` e tutti i parametri relativi al particolare "thin clinet" verrano impostati come variabili d'ambiente per lo script S20ltsp-client.

17. Se l'audio viene configurato, il demone pulseaudio è avviato per permettere le connessioni audio dal server sul "thin client".

18. Se il "thin client" dispone del supporto per i dispositivi locali, viene avviato il programma ltspfsd per consentire al server di leggere da dispositivi come schede di memoria e CD-ROM collegati al "thin client".

19. Se le applicazioni locali sono abilitate, viene montata la directory /home così che le applicazioni possano accedere le directory degli utenti.

20. A questo punto, qualsiasi sessione video definita nel file `lts.conf` viene eseguita.

    Le sessioni video indicano cosa avviare sugli schermi virtuali del terminale. Questi sono quelli predefiniti di GNU/Linux, da Alt+F1 fino a Alt+F10.

    In modo predefinito, viene avviato getty sullo schermo 1 (SCREEN_01 nel file `lts.conf`).

    Se non viene specificato altro nel file `lts.conf`, viene avviato lo script ldm su SCREEN_07. Il gestore di accesso predefinito per LTSP è «LTSP Display Manager» (ldm).

21. Se SCREEN_07 è impostato a ldm o startx, viene avviato lo «X Window System», fornendo un'interfaccia grafica.

    Il server Xorg rileva automaticamente la scheda, crea un file `/etc/X11/xorg.conf` sul "ramdisk" nel terminale e avvia xorg con quella configurazione.

22. Il server X avvia un tunnel ssh sul server nel caso di ldm o un'interrogazione XDMCP al server LTSP nel caso di startx. In ogni caso viene presentata una schermata di accesso sul terminale.

23. A questo punto l'utente può effettuare l'accesso ottenendo una sessione sul server.

    Tutto questo confonde molte persone all'inizio. Si usa un "thin client" ma la sessione è eseguita sul server. Tutti i comandi vengono eseguiti sul server, ma l'output è mostrato sul "thin client".

### Avviare il thin client via rete

Avviare il "thin client" attraverso la rete può essere fatto in diversi modi.

- ROM di boot

- Dispositivo locale

#### ROM di boot

In base alla propria scheda di rete, potrebbe già contenere una ROM di boot o potrebbe essere possibile utilizzare una EPROM programmabile. Controllare la documentazione della propria scheda di rete.

##### Etherboot

Etherboot è un progetto opne source di "bootrom". Dispone di molti driver per le più comuni schede di rete e funziona molto bene con LTSP.

Immagini ROM utilizzabili per eseguire il boot da un dischetto, CD-ROM, ecc.., si possono ottenere da http://www.rom-o-matic.org

I kernel Linux devono essere "etichettati" con il comando mknbi-linux, che prepara il kernel all'avvio via rete aggiungendo al kernel del codice e inserendo in coda al kernel stesso l'initrd.

I kernel forniti con Edubuntu/LTSP sono già "etichettati" e pronti per l'avvio con Etherboot.

##### PXE

All'interno della specifica "Wired for Management" degli anni '90, era indicata una specifica per una tecnologia di "bootrom" denominata Pree-boot Execution Environment, abbreviata in PXE.

Una "bootrom" PXE può caricare al massimo file di 32 Kb. Un kernel Linux supera questa dimensione, per questo, PXE viene configurato per caricare il secondo stadio del boot loader chiamato pxelinux. pxelinux è della dimensione giusta per essere caricato ed è in grado di caricare file più grandi come il kernel Linux.

#### Dispositivo locale

Se la scheda di rete sul "thin client" non dispone di una ROM integrata e non si dispone di un dispositivo per programmare EPROM, è molto probabile che il computer abbia un driver floppy o un CD-ROM. In questo modo è possibile utilizzare il dispositivo locale per eseguire l'avvio.

##### Disco floppy

Avviare Etherboot da un disco floppy è un ottimo metodo di avvio per un "thin client" LTSP che non dispone di una ROM di boot. Etherboot viene caricato nel settore di avvio del floppy, svolgendo quindi il ruolo di una "bootrom". Il codice di avvio viene eseguito, la scheda di rete inizializzata e il kernel caricato dal server.

##### Disco fisso

Il disco fisso può essere utilizzato con LILO o GRUB per caricare il kernel e l'immagini di initrd. È comunque possibile caricare la "bootrom" Etherboot dal disco fisso, svolgendo così il ruolo di una "bootrom".

##### CD-ROM

Un CD-ROM di avvio può essere caricato sia con un kernel Linu, sia con un'immagine Etherboot.

##### Dispositivi di memoria USB

È possibile utilizzare un dispositivo di archiviazione USB per avviare un modulo Etherboot, proprio come con un CD-ROM, un disco floppy o un disco fisso.

Requisiti hardware |  | Personalizzare il comportamento del thin clinet