====== FAI: Anpassen der FAI-Konfiguration ====== Nachfolgend werden Anpassungen an der FAI-Konfiguration beschrieben. Diese Konfiguration, die im Normalfall unter **''/srv/fai/config/''** zu finden ist und aus dem Paket "''fai-doc''" stammt, befindet sich nach der Paketinstallation in einem Grundzustand. Sinnvolle Ergänzungen und Erweiterungen sind Bestandteil des Dokuments. \\ ===== Voraussetzung ===== Es wird vorausgesetzt, dass ein FAI-Server vorhanden ist, wie er zum Beispiel [[:betriebssysteme:debian-linux:debian-linux_fai-installation|hier]] beschrieben wird. \\ ===== Abschnitte ===== Der Blick in das Verzeichnis "''/srv/fai/config/''" zeigt folgende Verzeichnisse: * ''basefiles'': FAI-Basisdateien * ''class'': FAI-Klassen (Rechnerklassen) * ''debconf'': Lokalisation und Tastaturlayout * ''disk_config'': Festplattenkonfiguration * ''files'': Dateien für den FAI-Client * ''hooks'': Einsprungskripte * ''package_config'': Paketlisten * ''scripts'': Skripte * ''tests'': FAI-Test \\ ==== class ==== In diesem Verzeichnis erfolgt die Klassifizierung durch den Rechnernamen. Je nach Rechnername werden eine oder mehrere Klassen identifiziert und nachfolgend ausgeführt. \\ * Anpassen der Datei "**''50-host-classes''**": case $HOSTNAME in *client*) echo "BASIS DEBDEU" ;; *) echo "BASIS" ;; esac ifclass -o I386 AMD64 && echo GRUB_PC exit 0 \\ * Erstellen der Datei "**''BASIS.var''**": # Erlaube die Installation von Paketen aus unsignierten Quellen FAI_ALLOW_UNSIGNED=1 # Zeitzone UTC=yes TIMEZONE=Europe/Berlin # Administratorkennwort (Standard: 'fai') # Neues Kennwort generieren mit 'makepasswd': # ~# echo "" > /tmp/kennwort && makepasswd --crypt-md5 --clearfrom /tmp/kennwort && rm -f /tmp/kennwort; ROOTPW='$1$kBnWcO.E$djxB128U7dMkrltJHPf6d1' # Installationsstop ab diesem Fehlerwert STOP_ON_ERROR=700 \\ * Anpassen der Datei "**''DEBDEU.var''**": # Konsolenfont CONSOLEFONT= # Tastaturlayout KEYMAP=de-latin1-nodeadkeys # Der Parameter 'MODULESLIST' beinhaltet alle Module, die auf einem # neuen System waehrend der Installation geladen werden. # Weitere Module koennen zur Variablen '$kernelmodules' in der Datei # 20-hwdetect.source eingetragne werden MODULESLIST="usbkbd ehci-hcd ohci-hcd uhci-hcd usbhid psmouse" \\ ==== debconf ==== Hier befinden sich alle Konfigurationsdateien, die für DEBIAN spezifisch sind. \\ * Erstellen der Datei "**''BASIS''**: exim4-config exim4/dc_eximconfig_configtype select local delivery only; not on a network locales locales/default_environment_locale select en_US.UTF-8 locales locales/locales_to_be_generated multiselect en_US.UTF-8 UTF-8 keyboard-configuration keyboard-configuration/modelcode string pc105 keyboard-configuration keyboard-configuration/xkb-keymap select us keyboard-configuration keyboard-configuration/variant select USA keyboard-configuration keyboard-configuration/model select Generic 105-key (Intl) PC keyboard-configuration keyboard-configuration/layoutcode string us keyboard-configuration keyboard-configuration/optionscode string ctrl:nocaps,terminate:ctrl_alt_bksp \\ * Erstellen der Datei "**''DEBDEU''**": locales locales/default_environment_locale select de_DE.UTF-8 locales locales/locales_to_be_generated multiselect de_DE.UTF-8 UTF-8 xserver-xorg xserver-xorg/config/inputdevice/keyboard/layout string de xserver-xorg xserver-xorg/config/inputdevice/keyboard/model string pc105 xserver-xorg xserver-xorg/config/inputdevice/keyboard/options string lv3:ralt_switch xserver-xorg xserver-xorg/autodetect_monitor boolean false xserver-xorg xserver-xorg/autodetect_keyboard boolean true xserver-xorg xserver-xorg/autodetect_mouse boolean true xserver-xorg xserver-xorg/autodetect_video_card boolean true console-setup console-setup/variant select Germany console-setup console-setup/charmap select UTF-8 console-setup console-setup/layoutcode string de console-setup console-setup/compose select No compose key console-setup console-setup/fontsize-text select 16 console-setup console-setup/optionscode string lv3:ralt_switch console-setup console-setup/layout select Germany console-setup console-setup/detected note console-setup console-setup/variantcode string console-setup console-setup/codesetcode string Lat15 console-setup console-setup/modelcode string pc105 console-setup console-setup/ask_detect boolean false console-setup console-setup/altgr select Right Alt console-setup console-setup/ttys string /dev/tty[1-6] console-setup console-setup/model select Generic 105-key (Intl) PC console-setup console-setup/fontsize-fb select 16 console-setup console-setup/switch select No temporary switch console-setup console-setup/codeset select # Latin1 and Latin5 - western Europe and Turkic languages console-setup console-setup/toggle select No toggling console-setup console-setup/fontface select VGA console-setup console-setup/fontsize string 16 \\ ==== disk_config ==== Hier wird die Festplattenkonfiguration festgelegt. \\ * Erstellen der Datei "**''BASIS''**" (ausgelegt für eine Festplatte mit mindestens 15 GB): disk_config disk1 disklabel:msdos bootable:1 fstabkey:uuid primary /boot 500 ext2 rw logical swap 2G swap sw logical /var/log 4G ext4 rw,noatime,nodev primary / 8G- ext4 rw,noatime,errors=remount-ro \\ * Erstellen der Datei "**''LVM''**" (ausgelegt für eine Festplatte mit mindestens 15 GB): disk_config disk1 disklabel:msdos bootable:1 fstabkey:uuid primary /boot 256M ext3 defaults,rw createopts="-L boot" tuneopts="-c 180 -i 180d" primary - 1G- - - disk_config lvm vg vg001 disk1.2 vg001-swap swap 2G swap sw createopts="-L swap" vg001-var_log /var/log 4G ext4 defaults,rw createopts="-L var_log" tuneopts="-c 180 -i 180d" vg001-root / 8G ext4 defaults,rw,errors=remount-ro createopts="-L root" tuneopts="-c 180 -i 180d" Sollte die Festplatte größer als 15 GB sein, kann der freier Speicher als logische Volumes verwendet werden. \\ ==== files ==== Hier befinden sich alle Dateien, die während der Installationsphase auf den Zielrechner kopiert werden. Jede Dateiname wird dabei als Verzeichnis erstellt, um darin die eigentliche Datei als Klassenname abzulegen. \\ * Erstellen der Datei "**''etc/default/console-setup/DEBDEU''**": # Aktivieren der TTY-Konsolen ACTIVE_CONSOLES="/dev/tty[1-6]" # Zeichentabelle # Weitere bekannte Werte: UTF-8 ARMSCII-8 CP1251 # CP1255 CP1256 GEORGIAN-ACADEMY GEORGIAN-PS IBM1133 ISIRI-3342 # ISO-8859-1 ISO-8859-2 ISO-8859-3 ISO-8859-4 ISO-8859-5 ISO-8859-6 # ISO-8859-7 ISO-8859-8 ISO-8859-9 ISO-8859-10 ISO-8859-11 ISO-8859-13 # ISO-8859-14 ISO-8859-15 ISO-8859-16 KOI8-R KOI8-U TIS-620 VISCII CHARMAP="UTF-8" # Symboltabelle # Weitere bekannte Symboltabellen: Arabic Armenian CyrAsia CyrKoi # CyrSlav Ethiopian Georgian Greek Hebrew Lao Lat15 Lat2 Lat38 Lat7 # Thai Uni1 Uni2 Uni3 Vietnamese CODESET="Lat15" # Schriftartenname und -groesse # Weitere bekannte Werte sind: VGA (sizes 8, 14 and 16), Terminus # (sizes 12x6, 14, 16, 20x10, 24x12, 28x14 and 32x16), TerminusBold # (sizes 14, 16, 20x10, 24x12, 28x14 and 32x16), TerminusBoldVGA # (sizes 14 and 16), Fixed (sizes 13, 14, 15, 16 and 18), Goha # (sizes 12, 14 and 16), GohaClassic (sizes 12, 14 and 16) FONTFACE="VGA" FONTSIZE="16" # Tastaturmodell und -layout XKBMODEL="pc105" XKBLAYOUT="de" XKBVARIANT="nodeadkeys" XKBOPTIONS="terminate:ctrl_alt_bksp" \\ * Erstellen der Datei "**''etc/default/locale/DEBDEU''**": LANG="de_DE.UTF-8" \\ ==== hooks ==== Hier werden die Skripte abgelegt, die während der Installation aufgerufen werden. \\ * Erstellen der Datei "**''updatebase.DEBDEU''**": #! /bin/bash # Kopieren der Dateien fuer 'console-setup' fcopy -v /etc/default/console-setup \\ * die Datei muss noch ausführbar gemacht werden: ~# chmod +x updatebase.DEBDEU \\ ==== package_config ==== Hier werden alle Pakete eingetragen, die zusätzlich zur Basisinstallation auf das System gebracht werden sollen. \\ * Erstellen der Datei "**''BASIS''**": PACKAGES aptitude AMD64 linux-image-amd64 initramfs-tools memtest86+ PACKAGES aptitude DHCPC isc-dhcp-client PACKAGES aptitude GRUB_PC grub-pc grub-legacy- lilo- PACKAGES aptitude fai-client cron debconf-utils file hdparm less linuxlogo nfs-common rdate rsync openssh-client openssh-server strace time procinfo eject locales console-setup kbd pciutils usbutils lvm2 \\ ==== scripts ==== In diesem Verzeichnis liegen die Skripte, die nach der Installation aufgerufen werden. Es werden zwei neue Verzeichnisse "**''BASIS''**" und "**''DEBDEU''**" erstellt. \\ * Kopieren der Datei "**''FAIBASE/10-misc''**" nach "**''BASIS/''**": #! /bin/bash # (c) Thomas Lange, 2001-2012, lange@debian.org error=0; trap 'error=$(($?>$error?$?:$error))' ERR # save maximum error code echo $TIMEZONE > $target/etc/timezone cp -f /usr/share/zoneinfo/${TIMEZONE} $target/etc/localtime if [ -n "$IPADDR" ]; then ifclass DHCPC || ainsl -s /etc/hosts "$IPADDR $HOSTNAME.$DOMAIN $HOSTNAME" else ifclass DHCPC && ainsl -s /etc/hosts "127.0.0.1 $HOSTNAME" fi fcopy -iM /etc/hosts /etc/motd # make /root accessible only by root chmod -c 0700 $target/root chown -c root:root $target/root # copy default dotfiles for root account fcopy -ir /root chmod -c 1777 ${target}/tmp chown -c 0:0 ${target}/tmp exit $error \\ * Kopieren der Datei "**''FAIBASE/20-removable_media''**" nach "**''BASIS/''**": #! /bin/bash # (c) Thomas Lange, 2006,2009, lange@debian.org # create entries for removable media in fstab and directories in /media [ -b $target/dev/fd0 ] && ainsl /etc/fstab "/dev/fd0 /media/floppy auto users,noauto 0 0" cdromlist() { [ -f /proc/sys/dev/cdrom/info ] || return devs=$(grep 'drive name:' /proc/sys/dev/cdrom/info | cut -d ":" -f 2) for d in $devs; do echo $d done } fstabline () { line=$(printf "%-15s %-15s %-7s %-15s %-7s %s\n" "$1" "$2" "$3" "$4" "$5" "$6") ainsl /etc/fstab "$line" } i=0 for cdrom in $(cdromlist | tac); do [ $i -eq 0 ] && ln -s cdrom0 $target/media/cdrom mkdir -p $target/media/cdrom$i fstabline /dev/$cdrom /media/cdrom$i udf,iso9660 ro,user,noauto 0 0 i=$(($i + 1)) done \\ * Kopieren der Datei "**''DEBIAN/10-rootpw''**" nach "**''DEBDEU/''**": #! /bin/bash error=0; trap 'error=$(($?>$error?$?:$error))' ERR # save maximum error code # set root password $ROOTCMD usermod -p $ROOTPW root exit $error \\ * Kopieren der Datei "**''DEBIAN/30-interface''**" nach "**''DEBDEU/''**": #! /bin/bash error=0; trap 'error=$(($?>$error?$?:$error))' ERR # save maximum error code if ifclass DHCPC && [ $FAI_ACTION != "softupdate" ] then cat > $target/etc/network/interfaces <<-EOF # generated by FAI auto lo eth0 iface lo inet loopback iface eth0 inet dhcp EOF elif [ $FAI_ACTION != "softupdate" ] then [ -n "$IPADDR" ] && cat > $target/etc/network/interfaces <<-EOF # generated by FAI auto lo eth0 iface lo inet loopback iface eth0 inet static address $IPADDR netmask $NETMASK broadcast $BROADCAST gateway $GATEWAYS EOF [ -n "$NETWORK" ] && echo "localnet $NETWORK" > $target/etc/networks [ -L $target/etc/resolv.conf ] || cp -p /etc/resolv.conf $target/etc fi # here fcopy is mostly used, when installing a client for running in a # different subnet than during the installation fcopy -iM /etc/resolv.conf fcopy -iM /etc/network/interfaces /etc/networks exit $error \\ * Kopieren der Datei "**''DEBIAN/40-misc''**" nach "**''DEBDEU/''**": #! /bin/bash # (c) Thomas Lange, 2001-2011, lange@debian.org # (c) Michael Goetze, 2010-2011, mgoetze@mgoetze.net error=0; trap 'error=$(($?>$error?$?:$error))' ERR # save maximum error code # a list of modules which are loaded at boot time for module in $MODULESLIST; do ainsl -a /etc/modules "^$module$" done fcopy -Mv /etc/hostname || echo $HOSTNAME > $target/etc/hostname ainsl -av /etc/mailname ${HOSTNAME} sed -i -e "s/^UTC.*/UTC=${UTC}/" $target/etc/default/rcS sed -i -e 's#/sbin/getty 38400#/sbin/getty -f /etc/issue.linuxlogo 38400#' ${target}/etc/inittab [ $FAI_ACTION = "softupdate" ] || cp /etc/fai/fai.conf $target/etc/fai/fai.conf ainsl -av /etc/fai/fai.conf "FAI_CONFIG_SRC=$FAI_CONFIG_SRC" fcopy -Miv /etc/fai/fai.conf exit $error \\ ===== Softwareaktualisierung ===== FAI beherrscht neben der Installation eines Rechners auch die Softwareaktualisierung. Dabei werden alle Pakete, die laut der FAI-Konfiguration fehlen, auf dem Client nachinstalliert. \\ * Auslösen der Softwareaktualisierung auf dem FAI-Client: ~# fai -N softupdate \\ ==== Erweiterung der Softwareaktualisierung ==== Der Mechanismus der Softwareaktualisierung beherrscht das nachträgliche Installieren von deinstallierten Paketen, aber nicht das Deinstallieren von zusätzlich installierten Paketen. Somit kann für einen FAI-Client kein bestimmter Softwarestand per FAI definiert werden. Dieser Mechanismus wurde in minimaler Form nachträglich hinzugefügt. \\ * Erstellen der Datei "**''scripts/DEBDEU/90-package-list''**": #! /bin/bash error=0; trap 'error=$(($?>$error?$?:$error))' ERR # save maximum error code if [ $FAI_ACTION != "softupdate" ] then # Sicherung der Paketliste mkdir -p $target/usr/local/share/fai $ROOTCMD dpkg --get-selections | awk '{ print $1 }' | sort | uniq > $target/usr/local/share/fai/paketliste.txt md5sum $target/usr/local/share/fai/paketliste.txt > $target/usr/local/share/fai/paketliste.md5 fi exit $error //Das Skript ermittelt am Ende der Installation alle installierten Pakete und speichert sie in einer Datei im Verzeichnis ''/root/'' ab.// \\ * die Datei muss noch ausführbar gemacht werden: ~# chmod +x scripts/DEBDEU/90-package-list \\ * Erstellen der Datei "**''scripts/DEBDEU/95-package-check''**": #! /bin/bash error=0; trap 'error=$(($?>$error?$?:$error))' ERR # save maximum error code if [ $FAI_ACTION == "softupdate" ] then if [ -s "$target/usr/local/share/fai/paketliste.txt" ]; then Var_ListeSoll="$target/usr/local/share/fai/paketliste.txt"; else echo "Keine Soll-Paketliste gefunden. Softwareüberprüfung wird übersprungen."; exit 0; fi; $ROOTCMD dpkg --get-selections | awk '{ print $1 }' | sort | uniq > /tmp/pakete.txt Var_ListeIst="/tmp/pakete.txt"; Var_PaketeLoeschen=$(cat "${Var_ListeSoll}" "${Var_ListeIst}" | sort | uniq -u | tr "\n" " "); if [ ${#Var_PaketeLoeschen} -ne 0 ]; then $ROOTCMD apt-get purge -qy --force-yes ${Var_PaketeLoeschen}; error=$? else echo "Keine Pakete installiert, die wieder deinstalliert werden müssen. Softwareüberprüfung erfolgreich."; error=0 fi; rm -f "/tmp/pakete.txt"; fi exit $error //Dieses Skript wird ausschließlich während der Softwareaktualisierung ausgeführt und ermittelt die Pakete, die nach der Installation zusätzlich installiert wurden (über den Vergleich der beiden Paketlisten). Alle zusätzlichen Pakete werden deinstalliert.// \\ * die Datei muss noch ausführbar gemacht werden: ~# chmod +x scripts/DEBDEU/95-package-check \\ \\ \\ \\ {{tag>DEBIAN FAI}}