Kategória: LTSP

Zmenené: 17. august 2010

Terminálová učebňa

V dnešnej dobe sa mnohí stretávajú s úlohami spojenými so znižovaním nákladov, ktoré však často robia bez zmeny pohľadu na spôsob implementácie výpočtovej techniky. Touto zmenou môže byť práve využívanie technológie tenkých klientov a distribúcie operačných systémov. Sám túto technológiu v praxi využívam a tak sa tu chcem jednak podeliť so svojimi skúsenosťami, ale zároveň aj poskytnúť stručnú príručku na zavedenie a používanie tohoto systému.

Linux Terminal Server Project (LTSP), je technológia, ktorá sa snaží riešiť nedostatky súčasného nasadenia informačných technológií, ktorými sú najmä:

  • zvyšujúce sa nároky na hardvérový výkon;
  • vysoké a opakovane vynakladané náklady na získanie hardvéru;
  • zložitá implementácia, konfigurácia a údržba softvéru;
  • neefektívne zdieľanie výpočtových kapacít;
  • nedostatočná sieťová bezpečnosť;
  • vysoká spotreba energie;
  • hlučnosť;
  • a tak ďalej…

Nasledujúci text predpokladá, že čitateľ má základné vedomosti o používaní a správe linuxového servera, pozná použité sieťové technológie a dokáže si nastaviť bootovanie po sieti a podobne.

Úvod

Myšlienka používania terminálových klientov je stará možno ako počítače samé. Mnohí si iste pamätajú sálové počítače s pripojenými terminálmi a ich zeleným písmom na čiernej obrazovke. V dnešnej dobe by určite textový terminál nikomu nepostačoval.

Samotný vývoj projektu LTSP bol odštartovaný v roku 1996 spoločnosťou Binson’s Hospital Supplies, ktorá najala firmu Dynamic Results Inc., aby znížila náklady, a to hlavne náklady na získanie hardvéru a softvéru, ďalej náklady na implementáciu, konfiguráciu a údržbu softvéru. Firma Dynamic Results Inc. v rámci tohoto projektu urobila niekoľko výskumov a došla cez jednoduché TCP/IP terminály, MS Windows 95 a ďalšie TCP/IP terminály až k riešeniu, v ktorom dôležitú úlohu hrá práve Linux.

Vďaka existujúcej podpore zavádzania systému po sieti (Netboot a Etherboot, TCP/IP, BOOTP a TFTP) vznikol nový projekt, na ktorom začal pracovať Jim McQuillan. Jeho cieľom sa stalo rýchla kompilácia a distribúcia systému na veľký počet počítačov. Nastavil server, z ktorého sa pomocou protokolov NFS a BOOTP distribuoval základný operačný systém. Po ďalších úpravách sa podarilo distribuovať aj grafické rozhranie systému X-Window. Nakoniec sa po roku 1999 spoločnosť Dynamic Results Inc. rozhodla sprístupniť svoj kód pod licenciou GNU/GPL, čím sa stal prístupný širokým masám vývojárov i používateľov.

V súčasnej dobe je LTSP vo verzii 5 a vďaka podpore firmy Canonical (ktorá stojí za distribúciou Ubuntu) sa tento projekt dostáva do povedomia verejnosti.

Princíp činnosti

Sieťová architektúra triedy LTSP

Sieťová architektúra triedy LTSP

Celý princíp činnosti je založený na technológii klient/server. Klientom môže byť špeciálny tenký klient, bežný alebo aj nejaký starý (hardvérovo už nepostačujúci) počítač. Výkon klienta nie je kritický a hardvérové nároky sú minimálne. Nároky na server sú podstatne vyššie a ich konkrétna hodnota priamo závisí od účelu použitia.

Ako som už spomínal vyššie, operačný systém je distribuovaný po sieti, keď si ho klient prostredníctvom PXE zavádzača a protokolu DHCP vyžiada zo servera. PXE zavádzač býva súčasťou dnešných sieťových kariet, v prípade starších strojov (bez podpory PXE) rovnako dobre poslúži alternatíva program Etherboot zavádzaný napríklad z diskety.

Po získaní operačného systému je tento, relatívne bežným spôsobom, spustený. Počas štartu operačného systému sú natiahnuté potrebné ovládače hardvéru, samozrejme len ak sú súčasťou jadra (či už priamo zakompilované alebo ako moduly). Ako posledná vec štartu systému je spustený správca prihlásenia, ktorým je v prípade LTSP správca LTSP Desktop Manager (LDM).

Správca prihlásenia poskytuje možnosť prihlásenia sa ku grafickému prostrediu (X-Window) servera pomocou zadania používateľského mena a hesla. Z uvedeného vyplýva, že používateľ musí mať na serveri založený účet. Zvyšok už je založený na sieťovej architektúre X-Window, ktorá umožňuje transparentne prenášať po sieti udalosti používateľského vstupu z klienta, spracovať ich na serveri a poslať naspäť klientovi odozvu v podobe obrazu, ktorý je zobrazený na jeho monitore.

Od okamihu prihlásenia sa k serveru sú všetky spúšťané aplikácie fyzicky spúšťané na serveri, čím všetky klienty môžu využívať výpočtový výkon servera (a preto nie je výkon klienta kritický). Táto možnosť napríklad v mojom prípade umožňuje na 32 bitových klientoch využívať všetky výhody 64 bitového softvéru.

Vo verzii 5 používa LTSP niekoľko nových vlastností, ktoré zvyšujú jeho použiteľnosť. Jedná sa najmä o:

  • pripojenie terminálov prostredníctvom SSH, ktoré umožňuje využitie šifrovaného kanála a autentifikáciu SSH, čím ponúka oproti pôvodnému XDMCPC vyššiu bezpečnosť;
  • vzdialené prihlásenie pomocou LDM, teda samostatného správcu prihlásenia, ktorý je obdobou správcov známych z bežných linuxových distribúcií;
  • distribúcia operačného systému prostredníctvom NBD (Network Block Device) výrazne zrýchľuje štart klienta, ale kladie iné nároky na správu;
  • Debian a Ubuntu navyše pridávajú inštaláciu prostredníctvom balíčkovacieho systému APT.

Súčasná implementácia LTSP umožňuje po sieti prenášať nielen obraz, ale na klienty je prenášaný i zvuk a napríklad aj pripájanie lokálnych USB kľúčov. Treba si však uvedomiť aj záludnosti vzdialeného behu aplikácií, ktorými sú veci súvisiace s prenosom udalostí o sieti. Preto toto riešenie nie je vhodné tam, kde sa pracuje s veľkým množstvom prenášaných dát, citlivých na latenciu. Takýto prípad je napríklad prenos (zobrazovanie) videa a podobne.

Príklady využitia

  • Firma – môže ponúknuť zamestnancom nový spôsob práce, pretože nebudú viazaní na svoje pracovné miesto, ale budú môcť pracovať z ktoréhokoľvek miesta v sieti (za istých podmienok i mimo nej). Firma šetrí prevádzkové náklady, zdieľanie dokumentov je vrámci jedného stroja, čo zaručuje priamy a rýchly prístup k nim. V prípade poruchy tenkého klienta, tento môže byť nahradeným a prakticky bez akýchkoľvek úprav možno pokračovať v práci.
  • Školské učebne – môžu poskytnúť študentom využitie nových druhov softvéru s minimálnymi časovými nárokmi na údržbu (v porovnaní so samostatnými strojmi). Centralizáciou správy softvéru môže skrátiť prestoje počítačov ako i náklady na správcu siete.
  • Internetové kaviarne – môžu využiť jednoduchý klientský systém, vlastne len s prehliadačom a minimálnou množinou potrebného doplnkového softvéru. Každý klient je rovnocenným a plnohodnotným počítačom pre každého zákazníka. Celú správu softvéru môže zvládnuť aj nevyškolená obsluha (zapne/vypne).
  • Informačné kiosky – napríklad v múzeách, mestách, knižniciach či školách, sú jednoducho vzdialene ovládateľné, s jednoduchým nastavením softvéru, ktorý má byť spustený po štarte, napr. prehliadač s prednastavenou webovou alebo lokálnou stránkou.

Nevýhody

