Contents
FAI dient zur Installation von Linux-Systemen auf vielen Rechnern ohne menschliche Interaktion. Arbeitsumgebungen mit einer handvoll Rechnern, die überwiegend vergleichbare Aufgaben erfüllen (z.B. Büroarbeitsplätze) sind bereits gute Kandidaten für den Einsatz von FAI.
Üblicherweise ist anschließend eine detaillierte Konfiguration der Clients erforderlich. Dies kann entweder (mit viel Aufwand) mit FAI umgesetzt werden oder (eleganter) mittels einer Konfigrationsmanagement-Software (ansible, salt, cfengine, puppet, chef, ...) ablaufen.
Ablauf des Boot- und Installationsvorgangs
- der Ziel-Rechner wird via BIOS oder notfalls via PXE-Bootstick in den PXE-Bootmodus versetzt
- PXE-Boot:
- der Recher holt sich eine DHCP-Adresse
- gleichzeitig erhält er via DHCP-Options die IP des tftp-Servers und den relativen Pfad des PXE-Bootloaders
- der Rechner fordert den PXE-Bootloader vom tftp-Server an
der PXE-Bootloader fragt nacheinander die Pfade der abzufragenden potentiellen Bootmenü-Dateien im Unterverzeichnis pxelinux.cfg/ ab (abhängig von der MAC des Rechners; ansonsten: default)
- die Bootmenü-Konfigurationsdatei beschreibt das Menü, das auf dem Client-Rechner angezeigt wird
- standardmäßig wird von der lokalen Festplatte gebootet
- alternativ kann der Nutzer die FAI-Prozedur manuell auswählen
- die FAI-Prozedur besteht aus dem Laden des Kernels und der initrd via tftp (beides liegt direkt neben der pxelinux-Datei)
- aufgrund der im Bootmenü definierten Kernel-Parameter wird das Root-Verzeichnis des Systems via nfs gemountet
- das gebootete System startet nun die vordefinierte Installationsprozedur auf der lokalen Festplatte
Die Detaileinstellungen für diese Abläufe werden im Folgenden beschrieben.
Installationsbaum via FAI vorbereiten
FAI installieren:
aptitude install fai-server
apt-Sources konfigurieren (lokaler apt-proxy?) in /etc/fai/apt/sources.list:
deb http://apt-proxy:9999/debian wheezy main contrib non-free deb http://apt-proxy:9999/debian-security wheezy/updates main contrib non-free
nfsroot konfigurieren (in /etc/fai/nfsroot.conf) - der Passwort-Hash sollte angepasst werden:
FAI_DEBOOTSTRAP="wheezy http://apt-proxy:9999/debian" FAI_ROOTPW='$1$kBnWcO.E$djZB828U7dMkrltJHPf6d1' NFSROOT=/srv/fai/nfsroot TFTPROOT=/srv/tftp/fai NFSROOT_HOOKS=/etc/fai/nfsroot-hooks/ FAI_DEBOOTSTRAP_OPTS="--exclude=info" FAI_CONFIGDIR=/srv/fai/config
die nfs-Adresse der fai-Konfiguration in /etc/fai/fai.conf setzen (dabei den Server-Namen anpassen):
FAI_CONFIG_SRC=nfs://172.16.46.18/srv/fai/config
NFS-Baum erzeugen (ausführlich):
fai-setup -v
im nfs-Baum ist anscheinend die FAI_CONFIG_SRC noch nicht korrekt gesetzt (siehe oben): /srv/fai/nfsroot/etc/fai/fai.conf
Konfiguration der Client-Installation erzeugen:
cp -r /usr/share/doc/fai-doc/examples/simple/* /srv/fai/config
je nach Bedarf der FAI-Doku zur Installationsanpassung folgen oder (einfacher) ein Konfigurationsmangement-System (ansible, salt, cfengine, puppet, chef, ...) für die Client-Perfektionierung verwenden
- relevant ist vor allem die Partitionierung der Festplatte
die Festlegung von ssh-Schlüsseln zur Fernwartung ist sinnvoll: /srv/fai/config/files/root/.ssh/authorized_keys/
manche Konfigurationsmanager benötigen Pakete auf der Client-Seite (z.B. für ansible: python-apt)
Konfiguration der Server-Dienste
Im folgenden Verlauf wird angenommen, dass der für die Installation verantwortliche Server die IP 172.16.46.18 trägt.
DHCP-Server
Die beiden folgenden Zeilen in der Interface-Konfiguration in der /etc/config/dhcp einfügen:
list dhcp_option '255,172.16.46.18' list dhcp_option '67,fai/pxelinux.0'
Mit den ersten Zeile wird der tftp-Server festgelegt, von dem der Client sein Boot-Menü beziehen soll.
Die zweite Zeile definiert das PXE-Bootimage, das die weiteren Abläufe im Client auslöst.
tftp-Server
Pakete installieren:
aptitude install tftpd-hpa syslinux-common
tftp-Verzeichnis mit relevanten Dateien füllen:
export tftp_basis=/srv/tftp/fai mkdir -p "$tftp_basis" cp /usr/lib/syslinux/pxelinux.0 "$tftp_basis/" mkdir "$tftp_basis/pxelinux.cfg" cp /boot/vmlinuz-$(uname -r) "$tftp_basis/vmlinz" cp /boot/initrd.img-$(uname -r) "$tftp_basis/initrd.img" cp /usr/lib/syslinux/vesamenu.c32 "$tftp_basis/"
Anschließend wird das Bootmenü mittels der Datei /srv/tftp/fai/pxelinux.cfg/default festgelegt:
DEFAULT vesamenu.c32 PROMPT 0 TIMEOUT 30 ONTIMEOUT lokal MENU TITLE Boot-Menü LABEL lokal MENU LABEL Von lokaler Festplatte starten LOCALBOOT 0 LABEL Neuinstallation (Linux) KERNEL vmlinuz APPEND initrd=initrd.img ip=dhcp root=/dev/nfs nfsroot=172.16.46.18:/srv/fai/nfsroot aufs FAI_FLAGS=verbose,sshd,createvt FAI_ACTION=install LABEL System-Infos KERNEL vmlinuz APPEND initrd=initrd.img ip=dhcp root=/dev/nfs nfsroot=172.16.46.18:/srv/fai/nfsroot aufs FAI_FLAGS=verbose,sshd,createvt FAI_ACTION=sysinfo
Im obigen Beispiel ist die IP-Adresse des NFS-Servers angegeben.
NFS-Server
Paket installieren:
aptitude install nfs-kernel-server
Anschließend den NFS-Baum-Export festlegen (inkl. passender Netzmaske):
/srv/fai/nfsroot 172.16.46.0/24(async,ro,no_subtree_check,no_root_squash) /srv/fai/config 172.16.46.0/24(async,ro,no_subtree_check)
Die folgenden Zeilen (bzw. nur die letzte) ist aktuell unter Debian Wheezy notwendig:
# this empty directory is a workaround for some nfs-weirdness # see http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=676883 /srv/nfs4 *(ro,sync,fsid=0,crossmnt,no_subtree_check)
Nun muss das obige Verzeichnis angelegt werden: mkdir /srv/nfs4.
Nun kann die neue Konfiguration des NFS-Servers eingelesen werden:
service nfs-kernel-server restart