21 dicembre, 2006

Ltsp 4.2

Ltsp (linux terminal server project) è un progetto che permette di utilizzare vecchi computer anche senza disco e con poca ram come terminali in grado di connettersi ad un server (terminal server) e di avviarsi via rete. Il server compie tutte le operazioni "costose " in termini di processore e di ram ed il client semplicemene visualizza il risultato. E' possibile avviare intere sessioni di X compreso gnome, openoffice, firefox e tutto il resto utilizzando questo sistema. In questo post spiegherò passo passo come fare ad installare un terminal server utilizzando la versione 4.2 di ltsp. In un prossimo post vi spiegherò come installare la nuova versione presente anche nei repository ubuntu e le differenze con la 4.2.

Di cosa ho bisogno?

Prima di procedere è necessario scaricare dal sito ufficiale di ltsp http://wiki.ltsp.org/twiki/bin/view/Ltsp/LTSP-42 il pacchetto ltsp-utils_0.25_all.deb che è l'ultima versione nel momento in cui sto scrivendo questo post. Installiamo il pacchetto con:

sudo dpkg -i ltsp-utils_0.25_all.deb
Quindi installiamo tutti gli altri pacchetti necessari direttamente dal repository ubuntu:
  • dhcp3-server
  • dhcp3-common
  • tftpd-hpa
  • nfs-kernel-server
  • xinetd
  • libwww-perl

Installazione

Dopo aver installato tutti i pacchetti necessari, lanciamo da root il comando ltspadmin Seguiamo il wizard fino alla fine. Un altro comando utile è ltspcfg che ci permette do controllare lo stato dei servizi necessari e di impostare la configurazione di base. Assicuriamoci che le impostazioni della rete e i percorsi siano corretti nel file di configurazione del server dhcp /etc/dhcp3/dhcpd.conf. A questo punto dobbiamo assicurarci che tutti i servizi siano attivi. Quindi attiviamo il server dhcp, il servizio portmap necessario ad nfs, nfs. Per abilitare il servizio tftp creiamo il file /etc/xinet.d/tftp con questo contenuto:
service tftp
{
disable = no
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot
}

e riaviamo il servizio xinet.
Dobbiamo abilitare inoltre il servizio xdmcp. Per farlo se usiamo gdm dobbiamo editare il file /etc/gdm/gdm.conf cercare la sezione [xdmcp] e impostare enable su true. Quindi riavviamo gdm.

Come avviene il boot?

Di seguito spiegherò come avviene il boot usando il PXEclient della scheda di rete. Il client cerca un server dhcp nella rete. Il server dhcp oltre a fornire un ip al client, gli fornisce alcuni parametri necessari per effettuare il boot. Tra questi c'è un root-path che vedremo dopo a cosa serve, e il percorso al linux loader pxelinux. A questo punto il client carica il piccolo loader il quale a sua volta carica il kernel linux. I parametri del loader si trovano nel file /tftpboot/lts/[versione-kernel]/pxelinux.cfg/default Tra i parametri abbiamo root=/dev/ram0 e initrd=initramfs.gz. Ciò significa che non appena il kernel ha finito di avviarsi carica il il file initramfs.gz in ram, lo decomprime (è un archivio cpio compresso con gzip) e lancia il file linuxrc o init. In questo caso non essendo presente il file linuxrc lancia init che è uno script shell. Per vedere il contenuto di questo script bisogna decomprimere l'archivio in questo modo:
* gunzip initramfs.gz
* cpio -i -d -I initramfs
L'ultimo comando ricostrurà un albero delle directory stile unix. Lo script init presente nella radice dell'albero oltre ad altre operazioni, cerca per vedere se l'opzione root-path è stata fornita dal server dhcp, dando un errore altrimenti. Se l'opzione è presente e sia ad esempio:
option root-path              "192.168.50.1:/opt/ltsp/i386";
il percorso specificato verrà montato via nfs e dopo qualche altro comando, la directory sulla quale è stato montato diventerà la nuova root.

A questo punto il file importante è /opt/ltsp/i386/etc/lts.conf che nel mio caso è sotto la forma:
[Default]
SERVER = 192.168.50.1
XSERVER = auto
X_MOUSE_PROTOCOL = "PS/2"
X_MOUSE_DEVICE = "/dev/psaux"
X_MOUSE_RESOLUTION = 400
X_MOUSE_BUTTONS = 3
USE_XFS = N
SCREEN_01 = startx
SCREEN_02 = shell
In pratica questo file viene utilizzato dallo script /opt/ltsp/i386/etc/rc.sysinit per lanciare il server X (client per l'xdmcp che gira sul terminal server) o una sessione telnet o altro. Nel mio caso ho aggiunto la variabile SCREEN_02 = shell che lancia una shell (busybox) direttamente sul thin client (non associata in alcun modo al terminal server). In questo modo su un terminale virutale ho la shell e sull'altro il server x
I valori associati alle variabili SCREEN sono degli script presenti nella directory /opt/ltsp/i386/etc/screen.d/

Nessun commento:

Posta un commento