Nasadenie centralizovaného systému so sebou okrem výhod prináša aj isté nevýhody. Medzi najväčšie nevýhody možno zaradiť:

  • centrálny bod – pri výpadku servera je nefunkčná velá terminálová siet (riešiteľné zavedím serverového klustra).
  • linux – používatelia nevedia pracovať s týmto operačným systémom, čím ho môžu principiálne odmietať. Rovnako, nie všetok používaný softvér má svoju obdobu v tomto systéme.
  • sieťová prevádzka – toto riešenie neposkytuje dobrý výkon pre graficky náročné (alebo zle navrhnuté) aplikácie - video, úprava obrázkov a pod.
  • lokálny hardvér – v prípade potreby lokálneho hardvéru možno naraziť na ťažko riešiteľné problémy, hoci pripájanie USB kľúčov, či prenos zvuku nespôsobuje problémy.

Dostupnosť LTSP

V súčasnosti poskytujú možnosť inštalácie LTSP viaceré distribúcie Linuxu. Medzi najznámejšie z nich iste patria:

  • Debian (LTSP 5 bez NBD)
  • OpenSuSe (LTSP Kiwi)
  • Fedora (K12Linux)
  • Ubuntu (primárna distribúcia LTSP)

Kto sa neuspokojí s riešením poskytovaným v distribúcii alebo jeho distribúcia LTSP neposkytuje, môže si toto prostredia vybudovať stiahnutím potrebného softvéru z domovskej stránky projektu.

Výber hardvéru

Pred začiatkom implementácie je dôležitý výber hardvéru, pretože hardvér je základ všetkého. V prostredí LTSP možno túto úlohu rozdeliť na niekoľko časti, ktoré spolu viac alebo menej súvisia.

Hardvér pre klienta

Ako klient vám v prostredí poslúži akýkoľvek počítač, ktorý spĺňa vlastne len jednu podmienku, a to mať sieťovú kartu. Avšak je dobré zvážiť aj iné aspekty práce, ktorá môže mať vlastné požiadavky na hardvér:

  • procesor – úplne postačí procesor s frekvenciou vyššou ako 233 MHz. Ak nepotrebujete šifrovanie sieťovej komunikácie, postačí aj 133 MHz. Lenže obetovanie šifrovania so sebou prináša aj stratu komprimácie sieťovej prevádzky. Ak z rôznych dôvodov budete potrebovať používať lokálne aplikácie (programy, ktoré nebežia na serveri, ale priamo na kliente), môže sa slabší procesor podpísať na ich výkone.
  • pamäť – plne postačí 64 MB, ale i tu platí to isté o lokálnych aplikáciách. Pamätať treba aj na to, že niektoré grafické karty používajú zdieľanú pamäť.
  • grafická karta – viac-menej akákoľvek PCI (kvôli autokonfigurácii) karta s minimálne 4 MB RAM.
  • sieťová karta – určite s podporou 100 Mb siete a PXE bootovania. Hoci ani jedno nie je podmienkou, ušetrí to veľa práce.

Ak chcete využiť výhody riešenie LTSP ohľadom zníženia elektrickej spotreby a hlučnosti, neuvažujte o použití výbehových strojov. Ak sa však vyberiete cestou nového hardvéru, stratíte zase výhodu lacného hardvéru. Takže konečné rozhodnutie je na Vás.

Bezdiskový klient

Bezdiskový klient

Naše riešenie používa ako klienta stroj RB-851 MINI, ktorý má rozmery 170x124x85 mm a je napájaný externým adaptérom 5 V/4.5 A. Hardvérové vybavenie tohoto stroja je:

  • CPU 800 MHz,
  • pamäť 256 MB,
  • NCI ast Ethernet VIA VT6103 10/100Base-T,
  • VGA VIA Unichrome 2D/3D, 8-64mb zdieľanej pamäte, 1280x1024/24bit @85Hz,
  • 16 bitová zvuková karta AC97,
  • 1 x paralelný port, 1x RS-232, PS/2 myš a klávesnice,
  • 2x USB porty 2.0 (jeden na čelnom paneli).

Pre plnú funkčnosť som musel aktualizovať BIOS.

Hardvér pre server

Keď som písal pri klientovi, že je treba brať do úvahy účel použitia, pri serveri to platí dvojnásobne. Napriek tomu tu uvediem niektoré základné údaje, aby bolo od čoho začať. V tomto prípade sú kritické veci podobné ako pri klientovi:

  • procesor – určite sa poohliadnite po viac-procesorovom (viac jadrovom) stroji, pričom jeho frekvencia by mala začínať niekde okolo 2 000 MHz. Po niekoľko mesačnom používaní 4 x 2 Ghz procesora sa záťaž jeho jadier pohybuje okolo 25% (OpenOffice, FireFox - aj s FlashPlayerom, QCAD, KiCAD a občas iste aj nejaké jednoduché hry);
  • pamäť – na Ubuntu stránke som čítal vzorec: 256 + (128 * počet_terminálov) MB. Avšak pre použitie 15 klientov s prostredím Gnome sa ukázalo 4 GB pamäte ako málo, naproti tomu po použití ľahších správcov (FluxBox/OpenBox/FVWM-Crystal) využutie RAM málokedy presiahne 2 GB. Ak uvažujete o používaní programov, ktoré RAM vyslovene nešetria, pokojne pridajte na 8, či 16 GB.
  • disky – môžu tiež byť úzkym miestom. Určite uvažujte o SATA diskoch, prípadne o nejakej forme diskového poľa. Ak peniaze nie sú problém, zvážte použitie hardvérového diskového poľa, ale i v tomto prípade platí, že to závisí od účelu použitia.
  • sieťové karty – LTSP server môže pohodlne pracovať aj s jednou sieťovou kartou, ale uvažujte radšej o oddelení terminálovej od zvyšku siete. Neváhajte nad použitím GigaBit kariet.

Nami používaný server má konfiguráciu:

  • CPU Intel(R) Xeon(R) 4 x 2 GHz;
  • RAM 2 x 2 GB, 667 MHz;
  • 2 x SATA 500 GB;
  • 2x GigaBit Ethernet (OnBoard).

Sieť

Posledným bodom je samotná sieťová infraštruktúra. Ak máte viac ako 20 terminálov, pre pripojenie LTSP servera určite použite GigaBit Ethernet pripojený ku gigabitovému portu prepínača. Hoci bežné využitie siete osciluje v rozhraní 0.5 2 Mb/s, môže klient v špičke zabrať aj viac (70 Mb/s), hlavne pri spracovaní multimediálneho obsahu. Zahltenie siete čo i jediným klientom spôsobí spomalenie práce všetkých a to môže byť nepríjemné, pretože sa citeľne predĺžia odozvy na používateľský vstup (až na niekoľko sekúnd).

Určite použite kvalitný prepínač (switch). V žiadnom prípade sa nespoliehajte na rozbočovač (HUB)! V neposlednom rade pripomeniem, že rovnako ako ostatné prvky, sú dôležité aj kvalitné sieťové zásuvky a prepojovacie vedenia siete, pretože všetko funguje cez sieť. Ak táto nepracuje na požadovanej úrovni, nebudú kvalitne pracovať ani klienty.

Varovanie

Pri výbere hardvéru pre klienta i server nezabudnite preveriť ich podporu v Linuxe, inak sa môžete dostať do zbytočných problémov.

Výber distribúcie

Pred samotným výberom distribúcie som vzal do úvahy niekoľko faktorov:

  • skúsenosti – moje skúsenosti s distribúciou Debian som postavil ako základ, preto som si ako podmienku vybral distribúciu založenú na Debiane;
  • aktuálnosť – používanie LTSP verzie 5, pretože niektoré distribúcie ostávajú verné staršej verzii 4;
  • integrácia – chcel som LTSP integrované do systému, aby som sa vyhol pracnej ručnej inštalácii, konfigurácii a prípadnej aktualizácii;
  • vzhľad – pre žiakov je dôležitý vzhľad, preto grafický boot je dôležitou, i keď nie nevyhnutnou podmienkou.

Vlastne už prvý aspekt predurčil vlastne len dve distribúcie, a to Debian alebo Ubuntu, takže ako zástanca Debianu a odporca Ubuntu som mal ťažkú dilemu, z ktorej nakoniec predsa len vyšlo víťazne Ubuntu, pretože:

  • Debian nemá v LTSP integrovanú podporu NBD;
  • Debian nemá predvolene inštalovaný grafický boot;

Ako sami vidíte, rozdiel je minimálny, ale neľutujem.

Tip

Celý popis je o verzii Ubuntu 9.04 a ako používateľ Debianu upozorňujem, že v popise nepoužívam ubunťácky tanec so sudo (ak neviete čo je to sudo, tak sa tým netrápte) a predpokladám, že čitateľ dokáže správne rozhodnúť, na ktoré úkony potrebuje práva superpoužívateľa root.

