Hlavní navigace

FAI - Full Automatic Installer (2)

14. 4. 2004
Doba čtení: 8 minut

Sdílet

V dnešním dílu se pokusím vysvětlit celý proces konfigurace FAI.

Počítače

V následujícím textu je centrální server označován Alfa. Klientské stanice pak jsou označovány jako a, b, c. Pro označení souborů používám konvence nfs, scp a bůh ví čeho ještě, tedy alfa:/etc/netgroup značí soubor /etc/netgroup uložený na Alfě.

Nastavení NFS serveru

Pro fai je vhodné definovat v /etc/netgroup netgroupy počítačů podle jejich IP adres, případně podle jejich doménového jména. Pro naše stanice bude alfa:/etc/netgroup vypadat následovně:

# stanice
a (a,,)
b (b,,)

# netgroupa
workstations a b c

# netgroupa pro faiclienty
faiclients workstations

Netgroupy je třeba přidat do nsswitche, jinak nebudou přístupné – mám pocit, že defaultní debianovský konfigurák obsahuje zápis jenom pro NIS netgroupy, což se vám v případě, že chcete provozovat NIS master server na centrálním serveru, moc nehodí. Zápis v alfa:/etc/ns­sswitch.conf tedy bude obsahovat následující položku:

netgroup:   files nis  # tedy bylo původně jenom NIS

Toto je zapeklitost, na kterou nám chvíli trvalo přijít… neuškodí přečíst si man nsswitch.conf, aby měl člověk přehled, pro co je to dobré. Po změně nastavení je třeba reloadnout nfs server (alfa:/etc/init­.d/nfs* restart).

Dále je třeba exportovat adresáře, které FAI potřebuje kvůli své instalaci. Tento zápis je díky existenci netgroupy docela jednoduchý:

/home @faiclients(rw,no_root_squash,sync)
/usr/local/share/fai @faiclients(ro,no_root_squash,sync)
/usr/lib/fai/nfsroot @faiclients(ro,no_root_squash,sync) 

Pokud se vám FAI adresáře tvoří někde jinde, je třeba nastavit patřičně tyto cesty.

Export nfs mountů (znovunačtení /etc/exports) spustíme příkazemexportfs, ten nám je také vypíše. Hodí se připomenout, že NFS je věc tuze nebezpečná, a pokud jste připojeni do Internetu, doporučuje se dvakrát si ji překontrolovat. A také vhodně nastavit firewall.

NIS

Pokud chcete používat NIS (umožňuje za cenu pekelné nebezpečnosti celého protokolu jednotné přihlašování, na lokální síti je použitelné, na Internetu už ne), musíte si nastavit alfa:/etc/defau­ltdomain. V příkladu budeme používat doménu fai. alfa:/etc/defau­ltdomain vypadá následovně:

fai

Před restartem nisu (alfa:/etc/init­.d/nis restart) je třeba definovat v alfa:/etc/de­fault/nis, že se jedná o master počítač. To by ale měl zajistit při instalaci samotný debconfig.

debmirror

Vytvoříme lehce, jednoduše a elegantně skriptem debmirror. Stačí do alfa:/etc/cron­.daily přidat soubor debmirror s následujícím obsahem:

#! /bin/sh
#
# cron script to update the debian mirror
#
debmirror --progress --nosource --host=ftp.cz.debian.org --method=ftp --root=/debian --dist=woody,sarge,sid --section=main,contrib,non-free --arch=i386 /home/debian 

Tento skript je možné zavolat i ručně. Asi je třeba před jeho prvním spuštěním vytvořit /home/debian adresář. První vytvoření bude něco trvat (cca 10 GB se holt chvíli nese), další už budou jenom inkrementální upgrady, takže budou trvat patřičně kratší dobu.

Apache – /home/debian export

Je vhodné si nechat vyexportovat /home/debian přes http. Toto je věcí nastavení vašeho http serveru, v apachovi se to řekne následovně (alfa:/etc/apache/httpd­.conf)

<Alias /debian /home/debian>

<Directory /home/debian>

    AllowOverride None
</Directory>

Http přístup k debiáním balíkům se nám ukázal jako méně konfliktní než přístup přímo přes nfs, bylo s ním méně problémů při konfiguraci FAI. Proč to tak je, jsem neměl čas zjistit.

DHCPD setup

Je třeba nastavit DHCPD. K tomu potřebujete znát ethernetovské adresy strojů, které budete instalovat, a jejich IP adresy. Předpokládejme tedy, že alfa má IP adresu 10.0.0.254, slouží zároveň jako DNS server a jako NTP server. Počítače pak mají IP adresy od 1 do 253, netmaska je 255.255.255.0.

