Dnes jsem měl za úkol rozchodit LTSP (Linux Terminal Server Project) a lokální mechaniky. Již samotné rozchození LTSP se neobešlo bez problémových partií. V dokumentaci projektu je přesně popsáno, jak na to. V tomto zápisu vypíšu některé špeky, na kterých jsem se nachytal.

Instalace

Nejrve je třeba nainstalovat nějakou distribuci včetně X Window Systemu, dále nainstalovat balíčky ftfp-server, dhcp-server a nfs-server. Pokračuje to instalací ltsp-utils balíčku (k dispozici je malinké rpmko nebo tarball). Tento se z tarballu nainstaluje ne do /usr/local/sbin ale do /usr/sbin. Ale budiž, pak jej spustíte a pomocí pěkné nabídky nainstalujete ltsp do adresáře /opt.
Součástí je velmi pěkný konfigurační nástroj, se kterým nakonfigurujete všechny potřebné služby. Umí například aktivovat XDMCP pro přihlašovací obrazovku, aktivovat a nastavit služby TFTP, DHCP a NFS.

Konfigurace

Konfigurátor umí služby NFS a TFTP nakonfigurovat zcela sám (stačí mu zadat správné cesty), u DHCP už je to složitější. Nakopíruje tam ukázkovou konfiguraci, kterou musíte zeditovat a upravit. To by nebyl až takový problém, ale z mě nepochopitelného důvodu není součástí ukázkové konfigurace bootování po síti.
Bootovat po síti můžete buď inteláckým protokolem PXE, nebo Etherbootem (nebo jim podobným). První možnost má výhodu v tom, že nepotřebujete síťovou kartu flasnout. U PXE máte na výběr ze dvou možností: buď použijete PXELINUX (součást balíku SYSLINUX), nebo si můžete vygenerovat PXE loader pro vaši síťovou kartu.

První způsob se mi nepodařilo rozchodit s kartou PCNET32, která je emulována ve VMWare. Problém byl ten, že karta špatně komunikovala s TFTP serverem. V diskuzích jsem se dočetl, že to má co do činění s velikostmi rámců ethernetu a protokolu tftp. Zkrátka končilo to na tom, že karta bootovala několik desítek minut (zprávy Trying to load se totiž několikrát opakují). Nakonec, když načetl konečně syslinux konfigurátor, tak nemohl najít jádro.

Druhý způsob už byl úspěšný, vygeneroval jsem si PXE boot loader pro danou síťovou kartu a musel jsem překopat konfiguraci DHCP démona. Docela jsem s tím bojoval, protože můj PXE boot rom ignoroval nabídky na adresy, dokud nebyla dhcpd.conf uvedena volba next-server. Uvedu tedy funkční konfiguraci:
ignore client-updates;
ddns-update-style interim;
use-host-decl-names on;

allow booting;
allow bootp;
next-server 192.168.47.128;

default-lease-time 21600;
max-lease-time 21600;

option subnet-mask 255.255.255.0;
option broadcast-address 192.168.47.255;
option routers 192.168.47.128;
option domain-name-servers 192.168.47.128;
option domain-name "domena.net";
option log-servers 192.168.47.128;
option root-path "192.168.47.128:/opt/ltsp/i386";

subnet 192.168.47.0 netmask 255.255.255.0 {
range dynamic-bootp 192.168.47.100 192.168.47.200;
}

group {
if substring (option vendor-class-identifier, 0, 9) = "PXEClient" {
filename "/pxe/eb-5.4.3-pcnet32.zpxe";
} else {
filename "/lts/vmlinuz-2.6.17.8-ltsp-1";
}

host ws001 {
hardware ethernet 00:0c:29:dd:5d:c1;
fixed-address 192.168.47.90;
}
}

Vysvětlivky:
  • next-server – adresa se serverem, na kterém je umístěno jádro (shodné s DHCP; bez této volby mi PXE boot rom nepřijímal znovu IP adresu)
  • root-path – adresa a cesta k rootu bezdiskové stanice
  • group – skupina hostů se specifickým nastavením (můžete vytvořit více skupin s různými verzemi jádra, PXE boot romy pro síťovky a podobně)
  • filename – soubor s PXE boot romem (první fáze bootu); soubor s linuxovým jádrem (druhá fáze bootu)
  • host – každý host musí být specifikován zvlášť a explicitně (jinak to opět nenabootuje)

Lokální mechaniky

Postupoval jsem přesně podle návodu. Dále jen stručně:
  • Modul perl-X11-Protocol jsem nainstaloval ručně, protože mašina neměla v té době přístup na internet.
  • Balíček ltsp-server-pkg-static jsem použil z tarballu, dal jsem jej do /usr/local/src a podle README vytvořil symlinky do /usr/sbin a /usr/bin.
  • Jaderný modul fuse a fusetools z Mandrivy 2006 nebyly funkční (chyba Illegal argument –). Zkompiloval jsem aktuální verzi balíku fuse (2.6.7) ručně, make install nainstaloval fuse do /usr/local a jaderný modul jsem přejmenoval na fuse-compiled.ko, umístil do /lib/modules a spustil depmod -a.
  • Podle manuálu jsem přes /etc/X11/init.d/ nechal spouštět na klientovi démona, který se stará o připojování, odpojování a posílání dat přes síť.
  • Udev jsem nastavil tak, aby měl /dev/fuse práva 666.
  • V Mandrivě nevím proč nemá uživatel v cestě PATH adresář /usr/local/bin, takže jsem musel vytvořit symlink /usr/bin/fusermount do /usr/local/bin.
  • Je nutné zkontrolovat, zda je proměnná HOSTNAME na konzoli (tj CTRL+ALT+F2) terminálu nastavena správně a shodně je také v Xech nastavena proměnná DISPLAY. Do terminálu se lze dostat jen v případě, že v lts.conf je nakonfigurován SCREEN_02 = shell.

Tento zápisek vznikl převodem z mého starého blogu. Ne všechny texty byly takto převedeny, kompletní archiv již není k dispozici.