Inštalácia servera

Inštalácia LTSP servera je triviálna. Líši sa podľa toho, či chcete vybudovať LTSP server na už existujúcom serveri alebo inštalovať server celkom nový.

Výber inštalácie servera LTSP

Pre inštaláciu nového servera je potrebné inštalačné CD označené ako alternate CD. Jediná vec, ktorou sa inštalácia LTSP servera od bežného servera (alebo i desktopu) líši, je explicitný výber voľby „Inštalácia LTSP servera“, ktorá sa skrýva na prvej inštalačnej obrazovke CD pod skratkou F4, ako nakoniec vidno na obrázku.

Po tomto výbere už inštalácia prebieha klasickým spôsobom a nebudem ju tu popisovať, pretože sa o to postarala Ubuntu komunita na mnohých iných miestach. K štandardnej inštalácii pribudol len čas potrebný na vybudovanie prostredia tenkého klienta, ktorého vybudovanie vyžaduje prístup na internet, takže nezabudnite pri inštalácii venovať náležitú pozornosť nastaveniu siete.

Pokiaľ inštaluje na existujúci server, stačí nainštalovať dva balíky (o ich závislosti sa postará aptitude):

aptitude install ltsp-server-standalone openssh-server

Prvotné nastavenie

Po nainštalovaní servera je treba vykonať niekoľko úprav.

Nastavenie siete

Rozhranie eth0 sa nastavuje pri inštalácii a malo by bez problémov fungovať. Jediný problém, na ktorý som pri tomto kroku narazil, bol konflikt IP adries vnútornej (terminálovej) siete, pretože predvolené nastavená IP adresa kolidovala s nastaveniami moje vonkajšej siete. Toto vnútorné rozhranie predvolene používa IP adresu 192.168.0.254/24 a zmenu som urobil v dvoch súboroch, pričom som použil adresu 192.168.10.254/24, čím mi vlastne stačilo popridávať na príslušné miesta len jednu jednotku:

  • /etc/network/interface – konfigurácia sieťového rozhrania
auto eth1
iface eth1 inet static
    address   192.168.10.254
    netmask   255.255.255.0
    network   192.168.10.0
   broadcast 192.168.10.255
  • /etc/ltsp/dhcpd.conf – konfigurácia DHCP servera
subnet 192.168.10.0 netmask 255.255.255.0 {
    range 192.168.10.20 192.168.10.250;
    option domain-name "example.com";
    option domain-name-servers 192.168.10.254;
    option broadcast-address 192.168.10.255;
    option routers 192.168.10.254;
    # next-server 192.168.10.254;
    # get-lease-hostnames true;
    option subnet-mask 255.255.255.0;
    option root-path "/opt/ltsp/i386";
    if substring( option vendor-class-identifier, 0, 9 ) = "PXEClient" {
        filename "/ltsp/i386/pxelinux.0";
    } else {
        filename "/ltsp/i386/nbi.img";
    }
}

Osvedčilo sa mi aj odinštalovanie NetworkManager-a, pretože mi akosi nefungoval a zasahoval do nastavenia siete:

aptitude purge network-manager network-manager-gnome

Po týchto úpravách už len reštart siete a DHCP servera:

invoke-rc.d networking restart
invoke-rc.d dhcp3-server restart

Lokalizácia

Asi sa nebudete so mnou veľmi hádať, keď prehlásim, že stav slovenskej lokalizácie, minimálne v Gnome, zaostáva. Aj preto používam kombinovanú lokalizáciu, v ktorej je ako prvotný jazyk nastavená slovenčina, ale ak nenájde príslušný slovenský preklad, použije pred anglickým ešte lokalizáciu českú.

Toto nastavenie možno jednoducho dosiahnuť pridaním nasledujúceho riadku do súboru /etc/default/locale:

LANGUAGE="sk:sk_SK:cs:cs_CZ"

Toto nastavenie však nie je použité v Gnome a ani v KDE. KDE má na nastavenie dvojjazyčnosti svoj vlastný dialóg, v Gnome som trochu maturoval a nakoniec som použil riešenie, v ktorom vytváram jeden súbor, spúšťaný vždy pri vytváraní relácie X Window. Takže som vytvoril súbor /etc/X11/Xsession.d/56language-session_gnome s obsahom:

# If we are running the GNOME session, source the /etc/default/locale file
# and then export LANGUAGE variable, if it was set

BASESTARTUP=`basename "$STARTUP" | cut -d\ -f1`

if [ "$BASESTARTUP" = gnome-session -o \
        \( "$BASESTARTUP" = x-session-manager -a \
        "`readlink /etc/alternatives/x-session-manager`" = \
        /usr/bin/gnome-session \) ]; then
    . /etc/default/locale
    if [ "$LANGUAGE" ]; then
        export LANGUAGE
    fi
fi

Skriptík prosto overí, či spúšťaná relácia je Gnome, a ak áno, tak spracuje vyššie spomínaný súbor a vyexportuje premennú LANGUAGE, ktorej hodnotu získa zo súboru /etc/default/locale. Takto ostáva nastavenie premennej LANGUAGE na jednom mieste, ale je aplikované aj v Gnome.

Znovavytvorenie prostredia klienta

Na server som nainštaloval 64 bitovú verziu (amd64) Ubuntu a inštalátor predvolene vytvoril aj 64 bitovú verziu systému pre klientov (ak teda máte 64 bitových klientov, môžete celý tento krok preskočiť). To mi však neladilo s mojimi 32 bitovými klientami. Ak teda máte podobné riešenie, je treba odstrániť všetko ohľadom amd64 verzie klienta. Teda, aby som bol celkom presný, nie je to potrebné, len dobré. Architektúra klienta sa vyskytuje na viacerých miestach, takže postupne:

  • zmazanie klientského systému
