Hlavní navigace

DVD mechaniky končí, přichází čas startovat ze sítě

Adam Štrauch

Téměř všechny dnešní desky umí nabootovat ze sítě, ale tato funkce se stala spíše přehlíženou. Je to škoda, protože v sobě skrývá nečekané pohodlí, když se něco stane nebo když je potřeba něco nainstalovat. Pojďme si zkusit nastavit DHCP a TFTP server tak, aby nám bootování ze sítě chodilo, a nabootujeme si známou distribuci Parted Magic.

Před nedávnem se mi stalo, že jsem skončil bez DVD mechaniky a tím pádem i bez spolehlivého způsobu, jak spravit poškozený systém. Ve stejně době začal zlobit disk v notebooku, který musel běžet za každých okolností, a tak jsem se rozhodl, že vyzkouším, jak funguje bootování ze sítě a jestli to je použitelné pro běžného uživatele. Na domácí 100Mbit síti jsem do toho šel s tím, že na konci na mě bude čekat systém, který se možná občas někde trošku zadrhne, ale jinak ho od normálního stroje s diskem nepoznám.

Toto očekávání bylo mylné, protože systém běžící z NFS na zmíněné síti reaguje pomalu i při práci z řádky, natož z X Serveru. Možná se bude 1 Gbit síť chovat jinak, ale i tak bych pro vytvoření bezdiskové stanice volil jiné řešení. Od sepsání několika postřehů mě to ovšem neodradilo.

Stručné představení PXE

Za přítomnost bootování ze sítě téměř na každé dnešní základní desce vděčíme firmě Intel a její technologii Preboot Execution Environment (PXE). Ta v sobě kombinuje další technologie, které umožňují ze sítě načíst zavaděč systému. Takže když v bootovacím menu vaší základní desky zvolíte volbu nabootuj ze sítě, tak se deska pokusí získat z DHCP serveru IPv4 adresu a posléze se začne dožadovat informací, kde si má co stáhnout.

Klíčovým prvkem je krom DHCP serveru Trivial File Transfer Protocol (TFTP) server, kde jak už název napovídá, jde o jednoduchý protokol pro přenos souborů. Nepodporuje „zbytečné“ funkce jako výpis souborů nebo jejich mazání. Jediné, co umí, je soubor přijmout nebo odeslat. Proto je jednou informací od DHCP serveru také cesta k zavaděči, který se má ze sítě natáhnout.

Po stažení je bootloader nakopírován do RAM a spuštěn. Spojení k TFTP serveru má dále k dispozici, takže ze stejného místa, ze které byl stažen on, stáhne také jádro systému a initial ramdisk (initrd). Krom jádra a initrd může být stažen i celý obraz systému, například s instalací nějaké distribuce. Možnosti jsou široké a závislé na konkrétním zavaděči. Já jsem si vybral syslinux, protože je jednoduché ho nastavit, je velmi přizpůsobivý, existuje k němu hromada návodů a používá ho celá řada instalačních médií. GRUB má také svou PXE variantu a určitě se najdou situace, kdy je výhodnější použít ten.

Konfigurace serveru

Přes síť nabootuje kdejaká linuxová distribuce, jejíž initrd dokáže připojit NFS disk a nastavit ho jako root. V Debianu a na něm založených distribucích to není problém. Jiné distribuce, většinou nějaké jednoúčelové a hlavně menší, dokáží existovat pouze v initrd a žádný disk, tedy ani síťový, připojovat nemusí. Všechno se v takovém případě stáhne do paměti RAM a běží z té.

Aby se s naším serverem/routerem chtěla nějaká základní deska vůbec bavit, musíme mít dobře nastavený DHCP server a TFTP server. Obojí je na Linuxu dostupné v následujících balíčcích:

  • dhcp3-server (někdy jen dhcp-server)
  • tftpd nebo atftpd

Obojí může být na odlišných strojích, takže o DHCP se může postarat váš router a TFTP může být na domácím serveru. Vypsané balíčky nejsou jedinou možností, ale zato stoprocentně fungují.

Konfigurace DHCP serveru není nějak složitá. Takto vypadá kompletní konfigurační soubor:

allow booting;
allow bootp;

authoritative;
ddns-update-style ad-hoc;

subnet 192.168.1.0 netmask 255.255.255.0 {
      range 192.168.1.2 192.168.1.254;
      option ip-forwarding off;
      option broadcast-address 192.168.1.255;
      option subnet-mask 255.255.255.0;
      option domain-name-servers 192.168.1.1;
      option routers 192.168.1.1;
      filename "/pxelinux.0";
      next-server 192.168.1.1;
} 

