Fai-etch

Aus Doku-Wiki
Zur Navigation springenZur Suche springen

Anmerkung

Vorgabe ist, eine vollautomatisierte Debian Linux Client-Installation mit
unterschiedlicher Soft- und Hardwareausstattung der Clients.

Die Lösung wird mit einem Fai-Server umgesetzt.

Version und Voraussetzungen

Linux : Debian Etche
FAI

fai-client          3.1.8               Fully Automatic Installation client package
fai-doc             3.1.8               Documentation for FAI
fai-kernels         1.17+etch.18etch5   special kernels for FAI (Fully Automatic Ins
fai-quickstart      3.1.8               Fully Automatic Installation quickstart pack
fai-server          3.1.8               Fully Automatic Installation server package


BUG

Die hier beschriebenen Fehler sind auch aus älteren Versionen von FAI

Nach der Installation und Konfiguration wird das Script fai-setup aufgerufen. Wenn dieses nicht mit einem Fehler abbricht, kann dass folgende übersprungen werden, ansonsten hoffe ich, mit den Fehlerbeschreibungen helfen zu können.

Beim Start von fai-setup bzw. make-fai-nfsroot kommte es zu fehlern die zu Abruch führen. Folgende Änderungen habe ich im Script /usr/sbin/make-fai-nfsroot vorgenommen:

- original Text
+ geänderter bzw. hinzugefügter Text 
Kernel wird nicht ins NFSROOT installiert

Der Kernel im Paket Fai-Kernels v1.10.3 heisst nicht mehr "kernel-image-xxx" sondern "linux-image-xxx". Folgenden Änderungen habe ich vorgenommen:

     local package=$1
-    KERNELVERSION=`dpkg --info $package | grep "Package: kernel-image" | sed -e 's/.*kernel-image-'//`
+    KERNELVERSION=`dpkg --info $package | grep -E "Package: (kernel|linux)-image" | sed -e 's/.*\(kernel\|linux\)-image-'//`
Im NFSROOT wird etc/fai nicht kopiert

Es soll aus /etc/fai/* alle Dateien nach $NFSROOT/etc/fai/ kopiert werden. Da dass Verzeichnis fai in $NFSROOT/etc nicht vorhanden ist, schlägt der Versuch fehl Meine Änderungen am Script make-fai-nfsroot:

-   cp -Rpv $cfdir/* $NFSROOT/etc/fai
+   cp -Rpv $cfdir $NFSROOT/etc/

Jetzt wird das ganze Verzeichnis fai kopiert

Paket fai-nfsroot kann nicht Installiert werden.

Das Paket fai-nfsroot kann nicht direkt mit apt-get installiert werden. Es muss aber im Script /etc/fai/make-fai-nfsroot.conf unter -

packages="fai-nfsroot module-init-tools ............"

angegebe sein. Bei der Installation der Pakete im NFSROOT wird auf die Datei /etc/fai/sources.list zurück gegriffen. Deshalb habe ich dort den Eintrag:

deb http://www.informatik.uni-koeln.de/fai/download sarge koeln

hinzugefügt.

Probleme mit dem SSH-Pub. Key vom Fai user

Der User Fai sollte angelegt sein, wenn nicht muss der user fai angelegt werden. Wechsel mit su fai. Aufruf von:

# ssh-keygen -t rsa

Eigene Änderungen am Sysstem

/usr/sbin/make-fai-nfsroot

Hier habe ich am Ende des Scripts (vor exit 0 ;-)) die Zeile:

# vi /usr/sbin/make-fai-nfsroot
/etc/fai/BLB.changes

Damit habe ich eine Möglichkeit geschaffen, Anpassungen am neu erzeugten NFSROOT vorzunehmen

fai-chboot in subroutines-linux angepasst

In dem Script /usr/lib/fai/subroutines-linux werden (auch) die PXE-Cfg für den Neustart der Clients nach der Installation angepasst.
Im Original-Script wird der PXE-Boot auf disable gestellt. Bei mir war es aber notwendig den PXE-Boot nach der Installation auf localboot 0 umzustellen.
Das angepasste Script liegt unter /usr/lib/fai/subroutines-linux. Das geänderte Script unterscheidet sich in folgenden Punkten vom Originalscript:

/srv/fai/nfsroot/usr/lib/fai/subroutines-linux
 org  $frsh "cd /srv/tftp/fai; rm -f $hostname; ln -s $TFTPLINK $hostname"
 neu  $frsh /usr/sbin/fai-chboot -o $hostname
   
 org  $frsh /usr/sbin/fai-chboot -vd $ipaddr
 neu  $frsh /usr/sbin/fai-chboot -o $hostname

Installation

Fai

Fai Debian Pakete

Nach eienem Eintrag in der "source.list" des Debianservers können die Debian-Pakete des Faiservers mit "apt-get" installiert werden.

# vi /etc/apt/source.list

deb http://www.informatik.uni-koeln.de/fai/download etch koeln

Dies sollte man sich aber überlegen, da dann alle Weiterentwicklungen von FAI mit einem Update installiert werden.
Im weiteren werden die Debian Etch Pakete verwendet.
Mit "aptitude" werden die Fai-Pakete installieren.

# aptitude update
# aptitude install fai-quickstart

Die folgenden Pakete werden installiert:

 apt-move binutils cfengine2 dash debootstrap dhcp3-server fai-client fai-doc
 fai-kernels fai-server genisoimage libapt-pkg-perl mkisofs nfs-kernel-server
 rsh-server syslinux tftpd-hpa

NFS-Server

# aptitude install nfs-common

Zusätliche Software

# apt-get install gcc vim mknbi rsh-client ntpdate

NFS-Server einrichten

Folgende Konfigurationsdateien müssen angepasst werden:

/etc/export       | Freigabe der NFS-Shares für die Clients frei
/etc/netgroup     | Legt fest, welche Client-PCs zugreifen dürfen

Beispiel-Conf /etc/exports

# /etc/exports: the access control list for filesystems which may be exported
#		to NFS clients.  See exports(5).
#
  • Wird von FAI benötigt
/srv/fai/config 172.27.0.0/16(async,ro)
/usr/lib/fai/nfsroot 172.27.0.0/16(async,ro,no_root_squash)
  • Zusätzliche Freigaben (Beispiel)
/fai 172.27.0.0/255.255.0.0(ro,no_root_squash,sync) 127.0.0.1(ro,no_root_squash,sync)
/client-home/www-home 172.27.11.0/255.255.255.0(rw,no_root_squash,sync) 127.0.0.1(rw,no_root_squash,sync)
/client-home/digi-home 172.27.15.0/255.255.255.0(rw,no_root_squash,sync) 127.0.0.1(rw,no_root_squash,sync)
/client-home/eigenedaten 172.27.11.0/255.255.255.0(rw,no_root_squash,sync) 172.27.15.0/255.255.255.0(rw,no_root_squash,sync)

Beispiel-Conf /etc/netgroup

# etc/netgroup 
#
# Einzelne Client-Def.
#
li-sua-101 (li-sua-101,,)
li-sua-102 (li-sua-102,,)
debian-fai (debian-fai,,)

# Gruppe
li-sua-clients li-sua-101 li-sua-102 

# Fai-Clients
faiclients li-sua-clients
 

Erstes starten des NFS-Servers

# rpc.mountd
# rpc.nfsd
# /etc/init.d/nfs-common start
# /etc/init.d/nfs-kernel-server start

Folgende Freigaben müssen mindestens vorhanden sein

# showmount --exports
 Export list for FAI-01:
 /srv/fai/config          172.27.0.0/16
 /usr/lib/fai/nfsroot     172.27.0.0/16

Konfiguration

Fai-Server konfiguration

Konfigurationsdateien des FAI-Servers :

  • /etc/fai/fai.conf
  • /etc/fai/make-nfs-root.conf
  • /etc/fai/source.list

/etc/fai/

Grundkonfiguration anpassen.
!!! Achtung !!!
Wenn in diesen Dateien Änderungen vorgenommen werden,
muss danach fai-setup bzw. make-fai-nfsroot
aufgreufen werden. Sonst werden die Änderungen nicht wirksam.

fai.conf

Diese Eintsellungen müssen vorgenommen werden. Optionale Einstellungen werden hier nicht aufgeführt

  • Der INSTALLSERVER muss über DNS aufgelöst werden
installserver=INSTALLSERVER
  • Wird zum erzeugen des nfs-root benötigt
mirrorhost=ftp.debian.org
  • Wenn der Fai-Server mehrere Netwerkkarten
SERVERINTERFACE=eth0
  • Zum speichern der Installations-Logfiles
FAI_REMOTESH=rsh
FAI_REMOTECP=rcp
  • Pfadt zu den Scripten für die Clientinstallaton
FAI_CONFIGDIR=/usr/local/share/fai
FAI_LOCATION=$installserver:$FAI_CONFIGDIR
  • Pfadt des nfsroot-Verzeichnisses
NFSROOT=/usr/lib/fai/nfsroot
  • Konfigurationsverzeichnis auf dem Client
FAI=/fai
make-nfs-root.conf

Anpassungen des Basispaketes im nfs-root Auch hier nur die Einstellungen die angepasst werden müssen

  • Mirror-Server (z.B. Siegel oder Apt-Proy)
FAI_DEBOOTSTRAP="sarge http://$mirrorhost/debian"
  • Root-Passwort (fai)
FAI_ROOTPW='$1$kBnWcO.E$djxB128U7dMkrltJHPf6d1'
  • Bootkernel der Clients
KERNELPACKAGE=/usr/lib/fai/kernel/linux-image-2.6.16-fai-kernels_1_i386.deb
  • Exportiert die nfsroot für die angegebene Netzgruppe
FAICLIENTS="172.27.0.0/16"
  • Pakete die nicht benötigt werden.
FAI_DEBOOTSTRAP_OPTS="--exclude=pcmcia-cs,ppp,pppconfig,pppoe,pppoeconf,dhcp-client
                       exim4,exim4-base,exim4-config,exim4-daemon-light,mailx,at 
                       fdutils,info,modconf,libident,logrotate,exim"


  • Pakete die zusätzlich zur nfs-root hinzu gefügt werden
packages="fai-nfsroot module-init-tools dhcp3-client ssh rdate lshw hwinfo portmap
bootpc rsync wget rsh-client less dump reiserfsprogs usbutils
psmisc pciutils hdparm smartmontools parted mdadm lvm2
dnsutils ntpdate dosfstools cvs jove xfsprogs xfsdump
sysutils dialog discover mdetect libnet-perl netcat libapt-pkg-perl
console-tools"
source.list

In diesem Beispiel wird ein APT-Proxy eingebungen.

Beispiel

# These lines should work for many sites
# A more comprehensive example can be found in /usr/share/doc/fai/examples/etc
#
# Internet
##########
# deb http://ftp.debian.org/debian sarge main contrib non-free
# deb http://ftp.debian.org/debian sarge-proposed-updates main contrib non-free
# deb http://security.debian.org/debian-security sarge/updates main contrib non-free
#
# Debian-Proxy local
####################
deb http://fai-sarge:9999/debian stable main contrib non-free
deb-src http://fai-sarge:9999/debian stable main contrib non-free
deb http://fai-sarge:9999/debian-non-US stable/non-US main contrib non-free
deb-src http://fai-sarge:9999/debian-non-US stable/non-US main contrib non-free
deb http://fai-sarge:9999/security stable/updates main contrib non-free

deb http://fai-sarge:9999/fai/ sarge koeln
deb http://fai-sarge:9999/blb/ stable blb
deb http://fai-sarge:9999/marillat/ sarge main
authorized_keys

Die authorized_keys wird beim make-fai-nfsroot automatisch vom Verzeichnis

# /root/.ssh/identity.pub

in das NFSROOT kopiert.
Änderungen die sich bei der Installation auswirken sollen, müssen entsprechend in dieser Datei vorgenommen werden.
Die entgültige authorized_keys auf dem fertig installierten Client wird mit fcopy bei der Installation auf den Client kopiert.

known_hosts

Die known_hosts wir beim make-fai-nfsroot automatisch vom Verzeichnis

# ~/$loguser/.ssh/known_hosts
# /var/log/fai/.ssh/knwon_hosts  # Bsp BLB

in das NFSROOT kopiert.
Änderungen die sich bei der Installation auswirken sollen, müssen entsprechend in dieser Datei vorgenommen werden.
Die entgültige known_hosts auf dem fertig installierten Client wird mit fcopy bei der Installation auf den Client kopiert.

Setup Fai

Um die, in der Konfiguration angegebenen Werte wirksam werden zu lassen muss fai-setup aufgerufen werden.
Hierbei kann man entweder direkt fai-setup aufrufen. Dieses Script ruft, nach dem es fertig ist,
dass Script make-fai-nfsroot auf.
Welches Script man verwenden muss ist unten aufgeführt:

Immer wenn in der fai.conf Änderungen vorgenommen werden

fai-setup            

oder

fai-setup oder make-fai-nfsroot

wenn in der make-fai-nfsroot.conf Änderungen vorgenommen wurden.


DHCP3-Server einrichten

Nach der Instalaltion wie oben beschrieben, ist der DHCP3 Server schon installiert. Nun muss nur noch die Konfiguration an die eigenen Bedürfnisse angepasst werden. Hier ein Beispiel auf dem FAI-Paket fai-doc, zu finden unter /usr/share/doc/fai-doc/examples/etc/dhcpd.conf

# dhcpd.conf for fai
# replace faiserver with the name of your install server

deny unknown-clients;
option dhcp-max-message-size 2048;
use-host-decl-names on;
#always-reply-rfc1048 on;

filename "pxelinux.0";

# the server from which to load the initial boot file if different
# from server-name (if the DHCP server is not also the TFTP server)
#next-server faiserver;
 
subnet 192.168.1.0 netmask 255.255.255.0 {
  option routers 192.168.1.250;
  option domain-name "beowulf";
  option domain-name-servers 192.168.1.250;
  option time-servers faiserver;
  option ntp-servers faiserver;
  server-name "faiserver";
}

# perl -ane ' {print "host atom {hardware ethernet $1;fixed-address atom}";}'
host demohost {hardware ethernet 0:2:a3:b5:c5:41;fixed-address demohost;}

BOOTP-Server einrichten

Ein Beispiel zur Erklärung:

# /etc/bootptab: database for bootp server (/usr/sbin/bootpd)
....
.faiglobal:\
       :ms=1024:\
       :hd=/boot/fai:\
       :hn:bs=auto:\
       :rp=/usr/lib/fai/nfsroot:

.failocal:\
       :tc=.faiglobal:\
       :sa=172.27.1.11:\
       :ts=172.27.1.11:\
       :T170="172.27.1.11:/usr/local/share/fai":\
       :T171="sysinfo":\
       :T172="sshd verbose createvt":\
       :sm=255.255.0.0:\
       :gw=172.27.0.254:\
       :dn=blb-intranet.de:\
       :ds=172.27.1.15:
# Beispiel-Client
li-sua-101:ha=0060085c7868:bf=li-sua-101:ip=172.27.5.101:tc=.failocal:T171="install":
  • Um die Mac-Adresse des Clients heraus zu finden, kann "tcpdump" verwendet werden. Man bootet den Client und benutzt "tcpdump" auf dem Server zum auslesen:
tcpdump -x -X -s 10000 -i eth0 dst port 67
  • Bootdateien für PXE-Boot erzeugen

Am einfachsten ist es, ein Script aus dem Debianpacket FAI zu verwenden.

fai-chboot -F -I hostname/IP

Wenn man den Hostname angibt, muss dieser über einen DNS aufgelöst werden

Links

fai-chboot

fai-chboot

Erweiterte Konfiguration

Module in den Bootkernel (Installation) einbinden

  • Unter /usr/local/share/fai/class befindet sich das Script 20-hwdetect.source.

Hier können zusätzliche Kernel-Module angegeben werden. Diese werden dann bei der Installation eingebunden.

# load additional kernel modules (from old 11modules.source)
# this order should also enable DMA for all IDE drives
kernelmodules="rtc floppy usbkbd ide-disk ide-cd"
case $(uname -r) in
-->   2.4*) kernelmodules="$kernelmodules keybdev mousedev hid ide-detect isa-pnp" ;;
-->   2.6*) kernelmodules="$kernelmodules usbhid usbmouse ide-generic mptspi ata_piix sata_sil" ;;
esac

for mod in $kernelmodules; do
    [ "$verbose" ] && echo loading kernel module $mod
    modprobe -a $mod 1>/dev/null 2>&1
done

Fai Client-Installation

Fai-Client