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

Adam Štrauch 20. 5. 2011

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.

widgety

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?
120na80.cz: Pálení žáhy: která jídla ne a co nás uzdraví?

Pálení žáhy: která jídla ne a co nás uzdraví?

Root.cz: Hořící telefon Samsung Note 7 zapálil auto

Hořící telefon Samsung Note 7 zapálil auto

Vitalia.cz: Voda z Vltavy před a po úpravě na pitnou

Voda z Vltavy před a po úpravě na pitnou

Vitalia.cz: Tesco nabízí desítky tun jídla zdarma

Tesco nabízí desítky tun jídla zdarma

Lupa.cz: Patička e-mailu závazná jako vlastnoruční podpis?

Patička e-mailu závazná jako vlastnoruční podpis?

120na80.cz: Co je padesátkrát sladší než cukr?

Co je padesátkrát sladší než cukr?

Vitalia.cz: Tohle jsou nejlepší česká piva podle odborníků

Tohle jsou nejlepší česká piva podle odborníků

DigiZone.cz: Technisat připravuje trojici DAB

Technisat připravuje trojici DAB

Podnikatel.cz: Byla finanční manažerka, teď cvičí jógu

Byla finanční manažerka, teď cvičí jógu

DigiZone.cz: Parlamentní listy: kde končí PR...

Parlamentní listy: kde končí PR...

Vitalia.cz: Jsou vegani a vyrábějí nemléko

Jsou vegani a vyrábějí nemléko

Lupa.cz: Jak se prodává firma za miliardu?

Jak se prodává firma za miliardu?

Podnikatel.cz: Instalatér, malíř a elektrikář. "Vymřou"?

Instalatér, malíř a elektrikář. "Vymřou"?

Podnikatel.cz: Tyto pojmy k #EET byste měli znát

Tyto pojmy k #EET byste měli znát

DigiZone.cz: Digi Slovakia zařazuje stanice SPI

Digi Slovakia zařazuje stanice SPI

DigiZone.cz: Světový pohár v přímém přenosu na ČT

Světový pohár v přímém přenosu na ČT

Vitalia.cz: Fyzioterapeutka: Chůze naboso? Rozhodně ano!

Fyzioterapeutka: Chůze naboso? Rozhodně ano!

DigiZone.cz: DVB-T2 ověřeno: seznam TV zveřejněn

DVB-T2 ověřeno: seznam TV zveřejněn

DigiZone.cz: Numan Two: rozhlasový přijímač s CD

Numan Two: rozhlasový přijímač s CD

Vitalia.cz: Tahák, jak vyzrát nad zápachem z úst

Tahák, jak vyzrát nad zápachem z úst