Smitka development

Jak nabootovat vlastní Gentoo LiveCD ze sítě

Tento článek napsal dexter
Tento článek není určen začátečníkům, je určen spíše středně pokročilým v Linuxu a není o tvorbě samotného LiveCD. Na to naleznete velice přehledný a podrobný návod zde. Takže postupujte bod po bodu a až se dostanete k vytváření squashfs, vraťte se sem (než ho vytvoříte).

Existuje určitě mnoho způsobů, jak nabootovat operační systém přes síť. Ten, co jsem si vybral já označí možná někteří za zbytečně složitý, ale mně se líbí :o)

Bootování ze sítě

K nabootování ze sítě potřebujeme následující
  • DHCP server
  • TFTP server
  • NFS server
  • Kernel s build-in podporou síťových karet (ne jako moduly!)
  • Initrd
  • Zakázat inicializaci eth0 (soubor /etc/conf.d/rc položka RC_PLUG_SERVICES="" a do uvozovek napsat !net.eth* )

Konfigurace DHCP a TFTP serveru, NFS

Protože se v Linuxu považuji za lepšího začátečníka, používám software s co nejlehčí konfigurací. V případě DHCP serveru to je dnsmasq, který má vestavěný i TFTP server. Nainstalujeme a otevřeme jeho konfigurák. Budou nás zajímat následující volby.
interface= nastavení rozhraní, na které bude DHCP běžet
dhcp-range= nastavení rozsahu IP adres, které bude server přidělovat
enable-tftp  zapne built-in TFTP server
tftp-root=/var/ftpd nastaví root TFTP serveru
dhcp-boot=/var/ftpd/pxelinux.0,192.168.50.1 nastaví bootovací PXE obraz a IP adresu serveru, kde je uložený

Můžeme si samozřejmě hrát i s ostaními volbami, ale pro naše účely by mělo stačit nastavit těchto 5 voleb a zbytek nechat zakomentovaný. 

Jak zfunkčnit NFS server nebudu rozepisovat, návodů najdete spoustu. Aby nám podle tohoto návodu vše šlapalo, je nutné pouze vyexportovat /mnt/data/livecd/target. Samozřejmě si cestu upravíme podle konkrétní situace.

Příprava a konfigurace PXE Linuxu

TFTP Root adresář máme nastaven na /var/tftpd proto všechny operace budou nyní probíhat tam. Stáhněte si aktualní pxelinux.0, který je součástí Syslinuxu a dá se stáhnout tady. Ve staženém archívu ho najdeme v adresáři Core. Soubor pxelinux.0 uložíme do /var/tftpd. Sem nakopírujem i kernel (pro účely v tomto návodu se náš kernel bude jmenovat bzImage) a initrd. Dále vytvoříme adresár pxelinux.cfg a v něm soubor default, ve které bude konfigurace PXELinuxu.
label gentoo        menu label Gentoo        kernel /bzImage        append initrd=/initrd.gz root=/dev/ram0 real_root=/dev/nfs looptype=squashfs loop=/livecd.squashfs nfsroot=192.168.50.1:/mnt/data/livecd/target ip=dhcp udev nodevfs cdroot dodmraid prompt 1 timeout 0Toto je pouze základní konfigurace. Pokud chceme zjistit všechny možnosti PXELinuxu, doporučuji navštívit stranky Syslinuxu. Pokud jsme postupovali podle návodu na tvorbu LiveCD uvedeného výše, určite si všimneme, co se v konfiguraci bootování ze sítě změnilo oproti bootování z CD. Pro jistotu si to tu trochu rozeberem.

real_root je oproti bootování z CD nastaven na /dev/nfs. Kombinace tohoto parametru a parametru cdroot řekne init skriptu v initrd, že chceme připojit nfsroot, jako by to bylo CD. Přidáme ještě parametr ip=dhcp, aby jsme dostávali IP adresu při bootování od DHCP serveru. Zbytek parametrů je vysvětlený ve výše uvedeném návodu.

Hack initrd

Teď příjde klíčový hack, díky kterému to všechno funguje. Ač jsem se snažil sebevic, nedokázal jsem donutit initrd, aby po namountování nfsrootu jako CD, namountoval ještě squashfs jako / (root). Proto musíme init skript trošku poupravit.
Vytvoříme adresář a přesuneme do něj náš initrd. Ten následně rozbalíme příkazem gzip -dc initrd | cpio -id a initrd mužeme smazat. Otevřeme si ve svém oblíbeném textovém editoru soubor init. Najdeme řádku s následujícím textem: if [ -d ${NEW_ROOT}/dev -a -x ${NEW_ROOT}/sbin/init ] (v mém případě to je řádka 407).  Tato podmínka testuje, zdali už máme funkční system na / a pokud ano, přeruší nekonečnou smyčku a init skript pokračuje dál (to potřebujem). Jenže ouha, my zatím jeste funkční root nemáme, máme jen namountovanou NFS cestu jako CDROM a namountování squashfs jako root probíhá až dále ve skriptu. Pokud skript necháme tak jak je, nastane při bootování chyba, protože nebude přítomen root. Změníme tedy naši podmínku třeba na if [ -d ${NEW_ROOT}/dev ]. To nám zajistí přerušení smyčky, pokračování skriptu a následně se skript chová, jako bychom bootovali opravdu z CD. Pozn.: Způsobů jak tohoto docílit je určitě nespočet. Pokud jste opravdoví linuxoví experti, můžete si napsat vlastni init skript a udělat to po svém. Mně tohle příjde nejjednodušší, proto to sem uvádím. Následuje opětovné vytvoření initrd. Spustíme proto příkaz find ./ | cpio -H newc -o > ../initrd a initrd přejedeme ješte gzipem gzip initrd z čehož vznikne právě soubor initrd.gz uvedený v konfiguraci PXELinuxu.

Nyní nám už nic nebrání nabootovat systém. Enjoy!

linkuj.czjagg.czpošli na vybrali.sme.skdeliciousTopČlánky.cz
Nahoru HOME PC•Elektro Programování Blog Autor Lynt Speciální backlink: Šulislav
© 2006 Smitka development