Corso avanzato di LTSP
Transcript
Corso avanzato di LTSP
Faber – Corsi avanzati Corso avanzato di LTSP Andrea Della Regina <[email protected]> Associazione di Promozione Sociale Faber Libertatis - http://faberlibertatis.org/ introduzione Linux Terminal Server Project (LTSP) è una tecnologia che permette ad un server Linux di supportare una rete di thinclient e/o terminali X. Per thin-client si indica un PC a basso costo, basse prestazioni e basso consumo generalmente senza disco fisso e/o memorie di massa (diskless). Per terminale X si indica un PC, generalmente recuperato, il quale sfrutta un server grafico X in rete per l'esecuzione di applicazioni grafiche. In quanto terminale la risorsa computazionale è quasi interamente delegata al server centrale. LTSP: per cosa si usa L'utilizzo di LTSP è consigliato nel caso si intenda realizzare uno dei seguenti scenari: ● un'aula scolastica e universitaria; ● un'internet point; ● sviluppo in gruppo su di un sistema centrale. Tutti questi scenari prevedono: ● una rete di PC usata da molti utenti; ● condivisione della risorsa internet, stampanti etc; ● l'utilizzo da parte di tutti gli utenti degli stessi software; ● limitato utilizzo di applicazioni multimediali. LTSP: per cosa NON si usa L'utilizzo di LTSP è sconsigliato nei seguenti scenari: ● postazioni stand-alone; ● largo uso di applicazioni multimediali; ● postazioni di editing audio/video; ● uso di webcam, scanner, masterizzatori; ● visualizzazione di video/DVD; ● trasferimento di grosse quantità di dati dai client server centrale. LTSP: cosa serve Hardware: ● un server sufficientemente dimensionato; ● thin-client o PC recuperati (PI, PII con 64/128 Mbyte di RAM, con scheda di rete bootable, altrimenti floppy, CDROM o piccolo hard-disk; ● switch almeno 100 Mbps; ● cablaggio di rete (categoria 5e); ● connessione ad internet (opzionale). Software: una distro predisposta (Edubuntu, K12ltsp) oppure: ● distro generica (Debian, Ubuntu); ● servizi DHCPD, TFTPD e NFD; ● server X e desktop manager (XDM, GDM, KDM); ● ltsp-utils e ISO LTSP; ● ltspfsd (opzionale). LTSP: dimensionare il server Il server è in genere assieme allo switch il principale Single Point Of Failure (SPOF) di una rete LTSP, quindi si deve avere la massima attenzione al suo dimensionamento/scelta. Deve avere: ● CPU sufficientemente veloce (da PIV 3GHz in su); ● RAM almeno 512 Mbyte+(50 Mbyte*num. client); ● due dischi fissi da almeno 80 Gbyte con RAID 1 software o hardware (controller); ● una o più schede di rete da 100/1000 Mbps. Se si dispone della connessione a Internet meglio destinare una scheda di rete per collegare il server al router. LTSP: facile o difficile? L'installazione/configurazione di una rete LTSP è una cosa alla portata di un utente medio di Linux o alta materia da geek? Probabilmente seguendo le istruzioni o utilizzare una distro specifica per l'LTSP non presenta grosse complicazioni. I problemi possono venire dalla difficoltà di capire perché non funziona ed eseguire un corretto troubleshooting. Per avere supporto in questo bisogna avere ben chiara la dinamica del funzionamento di un LTSP. Per questo si affronta l'avvio standard di un sistema Linux e lo si confronta con l'avvio di un client LTSP. l'avvio di Linux da hard disk Il seguente schema descrive l'avvio di un sistema Linux da hard disk con sequenza di boot del BIOS Floppy-CDROM-HD e schema di partizionamento del disco hda1=>/boot, hda5=>swap, hda6=>/, hda7=>/home. L'avvio di Linux si compone delle seguenti macro-fasi: ● BIOS (POST e sequenza di boot); ● Linux Loader (GRUB o LILO); ● Kernel (kernel land) ● Init (user land). l'avvio di Linux: fase BIOS Il Basic Input/Output System (BIOS) è il firmware della scheda madre del PC ed è contenuto in una memoria ROM ed eseguito all'avvio/reset del sistema. Il programma prevede senza intervento da parte dell'utente di eseguire le seguenti fasi: ● Power On Self Test (POST), in cui verifica la sanità del sistema; ● sequenza di boot, in cui verifica quale, tra i vari dispositivi, nell'ordine fissato nella memoria CMOS, contenga un settore di avvio. l'avvio di Linux: fase Loader Nel nostro esempio il BIOS non ha trovato nessun settore di avvio né nel floppy, né nel CDROM ma invece l'ha trovato nel Master Boot Record (MBR) dell'hard-disk hda. L'MBR è il primo settore di 512 Byte del disco e contiene lo stage 1 del Linux Loader (e.g. GRUB), viene dunque caricato in RAM ed eseguito. Il suo compito è di indicare la posizione e di caricare in memoria lo stage 1.5 e 2 del Loader che si trova nel nostro caso nella partizione hda1. Una volta caricato gli stage 1.5 e 2, GRUB è in grado di capire il contenuto della partizione, di leggere il suo file di configurazione e visualizzare lo splash-screen a video. l'avvio di Linux: fase Kernel GRUB, sulla base di una configurazione automatica e di una nostra scelta, può far partire un kernel Linux o un altro sistema operativo. L'opzione avviata può essere ad esempio del tipo: root (hd0,0) kernel /vmlinuz-2.6.xxx root=/dev/hda6 ro quiet splash initrd /initrd.img-2.6.xxx Sapendo che hd0,0 corrisponde per GRUB alla partizione hda1=>/boot, questa provoca l'avvio del kernel che si trova in /boot/vmlinuz-2.6.xxx ed il caricamento dell'init RAM disk contenuto in /boot/, il quale contiene un root file system temporaneo con i moduli necessari gestire il disco fisso ed il file system della partizione di root effettiva (hda5=>/). l'avvio di Linux: fase Init Una volta che il kernel è in grado di montare il root file system (hda6=>6), può leggere il file di configurazione /etc/fstab per montare le altre partizioni (e.g. hda7=>/home). Conclusa la sua fase inizializzazione il kernel lancia il primo processo applicativo, con PID 1, cioè il programma /sbin/init il quale esegue l'inizializzazione del sistema sulla base del contenuto del file /etc/inittab. l'avvio di Linux da rete: il netboot Cosa c'è di diverso nell'avvio di Linux in un client LTSP? Il BIOS passa il comando ad un boot ROM che può essere contenuto in un chip della scheda di rete oppure in un floppy, in un CDROM o in un hard-disk al pari di un kernel. Nel primo caso è necessario che non solo la scheda disponga della boot ROM, ma che lo stesso BIOS preveda il boot da scheda di rete. In genere le schede di rete che prevedono nativamente il boot supportano l'ambiente Preboot eXecution Environment (PXE). Il progetto Etherboot fornisce un diverso ambiente liberamente scaricabile nei formati necessari all'avvio da floppy, CD o HD. l'avvio di Linux da rete: il DHCP Cosa fa la boot ROM? Interroga in rete un server DHCP per ottenere le informazioni necessarie alla gestione della rete (indirizzo IP, maschera di rete etc.), a dove prelevare il kernel e l'indirizzo del disco in rete con il file system di root. Ad esempio: ● IP Address: 192.168.1.100; ● Subnet mask: 255.255.255.0; ● Default gateway: 192.168.1.1; ● Filename: 192.168.168.1.1:/tftpboot/lts/vmlinuz-2.6.16.1ltsp-1; ● Root path: 192.168.1.1:/opt/ltsp/i386. l'avvio di Linux da rete: il TFTP DHCP dice alla boot ROM dove si trova il kernel, ma come fa a riceverlo per eseguirlo? L'informazione filename recuperata dal server DHCP viene usata per interrogare un server TFTP (Trivial File Transfer Protocol). Il TFTP è una versione molto semplificata del più conosciuto FTP in quanto non richiede la gestione dell'utente ed è quindi implementabile anche nel firmware di una scheda di rete. Nel nostro esempio la boot ROM richiede il file /tftpboot/lts/vmlinuz-2.6.16.1-ltsp-1 al server TFTP all'indirizzo IP 192.168.50.1. l'avvio di Linux da rete: l'NFS Una volta caricato il kernel, trasferito via rete, come viene caricato il file system di root? Il kernel caricato da rete ha integrati, oltre ai moduli per gestire la rete, anche il driver del file system NFS (Network File System) che permette di montare una directory esportata da un server NFS come una partizione di un disco. Le informazioni su dove recuperare il disco in rete sono fornite dal parametro root-path fornito dal server DHCP. Una volta montato il root FS il kernel può avviare la procedura di inizializzazione, i moduli del kernel ed i programmi residenti nel disco NFS. l'avvio di Linux da rete: server grafico X Come avviene l'avvio dell'interfaccia? Il file system montato sul client LTSP contiene una cersione di Linux alleggerita, adatta ad un avvio veloce da parte di un PC sotto-dimensionato. Quindi le applicazioni residenti costituiscono il minimo indispensabile. In fase di avvio il file di configurazione rootfs:/etc/lts.conf contiene le informazioni su quali servizi ed interfacce utente avviare. E' prevista una shell minimale (busybox) e un sessione X auto-configurata che si collega al server grafico centrale esportando sul terminale X il Desktop Manager. Il comando che realizza la “magia” è: # X -query <IP SERVER> & question time Questo per la parte teorica! Ci sono domande? hardware: la rete LTSP versioni di LTSP LTSP è sviluppato da una piccola ma attiva comunità in due versioni: ● ● LTSP 4 (4.2u2): si configura per mezzo delle ltsp-utils e fornisce un rootfs minimale compilato “from scratch” con LBE (LTSP Build Environment); LTSP 5: si integra con la distro host e genera la rootfs tramite i package della distro stessa. L'installazione mostra come installare LTSP 4 perché assicura di utilizzare terminali con prestazioni inferiori e perché da meglio evidenza del funzionamento del sistema. installazione del sistema host Installare una versione desktop di Ubuntu 7.04. Installare i seguenti pacchetti: $ sudo aptget install dhcp3server tftpdhpa nfskernelserver tcpd i quali installeranno i servizi dhcpd, tftpd e nfsd. A parte il dhcpd, lo start degli altri due servizi va a buon fine. configurazione di rete Modificare con un editor il file /etc/network/interfaces: auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 10.0.0.1 netmask 255.255.255.0 gateway 10.0.0.254 auto eth1 iface eth1 inet static address 192.168.50.1 netmask 255.255.255.0 Eseguire dopo il comando: $ sudo /etc/init.d/networking restart download software Scaricare dal wiki di LTSP l'ISO della versione 4.2u2 (100MB) che contiene i package del rootfs e di ltsp-utils. Il sito di riferimento è la pagina del wiki di LTSP: http://wiki.ltsp.org/twiki/bin/view/Ltsp/DownLoads Eseguire i comandi: $ mkdir ~/ltsp $ cd ltsp $ wget http://ltsp.mirrors.tds.net/pub/ltsp/isos/ltsp4.2u20.iso $ wget http://ltsp.mirrors.tds.net/pub/ltsp/isos/ltsp4.2u20.md5sum $ md5sum c ltsp4.2u20.md5sum ltsp4.2u20.iso: OK installazione pacchetti LTSP Eseguire i comandi: $ sudo mkdir /mnt/iso $ sudo mount o ro,loop ltsp4.2u20.iso /mnt/iso $ sudo dpkg i /mnt/iso/ltsputils/ltsputils_0.25_all.deb $ sudo ltspadmin Appare la schermata semi-grafica di ltspadmin. Installare i pacchetti LTSP seguendo le seguenti istruzioni: Seleziona “Configure the installer options” Imposta “Where to retrieve packages from?” a “file:///mnt/iso” Accetta i valori di default per le altre domande. Rispondi “y” a “Correct? (y/n/c)” Seleziona “Install/Update LTSP Packages” Digita “A”, poi “Q”. Rispondi “y” a “Ready to install/update the selected LTSP packages? (y/n)” Prosegui con invio e digita “q”. configurare il runlevel Eseguire i comandi: $ sudo umount /mnt/iso $ sudo ltspcfg Appare la schermata semi-grafica di ltspacfg Eseguire i seguenti passi per assicurarsi che il runlevel standard di Debian/Ubuntu (2) sia usato. Proseguire con invio. Digitare “c” per “Configure the services manually” Digitare “1” per “Runlevel” Accettare il valore di default (2). selezionare l'interfaccia di rete Eseguire i seguenti passi per selezionare l'interfaccia (eth1) a cui sono collegati i terminali. Digitare “2” per “Interface selection” Immettere “eth1” e premere invio. configurare il DHCP server Modificare il file /etc/default/dhcp3-server: INTERFACES="eth1" Modificare il file /etc/dhcp3/dhcpd.conf: ddnsupdatestyle none; getleasehostnames true; defaultleasetime 600; maxleasetime 7200; authoritative; logfacility local7; option domainname "ltsptest.lan"; option domainnameservers 212.216.112.112, 212.216.172.62; option option128 code 128 = string; option option129 code 129 = text; subnet 192.168.50.0 netmask 255.255.255.0 { range 192.168.50.100 192.168.50.199; nextserver 192.168.50.1; option subnetmask 255.255.255.0; option broadcastaddress 192.168.50.255; option routers 192.168.50.1; option rootpath "192.168.50.1:/opt/ltsp/i386"; if substring (option vendorclassidentifier, 0, 9) = "PXEClient" { filename “/lts/2.6.17.3ltsp1/pxelinux.0"; } else { filename "/lts/vmlinuz2.6.17.3ltsp1"; } } riavvio del DHCP server Riavviare il server DHCP con il comando seguente: $ sudo /etc/init.d/dhcp3server restart configurazione del TFTP server Modificare il file /etc/default/tftpd-hpa: RUN_DAEMON="yes" OPTIONS="l a 192.168.50.1 s /var/lib/tftpboot" Eseguire i comandi: $ sudo mv /tftpboot/lts /var/lib/tftpboot $ sudo rmdir /tftpboot $ sudo /etc/init.d/tftpdhpa restart configurazione di XDMCP e GDM Dall'interfaccia di ltspcfg seguire i seguenti passi: Selezionare “7” per “XDMCP configuration” Rispondere “y” a “Do you want to enable gdm (y/n) ?” Rispondere “n” a “Do you want to disable the graphical login on the server (y/n) [N]?” Confermare premendo invio. Riavviare GDM con il comando: $ sudo /etc/init.d/gdm restart configurazione di /etc/hosts Dall'interfaccia di ltspcfg seguire i seguenti passi: Selezionare “8” per “Create /etc/hosts entries” Rispondere “y” a “Do you want to add entries to /etc/hosts (y/n) ?” Confermare premendo invio. Eliminare le righe in /etc/hosts inutili e correggere il dominio degli hostname. configurazione di /etc/hosts.allow Dall'interfaccia di ltspcfg seguire i seguenti passi: Selezionare “9” per “Create /etc/hosts.allow entries” Rispondere “y” a “Do you want to add entries to /etc/hosts.allow (y/n) ?” Confermare premendo invio. configurazione di /etc/hosts Dall'interfaccia di ltspcfg seguire i seguenti passi: Selezionare “10” per “Create /etc/exports entries” Rispondere “y” a “Do you want to add entries to /etc/exports? (y/n) ?” Confermare premendo invio. Modificare il file /etc/exports commentando la riga dei swapfiles e aggiungendo il parametro subtree_check: /opt/ltsp 192.168.50.0/255.255.255.0(ro,no_root_squash,sync,subtree_check) # /var/opt/ltsp/swapfiles 192.168.50.0/255.255.255.0(rw,no_root_squash,async) Riavviare il servizio NFS con il comando: $ sudo /etc/init.d/nfskernelserver restart configurazione di lts.conf Dall'interfaccia di ltspcfg seguire i seguenti passi: Selezionare “11” per “Create lts.conf file” Rispondere “y” a “Do you want to create a default lts.conf file (y/n) ?” Confermare premendo invio. Modificare il file /opt/ltsp/i386/etc/lts.conf aggiungendo le righe sul layout (it) e modello (pc105) di default della tastiera: [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 XkbLayout = it XkbModel = pc105 testare LTSP: le utenze e il floppy Con questi ultimi passi abbiamo installato il nostro sistema server. Ora bisogna testare l'installazione creando uno o più utenti non privilegiati: $ sudo groupadd ws001 $ sudo useradd d /home/ws001 m s /bin/bash g ws001 ws001 $ sudo passwd ws001 Inoltre scaricare l'immagine floppy dell'All Drivers Etherboot Floppy e copiarla in un floppy: $ wget http://etherboot.anadex.de/eb_on_hd.ima $ dd if=eb_on_hd.ima of=/dev/fd0 Questo floppy facilita il test dell'avvio di un terminale X. testare LTSP: l'avvio da floppy Utilizzando il floppy appena creato, avviare un terminale con il boot standard da floppy. Apparirà un menù con una serie di opzioni. Selezionare la prima opzione per un avvio da rete. Lo stesso floppy permette di copiare un mini sistema di boot su hard disk per avviare il terminale copiando la Boot ROM nell'hard-disk. testare LTSP: l'avvio da hard disk Volendo disporre sia dell'avvio da hard disk di Linux che dell'avvio da rete, si deve procedere, dopo aver installato Linux (es. DSL) nel seguente modo. Individuare il PCI ID dell'ethernet controller con il seguente comando: $ lspci n | grep "^`lspci | grep "Ethernet controller" | head n 1 | cut d\ f1`" | cut d\ f3 Scaricare dal sito http://www.rom-o-matic.net/5.4.3/ la ROM in formato .zlilo per la scheda identifica dal PCI ID ricavato e copiare il file scaricato in /boot/. Aggiungere le seguenti riga al file /boot/grub/menu.lst: title LTSP root (hd0,0) kernel /boot/eb<nome nic>.zlilo testare LTSP: i local device Da interfaccia grafica, gli utenti possono accedere in un terminale LTSP solo ai dispositivi (dischi, schede audio etc.) del server. Per ovviare a questo è stato introdotto in LTSP 4.2 il supporto ai Local Device tramite il servizio LTSPFS. Per attivarlo eseguire: $ sudo aptget install fuseutils libfuse2 libx11protocolperl $ sudo adduser ws001 fuse $ sudo mount o ro,loop ~/ltsp/ltsp4.2u20.iso /mnt/iso $ sudo dpkg i /mnt/iso/local_devs/ltspserverpkgubuntu_0.1_i386.deb Aggiungere la riga seguente al file /opt/ltsp/i386/etc/lts.conf nella sezione [Default]: LOCAL_STORAGE = Y question time Finita la parte pratica! Ci sono domande? saluti Grazie per l'attenzione, arrivederci al prossimo corso!