Fai (Fully Automatic Installation) Version 3.x Debian Squeeze install howto

Fai (Fully Automatic Installation) Version 3.x Debian Squeeze install howto

FAI (Fully Automatic Installation) Version 3.x Debian Squeeze install howto

 

Dieses Howto beschreibt wie man eine FAI Instanz unter Debian Squeeze installiert.

Benötigte wird ein Server oder VM mit Debian Squeeze.
In diesem Beispiel heißt der Server
fai-squeeze.dmz-home.secretisland.de mit der IP 192.168.254.102
und er ist per DNS erreichbar.

Benötigte FAI Pakete installieren
[stextbox id=“bash“]apt-get install esmtp-run sudo fai-server fai-setup-storage fai-quickstart[/stextbox]

Es werden noch einige andere Pakete installiert wie tftpd-hpa und isc-dhcp-server die für FAI benötigt werden.

Bei der Installation wird einmal nach Einstellungen für MDADM gefragt. Das kann mit ok beantwortet werden.
Dann wird noch nach dem TFTP root directory gefragt. Hier wird /srv/tftp/fai angegeben.

fai-tftp

Dann einfach warten bis alles Installiert wurde.

FAI Live-System vorbereiten

Im Verzeichnis /etc/fai werden die Konfigurationen für das Live-System hinterlegt. Das Live-System wird später per NFS freigegeben und der zu Installierende Server kann dies dann Mounten und die Installation beginnen.

In der /etc/fai/fai.conf wird eingestellt wo das Config Verzeichnis sich befindet.

[stextbox id=“bash“]nano /etc/fai/fai.conf[/stextbox]

# $Id$

# /etc/fai/fai.conf -- configuration for FAI (Fully Automatic Installation)

# how to access the fai config space
# If undefined here, make-fai-nfsroot/fai-setup will use default value
# nfs:///$FAI_CONFIGDIR
# supported URL-types: nfs, file, cvs, cvs+ssh, svn+file, svn+http,
# git, git+http, hg+http
FAI_CONFIG_SRC=nfs://fai-squeeze.dmz-home.secretisland.de/srv/fai/config

SERVER=fai-squeeze.dmz-home.secretisland.de

# LOGUSER: an account on the install server which saves all log-files
# and which can change the kernel that is booted via network.
# Configure .rhosts for this account and PAM, so that root can log in
# from all install clients without password. This account should have
# write permissions for /srv/tftp/fai. For example, you can use write
# permissions for the group linuxadm. chgrp linuxadm /srv/tftp/fai;chmod
# g+w /srv/tftp/fai. If the variable is undefined, this feature is disabled.
# Define it, to enable it, eg. LOGUSER=fai
LOGUSER=fai

# set protocol type for saving logs. Values: ssh, rsh, ftp
FAI_LOGPROTO=ssh

# Access to Debian mirror via NFS mounted directory
# If FAI_DEBMIRROR is defined, install clients mount it to $MNTPOINT
#FAI_DEBMIRROR=yournfs debianmirror:/path/to/debianmirror

# The following variables are read only for almost every user.
# Do not change them unless you know what you are doing!

# mount point where the mirror will be mounted
MNTPOINT=/media/mirror

# the local configuration directory on the install client
FAI=/var/lib/fai/config

Hier geben wir als FAI_CONFIG_SRC unseren Server mit dem Verzeichnis /srv/fai/config an.
Außerdem legen wir den LOGUSER fai fest. Dieser wird benötigt um nach der Installation die Installation-Logfiles auf den FAI Server zu kopieren.

In der Datei /etc/fai/make-fai-nfsroot.conf wird festgelegt wo sich das Live-System auf dem FAI Server befinden soll.
Welches Verzeichnis als Config Space dienen soll.
Und welches root Passwort in dem Live-System vergeben ist. Das Standard root Passwort ist fai.

[stextbox id=“bash“]nano /etc/fai/make-fai-nfsroot.conf[/stextbox]

# these variables are only used by make-fai-nfsroot(8)
# here you can use also variables defined in fai.conf

# directory on the install server where the nfsroot for FAI is
# created, approx size: 390MB, also defined in bootptab or dhcp.conf
NFSROOT=/srv/fai/nfsroot

# TFTP directory for FAI files
TFTPROOT=/srv/tftp/fai

# location of the configuration space on the install server
FAI_CONFIGDIR=/srv/fai/config

# Add a line for mirrorhost and installserver when DNS is not available
# on the clients. This line(s) will be added to $nfsroot/etc/hosts.
#NFSROOT_ETC_HOSTS="192.168.1.250 yourinstallserver"

