Fai Fully automatic installation
siehe auch: Inhalt:Server
installation
Ein normales Server-System installieren, die notwendigen Abhängigkeiten werden von den fai-packeten automatisch nachinstalliert.packete
Die Packete für FAI sind in den default Repositorys von Debian und Ubuntu enthalten. Aktuellere Packete gibt es für ubuntu bei launchpad "https://launchpad.net/~fai/+archive/ppa", die für Debian gibt es direkt vom FAI Projekt "http://fai-project.org/download". Die entsprechenden Einträge in der "/etc/apt/sources.list" eintragen und "aptitude update" ausführen. Nun die Packete- fai-quickstart
- fai-server
- fai-client
Server konfigurieren
Nachdem wir nun alle Notwendigen Packete installiert haben müssen wir das FAI konfigurieren. Da sich das ubuntu-live-system leider stark vom debian-live-system unterscheidet, ist es nur sehr schwierig ein ubuntu-live-system zu verwenden. Aus diesem Grund wird bei uns ein debian lenny verwendet./etc/fai/make-fai-nfsroot.conf
die wichtigsten Optionen in dieser Datei sind.- NFSROOT=/srv/fai/nfsroot # -> wo auf dem Server soll das nfs-root liegen, das zur installation als live-system gemounted wird
- TFTPROOT=/srv/tftp/fai # -> wo auf dem Server sollen die kernel liegen, die für den netboot notwendig sind
- FAI_CONFIGDIR=/srv/fai/config # -> wo auf dem Server sollen die Konfigurationsdateien für die Installation der Clients liegen
- FAI_DEBOOTSTRAP="lenny http://ftp.wh-stuttgart.net/debian" # -> welche Distribution soll als live-System erstellt werden
- FAI_ROOTPW='$1$Wd4cq3CK$asdfasdfasdfasfdasfds' # -> ein md5 oder crypt verschlüsseltes root-passwort, das benötigt wird, wenn man sich während der installation als root über ssh mit dem client verbinden möchte
- NFSROOT_HOOKS=/etc/fai/nfsroot-hooks/ # -> in diesem ordner liegen bash-scripte die nach dem debootstrap ausgeführt werden
- FAI_DEBOOTSTRAP_OPTS="--exclude=info --include=ldap-utils " # -> der parameter --include=ldap-utils ist notwendig da wir bereits im live-system mit einem script auf das ldap zugreifen.
/etc/fai/apt/sources.list
Diese Datei ist die sources.list, die nacher im live-system vorhanden ist.NFS-Root erstellen
Nachdem nun all diese Änderungen gemacht wurden, kann mit "fai-setup" das NFS-ROOT erstellt werden.Base-image erstellen
Da wir kein Debian installieren wollen, sondern ein Ubuntu, müssen wir noch das passenden Base-Image erstellen. Dazu hab ich im Internet das Skript "make-fai-base-file" gefunden. Für dieses Skript gibt es dann noch eine Config-Datei die unter /etc/fai-distributions/# MIRROR_LOCATION: the location of the mirror argument given to debootstrap MIRROR_LOCATION="ftp://ftp.wh-stuttgart.net/ubuntu" ## damit die gleiche debootstrap-version verwendet wird wie in der zieldistribution werden hier pfad zum debootstrap-packet und der name des debootstrap-packetes # where to find the deboostrap package BOOTSTRAP_ARCHIVE=ftp://ftp.wh-stuttgart.net/ubuntu/pool/main/d/debootstrap/ # name of the package BOOTSTRAP_PACKAGE=debootstrap_1.0.23ubuntu1_all.deb DEBOOTSTRAP_DIST_NAME="maverick" DEBOOTSTRAP_ARCH="amd64" DEBOOTSTRAP_EXCLUDE="pcmcia-cs,pppoe,dhcp-client,exim4,exim4-base,exim4-config,exim4-daemon-light,modconf,libident,exim" DEBOOTSTRAP_INCLUDE="aptitude,wget"Das script erzeugt eine Datei mit dem Name DISTRIBUTIONSNAME.tar.gz im ordner /srv/fai/conf/basefiles. Diese Datei muss noch so umbenannt werden, dass sie KLASSENNAME.tar.gz heist. Bei uns wird als Klasse UBUNTU_MAVERICK für die Installation von Ubuntu verwendet.
Netboot configurieren
DHCP-Server
In der dhcpd.conf des zuständigen dhcp - Servers die next-server option auf die ip des fai-servers eintragen und als filename z.b. "pxelinux.0". Dies sind die selben optionen wie für jeden anderen netboot per pxe. Falls der kernel für das fai-livesystem beim start nicht vom fai-server kommen soll, muss das dann entsprechend auf einem anderen Server eingerichtet werden. Zusätzlich sollte vom dhcp - Server das hostname-Attribut mit übergeben werden, da dieses für die Installation nützlich ist.TFTP-Server
Auf dem fai-server muss der TFTP-Server noch aktiviert werden, damit der Netzwerkboot des Lifesystems funktioniert. Bei Ubuntu wird von den fai-packeten der "tftpd-hpa" mit installiert. Dieser wird auch automatisch gestartet nur defaultmäßig mit dem falschen Ordner zum exportieren. Um dies zu ändern muss in der Datei "/etc/default/tftpd-hpa" die Einstellung: "TFTP_DIRECTORY" geändert werden. Am besten auf den selben wert wie in der make-fai-nfsroot.conf für TFTPROOT eingetragen ist. Nach einem Neustart des Dienstes sollte er nun das richtige Verzeichnis exportieren.Boot-Menu
Damit einfach ausgewählt werden kann, ob FAI zur installation verwendet werden soll, oder doch von der Lokalen Festplatte gestartet werden soll, haben wir ein Boot-Menu eingerichtet. Dazu sind folgende Dateien angelegt worden /srv/tftp/fai/pxelinux.cfg/defaultinclude whnetz-boot-menu/menu.cfg default whnetz-boot-menu/vesamenu.c32 prompt 0 timeout 50/srv/tftp/fai/whnetz-boot-menu/menu.cfg
menu hshift 13 menu width 49 menu margin 8 menu title whnetz-fai boot menu include whnetz-boot-menu/stdmenu.cfg include whnetz-boot-menu/text.cfg menu end/srv/tftp/fai/whnetz-boot-menu/stdmenu.cfg
menu background whnetz-boot-menu/splash.png menu color title * #FFFFFFFF * menu color border * #00000000 #00000000 none menu color sel * #ffffffff #76a1d0ff * menu color hotsel 1;7;37;40 #ffffffff #76a1d0ff * menu color tabmsg * #ffffffff #00000000 * menu vshift 12 menu rows 10 menu tabmsgrow 16 menu timeoutrow 17 menu tabmsg Press ENTER to boot or TAB to edit a menu entry/srv/tftp/fai/whnetz-boot-menu/text.cfg
default local
label local
menu label ^Local boot
localboot 0
label install
menu label ^Install
kernel vmlinuz-2.6.31-21-generic
append initrd=initrd.img-2.6.31-21-generic ip=dhcp root=/dev/nfs nfsroot=/srv/fai/nfsroot/ boot=live FAI_FLAGS=sshd,verbose,reboot FAI_ACTION=install
Die Datei vesamenu.c32 stammt aus /usr/lib/syslinux/vesamenu.c32.
Falls ein Rechner beim nächsten Neustart zwingend neu installiert werden soll, gibt es den Befehl "fai-chboot", mit hilfe von diesem kann mit den Parametern -e und -d + dem hostname des Rechners die Installation enabled oder disabled werden. Beim ersten mal muss zuerst "fai-chboot -c template hostname" verwendet werden, damit wird die Datei template kopiert und so bennant, dass sie für den hostname richtig ist.
Die Datei template
FAI_CONFIG_SRC=nfs://fai-server/srv/fai/config default fai-generated label fai-generated kernel vmlinuz-2.6.31-21-generic append initrd=initrd.img-2.6.31-21-generic ip=dhcp root=/dev/nfs nfsroot=/srv/fai/nfsroot/ boot=live FAI_FLAGS=sshd,verbose,reboot FAI_ACTION=install
NFS-Server
Letzter Schritt der Server installation ist die Konfiguration des NFS-Servers. Dazu muss in /etc/exports etwas eintragen wie/srv/fai 10.42.128.30/16(rw,sync,no_subtree_check,no_root_squash)und eimal exportfs ausführen.
Client
Nachdem nun der Server soweit eingerichtet ist, geht es an die Planung der installation. Dazu einen kleinen Abriss der FAI-Configurationsstrucktur:FAI-CONFIG
Die gesamte Konfig des FAI liegt im Ordner /srv/fai/config/. Alle in diesem Kapitel angegebenen Dateipfade beziehen sich, wenn es eine relative Adresse ist, auf diesen Ordner als Root. Hier wird nur ein Grobe Zusammenfassung der gesammten Installation gegeben, für mehr Informationen die Links am Ende dieser Seite besuchen.Klassen
Grundlage der Installation sind sogenannte Klassen, die Klassen werden zum einen Teil automatisch bestimmt, zum anderen Teil auf Grundlage des Hostnames mit dem Skript class/50-host-classes. Zu den automatischen Klassen gehören immer DEFAULT und LAST, eine weiter Klasse ist die Hardwarearchitektur des Clients z.B. AMD64. Die manuell definierten Klassen sind davon Abhängig wie die Installation struckturiert. Sinnvoll ist eine Struckturierung nach verschiedenen Eigenschaften der Clients z.B. eine Klasse LDAP für alle Clients, deren Benutzerauthorisation LDAP benutzt werden soll. Durch die Festlegung der Klassen werden also die Eingeschaften des Clients bestimmt. Ebenfalls im Ordner "class" können Umgebungsvariablen in Abhängigkeit der definierten Klassen gesetzt werden. Dazu werden Dateien mit einem Namen nach dem Schema "Klassenname.var" erstellt. In den Dateien werden nach der in der bash üblichen Art und Weise die Variablen gesetzt. (variablenname=variablenwert)hocks
Hocks sind Skripte die ausgeführt werden, bevor ein bestimmter Task ausgeführt wird. Der Name des Hocks setzt sich folgender Maßen zusammen: Taskname.Klasse. Damit wird angegeben vor welchem Task der hock ausgeführt werden soll und welche Klasse dazu definiert sein muss. Die wichtigste (und einzige) Anwendung eines Hooks in unserem System ist der hock "instsoft.WHBASE", dieser Hock ersetzt die sources.list des Live-Systems mit einer Lucid sources.list. Dies ist momentan notwendig, da das Live-System ein lenny ist.disk_config
Der erste Task bei der Installation ist die Partitionierung der Festplatte. dazu wird eine Konfigdatei im Ordner "disk_config" ausgewertet und entsprechend die Platte partitioniert. Die Konfigdatei muss den gleichen Name haben wie eine der Klassen des Clients. Falls mehrere Konfigdateien mit passendem Name vorhanden sind (mehrere Klassen treffen zu), wird die Konfigdatei genommen, deren Klasse weiter vorne steht. Falls keine Konfigdatei zutrifft, wird auch die Festplatte nicht partitioniert.Packages
Nachdem die Festplatte fertig ist, wird mit der Installation der Packete begonnen. Dazu werden die Konfigdateien in "package_config" verwendet. Jede Datei mit einem Name der einer definierten Klasse entspricht wird bearbeitet. Die Dateien sehen grob gesagt so aus:PACKAGES aptitude ## die erste Zeile gibt an mit welchem Tool die Pakete installiert werden sollen, im Regelfall mit aptitude vim apache screen zsh nano_ ## Es folgt eine liste der zu installierenden Pakete, jeweils ein Packet pro Zeile ## Eine Besonderheit ist wenn dem Packetname ein "-" angefügt ist, bedeuted dies das dieses Packet removed werden soll, ## bei einem angefügten "_" wird das Packet gepurged.
debconf
Für die Installation interessant ist noch die Debconf Fähigkeit der Packete, damit wird bereits bei der Installation eine bestimmte Konfiguration vorgegeben, um dieses zu beeinflussen, können im Ordner "debconf" wieder Konfigurationsdateien abgelegt werden. Auch hier werden alle Dateien, deren Name einer definierten Klasse entsprechen, ausgwertet. In der Datei stehen Zeilen wie sie mit hilfe des Tools debconf-get-selections ermittelt werden können. Um die gewünste Konfiguration zu erreichen am besten das Packet von 'Hand' auf einem Rechner installieren, einmal debconf-get-selections ausführen und die gesammte Ausgabe in eine Datei umleiden. Danach das Packet mit dpkg-reconfigure wie gewünscht Konfigurieren und nocheinmal debconf-get-selections ausführen, die Unterschiede der 2 Ausgaben gibt die Zeilen wieder, welche durch die Konfiguration geändert wurden. Falls dabei keine klare Aussage entsteht, kann auch einfach alle Zeilen die mit dem Packet-Name beginnen verwendet werden.files
Der Ordner files ist der Quellort für den Befehl fcopy. fcopy ist ein intelegenter Kopierbefehl, welchem nur die Zielposition auf dem neuen System angegeben werden muss. als Quelle wird unter files der selbe pfad gesucht wie der Zielpfad ist. Mit der zusätzlichen Eigenschaft, dass die Zieldatei im Quellenpfad ein Ordner ist, in dem mehrere Dateien liegen können, die jeweils wie eine Klasse heisen, Kopiert wird schlieslich die Datei mit dem Name der Klasse, die zuerst in der Liste steht. Beispiel: Angwendeter Befehl: fcopy /etc/config1Im Ordner files/etc/config1/ befinden sich die Dateien: klasse1, klasse3.
definierte Klassen Client1: DEFAULT, klasse1, klasse2, klasse3, LAST
definierte Klassen Client2: DEFAULT, klasse2, klasse3, LAST Bei der Installation von Client1 wird mit dem obigen Befehl die Datei files/etc/config1/klasse1 an die stelle /etc/config1 des neuen Systems kopiert.
Bei der Installation von Client2 wird hingegen die Datei files/etc/config1/klasse3 an die stelle /etc/config1 des neuen Systems kopiert.
Vor allem dadurch, dass der hostname des Clients eine eigene Klasse ist, kann so auf einfache Art und Weise für jeden Client eine andere Datei kopiert werden (z.B. um einen anderen ssh-key pro Rechner)
Skripte
Der letzte Schritt der Installation ist das ausführen von Skripten. Diese befinden sich jeweils in Unterordner des Ordners "scripts". Die Unterordner heisen jeweils wie eine Klasse, und die darin enthaltenen Skripte sind für eine klare Ausführungsreihenfolge durchnummeriert. Die Skripte werden jeweils nur ausgeführt wenn die entsprechende Klasse definiert ist. Als Skripte können bash, perl und cfagent Skripte verwenden werden. Wenn die Softupdate Funktion von fai benutzt werden soll, dann muss allerdings bei den skripten beachtet werden dass beim 2. mal ausführen der skripte das gleiche Ergebnis heraus kommt wie beim ersten mal ausführen. Das heißt ein einfaches hinzufügen einer Zeile an eine Konfigurationsdatei ist böse.basefiles
In diesem Ordner sind die Basis-Images für andere Distributionen als die Distribution des Live-Systems gespeichert.Soft-update
Fai ist auch in der Lage einen Bereits installierten Client zu updaten, dazu gibt es die soft-update funktion. Gestartet wird diese mit "fai -v softupdate". Meistens muss dazu zuerst noch die Variable "FAI_CONFIG_SRC" gesetzt werden. z.B. auf "FAI_CONFIG_SRC=nfs://fai-server/srv/fai/config".Links
Interesante Seite für das schreiben von Scripten:http://wiki.fai-project.org/index.php/Variables Offizielle Seite:
http://fai-project.org/ -- Main.alexander - 26 May 2010