rm -rf /opt/ltsp/*
  • zmazanie vyexportovaného systému
rm -rf /var/lib/tftpboot/ltsp/*
  • zmazať spúšťanie NBD v inetd, teda zmazať nasledujúci riadok v /etc/inetd.conf:
2000 stream tcp nowait nobody /usr/sbin/tcpd /usr/sbin/nbdrootd /opt/ltsp/images/amd64.img

Tento posledný krok nie je nutný. Avšak, ak ho ponecháte, skript na vytváranie klientského prostredia pridá nový riadok (a teda nový port) a číslo tohoto nového portu potom pridá aj do konfigurácie PXE v /var/lib/tftpboot/ltsp/i386/pxelinux.cfg/default a to môže najmä začiatočníkov mýliť.

Po týchto prípravných operáciách možno spustiť znovavybudovanie prostredia klienta pomocou skriptu:

ltsp-build-client --arch i386

V tomto príkaze je dôležitý parameter s architektúrou, pretože ak ho vynecháme, skript predvolene použije architektúru servera, a tak by sme mali znova prostredie klienta pre amd64.

Po dokončení tejto operácie (zaberie to nejaký čas) už možno spustiť klientov a ich systém naštartuje, čiže LTSP trieda je pripravená na prácu. Jediný problém, ktorý si viem predstaviť pri prvom štarte, je nepodporovaný hardvér, ale myslím, že ak nemáte niečo veľmi exotické, bude to fungovať.

Doplnky pre server

Synchronizácia času

Predvolene je v Ubuntu nainštalovaný klient pre nastavenie času cez sieť, ak ho nemáte, stačí ho doinštalovať:

aptitude install ntpdate

Jeho konfiguráciu možno vyladiť v súbore /etc/default/ntpdate, kde treba urobiť niekoľko prispôsobení. Ak nemáte na tomto stroji nainštalovaný NTP server, čo ja nemám, tak treba zakomentovať (pridať na začiatok mriežku) riadok:

#NTPDATE_USE_NTP_CONF=yes

Potom ešte možno bude potrebné nastaviť meno/adresu časového servera. Z našej školy sa mi nedá komunikovať protokolom NTP a „odborníci“ z T-Comu mi povedali, že sa to nedá (?), tak som nakoniec pomocou jednej barličky rozchodil vlastný časový server, ktorého adresu zadávam do konfiguračného súboru:

NTPSERVERS="10.1.92.2"

Ak teraz netrpezlivo spustíte ntpdate, musím Vás sklamať. Tento príkaz nečíta upravovaný konfiguračný súbor a stále čaká adresu časového servera ako svoj parameter. Konfiguračný súbor však číta príkaz ntpdate-debian, ktorý nám už čas nastaví:

ntpdate-debian
6 Dec 18:43:08 ntpdate[11319]: adjust time server 10.1.92.2 offset 0.006204 sec

Aby sa táto úloha vykonávala pravidelne, je treba ju pridať do cronu, napríklad do súboru /etc/cron.d/ntpdate:

# /etc/cron.d/ntpdate: crontab položka pre automatickú úpravu času

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

0 0 * * * root ntpdate-debian > /dev/null

Týmto nastavením sa spustí synchronizácia času každý deň o polnoci a automaticky nastaví nový čas.

Adresáre

V prostredí LTSP existuje niekoľko zaujímavých adresárov, ktoré uchovávajú prostredie klienta a tiež adresáre, kde sú uložené súbory potrebné pre jeho štart. Vo východzom nastavení sa jedná o:

/opt/ltsp/$ARCH
  • adresár s tzv. prostredím chroot klienta.
/var/lib/tftpboot/ltsp/$ARCH
  • adresár s vygenerovanými obrazmi a nastavením pre štart klienta.

    Tip

    V oboch prípadoch treba $ARCH nahradiť architektúrou klienta, v mojom prípade je to i386.

/etc/ltsp
  • adresár s niektorými konfiguračnými súbormi LTSP.

Nastavenie klienta

Po predchádzajúcich nastaveniach servera by sa mali vzdialené klienty naštartovať po sieti. Proces sťahovania operačného systému nie je grafický a možno ho sledovať na obrazovke klienta. Po rozbalení jadra systému sa spustí grafická bootovacia obrazovka a už sme dosledovali, jediné čo vidíme je postupujúci ukazovateľ postupu. Ak teda nabehlo všetko ako má, možno pristúpiť k niektorým vylepšeniam.

Základné nastavenie správania sa klienta je v prostredí LTSP v súbore /var/lib/tftpboot/ltsp/i386/lts.conf. Klient si vždy pri štarte tento súbor (teda nastavenia v ňom) načíta a použije. Na začiatku tento súbor neexistuje, takže ho treba vytvoriť. Všetky zmeny, ktoré v tomto súbore urobíte sa prejavia až po reštarte, samozrejme klienta, nie servera.

Súbor je rozdelený na sekcie a každá sekcia môže mať niekoľko parametrov v štandardnom tvare názov=hodnota. Názvy sekcií sú zatvorené v lomených zátvorkách. Pričom povinná je len jedna sekcia [default]. Parametre v tejto povinnej sekcii sú použité na všetkých klientov, ale môžu byť prepísané v ďalších sekciách. Ďalšie sekcie môžu byť sekcie klientov, kde názov sekcie tvorí MAC adresa (samozrejme v lomených zátvorkách). Nastavenia v sekcii klienta sa použijú len pre klienta s príslušnou MAC adresou.

Je možné vytvárať aj virtuálne sekcie. Ich pomenovanie v zátvorkách môže byť prakticky ľubovoľné. Tieto slúžia ako akési makrá, do ktorých si môžem pripraviť konfiguráciu, ktorú potom aplikujem na príslušných klientov. Príklad Vám ukážem v nastavení displeja. Zoznam a popis skoro všetkých možných parametrov nájdete v súbore /usr/share/doc/ltsp-server/lts-parameters.txt.gz.

V tomto konfiguračnom súbore sú viac-menej parametre dvoch typov. prvý je logický, ktorý môže nadobúdať hodnoty - teda niektorú z hodnôt Y, y, True, true alebo N, n, false, false.

Nastavenie displeja

Ja mám všetky monitory v LTSP sieti rovnaké, preto si vystačím s jediným parametrom v sekcii [default]:

[default]
 X_COLOR_DEPTH = 16

Týmto nastavením som nastavil všetkým klientom farebnú hĺbku 16 bitov. Ako som spomínal vyššie, toto nastavenie bude použité na všetkých klientov. Jeho predvolená hodnota v Ubuntu je 24. Čo však ak niektorý klient potrebuje inú hodnotu? Žiadny problém, prosto pridám klientskú sekciu:

[default]
  X_COLOR_DEPTH = 16

[00:0f:26:fb:0c:a1]
  X_COLOR_DEPTH = 8
[00:0f:26:fb:0c:94]
 X_COLOR_DEPTH = 24

Týmto nastavením zaistím, že jeden klient (s MAC 00:0f:26:fb:0c:a1) použije farebnú hĺbku len 8 bitov, druhý klient (s MAC 00:0f:26:fb:0c:94) zase 24 bitov a všetci ostatní použijú spoločne nastavenú hodnotu 16 bitov. Takto ručne nastavovať hodnoty pre jednotlivých klientov je dobré len do okamihu keď toto nastavenie treba zmeniť. Aby hodnoty nebolo treba meniť v každom klientovi, je možné použiť spomínané virtuálne sekcie, ktoré potom jednoducho aplikujeme do klientskej sekcie

[default]
  X_COLOR_DEPTH=16

[slabymonitor]
  X_COLOR_DEPTH=8
  X_MODE_0=800x600

[00:0f:26:fb:0c:a1]
  LIKE=slabymonitor
[00:0f:26:fb:0c:94]
 LIKE=slabymonitor

Zmena nastavenia pre oboch klientov na jednom mieste je iste zrejmá. Myslím, že význam parametra X_MODE_0 je samovysvetľujúci, len tá nula na konci udáva číslo režimu.

Ešte jedna poznámka ohľadom veľkosti RAM grafickej karty. Ak používate klienta, ktorý používa pre grafickú kartu zdieľanú pamäť a tejto pamäte nemáte na rozdávanie, tak si prosto vypočítajte jej potrebnú veľkosť pomocou vzorca:

vert-rozlíšenie * horiz-rozlíšenie * far_hĺbka / 8

výsledok je v bajtoch, takže ak chcete dostať hodnotu v MB je potrebné výsledok podeliť 2 * 1024. Napríklad:

1280 * 1024 * 16 / 8 / 1024 / 1024 = cca 2.5 MB

S touto hodnotou som sa ešte nestretol, ale bežne dostupná býva voľba 4 či 8 MB, takže použijem túto (predvolene bolo 16 MB).

Vypnutie šifrovania

Ďalším zaujímavým parametrom je možnosť vypnutia šifrovania pomocou parametra LDM_DIRECTX:

LDM_DIRECTX=true

vypnutím šifrovania síce strácam istú úroveň bezpečnosti, ale zároveň znížim nároky na procesor, a to ako na strane servera, tak (a hlavne) i na strane klienta. Pozor však, strácam aj o možnosť kompresie sieťovej prevádzky, ktorú poskytuje SSH.

Zapnutie NumLock

Študenti sú automatickým zapínaním NumLock nielen rozmaznaní, čo je horšie, počas niekoľkých týždňov sa nenaučili ho zapínať. A keďže ma pípanie klienta, ktorý na to pri použití numerickej klávesnice upozorňoval, otravovalo, rozhodol som sa im ho zapnúť.

X_NUMLOCK=true

Pozor však, je potrebné do prostredia klienta doinštalovať balík numlockx, ale o tom neskôr.

Jazyk LDM

Prihlasovanie v LTSP nepoužíva GDM (Gnome Display Manager), ale namiesto neho je použitý LDM (LTSP Display Manager). Jazyk LDM má vplyv na jazyk relácie X (Gnome) prihláseného používateľa. Je možné definovať nastavenie jazyka ako predvolené pre všetky klienty alebo samostatne pre každého klienta:

LDM_LANGUAGE="sk_SK.UTF-8"

Aj v tomto prípade je treba doinštalovať dodatočné balíky do prostredia chroot (a preložiť si LDM).

Prihlásenia hosťa

V LDM je možné nastaviť predvolené prihlasovacie meno a heslo, ktoré bude použité pri akomsi anonymnom prihlásení (na prihlasovacej obrazovke pribudne tlačidlo „Prihlásiť ako hosť“), takže sa možno prihlásiť k serveru bez explicitného zadávania prihlasovacích údajov. Toto nastavenie je možné urobiť v spoločnej sekcii (pre všetkých klientov rovnaké) alebo urobiť pre každého klienta zvlášť v jeho klientskej sekcii. Spoločné prihlasovacie údaje sa mi neosvedčili, pretože niektoré aplikácie (OpenOffice.org, Firefox, …) sa potom spúšťali na monitore prvého prihláseného, prípadne sa spustili len raz a potom už len otvárali chybový dialóg. Ale prihlásenie hosťa mám povolené centrálne:

[default]
  LDM_GUESTLOGIN = True

[00:0f:26:fb:0c:a1]
  LDM_USERNAME = meno
  LDM_PASSWORD = heslo

Automatické prihlásenie

Okrem prihlásenia hosťa je možné povoliť aj automatické prihlásenie, pomocou voľby:

[default]
  LDM_AUTOLOGIN=true

[00:0f:26:fb:0c:a1]
  LDM_USERNAME = meno
  LDM_PASSWORD = heslo

Pozor však, s takýmto nastavením sa ani neodhlásite, pretože okamžite po odhlásení bude zase automaticky prihlásený účet, zadaný pomocou rovnakých parametrov (LDM_USERNAME a LDM_PASSWORD).

Varovanie

Ak nie je pre tenkého klienta definované meno a heslo (LDM_USERNAME / LDM_PASSWORD), je predvolene použité hostname tenkého klienta.

Výber relácie

Ak poslednú voľbu v tejto časti spomeniem voľbu pre výber relácie:

LDM_SESSION=fvwm-crystal

Ak sa Vám zdá toto nastavenie zbytočné, ja som ho ocenil v okamžiku, keď som začal hľadať inú alternatívu ako je Gnome a nechcelo sa mi presviedčať všetkých používateľov aby si zmenili reláciu. Nastavenie tohoto parametra udáva predvolenú reláciu, a tak stále dovoľuje zmeniť reláciu v prihlasovacej obrazovke LDM.

Príklad konfigurácie

[Default]
  # Vypnúť šifrovanie
  LDM_DIRECTX=True
  # Nastaviť farebnú hĺbku
  X_COLOR_DEPTH = 16
  # Zapnúť NumLock (vyžaduje balík numlockx v klientovi)
  X_NUMLOCK=true
  #Povoliť prihlásenie hosťa
  LDM_GUESTLOGIN = True

###########################################
[44:4d:50:e2:52:55]
  # prac21-01
  LDM_USERNAME = meno01
  LDM_PASSWORD = heslo01

[44:4d:50:e2:50:ec]
  # prac21-02
  LDM_USERNAME = meno02
  LDM_PASSWORD = heslo02

[44:4d:50:e2:51:f9]
  # prac21-03
  LDM_USERNAME = meno03
  LDM_PASSWORD = heslo03

...

Aktualizácia chroot

Skript ltsp-build-client, ktorý vytvára prostredie klienta (vlastne úplne samostatný systém), predvolene nastavuje dve úložiská pre chroot prostredie:

deb http://archive.ubuntu.com/ubuntu jaunty main restricted universe multiverse
deb http://security.ubuntu.com//ubuntu jaunty main restricted universe multiverse

Z času na čas sú balíky, ktorá tvoria LTSP chroot, aktualizované, či opravené. Dôležitá vec je uvedomiť si, že chroot prostredie je samostatné a jeho nastavenie úložísk nie je ovplyvnené zmenami nastavenia úložísk servera.

Rada

Pri aktualizácii LTSP servera na novú verziu (napr Jaunty -> Karmic), je lepšie vybudovať úplne nové prostredie chroot klienta.

Pred akoukoľvek úpravou prostredia chroot je dobré si urobiť jeho zálohu, napríklad kvôli vykonaným úpravám, ktoré nechcete stratiť. Rovnako to oceníte, ak bude z akýchkoľvek dôvodov potrebné vrátiť prostredie chroot do pôvodnéh stavu. Najjednoduchšia záloha je pomocou rekurzívneho kopírovania:

sudo cp -a /opt/ltsp /opt/ltsp-orig

Aktualizáciu svojho prostredia chroot začneme úpravou existujúceho súboru /opt/ltsp/arch/etc/apt/sources.list tak, aby zahŕňal aj úložisko s aktualizáciami no a potom už stačí vykonať aktualizáciu vo vnútri chroot. Najprv, teda pridávam do súboru /opt/ltsp/i386/etc/apt/sources.list v LTSP chroot riadok:

deb http://sk.archive.ubuntu.com/ubuntu/ jaunty-updates main restricted

Pred vstúpením do prostredia chroot je dobré nastaviť premennú LTSP_HANDLE_DAEMONS=false, čím zabraňujem serveru aby reštartoval svoje vlastné démony pri aktualizácii prostredia chroot:

export LTSP_HANDLE_DAEMONS=false

Vstúpim do prostredia chroot v adresári klienta LTSP:

sudo chroot /opt/ltsp/i386

V prostredí chroot pripojím /proc, spustím aktualizáciu všetkých aktualizovaných balíčkov a nakoniec vymažem vyrovnávaciu pamäť balíčkov:

mount -t proc proc /proc
aptitude update && aptitude safe-upgrade
aptitude clean

Chcem Vás tu upozorniť na predvolenú konfiguračnú voľbu aptitude, ktorá automaticky inštaluje aj odporúčané balíky. Ak teda nemáte skúsenosti, použite radšej nástroj apt-get.

Varovanie

Pozorne dodržujte všetky pokyny aktualizácie (ak nejaké sú). Dôsledne sa uistite, že pri aktualizácii nenastali žiadne chyby, pretože ak inštalácia niekorého balíka zlyhá, môže to spôsobiť, že klient nenaštartuje.

Rada

Pri aktualizácii sa objavuje chybové hlásenie: „Nedá sa zapísať záznam, volanie openpty() zlyhalo (/dev/pts nie je pripojený?)“ (v originále „Can not write log, openpty() failed (/dev/pts not mounted?)“), túto si ale všímať netreba, pretože je čisto kozmetická.

Po úspešnej aktualizácii možno opustiť chroot, odpojiť /proc, spustiť ltsp-update-kernels (ak bolo v chroot aktualizované aj jadro) a nakoniec znova vybudovať NBD obraz tenkého klienta:

sudo umount /proc
exit
unset LTSP_HANDLE_DAEMONS
sudo ltsp-update-kernels
sudo ltsp-update-image --arch i386

Aby sa aplikovali zmeny (z nového obrazu), je vždy treba tenké klienty reštartovať.

Inštalácia ďalších programov pre klienty

Doplnenie prostredia chroot o ďalšie programy používa vlastne rovnaký postup ako pri jeho aktualizácii, ale pre istotu tu zopakujem aj základné kroky, ktoré je dobré urobiť pred samotným vstúpením do chroot prostredia, tentokrát už bez vysvetľovaní.

Nastavím premennú LTSP_HANDLE_DAEMONS=false:

export LTSP_HANDLE_DAEMONS=false

Vstúpim do prostredia chroot v adresári klienta LTSP:

sudo chroot /opt/ltsp/i386

Pripojím /proc:

mount -t proc proc /proc

Doplnenie lokalizácie

V prostredí chroot nie sú predvolene nainštalované balíky, ktoré sa postarajú o lokalizáciu prostredia (najmä LDM), preto je dobré doinštalovať:

aptitude install gettext language-pack-gnome-sk

Po nainštalovaní je dobré aktualizovať generovanie lokáliek:

locale-gen

Nepočítajte s tým, že bude prihlasovacia obrazovka po slovensky, pretože LDM v Ubuntu 9.04 nie je lokalizovaný do slovenčiny.

Slovenčina už je zahrnutá v aktuálnej verzii LTSP

Doplnenie NumLock

aptitude install numlockx

Po doinštalovaní tohoto balíka už bude funkčná aj voľba X_NUMLOCK v nastavení LDM (lts.conf).

Zakázanie PC speakera

PC speakery dokážu byť veľmi otravné, najmä keď sa používatelia pred prihlásením pokúšajú použiť numerickú klávesnicu bez zapnutia NumLock, čo spôsobuje systémové pípnutie. Ak si to vynásobíte počtom klientov v triede, dostanete jednoznačný dôvod na vypnutie.

Ovládač speakera je kompilovaný ako modul, preto ho možno vypnúť prostým zakázaním jeho načítania (blacklist) pri štarte. Najprv treba vytvoriť súbor /etc/modprobe.d/blacklist-pcspkr.conf (pozor, v chroot prostredí klienta) a do neho vpísať:

# Zakázanie načítania modulu PC Speaker (pcspkr)
blacklist pcspkr

Vygenerovanie obrazu

Po úspešnej inštalácii a úpravách netreba zabudnúť na správne ukončenie a vygenerovanie nového NBD obrazu:

exit
sudo umount /opt/ltsp/i386/proc
unset LTSP_HANDLE_DAEMONS
sudo ltsp-update-image --arch i386

Vylepšenia prostredia

Pevné IP adresy

Považujem za dobré aby známi klienti v sieti používali vždy rovnaké IP adresy a toto nastavenie sa mi osvedčilo aj pre LTSP terminály, pretože je možné relatívne jednoducho identifikovať príslušného klienta.

Pre použitie pevných IP adries je treba vybrať rozsah IP adries, ktoré nepatria do rozsahu, z ktorého ich poskytuje DHCP server. Predvolene DHCP server poskytuje IP adresy v rozsahu 20 - 250 a toto nastavenie nádjete v súbore /etc/ltsp/dhcpd.conf v riadku:

range 192.168.10.20 192.168.10.250;

Ak je potrebný väčší rozsah adries ako 2 - 19, prosto upravte rozsah podľa potreby.

Pre vytvorenie statických položiek stačí pridať za riadok s voľbou „option root-path“ pre každého klienta tieto riadky:

host hostname {
  hardware ethernet MA:CA:DD:RE:SS:00;
  fixed-address 192.168.10.2;
}

Samozrejme MAC adresu nahraďte hodnotami podľa hodnôt klienta, ktorý má dostávať pevnú IP adresu. Položka fixed-address je hodnota IP adresy, ktorú má klient dostať a položka hostname je meno, ktoré klient dostane. Pre plné pochopenie tohoto nastavenia je dobré mať isté vedomosti o DHCP, ktoré tu však popisovať nebudem.

Sieťový swap

Technika swap je spôsob o virtuálne rozšírenie fyzickej veľkosti pamäte RAM o miesto na pevnom disku. keďže však tenké klienty často pevné disky nemajú, je treba v prostredí LTSP použiť iné riešenie. LTSP podporuje swapovanie po sieti pomocou NBD (Network Block Device) pomocou malého skriptu nbdswapd, ktorý je spúšťaný prostredníctvom inetd a stará sa o vytváranie swapovacieho súboru, nastavenie swapovania a odstránenie tohoto súboru, keď už nie je potrebný (po odhlásení terminálu).

Príslušný riadok v /etc/inetd.conf vyzerá takto:

9572 stream tcp nowait nobody /usr/sbin/tcpd /usr/sbin/nbdswapd

Predvolene majú súbory swap veľkosť 32 MB, čím je klientom pridané trochu RAM, ale nezaberá to veľa miesta na disku. Ak sa stretnete s podozrivým správaním, ako náhodné padanie Firefoxu pri prezeraní stránok s veľkým množstvom veľkých obrázkov, možno bude treba túto hodnotu zvýšiť. Nastavenie veľkosti súboru swap dosiahnete v súbore /etc/ltsp/nbdswapd.conf. Stačí do tohoto súboru vložiť riadok pre nastavenie premennej SIZE v MB, napr. pre 128 MB:

SIZE=128

Pri nastavovaní veľkosti sieťového swap dajte pozor na zabrané diskové miesto. Ak server obsluhuje 15 klientov a každý používa 128 MB swapu, zaberie to spolu 15 * 128 = 1920 MB, čiže skoro 2 GB miesta v adresári /tmp (kde sú tieto súbory ukladané).

Po nastavení veľkosti súboru NBD swap treba jeho používanie povoliť v konfigurácii lts.conf:

NBD_SWAP=true

Podľa východzieho nastavenia je povolenie NBD swapu cez inetd povolené v súbore /etc/hosts.allow:

nbdswapd: ALL: keepalive

Táto voľba zaistí zrušenie spojenia, a teda aj ukončenie programu, po približne 131 minútach (2 hodiny + cca 11 minút), podrobnosti v man tcp(7).

Smerovanie a preklad adries

Ak je z nejakého dôvodu (napríklad lokálne aplikácie, synchronizácia času, …) potrebný priamy prístup klientov k internetu, je treba na serveri povoliť smerovanie paketov a preklad sieťových adries (NAT). Smerovanie paketov sa postará o prechod paketov z jedného rozhrania servera na druhé. NAT sa postará o správnu manipuláciu odchádzajúcich (a potom i prichádzajúcich) paketov tak, aby okolitá sieť dokázala sieťovú komunikáciu poslať na správne miesto.

V Linuxe je možné nastavenie NAT v iptables dvoma spôsobmi, prvý sa volá MASQUERADING, ktorý sa hodí pre dynamicky nastavované vonkajšie rozhranie a SNAT, ktorý je zase vhodný v prípade statického nastavenia IP adresy.

Postup je jednoduchý:

  • povoliť smerovanie IPv4 (a prípadne aj IPv6) paketov úpravou súboru /etc/sysctl.conf pomocou odkomentovania nasledujúcich riadkov:
net.ipv4.ip_forward=1
...
net.ipv6.conf.default.forwarding=1
  • spracovať urobené zmeny jadrom:
sysctl -p
  • nastaviť IP Masquerading pomocou jedného pravidla iptables:
iptables -t nat -A POSTROUTING -s 192.168.10.0/16 -o eth0 -j MASQUERADE
  • alebo nastaviť SNAT, rovnako pomocou jediného pravidla iptables:
iptables -t nat -A POSTROUTING -s 192.168.10.0/16 -o eth0 -j SNAT --to-source 192.168.0.112

Po zadaní jedného z predchádzajúcich príkazov začne smerovanie paketov fungovať, ale len do nasledujúceho reštartu. Pre plnú funkčnosť je treba zaistiť, aby sa toto nastavenie načítalo pri štarte systému, čo možno dosiahnuť viacerými spôsobmi, ja som použil spôsob popísaný v dokumentácii Ubuntu.

Najprv som si uložil aktuálny stav nastavenia iptables pomocou:

iptables-save > /etc/ltsp/nat

Vygenerované nastvenie je zbytočne podrobné, keďže potrebujem len pravidlo pre SNAT, ponechám len tieto riadky:

# Generated by iptables-save v1.4.1.1 on Wed Dec 16 19:08:11 2009
*nat
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -s 192.168.0.0/16 -o eth0 -j SNAT --to-source 192.168.0.112
COMMIT
# Completed on Wed Dec 16 19:08:11 2009

Nakoniec pridám riadok do nastavenia rozhrania terminálovej siete, v mojom prípade eth1, v súbore /etc/network/interfaces:

auto eth1
    iface eth1 inet static
    address 192.168.10.254
    netmask 255.255.255.0
    network 192.168.10.0
    broadcast 192.168.10.255
    up iptables-restore < /etc/ltsp/nat

Povolenie admina

V Ubuntu predvolene účet root nie je povolený, a tak i keď si povolíte konzolu, neprihlásite sa, pretože v chroot žiadny iný použiteľný účet nie je. Takže si buď vytvorte administračný účet, alebo povoľte root. Začnem povolením root, ale oba kroky majú spoločný začiatok a koniec, teda vstúpenie a vystúpenie z chroot a nakoniec generovanie nového obrazu klienta.

Vstúpenie do chroot:

chroot /opt/ltsp/i386

Povolenie root

Odomknem účet root v chroot:

passwd --unlock root

Nastavím mu heslo:

passwd root

Vytvorenie admin účtu

Možno lepšie riešenie ako povolenie účtu root je vytvorenie administračného účtu (povedzme s menom admin), ktorý bude používaný na prihlásenie k systému klienta. Takýto účet neexistuje, preto ho treba najprv pridať. Pri pridávaní mu zároveň nastavím členstvo v skupine sudo. nezabudnem ani na nastavenie hesla.

useradd -m admin -G sudo
passwd admin

Posledný krok, v oboch prípadoch, je opustenie chroot a aktualizácia obrazu klienta:

exit
sudo ltsp-update-image --arch i386

Synchronizácia času

Často je dobré mať na počítači presný čas, najmä ak používa časovo ovládané spúšťanie úloh (cron). Pre tento účel je potrebný časový server (pomocou NTP) a nástroj, ktorý dokáže z tohoto servera čas získať. Inštaláciou časového servera sa zaoberať nebudem a popíšem implementáciu na strane klienta, ktorý bude na synchronizáciu využívať časový server mimo LTSP siete.

Najprv je treba vstúpiť do chroot klienta:

chroot /opt/ltsp/i386

a tam nainštalovať klienta synchronizácie času:

aptitude install ntpdate

Pre jednoduché nastavenie spúšťania pri štarte možno vytvoriť priamo štartovací skript v príslušnom adresári /etc/rc?.d. Ukážem však postup ako využiť možnosť konfigurácie synchronizácie času bez potreby úpravy obrazu klienta zo súboru lts.conf.

Pre toto potrebujem vytvoriť spúšťací skript v adresári /usr/local/sbin, nazvaný ltsp_ntpdate s obsahom:

#!/bin/bash

# načítaj adresu NTP servera
LTSP_TIMESERVER=$(getltscfg TIMESERVER)

if [ -z "$LTSP_TIMESERVER" ]; then # ak nebola zadaná, použi ntp.org
    LTSP_TIMESERVER=sk.pool.ntp.org
fi

# ak je dosiahnuteľný, tak synchronizuj čas
[ "$(ping $LTSP_TIMESERVER -qc1 -w1 > /dev/null && echo OK)" = "OK" ] && ntpdate $LTSP_TIMESERVER &

Tento skript je inšpirovaný skriptom Pierre Barcoa. Ak je v konfiguračnom súbore lts.conf nastavená premenná TIMESERVER, skript ju použije a bude s týmto serverom aktualizovať čas tenkého klienta. Ak lts.conf premennú neobsahuje neobsahuje, bude tenký klient synchronizovať svoj čas so skupinou serverov sk.pool.ntp.org.

Po vytvorení skriptu mu je treba nastaviť práva na spustenie:

chmod +x /usr/local/sbin/ltsp_ntpdate

Treba upraviť aj konfiguračný súbor ltsp.conf a do sekcie [default] pridať:

[default]
  TIMESERVER=192.168.0.1
  RCFILE_01=/usr/local/sbin/ltsp_ntpdate

Premenná TIMESERVER definuje IP adresu použitého časového servera. Premenná RCFILE_01 obsahuje cestu k skriptu ltsp_ntpdate a udáva, že tento skript bude spustený pri štarte klienta.

Nakoniec treba aktualizovať obraz klienta:

ltps-update-image --arch i386

Zapínanie a vypínanie

To čo mi chýbalo od začiatku, je možnosť zapínania a vypínania po sieti (riešil som to pomocou ističov). Zapínanie je relatívne jasné, teda sieťová karta musí podporovať Wake On Lan a musí mať túto možnosť zapnutú. Ohľadom vypínania sú možné dva postupy. Prvým je automatické vypínanie v určitom čase pomocou CRON alebo vzdialené vypínanie po sieti, ja popíšem to druhé.

Zapínanie

Aby bolo možné klienty vzdialene po sieti zapínať, musia túto možnosť jednak podporovať a jednak ju musia mať zapnutú v BIOSe. Po tomto povolení je potrebné na server (alebo iný vhodný počítač) nainštalovať balík wakeonlan.

aptitude install wakeonlan

Po nainštalovaní už môžem vyskúšať funkčnosť zadaním MAC adresy klienta, ktorého chcem zapnúť:

wakeonlan 44:4d:50:e2:51:f9

Ak sa nič nestalo (a mne sa nestalo), treba vyskúšať zadať rozhranie, cez ktoré sa má magický paket poslať. Rozhranie sa zadáva v podobe broadcastovej adresy príslušnej siete, v mojom prípade:

wakeonlan -i 192.168.10.255 44:4d:50:e2:51:f9

Ak to stále nefunguje, je možné, že operačný systém prepisuje nastavenie WoL sieťovej karty a treba mu ho implicitne zadať, ale to popíšem neskôr.

Ak to funguje, nastal čas na trochu spohodlnenie nastavenia. Aby som mohol klientov zobúdzať pomocou ich mena (pretože MAC sa dosť zle pamätá), je treba upraviť dva súbory, a to /etc/hosts a /etc/ethers. Začnime tým druhým (ktorý ešte nemusí existovať). Je to súbor, ktorý obsahuje medzerami oddelené dvojice MAC adresa a hostname, napríklad:

cat /etc/ethers
44:4d:50:e2:52:55 ltsp101
44:4d:50:e2:50:ec ltsp102
44:4d:50:e2:51:f9 ltsp103
...

Ale tento zoznam nebude fungovať bez funkčného prekladu hostname na IP adresu, preto najjednoduchšie je ich pridanie do súboru /etc/hosts, ktorý zase obsahuje medzerami oddelené dvojice IP adresa a hostname. V systéme už iste existuje a má aj nejaký obsah, preto na jeho koniec stačí pridať, napríklad:

...
192.168.0.101 ltsp101
192.168.0.102 ltsp102
192.168.0.103 ltsp103
...

Pre istotu pripomeniem, že aby to správne (a hlavne trvalo) fungovalo, je treba nastaviť DHCP server pre prideľovanie stále rovnakých IP adries, ako som písal už skôr. Po tejto úprave už možno klienta zobúdzať napríklad pomocou:

wakeonlan -i 192.168.10.255 ltsp101

Ako som spomínal vyššie, klientovi nemusí vždy stačiť nastavenie v BIOSe a treba ho trochu vylepšiť. Aby mi to teda fungovalo, musel som do chroot prostredia klienta nainštalovať balík ethertool:

chroot /opt/ltsp/i386
aptitude install ethertool
aptitude clean
exit

Po nainštalovaní nástroja som ešte musel zaistiť jeho správne spúšťanie po štarte systému s parametrom g. Vytvoril som súbor /opt/ltsp/i386/usr/local/sbin/wolfix (áno, už som opustil prostredie chroot) s obsahom:

#!/bin/bash
# oprava funkčnosti WoL

/usr/sbin/ethtool -s eth0 wol g

Samozrejme nastavil mu práva na spustenie:

chmod +x /opt/ltsp/i386/usr/local/sbin/wolfix

Teraz možno vygenerovať nový obraz klienta:

ltsp-update-image --arch i386

A už známym postupom som pridal štartovací súbor do lts.conf:

RCFILE_02 = /usr/local/sbin/wolfix

Rada

Tentokrát som premennej RCFILE pridal číslo 02, pretože inak by som si prepísal predchádzajúci skript.

Samozrejme, celé to začalo fungovať až po nasledujúcom vypnutí, aby sa tento skriptík aspoň raz vykonal.

Vypínanie

Čítal som návod pre nastavenie vypínania klientov v určenom čase na základe úlohy pre CRON. Tento spôsob sa mi ale nepáčil, pretože mi príde trochu obmedzujúci, a to tým, že nevypína stroje vždy keď to potrebujem, ale len vo vopred určenom čase. I preto som rozmýšľal na iným riešením. Hoci som uvažoval o odľahčenej implementácii pomocou „švajčiarskeho nožíka“ na TCP/IP siete, zvaného netcat (nc), nakoniec som toto riešenie, kvôli nulovej bezpečnosti, zavrhol a použil odľahčený SSH server dropbear.

Ako prvú vec je treba nainštalovať dropbear v chroot prostredí klienta:

export LTSP_HANDLE_DAEMONS=false
chroot /opt/ltsp/i386/
aptitude install dropbear
aptitude clean
exit

Po nainštalovaní klienta by som mohol (a vy pokojne môžete) vygenerovať nový obraz klienta, nabootovať ho a overiť si, že na klientovi skutočne beží SSH server, lenže zatiaľ vyžaduje zadanie hesla, čo nie je najvhodnejšie. Preto je ďalším krokom nastavenie autentifikácie pomocou kľúčov. Najprv je potrebné vygenerovať si na serveri kľúč, ak ho ešte nemáte. Tento si môžem vygenerovať ako root, ale lepšie bude ako bežný používateľ (aby som sa mohol prihlasovať bez poteby root):

ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/slavko/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/slavko/.ssh/id_rsa.
Your public key has been saved in /home/slavko/.ssh/id_rsa.pub.

Ako vidno vo výpise, kľúč som nechal vygenerovať do východzieho umiestnenia (/home/slavko/.ssh/id_rsa) a nezadal som passphrase. Po vygenerovaní kľúča ho ešte musím dostať do prostredia klienta, ale samozrejme iba jeho verejnú časť, ktorá je v súbore .ssh/id_rsa.pub.

Stačí prosté presmerovanie výstupu, ale už zase ako root:

mkdir /opt/ltsp/i386/root/.ssh
chmod 700 /opt/ltsp/i386/root/.ssh
cat /home/slavko/.ssh/id_rsa.pub >> /opt/ltsp/i386/root/.ssh/authorized_keys
chmod 700 /opt/ltsp/i386/root/.ssh/authorized_keys

A teraz je ta správna chvíľa na vygenerovanie nového obrazu:

ltsp-update-image --arch i386

Potom už len nabootovať a prihlásiť sa, nezabúdajte, že ssh sa predvolene pokúša prihlásiť pomocou mena práve prihláseného používateľa, preto mu treba meno zadať napríklad pomocou parametra -l alebo priamo k adrese pomocou zavináča:

ssh root@ltsp101

Tip

Pripomínam, že najprv je treba pozbierať digitálne podpisy klientov (dajte pozor na priraďovanie IP adries). S úspechom možno využiť nástroj ssh-keyscan.

Od tejto chvíle možno vypínať klientov pomocou príkazu (dropbear kašle na nastavenie PATH, tak je dobré zadávať príkazy s plnou cestou):

ssh root @ltsp101 /sbin/halt

prípadne reštartovať (napr. kvôli načítaniu nového obrazu):

ssh root @ltsp101 /sbin/reboot

Pre hromadné vypínanie/reštartovanie si možno pripraviť jednoduchý skript, ktorý postupne vykonáva ssh príkaz na jednotlivé klienty.

Hromadný skript

Na zjednodušenie života som si napísal jednoduchý skript, pomocou ktorého môžem naraz obslúžiť celú triedu:

#!/bin/bash
# skript pre poslanie príkazu všetkým LTSP klientom

# Počet klientov, počiatočná a konečná IP
CELKOM=15
MIN=101
MAX=$(($MIN + $CELKOM -1))

case $1 in
    start)
        PAUZA="sleep 1.5"
        POKEC="Zapínam klienta "
        PRIKAZ="wakeonlan -i 192.168.10.255 ltsp"
        ULOHA=""
        ;;
    stop)
        PAUZA="sleep 0.5"
        POKEC="Vypínam klienta "
        PRIKAZ="ssh root @192.168.10."
        ULOHA="/sbin/halt"
        ;;
    restart)
        PAUZA="sleep 1.5"
        POKEC="Reštartujem klienta "
        PRIKAZ="ssh root @192.168.10."
        ULOHA="/sbin/reboot"
        ;;
    free)
        PAUZA=""
        POKEC="Stav pamäte klienta "
        PRIKAZ="ssh root @192.168.10."
        ULOHA="/usr/bin/free -m"
        ;;
    *)
        echo "Použitie:"
        echo "$(basename $0) start | stop | restart | free"
        exit 2
        ;;
esac

for CISLO in $(seq $MIN $MAX); do
    $PAUZA
    echo $POKEC$CISLO
    $PRIKAZ$CISLO $ULOHA
done

Skript spúšťam pomocou samovysvetľujúcich parametrov, ktoré skript vypíše, keď ho spustím bez parametrov.

iTalc

iTalc je užitočný nástroj pre zobrazovanie a vzdialenú správu počítačov. Nebudem tu popisovať jeho vlastnosti, podrobnosti môžete nájsť na stránke projektu. Samotný nástroj sa skladá z dvoch častí italc-master a italc-client (pomenoval som ich podľa mien balíkov). Balík italc-master slúži ako administračné rozhranie a italc-client zase poskytuje informácie (a prístup) na strane klientov.

V prostredí LTSP je možné nainštalovať tento nástroj dvomi spôsobmi. Prvý, ktorý nebudem popisovať, pretože je dosť veľkou záťažou na sieť a výkon klientov, je nainštalovanie klientskej časti do chroot prostredia klientov. Druhý spôsob je inštalácia oboch častí len na server, čím je vylúčený reálny prenos informácií po sieti (celá komunikácia prebieha len na strane servera) a rovnako aj záťaž procesora klienta, avšak tento spôsob neposkytuje možnosť správy klientov pred prihlásením.

Najprv som teda nainštaloval na server balíky:

aptitude install italc-master italc-client

Po nainštalovaní sa v menu objaví položka pre spúšťanie iTalc, ktorá však nespúšťa priamo iTalc, ale italc-launcher, ktorý má v Ubuntu za úlohu, okrem iného, zaistiť automatické pridávanie klientov do iTalc. V reále je však pridaný každý klient dva krát, preto je vhodnejšie spúšťať iTalc priamo tj. vytvoriť si vlastnú položku v menu.

Pre pridávanie klientov do prostredia iTalc je potom potrebné ich zadávanie ich IP adresy v podobe:

IP.SE.RV.ER:10XXX

Pričom ako adresu servera používam 127.0.0.1, ale možno použiť aj adresu rozhrania, na ktoré sú pripojené klienty. Číslo portu (za dvojbodkou) je v tvare 10XXX, kde to XXX je nahradené posledným trojciferným číslom IP adresy klienta. Napríklad pre klienta s IP adresou 192.168.10.51 bude IP pre italc vyzerať takto:

127.0.0.1:10051

Pozor: Automatické pridávanie klientov do iTalc (pomocou italc- launcher) funguje tak, že automaticky pridá klientov, ktorí majú prihláseného používateľa v okamihu štartu iTalc.

Záver

Na záver možno len toľko, že po viac ako šesť mesačnom používaní som s nasadením tohoto systému spokojný. Neznamená to, že všetko beží bez problémov. Študentom nekonečne chýba FlashPlayer, ktorý som musel zo servera odstrániť. Klientom som musel flashovať BIOS, aby sa aj po reštarte dokázali nabootovať (ale výrobca promptne vyvinul aktualizáciu na zákalde mojej požiadavky). Faktom je aj to, že hľadanie „správneho“ správcu okien mi zabralo oveľa viac času ako som chcel.

Ako som už naznačil niekde vyššie, vôbec sa mi neosvedčilo používanie predvoleného prostredia Gnome, možno i preto, že nie som naučený na toto prostredie. Robil som niekoľko pokusov, ktoré viedli cez FluxBox a OpenBox až k FVWM, teda celkom presne k FVWM-Crystal. FluxBox som zavrhol, pretože sa mi nepodarilo nastaviť noMachine pre prihlásenie k tomuto prostrediu. Niekoľko mesiacov som (študenti) používal OpenBox, s ktorým som bol spokojný vlastne až na jednu drobnosť, a to nemožnosť pridania ikon do menu.

Rada

FVWM-Crystal sa nakoniec ukázal ako výborná voľba aj preto, že študenti po prvý krát videli nielen viacero plôch, ale najmä koncept virtuálnych plôch a flexibilnosť grafického prostredia X Window.

Na druhej strane, samotné zabudovanie a nainštalovanie samotnej učebne mi (a siedmim žiakom) trvalo 20 (slovom dvadsať) minút, vrátane nastavovanie klientov na sieťový boot. Všetky zmeny robím na jednom mieste a nemusím už kvôli desaťminútovej práci obiehať vyše 2 hodiny 15 počítačov (15 x 10 min). Rovnako tak finančná náročnosť zriadenia. Nákup hardvéru pre učebňu nebol oveľa lacnejší ako nákup bežných stolných PC. Lenže tieto tenké klienty „morálne nezostarnú“, keďže slúžia len na pripojenie klávesnice a monitora k serveru. Zostarnúť môže server, a tak v budúcnosti pre vynovenie učebne nie je potrebné nakúpiť celú učebňu počítačov, ale kúpiť silnejší server, prípadne dokúpiť ďalší.

V tejto triede vyučujem hodiny informatiky, aplikovanej informatiky a výpočtovej techniky. Hodiny sú, okrem všeobecných vecí, zamerané najmä na elektrotechniku a elektroniku. A viete, najkrajší pocit mám, keď môžem na školskú stránku umiestniť softvér na stiahnutie bez obáv z možného trestného stíhania. Rovnako aj, keď môžem žiakom povedať, že si ho môžu pokojne stiahnuť a používať a nepotrebujú na to žiadne peniaze…

No a v neposlednom rade, sú tu študenti. Títo prijímajú nový systém rôzne. Niektorí pozitívne, iný kritizujú všetko. Dosť ťažko sa vyrovnávajú s tým, že pracovná plocha vyzerá často inak a inak sa aj správa, pretože strácajú svoje pohodlie „znalosti“ systému. Na druhej strane, rozširujú si svoj obzor a neodchádzajú z hodín s jednosmernými informáciami (ako moja dcéra, ktorá sa na hodinách informatiky naučila, že, citujem, „počítač bez Windows nefunguje…).