# Parameter for debootstrap: " "
FAI_DEBOOTSTRAP="squeeze http://cdn.debian.net/debian"

# the encrypted (with md5 or crypt) root password on all install clients during
# installation process; used when log in via ssh; default pw is: fai
FAI_ROOTPW='$1$kBnWcO.E$djxB128U7dMkrltJHPf6d1'

# location of a identity.pub file; this user can log to the install
# clients in as root without a password; only useful with FAI_FLAGS="sshd"
#SSH_IDENTITY=/home/admin/.ssh/identity.pub

# directory of hooks to be sourced at the end of make-fai-nfsroot,
# i.e they have to be shell scripts.
#NFSROOT_HOOKS=/etc/fai/nfsroot-hooks/

# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# following lines should be read only for most of you

FAI_DEBOOTSTRAP_OPTS="--exclude=info"

Bedeutung der Variablen:

  • NFSROOT
    Das Installationsverzeichnis wo sich der NFSROOT befinden soll.
  • TFTPROOT
    Das Verzeichnis wo sich der Kernel für den Netboot des live-systems befinden soll.
  • FAI_CONFIGDIR
    Das Verzeichnis wo die Konfigurationsdateien für die Installation der Clients sich befinden sollen.
  • NFSROOT_ETC_HOSTSHost eintrag für das Live-System wenn DNS nicht funktionieren sollte
  • FAI_DEBOOTSTRAP
    Die Quelle, aus der die von debootstrap benötigten Pakete bezogen werden können. Dies kann ein lokales Verzeichnis oder ein FTP- / HTTP-Server sein. Hier wird auch die Version des späteren NFSROOT bestimmt.
  • FAI_ROOTPW
    Das verschlüsselte Passwort für den Systemadministrator. Vorgegeben ist das Passwort „fai“; ein verschlüsseltes Password kann aus der Datei /etc/shadow kopiert werden oder mit dem Programm makepasswd erzeugt werden. Mit diesem PW könnten Sie während der FAI Installation auf den zu installierenden Server mit SSH connecten.
  • SSH_IDENTITY
    Hier kann man ein SSH-Key File angeben das im Live-System hergenommen wird. Somit kann man sich dann auch ohne Passwort mit dem SSH-Key einloggen.
  • NFSROOT_HOOKS
    In diesem Verzeichnis liegen bash-scripte die nach dem debootstrap ausgeführt werden
  • FAI_DEBOOTSTRAP_OPTS
    Zusätzliche Parameter für die DEBOOTSTRAP Umgebung

Erstellung des FAI Live-Systems “FAI nfsroot”

Nachdem alle Einstellungen gemacht wurden kann mit dem Befehl fai-setup das Live-System erstellt werden. Dies benötigt ein paar Minuten.
Die Option -v gibt das ganze mit mehr Infos aus.

[stextbox id=“bash“]fai-setup -v [/stextbox]

Using configuration files from /etc/fai
Creating FAI nfsroot in /srv/fai/nfsroot/live/filesystem.dir.
By default it needs more than 380 MBytes disk space.
This may take a long time.
Creating base system using debootstrap version 1.0.26+squeeze1
Calling debootstrap squeeze /srv/fai/nfsroot/live/filesystem.dir http://cdn.debian.net/debian
I: Retrieving Release
I: Retrieving Packages
I: Validating Packages
.
.
.
Creating base.tgz
Upgrading /srv/fai/nfsroot/live/filesystem.dir
`/etc/resolv.conf' -> `/srv/fai/nfsroot/live/filesystem.dir/etc/resolv.conf-installserver'
`/etc/resolv.conf' -> `/srv/fai/nfsroot/live/filesystem.dir/etc/resolv.conf'
Get:1 http://cdn.debian.net squeeze Release.gpg [1672 B]
Ign http://cdn.debian.net/debian/ squeeze/contrib Translation-en
Ign http://cdn.debian.net/debian/ squeeze/main Translation-en
Ign http://cdn.debian.net/debian/ squeeze/non-free Translation-en
Hit http://cdn.debian.net squeeze Release
Get:2 http://security.debian.org squeeze/updates Release.gpg [836 B]
Ign http://security.debian.org/debian-security/ squeeze/updates/contrib Translation-en
Ign http://security.debian.org/debian-security/ squeeze/updates/main Translation-en
Hit http://cdn.debian.net squeeze/main amd64 Packages
Ign http://security.debian.org/debian-security/ squeeze/updates/non-free Translation-en
Get:3 http://security.debian.org squeeze/updates Release [87.0 kB]
Get:4 http://cdn.debian.net squeeze/contrib amd64 Packages [64.1 kB]
Get:5 http://cdn.debian.net squeeze/non-free amd64 Packages [124 kB]
Get:6 http://security.debian.org squeeze/updates/main amd64 Packages [382 kB]
Get:7 http://security.debian.org squeeze/updates/contrib amd64 Packages [621 B]
Get:8 http://security.debian.org squeeze/updates/non-free amd64 Packages [20 B]
Fetched 660 kB in 9s (67.2 kB/s)
Reading package lists...
Reading package lists...
Building dependency tree...
Initializing package states...
Writing extended state information...
Reading task descriptions...
The following NEW packages will be installed:
  busybox{a} dmsetup{a} fai-client{a} fai-nfsroot fai-setup-storage{a}
  file{a} initramfs-tools{a} klibc-utils{a} libapt-pkg-perl{a} libdb4.7{a}
  libdevmapper1.02.1{a} libklibc{a} liblinux-lvm-perl{a} libmagic1{a}
  libparse-recdescent-perl{a} libparted0debian1{a} live-boot{a}
  live-boot-initramfs-tools{a} parted{a} perl{a} perl-modules{a}