Nastavení podsítě a čtyři řádky k našemu účelu. První dva řádky řeknou DHCP serveru, že má odpovídat na požadavky související s PXE. Další dva řádky najdeme na konci definice podsítě, kde klientům, co budou chtít, řekneme, že zavaděč najdou na drese 192.168.1.1 a mají se shánět po souboru /pxelinux.0. Více informací ke všem volbám najdete v manuálové stránce.

Na rozdíl od DHCP serveru, TFTP trochu bojuje, než se rozhodne pracovat. Často je v distribucích spojován s daemonem inetd, který spouští služby až na základě požadavku, aby zbytečně neplýtvali systémovými prostředky. Osobně toto chování zrovna nevítám, zvlášť v dnešní době a navíc u daemonů, které zkonzumují řádkově stovky kB RAM.

Pro instalaci si můžeme vybrat buď vylepšený BSD TFTP v balíčku tftpd-hpa nebo atftpd. S druhým zmíněným mám dobré zkušenosti, i když se mi s ním nedařilo přenést několik stovek MB velké soubory. Tftpd-hpa je podle popisu pro PXE optimalizovaný, takže by mohl fungovat lépe, ale dlouhodobě jsem ho nikam nenasazoval a nemohu říci, jestli funguje správně. V článku budu dále používat atftpd.

Po instalaci balíčku atftpd nastavíme standalone režim. To znamená, že ho vytrhneme ze spárů inetd a atftpd bude fungovat na vlastní pěst. Na Debianu postavených distribucích to zařídíme úpravou souboru /etc/default/at­ftpd.

USE_INETD=false 

Ve stejném souboru o řádek níže najdeme parametry pro spuštění daemona. Zde si možná budete chtít upravit cestu, na které má daemon hledat soubory. Nakonec se ujistíme, že žádná instance atftpd neběží:

$ ps aux | grep atftp 

A můžeme daemona nastartovat.

# /etc/init.d/atftpd start 

Syslinux

Teď nastal čas na zavaděč. Z důvodů uvedených výše použijeme syslinux, který najdeme ve stejnojmenném balíčku. V adresáři /usr/lib/sysli­nux/ pak najdeme všechno, co budeme potřebovat, aby klientský počítač načetl zavaděč a případně podle konfigurace zobrazil bootovací menu.

Připravíme si tedy adresářovou strukturu:

# cd /srv/tftp
# mkdir pxelinux.cfg
# cp /usr/lib/syslinux/pxelinux.0 .
# cp /usr/lib/syslinux/vesamenu.c32 . 

Na prvním řádku vytvoříme adresář pxelinux.cfg, kde se bude nacházet konfigurace zavaděče, a potom zkopírujeme samotný zavaděč pxelinux.0 s mo­dulem pro grafické menu. Všimněte si, že právě pxelinux.0 je uveden v konfiguraci DHCP serveru.

Pokud jste vše dělali správně, tak při pokusu o nabootování ze sítě byste měli vidět alespoň zavaděč, i když pravděpodobně s chybami o neexistující konfiguraci.

Parted Magic

Parted Magic je linuxová live distribuce, která má obrazy i pro bootování ze sítě. Celý systém je nacpaný do initrd, takže běží z paměti RAM a je potřeba ho celý přenést. Odměnou za delší bootování je rychlost a nezávislost na připojení k síti. Initrd je docela velký (~150 MB), a proto se hodí do naší ukázky. Můžeme si na něm vyzkoušet, jak se s tak velkým souborem náš TFTP server popere. Pokud by náhodou měl problémy, je možné initrd rozdělit na menší části. Začneme s tím, že si stáhneme poslední verzi (v době psaní článku 6.1), konkrétně soubor pmagic-pxe-6.1.zip a rozbalíme ho. Je to balík s jádrem, initrd a dalšími nástroji, z nichž jeden dokáže initrd rozdělit na kousky. To můžeme rovnou udělat.

$ cd pmagic-pxe-6.1/pmagic
$ ../boot/pxelinux/split-initramfs.sh 

Jde o krátký bashový skript, který na konci vypíše i pár řádek pro konfiguraci syslinuxu a samozřejmě po sobě zanechá 16 MB veliké kousky původního initrd.

Nakonec celý adresář pmagic, kde se nachází jádro a rozkouskovaný initrd, zkopírujeme do /srv/tftp.

syslinux podruhé

Nyní se vrátíme do adresáře TFTP serveru ke konfiguraci syslinuxu. Oblíbeným editorem otevřete soubor pxelinux.cfg/de­fault a zkopírujte do něj:

DEFAULT vesamenu.c32
PROMPT 0
MENU title Misha PXE boot
TIMEOUT 600

