Portál AbcLinuxu, 9. května 2024 00:00

Jak nabootovat Linux po síti - 2 (praxe)

25. 11. 2005 | Ondřej Valoušek
Články - Jak nabootovat Linux po síti - 2 (praxe)  

V předchozím díle našeho seriálu jsme si ukázali technické základy nutné pro boot Linuxu po síti. Nyní, když už máme vše připraveno, si ukážeme, k čemu to lze v praxi použít.

Příprava jádra

Pokud máme všechny služby potřebné k doručení jádra správně nakonfigurovány, měl by stroj v začít bez problémů začít zavádět operační systém - jádro nikterak nepozná, jestli bylo spuštěno z disku, diskety, CD nebo ze sítě. Žádné speciální úpravy jádra tudíž nejsou potřeba.

Problém přichází v okamžiku, kdy jádro ukončilo svůj vlastní inicializační proces a je hotovo k připojení rootu a spuštění startovacích skriptů dané distribuce. Zde jsou v zásadě možné dva přístupy:

Přímý boot OS

V tomto případě se jádro okamžitě po své inicializaci pokouší připojit root a zahájit start OS. Všechny potřebné údaje k tomuto kroku musí mít připraveny prostřednictvím parametrů - tedy například takto:

vmlinuz NFSSERVER=192.168.1.1 NFSROOT=/ext3/boot/Rhel3 ETHERNET=eth0 IPADDRESS=192.168.1.10 NETWORK=255.255.255.0

Vidíme, že kromě popisu umístění OS na NFS serveru je třeba také předat kompletní informace nutné ke správné inicializaci síťové karty - jádro samotné totiž DHCP nerozumí. Dále je třeba mít na paměti, že podpora dané síťové karty, NFS a NFSROOT musí být zakompilována přímo do samotného jádra (tedy žádné moduly).

Právě kvůli těžkopádnosti a neohrabanosti tohoto řešení se tohoto postupu prakticky vůbec neužívá. Bezkonkurenčně nejčastější je tedy druhá metoda.

Dvoustupňový boot pomocí inicializačního RAMdisku (initrd)

V tomto případě jádro po dokončení své vlastní inicializace předá řízení initrd - to je v podstatě mikrodistribuce obsahující vše potřebné k detekci a startu vlastního OS. Obvykle obsahuje moduly a skripty pro inicializaci síťového rozhraní, DHCP, DNS klienta a startovací skript, který to všechno spojí dohromady.

Initrd je sestaven a zakomprimován do jednoho souboru, který je přes TFTP předán vlastnímu jádru jako parametr:

vmlinuz initrd=rhel3-ws-boot/initrd.new init=disklessrc

Takové řešení je podstatně inteligentnější protože:

Praktické využití

1. Instalace OS

Asi nejjednodušším příkladem využití je instalace OS na lokální disk z balíčků, které se nacházejí někde na síti, ke které je počítač připojen. V tomto případě jádru předáme initrd s obrazem instalátoru, který instalaci provede.

Jak už jsem zmínil v předchozím díle (Jak nabootovat Linux po síti), naprostá většina distribucí je na tento způsob instalace připravena a příslušně vyladěný kernel i s initrd ramdiskem najdeme hned na prvním CD - zbývá jen někam na dostupné místo uložit všechny balíčky, nainstalovat jádro s initrd a je vyhráno.

Nejčastěji se s tímto způsobem instalace setkáme, pokud potřebujeme nainstalovat OS na více strojů automaticky - v tomto případě ještě instalátoru prostřednictvím kernel parametrů jako bonus předhodíme soubor s odpověďmi na jeho dotazy:

vmlinuz initrd=rhel3-ws-install/initrd ks=rhel3-ws-install/answer.cfg

... necháme stroj nabootovat přes síť a za pár minut jej máme nainstalován, nakonfigurován a připraven k práci (můj osobní rekord je 9 minut :-).

2. Tenký klient

Tenkým klientem rozumíme nějakou minimalistickou distribuci, která bezdiskově nabootuje a připojí počítač (v tomto případě vlastně jen terminál) ke vzdálenému serveru, na kterém umožní uživateli práci. Taková distribuce obvykle běžně rozumí následujícím protokolům:

Uveďme zde za všechny alespoň dva příklady distribucích pro tenké klienty:

Linux Terminal Server Project - LTSP