The following packages will be upgraded:
  perl-base
1 packages upgraded, 21 newly installed, 0 to remove and 0 not upgraded.
Need to get 11.9 MB of archives. After unpacking 44.3 MB will be used.
Writing extended state information...
Get:1 http://security.debian.org/debian-security/ squeeze/updates/main perl-base amd64 5.10.1-17squeeze6 [1068 kB]
.
.
.
Get:22 http://cdn.debian.net/debian/ squeeze/main fai-nfsroot all 3.4.7 [68.1 kB]
Fetched 11.9 MB in 43s (273 kB/s)
(Reading database ... 8487 files and directories currently installed.)
Preparing to replace perl-base 5.10.1-17squeeze5 (using .../perl-base_5.10.1-17squeeze6_amd64.deb) ...
Unpacking replacement perl-base ...
Processing triggers for man-db ...
Setting up perl-base (5.10.1-17squeeze6) ...
Selecting previously deselected package libmagic1.
(Reading database ... 8487 files and directories currently installed.)
.
.
.
Reading state information...
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Adding additional packages to /srv/fai/nfsroot/live/filesystem.dir:
nfs-common fai-nfsroot module-init-tools ssh rdate lshw portmap rsync lftp less dump reiserfsprogs e2fsprogs usbutils hwinfo psmisc pciutils hdparm smartmontools parted mdadm lvm2 dnsutils ntpdate dosfstools jove xfsprogs xfsdump procinfo dialog discover console-tools console-common iproute udev subversion liblinux-lvm-perl cfengine2 libapt-pkg-perl grub lilo linux-image-2.6-amd64
install_packages: reading config files from directory /etc/fai
install_packages: read config file NFSROOT
install_packages: executing chroot /srv/fai/nfsroot/live/filesystem.dir apt-get clean
install_packages: executing chroot /srv/fai/nfsroot/live/filesystem.dir aptitude -R -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" install nfs-common fai-nfsroot module-init-tools ssh rdate lshw portmap rsync lftp less dump reiserfsprogs e2fsprogs usbutils hwinfo psmisc pciutils hdparm smartmontools parted mdadm lvm2 dnsutils ntpdate dosfstools jove xfsprogs xfsdump procinfo dialog discover console-tools console-common iproute udev subversion liblinux-lvm-perl cfengine2 libapt-pkg-perl grub lilo linux-image-2.6-amd64
Reading package lists...
Building dependency tree...
Reading state information...
Reading extended state information...
Initializing package states...
Reading task descriptions...
The following NEW packages will be installed:
  bind9-host{a} cfengine2 console-common console-data{a} console-tools
  dialog discover discover-data{a} dnsutils dosfstools dump gettext-base{a}
  grub grub-common{a} grub-pc{a} hdparm hwinfo jove less lftp libapr1{a}
  libaprutil1{a} libbind9-60{a} libbsd0{a} libcap-ng0{a} libcap2{a}
  libconsole{a} libdbus-1-3{a} libdiscover2{a} libdns69{a} libedit2{a}
  libevent-1.4-2{a} libexpat1{a} libfreetype6{a} libgcrypt11{a}
  libgeoip1{a} libgnutls26{a} libgpg-error0{a} libgssapi-krb5-2{a}
  libgssglue1{a} libhal1{a} libhd16{a} libisc62{a} libisccc60{a}
  libisccfg62{a} libk5crypto3{a} libkeyutils1{a} libkrb5-3{a}
  libkrb5support0{a} libldap-2.4-2{a} liblwres60{a} libneon27-gnutls{a}
  libnfsidmap2{a} libpci3{a} libreadline5{a} librpcsecgss3{a} libsasl2-2{a}
  libserf-0-0{a} libsvn1{a} libtasn1-3{a} libuuid-perl{a} libwrap0{a}
  libxml2{a} lilo linux-base{a} linux-image-2.6-amd64
  linux-image-2.6.32-5-amd64{a} lshw lvm2 mbr{a} mdadm nfs-common ntpdate
  openssh-blacklist{a} openssh-client{a} openssh-server{a} pciutils portmap
  procinfo psmisc rdate reiserfsprogs rsync smartmontools ssh subversion
  ucf{a} usbutils xfsdump xfsprogs