DHCP démonů existuje několik druhů, nám se osvědčil DHCP3. Konfigurák závisí na druhu použitého DHCPd, pro dhcpd vypadá alfa:/etc/dhcp3/dhcp­d.conf následovně:

# dhcpd.conf
#

default-lease-time 86400;
#max-lease-time 86400;

ddns-update-style none;

filename "pxelinux.0";

subnet 10.0.0.0 netmask 255.255.255.0 {
  option domain-name "";
  option domain-name-servers 10.0.0.254;
  option routers 10.0.0.254;
  range 10.0.0.1 10.0.0.253;
  deny unknown-clients;

  # when FAI
  option ntp-servers alfa, tik.cesnet.cz, pool.ntp.org;
  server-name alfa;
  next-server alfa;
  option root-path "/usr/lib/fai/nfsroot";
  option nis-domain fai;
  option nis-servers alfa;
}

# host + adresa..snad se to da pochopit
host a {
  hardware ethernet 00:90:f5:2b:50:87;
  fixed-address 10.0.0.1;
}

host b {
  hardware ethernet 00:0a:a3:25:a3:23;
  fixed-address 10.0.0.2;
}

...

Jak je vidět, do DHCPconfigu se nacpe poměrně dost parametrů, které se stanicím při bootování předávají.

/etc/fai.conf

Jak již bylo zmiňováno, jsou v tomto konfiguračním souboru uvedeny parametry pro vytváření instalačního disku. Soubor je před použitím FAI sourcován, takže v něm fungují $ a podobné vymoženosti moderních shellů. Soubor je poměrně dobře komentovaný. Zastavím se tedy pouze u položek, se kterými jsme měli problémy. Soubor je uložen v alfa:/etc/fa­i/fai.conf.

FAI_DEBOOTSTRAP="$debdist file:/home/debian"
FAI_DEBOOTSTRAP_OPTS="--arch i386 --exclude=pcmcia-cs, ppp, pppconfig, pppoe, pppoeconf, dhcp-client --include=xfsprogs, module-init-tools, libreadline4" 

Protože máme na stanicích XFS, potřebujeme xfsprogs. Současně nepotřebujeme mraky ppp balíků ze standardní distribuce. $debdist s file funguje.

# Access to Debian mirror created by mkdebmirror
FAI_SOURCES_LIST="deb http://$httpserver/debian $debdist main contrib non-free"

# NFS remote location of mirror
FAI_DEBMIRROR=$installserver:/home/debian 

NSF je dále odkomentováno, nepoužíváme ho.

Local repository potřebujeme například kvůli balíkům s kernelem.

FAI_LOCAL_REPOSITORY="deb file:/fai/files packages/"

Rootovské heslo pro počítače, které se právě instalují – jsou pak přístupní přes ssh, pokud máme ve FAI_FLAGS uveden sshd.

FAI_ROOTPW="$hash_z_/etc/shadow"

Rootovské heslo nainstalovaných stanic (pokud nechcete připustit možnost přihlášení se pouze přes NFS, které vám je v okamžiku, když NFS odejde, na nic) se nastavuje jinde.

Kernelovský balík pro boot stanic – jeho vytvoření viz dále.

# this kernel package will be used when booting the install clients
KERNELPACKAGE = /usr/local/share/fai/files/packages/ kernel-image-2.6.4_fai1_i386.deb 

(Pozn. ed.: mezera před kernel-image přidána násilím kvůli sazbě –Johanka)

Adresáře je asi lepší ponechat defaultní, než zkoušet něco změnit, i když by to mělo fungovat.

# the configuration space on the install server
FAI_CONFIGDIR=/usr/local/share/fai
# the location of the config space, as seen by the install client
# this should be <install server>:$FAI_CONFIGDIR
# it can also be overwritten in T170 via BOOTP and DHCP
FAI_LOCATION=$installserver:$FAI_CONFIGDIR

# directory on the install server where the nfsroot for FAI is
# created, approx size: 160MB, also defined in bootptab or dhcp.conf
NFSROOT=/usr/lib/fai/nfsroot

# the local configuration directory on the install client
FAI=/fai 

FAI=.. říká, že do A:/fai bude při jeho instalaci namoutěn alfa:/usr/local/sha­re/fai (alias $installserver:$FA­I_CONFIGDIR). Ostatně viz definice v/etc/exports.

Konfigurace jádra