MENU WIDTH 80
MENU MARGIN 10
MENU ROWS 12
MENU TABMSGROW 18
MENU CMDLINEROW 12
MENU ENDROW 24
MENU TIMEOUTROW 20
ONTIMEOUT localboot

LABEL pmagic
MENU label Parted Magic
MENU default
LINUX pmagic/bzImage
APPEND initrd=/pmagic/initbase,/pmagic/pmagic-6.1.sqfs00,/pmagic/pmagic-6.1.sqfs01,/pmagic/pmagic-6.1.sqfs02,/pmagic/pmagic-6.1.sqfs03,/pmagic/pmagic-6.1.sqfs04,/pmagic/pmagic-6.1.sqfs05,/pmagic/pmagic-6.1.sqfs06,/pmagic/pmagic-6.1.sqfs07,/pmagic/pmagic-6.1.sqfs08 edd=off noapic     load_ramdisk=1 prompt_ramdisk=0 rw vga=791 loglevel=0 max_loop=256 

Tímto řekneme syslinuxu, že má zobrazit grafické menu daných rozměrů, které se objeví na 60 sekund. Pokud uživatel nic neudělá, bude se pokračovat bootováním z lokálních médií. Na konci pak najdeme podobnou konfiguraci, kterou nám vyplivl skript split-initramfs.sh doplněnou o parametry položky menu.

Teď, pokud jste nikde neudělali žádnou chybu, měly by všechny vaše stroje být schopny nabootovat ze sítě distribuci Parted Magic.

Závěr

Zavádění systému ze sítě má své nesporné výhody, ale určitě ne ve všech oblastech. Vzhledem k tomu, že syslinux dokáže nabootovat i iso obraz, tak s dostatečně velkou RAM prakticky odpadají problémy s instalačními médii nebo do stroje na přehrávání filmů u televize už nutně nepotřebujete disk. Další využití si určitě najdete sami. Pokud budete chtít pokračovat dál a nabootovat si plnohodnotný systém s využitím NFS, zjistíte, že bez opravdu rychlé sítě je grafické rozhraní prakticky nepoužitelné.

Našli jste v článku chybu?

20. 5. 2011 0:40

Bezidsky používám kde můžu přes 10 let. Flashuju tak BIOS, bootuju svoje SUNy, instaluju Debian, používám clonezillu. Kdysi jsem i nahrával EPROMky na kartách. Bezdisk na NFS chodi splehlivě. Mám takhle farmu www serverů a bez problémů. Jediné kde člověk narazí jsou BIOSy základních desek. Občas se stane, že boot po síti moc nefunguje někdy pomůže upgrade BIOS někdy tam člověk musí strčit jinou kartu jindy ano to ne.

20. 5. 2011 7:31

V clanku mozna melo zaznit neco malo o projektu LTSP (http://www.ltsp.org). Hrali jsme si s tim ve skole cca pred 8 lety a na 100Mbps siti tenkrat plynule bezela cela ucebna. Doma jsem pak na 386 s 10Mbps sitovou kartou zkousel takhle pouzivat KDE2 a taky to fungovalo. Pokud autorovi laguje system na 100Mbps, je treba hledat a odstranit pricinu (napriklad poladit parametry nfs, jako prvni me napada async, pomoct by mohly i jumbo frames na urovni site)

Vitalia.cz: Když přijdete o oko, přijdete na rok o řidičák

Když přijdete o oko, přijdete na rok o řidičák

Lupa.cz: Kdo pochopí vtip, může jít do ČT vyvíjet weby

Kdo pochopí vtip, může jít do ČT vyvíjet weby

Měšec.cz: mBank cenzuruje, zrušila mFórum

mBank cenzuruje, zrušila mFórum

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

120na80.cz: Jmelí je více léčivé než jedovaté

Jmelí je více léčivé než jedovaté

Vitalia.cz: „Připluly“ z Německa a možná obsahují jed

„Připluly“ z Německa a možná obsahují jed

DigiZone.cz: Rádio Šlágr má licenci pro digi vysílání

Rádio Šlágr má licenci pro digi vysílání

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Vitalia.cz: Znáte „černý detox“? Ani to nezkoušejte

Znáte „černý detox“? Ani to nezkoušejte

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

Vitalia.cz: Proč vás každý zubař posílá na dentální hygienu

Proč vás každý zubař posílá na dentální hygienu

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

Vitalia.cz: Jmenuje se Janina a žije bez cukru

Jmenuje se Janina a žije bez cukru

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

Vitalia.cz: Mondelez stahuje rizikovou čokoládu Milka

Mondelez stahuje rizikovou čokoládu Milka

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá