Bootujte ze sítě plnohodnotný systém

27. 5. 2011
Doba čtení: 5 minut

Sdílet

Minulý týden jsme se věnovali bootování ze sítě pomocí PXE. Naučili jsme se nainstalovat potřebné prostředí sítě a zkusili si nabootovat live distribuci Parted Magic. Dnes si návod vylepšíme o rozjetí systému ze souborového systému NFS a jako bonus přidáme bootování z obrazů disku a optických médií.

tftpd-hpa

V minulém článku jsem doporučoval TFTP daemona atftpd. Funguje spolehlivě a na malé soubory ho lze bez problémů použít. Navíc k němu patří i velmi kvalitní klient atftp, kterým lze funkčnost serveru ověřit. V článku jsem zmínil další alternativu a to tftpd-hpa. I když jsem byl několik let zvyklý na atftpd, nakonec jsem přešel na tftpd-hpa, protože do balíčku v Debianu/Ubuntu neplete inetd a poradí si i s velkými soubory. Daemon tftpd-hpa je upravené klasické BSD tftpd, které máte v repositářích své distribuce určitě taky, ale je upraven právě pro použití s PXE.

Instalaci provedete z balíčku vaší oblíbené distribuce. Pro mě to je Debian, takže:

# apt-get install tftpd-hpa 

Konfigurační soubor se pak nachází v /etc/default/tftpd-hpa a může vypadat třeba takto:

# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp/"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure" 

Po změně konfigurace stačí provést restart daemona:

# /etc/init.d/tftpd-hpa restart 

iso obrazy a obrazy disků

Iso obrazy optických médií nebo obrazy pevných disků mohou být také použity pro bootování ze sítě. Systém na nich ale musí počítat s tím, že bude bootován touto cestou, což ve většině případů neplatí. My bychom o této možnosti měli vědět a nějaký ten obraz si zkusit přidat. Stačí ho nahrát někam na TFTP server a upravit konfiguraci syslinuxu.

LABEL iso-obraz
    MENU label ISO obraz nejakeho media
    LINUX memdisk
    INITRD obraz.iso
    APPEND iso 

Všimněte si třetího řádku, kde je uvedena utilitka memdisk. Ta se postará o to, aby bych obraz načten ze sítě. uložen do paměti a „spuštěn“. Musí se také nacházet na TFTP serveru, takže ji tam nakopírujeme.

# cp /usr/lib/syslinux/memdisk /srv/tftp/ 

debootstrap

Po malé předehře se dostáváme k tomu nejzajímavějšímu z dnešního článku. Připravíme si plnohodnotný systém pomocí utility debootstrap, nasdílíme ho pomocí souborového systému NFS a ukážeme si, jak nastavit syslinux, aby ho zavedl.

Utilitka debootstrap je relativně známá a to hlavně pro administrátory distribucí založených na deb balíčcích. Její funkcí je do zadaného adresáře nainstalovat základní systém z určitého repositáře. Pokud si někdy chcete užít instalaci opravdu od píky, je debootstrap perfektním nástrojem a uděláte si s ním systém přesně takový, jaký chcete. Největší výhodou je, že nejste omezení instalátorem. To je taky přesně to co potřebujeme. Naším cílem je připravit systém na bootování z NFS, což znamená upravit jeho initrd, postarat se aby se během bootování nesnažil chovat chytře k nastavení sitě a doinstalovat libovolné balíčky.

Jelikož je debootstrap určen pro distribuce založené na balíčcích deb, použijeme jako příklad Debian Squeeze.

# cd /mnt/
# debootstrap --arch=i386 squeeze debian6 

Teď si dejte kafe nebo čaj, protože chvilku potrvá, než se stáhnou balíčky základního systému a nainstalují se. Debootstrap ještě můžete doplnit skriptem, který se postará třeba o rozdělení disku, nastavení některých parametrů systému a podobně. Když se vám podaří dokončit tento návod a trochu debootstrap prostudujete, můžete chrlit předinstalované servery jak na běžícím páse.

Je-li hotovo, tak musíme nový systém trochu poupravit. Začneme tím, že do něj připojíme adresáře /proc, /sys a /dev.

# mount -o bind /dev debian6/dev/
# mount -t proc none debian6/proc
# mount -t sysfs none debian6/sys 

Pak použijeme chroot a přepneme se do něj.

# chroot debian6 

Pamatujte si, že jste v chrootu. Pokud máte otevřeno víc terminálů a nemáte je moc dobře označeny, můžete si zadělat na nezáviděníhodné chvilky.

Nejdříve vytvoříme uživatele a změníme heslo uživateli root.