Požadované jádro stáhneme, rozbalíme a necháme nakonfigurovat přes oblíbený konfigurák (vim .config, make config, make menuconfig, make xconfig…) tak, jak bychom chtěli, aby vypadalo jádro na stanici. Je sice možné používat extra jádro pro instalaci a extra jádro pro běh stanic, ale my si zatím vystačíme s jediným. Nesmíme zapomenout na:

CONFIG_IP_PNP_DHCP=y  # DHCP potřebujeme při startu, je pod Networking Options

CONFIG_NFS_FS=y # NFS potřebujeme na mountění, je ve File Systems
CONFIG_NFS_V3=y 

Jelikož si nejsem jistý, zda jsem na něco nezapomněl, celý .config pro 2.6.4 jádro raději přikládám.

Všechny důležité věci, které potřebujeme pro běh systému, musí být přímo v jádře – při síťovém bootu nemáme možnost si stáhnout moduly dříve, než nabootujeme základní systém, který nám umožní připojit NFS root.

Deb balík pak vytvoříme jednoduše přes make-kpkg, které je obsaženo v debu kernel-package.

alfa:~# cd ./zdrojaky_2.6.4
alfa:~/zdrojaky_2_6_4# make-kpkg binary --revision fai1
.... 

V adresáři ../ nám pak vznikne několik *.deb souborů, které přemístíme optimálně do alfa:/usr/local/sha­re/fai/files/pac­kages.

Fai-setup

Cílem volání fai-setup je vytvořit v adresáři specifikovaném v /etc/fai.conf, většinou je to /usr/lib/fai, adresář nfsroot, do kterého se provede pomocí chroot „oblbnutá“ instalace celého systému.

Po dokončení fai-setupu se vyplatí přečíst si podrobně logovací hlášky. Fai-setup má tu nepříjemnou vlastnost, že chyby v jeho průběhu nejsou na první pohled patrné. Proto čtěte a bděte, minimálně při první instalaci. Fai setup trvá poměrně dlouho. Pokud máte prázdný /usr/local/sha­re/fai (alias FAI_CONFIGDIR), fai-setup vás na to na závěr slušně upozorní. Pokud nechcete být upozorňováni, vezměte si obsah tohoto adresáře prozatím z/usr/share/doc/fa­i/examples/(ad­vanced|simple)

root_podpora

Ukázkový výpis z fai-setup:

alfa:# fai-setup
Account $LOGUSER=fai already exists.
Make sure that all install clients can
log into this account without a password.
/home/fai/.ssh/known_hosts remained unchanged.
/home/fai/.ssh/authorized_keys created.
User account fai set up.
Creating FAI nfsroot can take a long time and will
need more than 160MB disk space in /usr/lib/fai/nfsroot.
/usr/lib/fai/nfsroot already exists. Removing /usr/lib/fai/nfsroot
........
Upgrading /usr/lib/fai/nfsroot
Adding additional packages to /usr/lib/fai/nfsroot:
dhcp3-client ssh portmap file rdate cfengine cvs bootpc rsync wget
rsh-client less dump reiserfsprogs dpkg-dev ext2resize hdparm parted
dnsutils ntpdate dosfstools sysutils dialog discover mdetect libnet-perl
netcat grub read-edid kudzu hwtools
Creating SSH2 RSA key; this may take some time ...
Creating SSH2 DSA key; this may take some time ...
Restarting OpenBSD Secure Shell server: sshd.
Checking available versions of rmt, updating links in /etc/alternatives ...
(You may modify the symlinks there yourself if desired - see `man ln'.)
Updating rmt (/usr/sbin/rmt) to point to /usr/sbin/rmt-dump.
Updating rmt.8.gz (/usr/share/man/man8/rmt.8.gz) to point to /usr/share/man/man8/rmt-dump.8.gz.
`/etc/fai/fai.conf' -> `etc/fai/fai.conf'
`/etc/fai/fai.conf.dpkg-dist' -> `etc/fai/fai.conf.dpkg-dist'
`/etc/fai/passwd' -> `etc/fai/passwd'
`/etc/fai/sources.list' -> `etc/fai/sources.list'
DHCP environment prepared. If you want to use it, you have to enable the dhcpd and the tftp-hpa daemon.
Command mknbi-linux not found. Can not set up BOOTP booting. Please install the package mknbi and rerun fai-setup.
make-fai-nfsroot finished properly.
Removing `diversion of /sbin/discover to /sbin/discover.distrib by fai'
Stopping NFS kernel daemon: mountd nfsd.
Unexporting directories for NFS kernel daemon...done.
Exporting directories for NFS kernel daemon...done.
Starting NFS kernel daemon: nfsd mountd.
FAI setup finished. 

Příště si necháme stanice z FAI konečně nabootovat.

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