0 packages upgraded, 90 newly installed, 0 to remove and 0 not upgraded.
Need to get 57.2 MB of archives. After unpacking 177 MB will be used.
Writing extended state information...
Get:1 http://security.debian.org/debian-security/ squeeze/updates/main linux-base all 2.6.32-48squeeze1 [183 kB]
.
.
.
Get:90 http://cdn.debian.net/debian/ squeeze/main ssh all 1:5.5p1-6+squeeze3 [1248 B]
Extracting templates from packages: 100%
Preconfiguring packages ...
Fetched 57.2 MB in 56s (1016 kB/s)
Selecting previously deselected package console-data.
(Reading database ... 10268 files and directories currently installed.)
Unpacking console-data (from .../console-data_2%3a1.10-9_all.deb) ...
Selecting previously deselected package libconsole.
.
.
.
Setting up console-data (2:1.10-9) ...
Looking for keymap to install:
NONE
Setting up libconsole (1:0.2.3dbs-69.1) ...
Setting up console-tools (1:0.2.3dbs-69.1) ...
insserv: warning: script 'rcS.distrib' missing LSB tags and overrides
invoke-rc.d: policy-rc.d denied execution of start.
Setting up console-common (0.7.85) ...
Looking for keymap to install:
NONE
insserv: warning: script 'rcS.distrib' missing LSB tags and overrides
invoke-rc.d: policy-rc.d denied execution of start.
Setting up libuuid-perl (0.02-4) ...
Setting up linux-base (2.6.32-48squeeze1) ...
Setting up linux-image-2.6.32-5-amd64 (2.6.32-48squeeze1) ...
Running depmod.
Running update-initramfs.
update-initramfs: Generating /boot/initrd.img-2.6.32-5-amd64
df: Warning: cannot read table of mounted file systems: No such file or directory
W: mdadm: no arrays defined in configuration file.
Examining /etc/kernel/postinst.d.
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 2.6.32-5-amd64 /boot/vmlinuz-2.6.32-5-amd64
Setting up libcap2 (1:2.19-3) ...
.
.
.
Reading task descriptions...
install_packages: executing chroot /srv/fai/nfsroot/live/filesystem.dir apt-get clean
install_packages: executing chroot /srv/fai/nfsroot/live/filesystem.dir dpkg --configure --pending
install_packages: executing chroot /srv/fai/nfsroot/live/filesystem.dir dpkg -C
install_packages: executing chroot /srv/fai/nfsroot/live/filesystem.dir apt-get clean
install_packages exit code: 0
`/etc/fai/NFSROOT' -> `/srv/fai/nfsroot/live/filesystem.dir/etc/fai/NFSROOT'
`/etc/fai/apt' -> `/srv/fai/nfsroot/live/filesystem.dir/etc/fai/apt'
`/etc/fai/apt/sources.list' -> `/srv/fai/nfsroot/live/filesystem.dir/etc/fai/apt/sources.list'
`/etc/fai/fai.conf' -> `/srv/fai/nfsroot/live/filesystem.dir/etc/fai/fai.conf'
`/etc/fai/grub.cfg' -> `/srv/fai/nfsroot/live/filesystem.dir/etc/fai/grub.cfg'
`/etc/fai/live.conf' -> `/srv/fai/nfsroot/live/filesystem.dir/etc/fai/live.conf'
`/etc/fai/make-fai-nfsroot.conf' -> `/srv/fai/nfsroot/live/filesystem.dir/etc/fai/make-fai-nfsroot.conf'
`/etc/fai/menu.lst' -> `/srv/fai/nfsroot/live/filesystem.dir/etc/fai/menu.lst'
Shadow passwords are now on.
`/srv/fai/nfsroot/live/filesystem.dir/boot/vmlinuz-2.6.32-5-amd64' -> `/srv/tftp/fai/vmlinuz-2.6.32-5-amd64'
`/srv/fai/nfsroot/live/filesystem.dir/boot/initrd.img-2.6.32-5-amd64' -> `/srv/tftp/fai/initrd.img-2.6.32-5-amd64'
DHCP environment prepared. If you want to use it, you have to enable the dhcpd and the tftp-hpa daemon.
Removing 'local diversion of /sbin/discover-modprobe to /sbin/discover-modprobe.distrib'
make-fai-nfsroot finished properly.
No diversion 'any diversion of /sbin/discover-modprobe', none removed.
Log file written to /var/log/fai/make-fai-nfsroot.log
Adding line to /etc/exports: /srv/fai/config 192.168.254.102/24(async,ro,no_subtree_check)
Adding line to /etc/exports: /srv/fai/nfsroot 192.168.254.102/24(async,ro,no_subtree_check,no_root_squash)
Re-exporting directories for NFS kernel daemon....
FAI setup finished.
Log file written to /var/log/fai/fai-setup.log

