mercoledì 9 aprile 2008

LTSP tips & tricks

In questo post voglio svelare qualche piccolo trucchetto nell'impostazione del sistema LTSP su Ubuntu Gutsy che ho scoperto sulla mia pelle perdendoci molto tempo e prendendomi molte arrabbiature (e anche purtroppo qualche improperio dai clienti;-)). Alcuni sono farina del mio sacco, altri si scoprono frugando qua e la nel web, dispersi magari in qualche oscuro forum o bug report. Per questo credo sia utile metterli assieme tutti in una volta. Li dividerò in due tipi: quelli che risolvono problemi gravi e quelli che portano semplicemente qualche miglioramento al sistema.



Soluzioni a problemi gravi:

1 - Il problema del syslog

Forse non tutti sanno che quando il demone syslog è abilitato a ricevere i log dalla rete (opzione "-r") esegue una risoluzione inversa per ogni log che gli viene inviato dai client. Già di per se la cosa non è bellissima, poichè in una tale situazione non è difficile effettuare dei denial of service semplicemente bombardando di richieste il server dns a cui si appoggia il syslogd. A questo si aggiunga che, nella configurazione che ho suggerito in questo blog, è il demone dnsmasq che si occupa di rilasciare gli indirizzi dhcp e di fornire la risoluzione diretta e inversa per i nomi macchina. In qualche caso può succedere un vero casino (è successo davvero): un client prende l'indirizzo ma NON un nome macchina, quindi la risoluzione inversa non funziona. Il client invia i log al syslog server, il quale per ogni log chiede a dnsmasq la risoluzione inversa. Nel frattempo anche dnsmasq però cerca di scrivere le sue cose in syslog. In questa situazione può succedere che syslog resta appeso in attesa di una risposta da dnsmasq e dnsmasq resta appeso in attesa che syslog gli accetti i log. Morale: non funziona più nulla, il dhcp non rilascia più indirizzi, il dns non risolve più nulla. La rete in breve diventa inutilizzabile. Il problema è anche documentato nelle faq di dnsmasq. Le possibili soluzioni sono 2:

  • Aggiungo alla configurazione di dnsmasq (solo dalla versione 2.39) l'opzione "log-async=n" (dove n sta per il numero di righe di log tenute in coda, default=5, max=100).

  • Sostituisco il demone syslog di sistema con un processo dove sia possibile disabilitare la risoluzione inversa: syslog-ng. Sui sistemi basati su debian è sufficiente utilizzare il comando "apt-get install syslog-ng" e automaticamente verrà rimosso il vecchio syslog e installato quello nuovo. Successivamente si edita il file /etc/syslog-ng/syslog.conf e si abilita la ricezione dei log da rete abilitando la riga "#udp();" che di default è quotata. La risoluzione inversa invece è già disabilitata di default. Per finire si lancia "/etc/init.d/syslog-ng restart". Non c'è nemmeno bisogno di far ripartire la macchina.


Ovviamente nulla vieta che si implementino ambedue le soluzioni.

2 - Persistenza dei file di swap gestiti dal demone nbdswap

Quando nel file lts.conf è abilitata l'opzione NBD_SWAP=True, per ogni client con memoria RAM inferiore a 48 Mb viene creato un file di swap sul server, gestito dal demone nbdswapd. Il problema è che spesso questi processi non vengono normalmente terminati e tendono ad accumularsi. La soluzione è molto semplice: si aggiunge la riga "nbdswapd: ALL: keepalive" al file /etc/hosts.allow.
In configurazione di default dopo due ore di inattività tutti i processi residui nbdswapd verrano terminati automaticamente.

3 - Persistenza di processi utente

In molti casi sul server restano attivi dei processi di utenti non più loggati. Questo accade ad esempio in caso di crash del thin client. Molte volte è necessario un intervento di un utente con privilegi amministrativi per terminare a mano i processi residui altrimenti l'utente non è più nemmeno in grado di accedere al suo desktop. La soluzione in questo caso si chiama gnome-watchdog. Una volta installato, il demone controlla che ci sia veramente una sessione attiva e, in caso contrario, fa pulizia dei processi residui. Creando il file vuoto "/etc/check_previous_login" è possibile anche forzare un check al momento del login: se ci sono processi già attivi mentre un utente fa il login compare un avviso attraverso il quale è possibile scegliere di terminare i processi già esistenti. L'unico limite è che gnome-watchdog funziona solo con Gnome (era intuibile). Che sia uno strumento valido lo dimostra il fatto che è già inserito nei repository di Ubuntu 8.04 (Hardy). Consigliata comunque la lettura del README.

4 - Risoluzione dello schermo

Frequentemente all'avvio del thin client viene riconosciuta correttamente la scheda video ma poi non vengono correttamente identificate le frequenze supportate dal monitor. Si ottiene quindi una risoluzione di default di 800x600 senza la possibilità di modificarla.
La soluzione consiste nel ottenere i corretti valori di vsync e hsync del monitor (dalla documentazione o cercando sul web) e inserirli nella sezione dedicata allo specifico thin client nel file lts.conf, in questo modo (esempio usato per monitor Samsung SyncMaster 757p):

