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/initramfs.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/pxelinux.cfg/default syslinuxu přidáme novou položku:
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í.