Tato distribuce bootuje po síti a kořenový filesystém připojuje pomocí NFS. Má podporu všech výše uvedených protokolů ale žádné vlastní prostředí - po bootu je uživatel okamžitě připojen ke vzdálenému pracovnímu serveru. Viz Linux Terminal Server Project.

Thinstation

Tato distribuce má také podporu všech protokolů, ale od LTSP se liší ve 2 faktech:

Poznámka: Na některé distribuce lze sehnat i komerční podporu (například pro Thinstation). Docela by mě zajímalo, co by podpora udělala, kdyby si někdo začal stěžovat na bug snad ve všech verzích Xorg/XFree86, kdy samotný Firefox či Mozilla puštěný na nějaké nešťastně napsané webové stránce způsobí postupné "užírání" volné paměti na klientu, což nakonec vyústí v dosti nepříjemný pád X serveru a s ním i všech aplikací na něm závislých :-(. V LTSP se ještě dá zprovoznit swap over NFS - tuto možnost Thinstation bohužel nemá.

3. Bezdisková stanice

Poslední možností využití síťového bootu Linuxu po síti, kterou jsem si nechal pro svoji největší zajímavost na konec, je bezdisková stanice. Bezdisková stanice funguje úplně stejně jako počítač s nějakou normální distribucí, co zrovna provozujete, s tím rozdílem, že (jak už sám název napovídá) nemá disk. Jak to funguje?

Dovolím si zde popsat futuristické plány Red Hatu a jeho "stateless Linuxu". Bohužel nevím, jak daleko sahají plány ostatních distribucí (snad čtenáři tohoto článku poví), ale jsem přesvědčen, že alespoň v základech se budou shodovat. Tedy jak na to:

  1. Nainstalujete Red Hat klasickým způsobem lokálně na disk do jednoho oddílu, SELinux nechte vypnut.
  2. Instalaci vezmete a celý filesystem zkopírujete na nějaký připravený NFS server pomocí rsync nebo cp -a.
  3. Na NFS server, kam jste instalaci zkopírovali, nainstalujete balíček system-config-netboot a spustíte.
  4. Postupujete podle příkazů.

- Pokud jste měli drobet štěstí, pak balík system-config-netboot správně nakonfiguroval váš NFS server, opatchoval obraz nainstalovaného OS a jako speciální bonus vám vytvořil initrd se zavaděčem, který i s kernelem nainstaloval na příslušné místo v /tftpboot.

- Pokud jste měli víc štěstí, pak se vám podaří nějaký jiný počítač pomocí PXE a TFTP přimět nabootovat připravené jádro i s vytvořeným ramdiskem a spustit zavaděč obsažený v ramdisku.

- Pokud jste měli opravdu hodně moc štěstí, tak se zavaděči podaří připojit root z obrazu na vašem NFS serveru, kde řízení přidá startovacím skriptům OS.

- No a pokud jste vysloveně našlápnutí klikaři, tak to celé v pohodě naběhne, jako by se nechumelilo - s rootem připojeném vzdáleně přes NFS a read-only.

Poznámky:

Závěr

Osobně vkládám do síťového bootu velké naděje a největším archaickým přežitkem do dnešní moderní doby mi připadají právě velké, křehké a neustále rachotící pevné disky, které je třeba zálohovat.

Neříkám, že síťový boot všechno řeší, ale rozhodně má něco do sebe a v dnešní době, kdy mít počítač automaticky znamená mít počítačovou síť (nebo alespoň síťku :-)), se rozhodně vyplatí vzít tuto možnost v potaz.

Trochu škoda, že něco podobného není možno vykouzlit (alespoň podle mých informací) s nejužívanějším operačním systémem a velkým rivalem Linuxu - Microsoft Windows.

Související články

Jak nabootovat Linux po síti
Na co se často ptáme 1: LILO
FAQ: Jak změnit rozlišení při bootu?
Linux Terminal Server Project
Jak na duální boot s Windows 2000
Jak na animované LILO
cfIDE: Compact Flash přes IDE
SUSE 9.0 - instalace z FTP
NFS+NIS+LTSP - přihlašování na server

Odkazy a zdroje

LTSP.org
Thinstation

Další články z této rubriky

PowerDNS – přívětivý a jednoduchý DNS server
Bootování ze sítě: pxelinux a kořenový adresář na NFS
Těžký život Do Not Track
OpenAFS – servery
Architektura IPv6 – konfigurace adres a objevování sousedů (2)

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.