[mac_address_del_client]
X_HORZSYNC = 30-96
X_VERTREFRESH = 50-160


In genere dopo questa aggiunta si torna ad avere la possibilità di impostare tutte le risoluzioni consentite dall'accoppiata scheda video/monitor.

Piccoli miglioramenti:

5 - irqpoll

Talvolta nei log di sistema compaiono errori di questo tipo generati da qualche client:

irq 21: nobody cared!

seguiti da uno stack trace. Il più delle volte non succede nulla, ma ho il sospetto che taluni crash improvvisi accaduti ai thin client possano essere legati a questo. L'aggiunta dell'opzione irqpoll al boot dei thin client risolve questo problema a scapito di un lieve scadimento delle prestazioni del thin client stesso. Ma il thin client deve essere innanzitutto stabile, quindi secondo me il gioco vale la candela.
Per aggiungere questa opzione si edita il file /var/lib/tftpboot/ltsp/i386/pxelinux.cfg/default e si aggiunge l'opzione "irqpoll" alla fine della riga in modo da ottenere qualcosa di simile a questo:

DEFAULT vmlinuz ro initrd=initrd.img quiet splash irqpoll

6 - .gnomerc

Questo non è un suggerimento specifico per ltsp ma vale in realtà per Gnome, lo riporto qua perchè non è sempre documentatissimo e, tempo fa, ci avevo messo un po' a trovarlo.
In pratica in ambiente gnome su Ubuntu le variabili di ambiente non vengono caricate al login dai soliti file .bashrc e .bash_profile, bensì dal file .gnomerc.
E' utile saperlo perchè su una macchina multiutente, come appunto un server LTSP, può essere importante poter settare, per esempio, dei valori di umask diversi dal default in modo da poter utilizzare i privilegi di gruppo oltre a quelli utente (es. "umask 002" fa in modo che i file creati abbiano i permessi settati su 664 - -rw-rw-r-- ) e che siano quindi leggibili e modificabili da altri utenti dello stesso gruppo.

7 - Disabilitare ipv6

Può essere utile disabilitare IPV6 per aumentare le prestazioni di rete. Rimando a questo link per le istruzioni su come fare. La particolarità per ltsp è che queste operazioni noi le dobbiamo fare una prima volta sul server e una seconda volta in ambiente chroot*, eseguendo alla fine il comando ltsp-update-image.

8 - Preferenze di firefox

Esiste un sistema per forzare le preferenze di firefox (es. proxy, pipelining etc.) una volta sola e per tutti gli utenti. Nel file /etc/firefox/pref/firefox.js vengono inserite le preferenze che saranno valide di default per tutti gli utenti del sistema.
Per esempio, rifacendosi al punto 7, per disabilitare di default IPV6 in firefox si edita /etc/firefox/pref/firefox.js e si aggiunge questa riga:

pref("network.dns.disableIPv6", true);

8 - Timezone e ora di sistema


Trovo abbastanza fastidioso avere dei thin client con l'ora diversa dal server. E' un problema di poco conto poichè ci si accorge di questo solamente loggandosi via ssh o via console nel sistema operativo del thin client, mentre l'utente lavora in Gnome utilizzando l'ora del server.
Sistemare l'orario dei thin client è semplice: si entra in ambiente chroot* e si esegue il comando:

dpkg-reconfigure tzdata

per settare la timezone corretta. Dopodichè per fare in modo che i thin client abbiano lo stesso orario del server si imposta il valore UTC in /etc/default/rcS esattamente come è settato sul server.
Per essere sicuri di avere sempre l'ora giusta in tutta la rete io in genere attivo un servizio ntpd (può risiedere anche sullo stesso ltsp server), sincronizzato su timeserver remoti, mentre per i thin client aggiungo in /etc/rc.local (sempre in ambiente chroot*) le seguenti righe:

/usr/sbin/ntpdate <ip del server ntpd>
/sbin/hwclock --systohc --localtime


prima di exit0, in modo che il thin client faccia una sincronizzazione con il timeserver di rete all'avvio e subito dopo configuri anche l'orologio hardware (RTC).
Ovviamente bisogna ricordarsi alla fine di eseguire ltsp-update-image

* Per chi non avesse idea di che cosa è "l'ambiente chroot" rimando ad un precedente post su ltsp.

3 commenti:

  1. Mitico! Peccato che alcune cose siano solo per gnome. Io sto smanettando su ltsp kubuntu e per alcune cose (per esempio thin-client-manager-gnome) è molto più limitato che non utilizzando gnome.
    Se hai qualche consiglio anche per kde non esitare a scriverle! Sto comunque scrivendo qualche articolo anch'io sul mio blog. Magari quando sarà abbastanza completo ti passo il link.

    RispondiElimina
  2. come posso fare per configurare un gruppo di utenti con umask 002 in un server ubuntu ltsp?

    non riesco ad individuare il file .gnomerc

    grazie per la collaborazione

    RispondiElimina
  3. Lo devi creare tu nella home dell'utente, di default non c'è.

    RispondiElimina