# adduser uzivatel
# passwd 

Pak se mrkneme do souboru /etc/fstab a vložíme tam několik důležitých bodů k připojení.

proc            /proc           proc    defaults        0       0
/dev/nfs        /               nfs     _netdev,rsize=32768,wsize=32768,hard,async,noatime,udp,nolock,nfsvers=4        1       1
none            /tmp            tmpfs   defaults        0       0
none            /var/run        tmpfs   defaults        0       0
none            /var/lock       tmpfs   defaults        0       0
none            /var/tmp        tmpfs   defaults        0       0 

Za pozornost stojí řádek s /dev/nfs. Jsou na něm uvedeny parametry, které doporučovali čtenáři v diskusi v minulém článku.

  • _netdev – pro připojení je potřeba funkční síť
  • rsize, wsize – velikost datových rámců v komunikaci se serverem
  • hard – když se stane něco se spojením se serverem, nedojde k vyvolání chyby
  • async – asynchronní zápis do souborového systému
  • noatime – neměnit u souborů čas přístupu
  • udp – používat UDP
  • nolock – nepoužívat NFS zámky
  • nfsvers=4 – používat NFS verze 4

Detaily k jednotlivým volbám najdete v manuálové stránce programu mount a také na tldp.org.

Nyní můžeme pokračovat instalací jádra a úpravou initrd. Tomu je potřeba přidat podporu pro boot z NFS.

# apt-get install linux-image-2.6.32-5-686 

Balíček s jádrem obsahuje závislosti jak na initrd, tak na nástroje pro práci s ním. Po instalaci otevřeme soubor /etc/initramfs-tools/initram­fs.conf a upravíme hodnoty MODULES a BOOT následovně.

MODULES=netboot
BOOT=nfs 

Když máme hotovo, upravíme existující nové initrd.

# update-initramfs -u 

Než v tomto systému ukončíte činnost a zkusíte, jestli se do něj dá nabootovat, je potřeba zajistit, aby se nezměnilo nastavení sítě. jádro se o síť postará a pak už by na ní žádná aplikace neměla sahat, jinak se systém bez jediného slova zasekne. Problém by mohl nastat, kdybyste třeba nainstalovali NetworkManager, který si bere síťová rozhraní ochotně do vlastní režie. Ujistěte se, že žádná taková aplikace neběží, nebude potřeba.

NFS

Konfigurace NFS je rychlá, protože nepotřebujeme nic speciálního. V Debianu/Ubuntu stačí nainstalovat balíček nfs-kernel-server a do souboru /etc/exports doplnit cestu k adresáři s vytvořeným systémem:

/mnt/debian6 x.x.x.x/24(rw,no_root_squash,async) 

Kde rw zajistí, že bude souborový systém zapisovatelný, no_root_squash vypne ochranu, kdy soubory vlastnící uživateli root má uživatel nobody a async se postará o asynchronní přenos. Nezapomeňte změnit rozsah IP adres, které budou mít k tomuto disku přístup. Nastavení zpečetíme restartem NFS:

# /etc/init.d/nfs-kernel-server restart 

Úprava syslinuxu

Nyní překopírujeme připravené jádro a initrd na TFTP server.

# cp debian6/boot/vmlinuz-2.6.32-5-686 /srv/tftp/debian6-2.6.32.5-686
# cp debian6/boot/initrd.img-2.6.32-5-686 /srv/tftp/debian6-initrd-2.6.32.5-686 

A do konfiguračního souboru /srv/tftp/pxe­linux.cfg/defau­lt syslinuxu přidáme novou položku:

bitcoin_skoleni

LABEL linux
    MENU label Debian 6 NFS
    MENU default
    KERNEL debian6-2.6.32.5-686
    APPEND root=/dev/nfs initrd=debian6-initrd-2.6.32.5-686 nfsroot=x.x.x.x:/mnt/debian6 ip=dhcp rw selinux=0 

Místo x.x.x.x vyplňte adresu serveru se syslinuxem a máte hotovo. Pokud jste během konfigurace neudělali chybu, libovolný počítač v síti s podporou PXE nabootuje do tohoto nového Debianu.

Závěr

Takto vytvořený systém jede téměř nerozeznatelně od lokální instalace včetně desktopového prostředí KDE. Když si dáte práci s parametry pro připojení souborového systému NFS, které sedne k vaší síti, určitě budete při běžné práci spokojení.

Autor článku

Adam Štrauch je redaktorem serveru Root.cz a svobodný software nasazuje jak na desktopech tak i na routerech a serverech. Ve svém volném čase se stará o komunitní síť, ve které je již přes 100 členů.