Hlavní navigace

FAI - Full Automatic Installer (3)

28. 4. 2004
Doba čtení: 6 minut

Sdílet

V dalším dílu seriálu zabývajícího se instalací FAI bude popsáno nabootování stanic a řešení obvyklých problémů.

Slovo úvodem – varování

Když se kolega poprvé pokoušel nainstalovat FAI, stala se mu nemilá věc. Nevěděl, kudy kam, takže skončil s tím, že zřejmě nastavil ve fai.conf cestu na NFSROOT na /. Co se pak přesně dělo, nevíme, jisté je jenom to, že jsme museli celý náš právě doinstalovaný server nainstalovat znovu. Protože jsem tuto nepříjemnost zatím nezmiňoval, uvádím ji, abych varoval, kudy cesta při instalování FAI skutečně nevede.

Bootování stanic

Přijdeme k vyhlédnutému počítači, který chceme zdebianizovat. Pokud má v nabídce při startu stisk klávesy F12 pro netboot, máme s největší pravděpodobností vyhráno. Stačí tuto klávesu stisknout a objeví se nám (v závislosti na výrobci síťovky) příjemná textová obrazovka tvrdící cosi o bootování pomocí PXE protokolu a hledání DHCP serveru.

Pokud není počítač pro PXE netboot vybaven, musíme si najít jinou cestu, jak ho nabootovat. K dispozici je skript make-fai-bootdisk, který dokáže vyrobit bootovací disketu (funguje man make-fai-bootdisk). Make-fai-bootdisk se mi po pravdě řečeno zatím nepodařilo rozchodit, jelikož jsem si s ním hrál pouze několik málo sekund a zatím jsem neměl důvod se pouštět do hlubšího experimentování. Ale mělo by to chodit.

Další možností je vytvořit bootovací CDčko. Postup je popsán v dokumentaci k FAI, je ještě stále trochu experimentální.

Osobně se mi zatím nejvíce osvědčil následující postup: vezmu z instalovaného počítače disk, nainstaluji ho v počítači, co umí bootovat ze síťové karty, a přesunu ho zpět do počítače určeného k instalaci.

Ale zpět k hláškám při bootování: po inicializaci PXE se objeví hláška o hledání DHCP serveru. Pokud je DHCP server nalezen a přidělí nám IP adresu, natáhne se přes síť jádro uložené na alfa:/boot/fa­i/vmlinuz-install (z tohoto vyplývá: pro úspěšnou instalaci přes síť musíte do /boot/fai/vmlinuz-install zlinkovat/zko­pírovat vmlinuz image). Při zavádění může dojít k následujícím problémům:

  • DHCP server nás nezná – na Alfě se podíváme do logů DHCP serveru (většinou psány do /var/log/syslog, ale v závisloti na /etc/syslog.conf se toto může měnit), zjistíme, proč nás nemá DHCP server rád, a změníme nastavení.
  • jádro je zkompilováno pro jinou architekturu – jako bootovací jádro máme jádro pro 686, ale bootujeme Pentium. Dořešíme konfigurací jádra na nejmenší společný jmenovatel, případně přes rozdílné parametry předávané přes DHCP může bootovat rozdílná jádra v závislosti na MAC adrese instalovaného počítače
  • jádro neumí připojit NFS jako root disk – nemá podporu NFS v jádře nebo neumí mountovat NFS z jádra – dořešíme správnou konfigurací jádra, viz minulý díl

Pokud je vše v pořádku, proběhne obyčejný boot jádra Linuxu. Zobrazí se nám dmessage o detekovaných zařízeních, mezi kterými by neměla chybět síťová karta. Po nabootování jádra se z namountovaného nfsrootu (uvedeného jako parametr v DHCP konfiguraci) spustí skript /etc/init.d/rcS (tedy při naší konfiguraci alfa:/usr/lib/fa­i/nfsroot/etc/i­nit.d/rcS), který se postará o zbytek instalace. Ta je řízena obsahem adresáře alfa:/usr/local/sha­re/fai.

Ještě připomínám, že nabootovaný kernel musí znovu zjistit IP adresu, protože nedojde k jejímu předání z prostoru, kde si ji uchová PXE. Takže jednak musí samotný Linux podporovat přidělení adresy přes DHCP/BOOTP (CONFIG_IP_PNP_D­HCP, CONFIG_IP_PNP_B­OOTP), druhak musíme mít v nfsrootu instalaci DHCP clienta, aby se mohl po nabootování pustit a zajistit nám přidělení definitivní IP adresy (kvůli tomu máme optiony ve fai.conf). Důvod, proč je třeba zjišťovat IP adresu přes DHCP natřikrát, nevím (hlavně nechápu, proč si po zjištění adresy kernelem ještě musím pustit DHCP klienta – ten tam není kvůli expiraci leasu, instalace bez něho nenaběhne).

