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

  1. der Ziel-Rechner wird via BIOS oder notfalls via PXE-Bootstick in den PXE-Bootmodus versetzt
  2. PXE-Boot:
    1. der Recher holt sich eine DHCP-Adresse
    2. gleichzeitig erhält er via DHCP-Options die IP des tftp-Servers und den relativen Pfad des PXE-Bootloaders
  3. der Rechner fordert den PXE-Bootloader vom tftp-Server an
  4. 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)

  5. 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
  6. die FAI-Prozedur besteht aus dem Laden des Kernels und der initrd via tftp (beides liegt direkt neben der pxelinux-Datei)
  7. aufgrund der im Bootmenü definierten Kernel-Parameter wird das Root-Verzeichnis des Systems via nfs gemountet
  8. 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

  1. FAI installieren:

    aptitude install fai-server
  2. 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
  3. 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
  4. 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
  5. NFS-Baum erzeugen (ausführlich):

    fai-setup -v
  6. im nfs-Baum ist anscheinend die FAI_CONFIG_SRC noch nicht korrekt gesetzt (siehe oben): /srv/fai/nfsroot/etc/fai/fai.conf

  7. Konfiguration der Client-Installation erzeugen:

    cp -r /usr/share/doc/fai-doc/examples/simple/* /srv/fai/config
  8. 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

FAI (zuletzt geändert am 2014-04-06 23:35:13 durch anonym)


Creative Commons Lizenzvertrag
This page is licensed under a Creative Commons Attribution-ShareAlike 2.5 License.