Bootojeme po síti II

Transkript

Bootojeme po síti II
Bootojeme po síti - část II
1. pxelinux
Pxelinux je derivátem projektu Syslinux (syslinux.zytor.com), který téměř jistě znáte, tedy pokud jste
někdy instalovali nějaké distro jako Debian, Mandrake, Fedora, nebo prostě bootovali Danix.Je to ten
zavaděč, který se vám objevil při prvním nabootování z diskety, nebo CD.
Výhodou Pxelinuxu je hlavně větší flexibilita - kromě jádra linuxu dokáže zavést i jiné věci, nás
zajímá zejména to, že dokáže zavést další PXE bootstrap, tedy třeba pxegrub... uvidíme dále.
PXElinux rozlišuje soubory podle přípon. Z toho nás hlavně zajímá, že pro PXE bootstrap je potřeba
přidat příponu ".0" Pokud soubor nemá příponu, nebo má nějakou nerozpoznanou, je brán jako jádro
linuxu.
Jaký konfigurační se použije? Sice je možné, podobně jako u PxeGrubu nastavit konfigurační soubor
pomocí speciální dhcp option, ale lepší je spolehnout se na "vrozenou" inteligenci. Pxelinux totiž
hledá svůj konfigurační soubor na TFTP serveru v tomto pořadí:
/pxelinux.cfg/01-88-99-aa-bb-cc-dd
;MAC adresa
/pxelinux.cfg/C000025B
; IP adresa v HEX <- 192.0.2.91
/pxelinux.cfg/C000025
/pxelinux.cfg/C00002
/pxelinux.cfg/C0000
/pxelinux.cfg/C000
/pxelinux.cfg/C00
/pxelinux.cfg/C0
/pxelinux.cfg/C
/pxelinux.cfg/default
Takže v jednoduché konfiguraci stačí nazvat konfigurační soubor jako default a umístit ho do
podadresáře pxelinux.cfg tftp serveru. Pokud bychom se např chtěli omezit na ČVUT, pojmenujeme
soubor "9320" (147d -> 93h; 32d -> 20h).
Obsah konfiguráku nastíním nejlépe příkladem:
default local
prompt 1
timeout 300
display boot.msg
F1
F2
F3
F7
boot.msg
linst.msg
danix.msg
snake.msg
label local
localboot 0
append -
#uvodni splash
#splashe po stisknuti ruznych klaves
# lokalni boot, s kompletnim odebranim Pxe
label dos
# bootovani dosu pomoci specialniho bootstrapu
kernel tipundi2.0
append label memdos
# bootovani dosu pomoci memdisku
kernel memdisk
append initrd=unditcpip.img keeppxe
label memtest
kernel memtest
append -
#proste memtest
label lt
# takhle se bootuje LTSP.org
kernel ltsp/bzImage-2.4.24-ltsp-1
append init=/linuxrc rw root=/dev/ram0 initrd=ltsp/initrd-2.4.24-ltsp-1.gz
LABEL danix
#a takhle danix
KERNEL danix/vmlinuz
APPEND nfsdir=192.168.0.1:/mnt/extra/MOON/Install/Os/Linux/DaNiX/cd nodhcp
lang=cs ramdisk_size=100000 init=/etc/init noeject noprompt nomce vga=791
initrd=danix/miniroot.gz quiet wheelmouse BOOT_IMAGE=knoppix
2. memtest
Nejjednodušší je nabootovat ze sítě memtest (memtest86.com). To je totiž vlastně falešný kernel který
ověří paměť. Namá žádné nastavitelné parametry, takže není co řešit.
3. memdisk
Memdisk je také součástí projektu Syslinux a slouží k bootování dosu z netradičních médií, jakým síť
určitě je. Opět se jedná o "falešný kernel" který načte jako svůj inicalizační ramdisk do paměti obraz
diskety (nebo jiného média) a pověsí se na INT13, tedy obsluhu disků, kde způsobí přesměrování
obsluhy reálné diskety na obsluhu fiktivního disku, vytvořeného z obrazu v paměti.
V praxi to vypadá tak, že při bootu se připojí na pozici "A:" obraz z paměti, ze kterého se bootuje a na
pozici "B:" se přesune reálná disketová mechanika. Nyní je na nás, abychom v DOSu rozchodili síť a
napojili se třeba přes SMB na nějaký server. To je možné udělat například pomocí Microsoft
Lanmanager client, který se dá odkudsi z Internetu stáhnout. Detailní popis je nad rámec této
přednášky, případné zájemce odkazuji na podrobné prostudování nějakého obrazu, který funguje.
Poznámka: Pro rozjetí sítě Microsoft v DOSu je potřeba tzv. NDIS ovladač síťové karty, to je soubor s
příponou .dos - najdete ho na CD ke každé slušné síťové kartě. Můžeme se ale obejít i bez něj existuje totiž wrapper, který se chová jako NDIS ovladač, ale přítom příkazy pouze zabaluje do
příkazů UNDI (to je ten ovladač který je vestavěn v bootROM síťové karty). Díky tomu se nám stane
nabootovaný DOS nezávislý na konkrétním HW počítače. Je však potřeba nějak říci pxelinuxu, že
nemá PXE stack odebírat z paměti - to se dělá přidáním parametru "keeppxe".
Ještě jedna poznámka: Zjistil jsem, že místo memdisku je lepší použít přímo PXE bootstrap od firmy
3Com, protože obsahuje i prográmek freemem, který dokáže po úspěšném nabootování odstranit obraz
diskety z paměti a přemapovat zpět fyzickou diskatu na A:. Tento bootstrap vygenerujete spolu s
obrazem diskety pomocí Windowsového programu imgedit, který je součást balíku firmy 3com
"util430.exe". Na webu 3com hledejte "3CMBA-D".
4. danix
Danix je česká mutace světoznámé distribuce Knoppix. Tato distribuce umožňuje mimo jiné také
režim "Knoppix-TerminalServer", ve kterém se samotný počítač s knoppixmem stane serverem, který
umožní ostatním stanicím ze sítě nabootovat danix přes síť. Na nás tedy zbývá přenést konfiguraci na
jiný počítač, tak aby nám na serveru nemusel běžet Danix (já vím, že je to skvělý OS, ale na servery
se věru nehodí :-) Takže nejprve nabootojeme danix, spustíme "knoppix-terminalserver" a proklikáme
průvodce.1
Poté, co průvodcem projedeme, uložíme si potřebné soubory z adresáře /tftpboot. Zejména se jedná o
konfigurační soubor pxelinuxu, samotné jádro a inicializační ramdisk. Také pohledem do souboru
"/etc/exports" zjistíme, že je potřeba exportovat přes NFS obsah CD s danixem, takže na server buďto
zkopírujeme obsah Danix LiveCD, nebo jeho ISO obraz, který přes loopback (mount -o loop
danix.iso /mnt/danix) připojíme a připojený vyexportujeme. Cestu k exportovanému obrazu musíme
předat kernelu danixu v konfiguračním souboru pxelinux.cfg, viz výše.
1 Pokud je počítač v tuto chvíli připojen do veřejné sítě, doporučuji na chvíli vytáhnout kabel z karty, protože průvodce
se pokusí spustit DHCP a než ho stihneme killnout, mohl by nás nějaký aktivnější administrátor zardousit UTP
kabelem :-)
Tím je konfigurace hotova.
Více info
20server
viz:
http://www.danix.cz/Members/Kato/Tbery/termserv/view?searchterm=terminal%
5.Terminálový server
Danix je sice pěkný, ale někdy se hodí mít namísto hromady samostatných klientů jeden "tlustý"
server, který poskytuje prostřednictvím X protokolu své prostředky a mnoho "tenkých" klientů.
Nejdříve si vysvětlíme, jak vlastně X funguje. X window system se dělí na servery a klienty. Servery
komunikují s hardwarem a přes hardware s uživatelem. Když spustíte samotný X server, uvidíte
pouze známý černobílý vzorek a ukazovátko ve tvaru X. Aplikace, které v X window systému
spouštíme jsou tzv. X klienti. Ti navážou přes síť (většinou přes loopback, nebo tzv. unix domain
socket) spojení se serverem a požádají ho o např. nakreslení okna. Server jim na oplátku posílá
informace o tom, kam uživatel klikl myší, atd.
Důležité je hlavně uvědomit si, že každý "tenký klient" je pouze X server, ten "tlustý server" obsahuje
pouze X klienty, kteří se připojují k X serverům. Z tohoto popisu je jasné, že ten "tlustý server" se
nějak můsí dozvědět, kde všude běží X servery, aby s nimi začal komunikovat. K tomu se používá
protokol XDMCP (X Display Manager Control Protocol.) Tímto protokolem se každý X server ohlásí
"Display Manageru", kterýžto s ním začne komunikovat. Display manager zná asi každý, je to ten
program, co zobrazuje dialogové okno s přihlašovacím jménem a heslem, pokud se přihlašujete přes
X Window System.
V praxi to tedy probíhá takto: Na "tlustém serveru" běží X display manager (xdm, kdm, nebo gdm).
Ten poslouchá na portu protokolu XDMCP. Jakmile se spustí nějaký "tenký klient", popátrá obvykle
vysíláním (X -broadcast), nebo přímým pořadavkem (X -query a.b.c.d) po serveru, na kterém běží
XDMCP povolený display manager. Když ho najde, oznámí mu: "jsem tady!" a vymění si s ním
autorizační údaje (standardně jsou totiž X servery nastaveny tak, aby si jen tak někdo nemohl na
serveru cokoli spustit). Nato display manager pošle na X server svoje přihlašovací okno a pokud dojde
k úspěšnému přihlášení, nastaví přihlásivšímu uživateli proměnné DISPLAY a X_AUTHORITY tak,
aby každý nově spuštěný klient (tedy program) posílal svůj výstup na "tenkého klienta". Protože
unixové systémy mají opravdový multitasking a multiusering, není problém, když takovýchto klientů
bude víc než jeden.
Celý problém tedy lze rozdělit na následující podproblémy:
1. Zprovoznit na "tlustém serveru" X display manager tak, aby přijímal požadavky od vzdálených
počítačů protokolem XDMCP.
2. Vytvořit malou live distribuci, která nastartuje ze sítě na každém "tenkém klientovi" a spustí na
něm X server.
Začneme tím jednodušším, a to konfigurací X display manažeru. Máme na výběr 3 druhy: xdm, který
je součástí balíku X Window system; kdm, který je součástí KDE a nakonec gdm, který je součástí
Gnome. My se zaměříme na kdm, čiště z osobních preferencí.
kdm se konfiguruje velice podobně jako xdm, hlavním rozdílem je umístění konfiguračních souborů,
které je:
•
V případě xdm v adresáři /etc/X11/xdm/
•
V případě kdm v adresáři /usr/kde/3.4/share/config/kdm/
Zde se nacházejí soubory, které konfigurují celé chování programu kdm. Nás z toho zajímá hlavně:
1. Hlavní konfigurační soubor kdmrc, kde je úplně na konci obvykle zakázán protokol XDMCP:
[Xdmcp]
Enable=false
2. Konfigurační soubor Xaccess omezující přístup, který ovšem bývá nastaven správně:
*
#any host can get a login window
Po úpravě těchto konfiguračních souborů a restartu, resp. reloadu kdm by již mělo být možné připojit
se přes X vzdáleně. To nejlépe vyzkoušíme tak, že na jiném počítači spustíme X -query a.b.c.d, kde
a.b.c.d je adresa, nebo název počítače s XDM. V případě, že nám na jiném počítači už běží X,
vyzkoušíme funkčnost pomocí příkazu Xnest :1 -query a.b.c.d 2
Pokud nevidíme nic než jen černobílý vzorek a kurzor ve tvaru X, je kromě chyby v nastavení xdm
také možná chyba v nastavení firewallu jiného počítače. Ten se totiž po spuštění X serveru chová jako
server (nečekaně :-) a poslouchá na tcp portu (6000 + číslo displeje). Na ten port se taky xdm snaží
připojit.
Teď je na řadě ta složitější část. Když už totiž chceme tenkého klienta, tak obvykle chceme, aby byl
opravdu tenký, což v našem případě znamená zejména bez pevného disku. Zde narážíme na problém,
že většina běžných distribucí se bez harddisku neobejde. Existují ale nejméně dva projekty, které se
zaměřují přímo na vytvoření live distribuce, která nastartuje ze sítě a spustí X server - starší a klasický
Linux Terminal Server Project - ltsp.org a novější, netradiční PXES Universal Linux Thin Client pxes.sf.net. Oba si popíšeme.
Linux Terminal Server Project
LTSP.org je mini distribuce se vším všudy, včetně balíčkovacího systému. Nebudu zde popisovat
postup instalace, jenom podotknu, že pro Gentoo linux je připraven ebuild a howto na
http://www.gentoo.org/doc/en/ltsp.xml, pro ostatní distribuce buď existuje také balíček, nebo lze
nainstalovat ručně. V tom případě si stáhneme malý balíček s instalátorem, který spustíme a on nám
nabídne seznam balíků, které můžeme nainstalovat, ty pak stáhne a nainstaluje. Tento instalátor nám
také pomůže s nastavením celého serveru, včetně xdm, dhcp, tftp, nfs.
LTSP.org se skládá ze tří základních částí:
1. obraz kernelu, který bude nabootován na každém tenkém klientu
2. obraz inicializačního RAMdisku, který se předá při vzdáleném bootování kernelu a slouží hlavně
pro navázání komunikace s NFS serverem a připojení kořenového stromu NFS.
3. vlastní kořenový strom, který je ze serveru vyexportován přes NFS.
Vzhledem k tomu, že ve stromu LTSP nejsou z úspory místa žádné vývojové nástroje, je dost
problematické do distribuce jakkoli zasahovat, a to i například pro nastavení českého prostředí
(klávesnice.)
PXES Universal Linux Thin Client
PXES je už podle názvu univerzálním tenkým klientem, který je svým zezřením i způsobem instalace
co nejvíce přiblížen uživatelům MS Windows. Kromě X protokolu navíc podporuje i Microsoftí RDP,
Cytrix ICA, VNC, a jednoduchou lokální plochu. Na rozdíl od LTSP.org nepoužívá NFS strom, ale
pouze obraz kernelu a inicializační RAMdisk, který má 16 MB a používá komprimovaný souborový
systém squashfs. Díky tomu k rozchození stačí pouze tftp a dhcp. Preferovaný způsob instalace
spočívá ve stažení binárního obrazu RAMdisku a kernelu a jejich nakopírování do kořene tftp serveru.
Je také možné stáhnout zdrojový strom a inicializační RAMdisk si upravit podle svých potřeb, k
tomuto však chybí dokumentace :-(
Každý PXES klient navíc obsahuje SSH server, přes který lze klienta obsluhovat a také VNC server,
kterým lze sledovat přesný obsah obrazovky klienta.
2 Xnest je takový zvláštní prográmek, který je součástí X window systému a chová se zároveň jako klient i server. Jako
klient se chová pro X server ve kterém je spuštěn, ale zároveň se chová jako server, to znamená, že na jeho ploše si
mohou kreslit klienti, kteří se k němu připojí. Parametr :1 je na příkazovém řádku proto, aby se Xnest spustil jako
server s číslem 1 - defaultně se spouští s číslem 0, to ale už je zabrané "rodičovským" X serverem.
Společné problémy terminálových serverů
Když už se povede spustit tenkého klienta, narazíme na několik dalších problémů, které mají obvykle
společného jmenovatele: snažíme se používat něco ze "svého" počítače (kterýžto je tenkým klientem),
a přitom používáme prostředky serveru, který se proti tomu obvykle brání.
•
Zvuk na tenkých klientech. Pokud jsou na serveru v pořádku práva, neměl by povolit komukoli
zapisovat do /dev/dsp. Díky tomu si programy vyžadující zvukový výstup budou stěžovat. Řešit se
to dá jedině použitím zvukového serveru, který podporuje síťovou transparentnost, to znamená
například esd nebo nas. Všechny aplikace navíc musí daný zvukový server podporovat, což je
problém zejména u komerčních produktů, jako Real Player, Flash, Skype, ...
•
Lokální zařízení na tenkých klientech. Občas si člověk chce z počítače něco odnést na flash disku,
nebo CD, někdy možná i na disketě. Místo toho se ale snaží otevírat disketu na serveru. Na to
existuje řešení, které spočívá ve spuštění NBD (Network Block Device) serveru na každém
klientovi a úpravě mount a umount skriptů. NBD pak vyexportuje z každého klienta blokové
zařízení jako takové a vlastní akt přimountování proběhne na serveru.
Závěr
Tento text byl napsán v Openoffice.org 1.1.4. Za všechny překlepy se omlouvám. Případně uvedené
ochranné známky patří jejich vlastníkům. Tento text může být v nezměněné podobě libovolně šířen.
Ondřej Caletka
20. 9. 2005
[email protected]