Pro začátek do alfa:/usr/local/sha­re/fai zkopírujeme obsah alfa:/usr/sha­re/doc/fai/exam­ples/simple, který pouze mírně modifikujeme – zatím by nám mělo stačit přidat do alfa:/usr/local/sha­re/fai/class/LAS­T.var do funkce mktable řádek se jmény našich stanic (a,b,c..) a s tím, co na nich chceme provádět (install – intalaci), takže náš alfa:/usr/local/sha­re/fai/class/LAS­T.var záznam může vypadat třeba následovně:

mktable() {
    cat <<-EOT

   a     install
   b     install
   c     install
   d     install
   ...
EOT

Kromě install umí fai ještě další věci (sysinfo,..), ale ty jsem nikdy nevyužil, takže odkazuji na manuál. Ve stručnosti jde o nabootování do konzole s tím, že se nic neinstaluje (rcS skript nezavolá akce náležející k instalaci).

Logiku obsaženou v /usr/local/sha­re/fai adresáři vysvětlím příště (protože je toho více), na závěr se letmo zmíním o logování instalace.

Řešení některých problémů při instalaci klientských stanic

Fai celý instalační proces velmi slušně loguje do adresáře /tmp/fai na instalované stanici (ALT+F2 vás při instalaci přepne do konzole, cd /tmp/fai a less * napoví více) a navíc na jeho konci:

  1. vytipuje možné chyby a uloží je do extra souboru
  2. zkopríruje logy přes scp, případně rcp, do daného adresáře (v defaultní konfiguraci alfa:/home/fai s názvem stanice)

Takže pokud něco nefunguje, nepropadejte panice a pokuste se najít příčinu, proč tomu tak je.

Většinu chyb poznáte (pokud je dopředu nehlídáte) tak, že po rebootu stanice nenabotuje. V tomto případě je třeba zkontrolovat, že BOOT skript doběhl v pořádku. To zjistíme ze soboru shell.log, který je jednak na instalované stanici v tempfs (vytvořeném v RAMce) pod [a,b,c..]:/tmp/fai, druhak na alfě v adresáři alfa:/home/fa­i/[název_stani­ce]/ install-[datum]-[čas] (poslední install-xxxxxx-zzzzzz je přístupný přes link last-install). Ten by měl obsahovat následující řádky:

=====   shell: BOOT   =====
fcopy: copied /fai/files/etc/lilo.conf/DEFAULT to /tmp/target/etc/lilo.conf
Added linux *
BOOT                 OK. 

Podstatné je to OK hlášení o tom, že vše dopadlo v pořádku. Pokud tam není, je tam uveden popis, co a proč selhalo.

Pokud na stanici chybí něco z požadovaných balíků (obvyklá chyba je, že se instalace přeruší, nenaistaluje se tudíž lilo a neprojde BOOT skript), pomůže pohled do software.log. V něm je třeba hledat řádky obsahující ERROR, kolem kterých je popis problémů a důvody pro zastavení instalace (většinou chybí nějaké závislé balíky – apt-get je sice nástroj mocný, ale některé závislosti ani on nedokáže vyřešit a je třeba mu pomoci přidáním požadovaných balíků mezi balíky, které se mají instalovat. Například tyto řádky v software.log (všimněte si prosím hlášky error – podle ní se chyby nejlépe hledají) značí, že nemohly být doinstalovány KDE aplikace (kdebase, ..), protože nebyl nainstalován balík kdelibs4 (to vás praští do očí jako první), ale hlavně proto, že libidn9 není možné naistalovat (viz mutt: Depends: libidn9 but it is not installable) – k této chybě docházelo v sid distribuci na začátku ledna 2004, kdy byla libidn9 vyměněna za libidn11, ale nebyly patřičně změněny závislosti. Problém jsem vyřešil dočasným přidáním sarge libidn9 do sid distribuce. Pro jednoduchý popis tohoto postupu je třeba vědět něco o struktuře /usr/local/sha­re/fai, takže si ho nechám též napříště.

CS24_early

Tento výpis chyb rozhodně není konečný. Při řešení problémů je nejlépe nejdříve shlédnout error.log (soubor vytvářený po skončení instalace fai, který obsahuje možný výpis problémů – to, že není prázdný, ještě neznamená, že instalace proběhla špatně – mně se vlastně prázdný error.log zatím nepodařilo vytvořit). Nečekejte, že v něm přímo narazíte na popis problému, spíše očekávejte nakopnutí správným směrem – například výše zmiňovaný problém s libidn9 se kdesi v error.log projeví následovně:

.....začátek error.log
shell.log:CZECH             FAILED with exit code 1.
software.log:Can't send mail: sendmail process failed
software.log:ERROR: 25600 25600
software.log:Can't send mail: sendmail process failed
status.log:BOOT              FAILED with exit code 1.
status.log:CZECH             FAILED with exit code 1.
.....pokračování error.log

Tedy je schován pod software.log:ER­ROR: 25600 25600

Byl pro vás článek přínosný?