Ein Logfile zur Installation der LIVE Umgebung befindet sich unter /var/log/fai/fai-setup.log

Das Setup hat auch gleich die Einstellungen in der Datei /etc/exports für den NFS Server gemacht. Und ihn neu geladen. Dies sollte dann so ausschauen.

[stextbox id=“bash“]nano /etc/exports[/stextbox]

# /etc/exports: the access control list for filesystems which may be exported
#               to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
#
/srv/fai/config 192.168.254.102/24(async,ro,no_subtree_check)
/srv/fai/nfsroot 192.168.254.102/24(async,ro,no_subtree_check,no_root_squash)

Hier muss dann die IP Range angepasst werden damit die Clients auch das NFS mounten können.

/srv/fai/config 192.168.254.0/24(async,ro,no_subtree_check)
/srv/fai/nfsroot 192.168.254.0/24(async,ro,no_subtree_check,no_root_squash)

Und anschließend den NFS Server neu starten.

[stextbox id=“bash“]/etc/init.d/nfs-kernel-server restart[/stextbox]

Test Installation eines Clients

Wenn DHCP und DNS eingerichtet sind kann eine Test Installation durchgeführt werden.

Dazu editieren wird die Datei /srv/fai/config/class/50-host-classes und fügen unseren Test Host hinzu.

[stextbox id=“bash“]nano /srv/fai/config/class/50-host-classes[/stextbox]

#! /bin/bash

# assign classes hosts

# use a list of classes for our demo machine
case $HOSTNAME in
    faiserver)
        echo "FAIBASE DEMO FAISERVER" ;;
    test|demohost)
        echo "FAIBASE DHCPC DEMO" ;;
    gnomehost)
        echo "FAIBASE DHCPC DEMO XORG GNOME";;
    atom*)
        echo "FAIBASE DHCPC DEMO" ;;
    bear)
        echo "FAIBASE DHCPC LVM_XEN_SERVER XEN" ;;
    puma)
        echo "FAIBASE DHCPC RAID_XEN_VIRTUAL" ;;
    *)
        echo "FAIBASE DHCPC" ;;
esac

(ifclass I386 || ifclass AMD64) && echo GRUB_PC
exit 0

In meinem Fall hab ich die Zeile demohost) mit test| angepasst.

Um den Test Server nun installieren zu lassen muss fai-chboot ausgeführt werden

[stextbox id=“bash“]fai-chboot -IBv test.dmz-home.secretisland.de[/stextbox]

Booting kernel vmlinuz-2.6.32-5-amd64
 append initrd=initrd.img-2.6.32-5-amd64 ip=dhcp
    FAI_FLAGS=verbose,sshd,reboot

test.dmz-home.secretisland.de has 192.168.254.200 in hex C0A8FEC8
Writing file /srv/tftp/fai/pxelinux.cfg/C0A8FEC8 for test.dmz-home.secretisland.de

Nun den Test Server starten und auf PXE BOOT einstellen.

Jetzt sollte am Monitor des Test Servers das ganze so ausschauen.

fai-squeeze-test1

fai-squeeze-test2

fai-squeeze-test3

fai-squeeze-test4
Jetzt sollte noch eingestellt werden das der Server nicht in einer Endlosschleife sich installiert.

Auf dem Server den PXE BOOT ausschalten,
oder die Datei /srv/tftp/fai/pxelinux.cfg/C0A8FEC8 löschen oder umbenennen.
Oder auch eine Routine in FAI definieren die dies am ende macht.

Viel Spaß

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

*