Table des Matières


1. Introduction


FAI, Fully Automatic Installation est un logiciel permettant d'installer un systeme Debian GNU/Linux sur une ferme d'ordinateurs. Tout est automatise de l'installation du noyau au parametrage des applications et services.


2. Presentation technique


2.1. Besoin et Historique



Le besoin d'automatiser une installation de poste est ne du grossissement des parcs informatiques, de l'homogeneite des postes, de l'apparition de cluster de machines. La gestion de ces environnements doit être aujourd'hui simple et efficace.

En 1999, Thomas LANGE conçoit FAI alors qu'il devait installer un cluster Linux avec un serveur maître et 16 postes clients. FAI apport a ces besoins une installation automatique d'un bout a l'autre en intégrant un sytÃme de gestion des erreurs. Il permet de gagner un temps considérable mais aussi d'assurer une homogénéité parfaite des installations d'un parc, d'apporter des solutions de restauration, ou de remise a zéro d'un parc public... Ses applications peuvent être nombreuses.
 

2.2. Fonctionnement de FAI



FAI est un système non-interactif, dans le sens où l'installation de Debian puis des applications (installation et configuration) s'exécute de manière silencieuse. Le démarrage sur le poste client se fait depuis un boot par le réseau. Trois solutions sont supportées : DHCP [1]associé à BOOTP[2]et Boot PXE[3]


2.3. Mise en place de la solution FAI


2.3.1. Situation



Pour réaliser cette mise en place, nous utiliserons les informations suivantes :

  • Réseau: 192.168.0.0/24
  • Passerelle: 192.168.0.1
  • Serveur DNS/DHCP/FAI/TFTP: 192.168.0.254
  • Nom du Serveur: serveur1.kns7.org
  • Nom de Domaine: kns7.org



2.3.2. Pré-requis



Afin de fonctionner, le serveur FAI est aidé par un certain nombre de services.
 

  • Serveur DHCP: Permet de fournir une adresse IP pour les clients Bootp ou PXE.
  • Serveur TFTP: Permet de transférer le noyau de base aux clients.
  • Un miroir Debian local ou Proxy APT: Permet la récupération des paquets à installer.
  • Un noyau de base: Permet le démarrage du client, doit supporter le montage nfs et la prise en charge de la carte réseau.
  • Un espace de stockage des configurations (peut être géré par CVS).


Les installations décrites ci-dessous seront brèves et les configurations spécifiquement décrites pour le fonctionnement de FAI et ne garantie pas le bon fonctionnement pour d'autres utilisations. Un lien vers la documentation officielle ainsi qu'un HOWTO est disponible dans la bibliographie pour chaque installation.


2.3.3. Installation d'un serveur DHCP



L'installation d'un serveur DHCP sous Debian nécessite les paquets suivants :
 

  • dhcp3-server
  • dhcp-common


Pour installer ces paquets, lancez la commande suivante :

# apt-get install dhcp3-server dhcp-common


Ensuite, il faut configurer le serveur DHCP pour offrir des adresses IP aux clients.

On attribue une plage d'adresses IP allant de 192.168.0.100 à 192.168.0.200 pour les clients du réseau 192.168.0.0/24. Le serveur DHCP sera également le serveur FAI, ainsi que le serveur DNS. Il a pour adresse IP 192.168.0.254 et se nomme serveur1.kns7.org. Voici ce que donne le fichier de configuration de DHCP3 Server, /etc/dhcp3/dhcpd.conf

##
## Configuration du Serveur DHCP
##


# Configuration globale pour tous les réseaux.
#   Nom de domaine, Serveur DNS, Netmask, Release Time (1jour) Release Time Max (2jours)
option domain-name "kns7.org";
option domain-name-servers 192.168.0.254, 212.27.31.177;
option subnet-mask 255.255.255.0;
default-lease-time 86400;
max-lease-time 172800;
allow unknown-clients;
authoritative;
log-facility local7;

# Réseau 192.168.0.0/24
#   Définition de la plage d'adresses, et autres parametres du réseau
#   Définition du Serveur FAI: serveur1
subnet 192.168.0.0 netmask 255.255.255.0 {
    range 192.168.0.100 192.168.0.200;
    option broadcast-address 192.168.0.255;
    option routers 192.168.0.1;
    server-name "serveur1";
    option root-path "/stockage/fai/nfsroot,rsize=8192,wsize=8192,acregmin=1800,acregmax=1800,acdirmin=1800,acdirmax=1800";
}

Les premières options sont globales à tous les sous-réseaux. Au sein du sous réseau 192.168.0.0/24, on définit une plage d'adresses IP de 192.168.0.100 à 192.168.0.200, en spécifiant la passerelle, le serveur sur lequel les clients vont lancer leur noyau (option : server-name). On spécifie également le chemin d'accès de la racine pour les clients PXE (option : option root-path).
 

Activation des Logs
Les logs ne sont pas activés par défaut dans DHCP3 server. Il faut donc créer un "log-facility" qu'ici on nomme local7. Il faut ensuite modifier /etc/syslog.conf pour ajouter cette ligne :

 local7.*        /var/log/dhcpd.log

Le fichier de log du serveur DHCP sera /var/log/dhcpd.log.

Dans le cas où le serveur DHCP et le serveur FAI sont sur deux machines différentes, il ne faut pas oublier de spécifier l'option next-server, qui permet de rediriger les clients ayant obtenu une adresse IP sur le serveur FAI.


2.3.4. Installation de TFTP

Une fois le DHCP mis en place, il faut installer un serveur TFTP pour le transfert des données depuis le Serveur FAI vers les clients. Pour cela, on utilise le paquet tftpd-hpa.

# apt-get install tftpd-hpa

La gestion de TFTP se fera par un démon. (Le choix est posé lors de l'installation, entre la gestion par inetd ou par son propre démon).

Il faut cependant vérifier la configuration de TFTP-HPA dans le fichier /etc/default/tftp-hpa et mettre l'option RUN_DAEMON="yes". La variable OPTIONS doit comporter l'option -l pour permettre au serveur tftp d'être lancé en standalone (ne pas utiliser si le serveur est lancé par inetd) et l'option -s /boot/fai pour permettre au client d'accéder directement à ce répertoire lorsqu'il se connectera au serveur TFTP.

RUN_DAEMON="yes"
OPTIONS="-l -s /boot/fai"

Ensuite, on lance le démon TFTP par la commande:

# /etc/init.d/tftp-hpa start

2.3.5. Installation d'un miroir Debian

Un Miroir Debian est un entrepôt de paquets debian. Il servira dans la solution FAI de distributeur de paquets aux clients. L'accès se fera par NFS.

Utilité du miroir debian local
Le Miroir Debian Local n'est pas indispensable au fonctionnement de FAI. On peut récupérer directement les paquets sur les serveurs officiels HTTP ou FTP Debian. Cependant, dans le cas d'un déploiement massif de machines simultanéments, l'accès à Internet même haut-débit souffrira de ce trafique important, et l'installation des machines s'en verra considérablement ralenti. C'est pour cela que l'installation d'un miroir local est recommandée et décrite ci-dessous.

Pour installer ce miroir, nous utiliserons le script mkdebmirror développé par Thomas LANGE et fourni dans le paquet fai. Il se situe dans /usr/share/doc/fai/examples/utils/mkdebmirror.
[Avertissement]    Avertissement
L'installation d'un miroir Debian prend près de 9GB (sans récupérer les paquets sources). Il faut donc prévoir une destination suffisamment grande. Il faut également modifier les paramètres au sein du script avant de le lancer.

#! /bin/sh

# $Id: mkdebmirror,v 1.20 2005/04/06 19:57:04 lange Exp $
# Thomas Lange, lange@informatik.uni-koeln.de, (c) 2001-2004

# create partitial debian mirror using command debmirror(1) and rsync

# - - - - - - - - - - - - - - - - - - - - - - - - - - - -
rsync_disks() {

    # get the boot disks
    rsync --delete -av $2::debian/dists/$1/main/disks-$arch $destdir/debian/dists/$1/main/
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - -
update_from() {

    # update local mirror from a host
    host=$1
    allopt="$debug --ignore-missing-release --ignore-release-gpg --passive --getcontents --nosource --arch=$arch --ignore=disks-$arch/"
        defopt="$allopt --host=$host --dist=$dist"
    echo "------------------ create mirror for debian ------------------"
    debmirror $destdir/debian $defopt
        echo "------------------ create mirror for debian-non-US ------------------"
        debmirror $destdir/debian-non-US $defopt -r /debian-non-US -s non-US/main,non-US/contrib,non-US/non-free
}

# - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# main program
#
# here you have to adjust the hostnames of the mirror and
# the names of the distributions


debug="$@"
arch=i386
dist=sarge,sarge-proposed-updates
destdir=/stockage/public/debmirror

# first sync from a mirror near to you
update_from ftp.nerim.net

# since this mirror is not always up to date, sync the rest
# from an official mirror
update_from ftp.fr.debian.org

# even one should not mirror the security site, but I will
# do it.
echo "------------------ create mirror for debian-security------------------"
debmirror $destdir/debian-security $allopt --host=security.debian.org -r debian-security -d sarge/updates

On a modifié le chemin du miroir Debian (variable destdir=/stockage/public/debmirror), ainsi que les serveurs sur lesquels on va récupérer les sources (ftp.nerim.net et ftp.fr.debian.org).

Puis on lance le script mkdebmirror avec l'option --debug pour avoir une vision détaillé de ce que fait le script

# /usr/share/doc/fai/examples/utils/mkdebmirror --debug
------------------ create mirror for debian ------------------
/usr/bin/debmirror: Created directory: /stockage/public/debmirror/debian/
/usr/bin/debmirror: Created directory: .temp/
Net::FTP>>> Net::FTP(2.75)
Net::FTP>>>   Exporter(5.58)
Net::FTP>>>   Net::Cmd(2.26)
Net::FTP>>>   IO::Socket::INET(1.28)
Net::FTP>>>     IO::Socket(1.28)
Net::FTP>>>       IO::Handle(1.24)
Net::FTP=GLOB(0x85d949c)<<< 220---------- Welcome to Pure-FTPd [TLS] ----------
Net::FTP=GLOB(0x85d949c)<<< 220-You are user number 25 of 300 allowed.
Net::FTP=GLOB(0x85d949c)<<< 220-<<
Net::FTP=GLOB(0x85d949c)<<< 220-        Bienvenue sur le serveur FTP de Nerim
Net::FTP=GLOB(0x85d949c)<<< 220-
Net::FTP=GLOB(0x85d949c)<<< 220-          --------------------------------
Net::FTP=GLOB(0x85d949c)<<< 220-          |  _   _           _            |
Net::FTP=GLOB(0x85d949c)<<< 220-          | | \ | | ___ _ __(_)_ __ ___   |
Net::FTP=GLOB(0x85d949c)<<< 220-          | |  \| |/ _ \ '__| | '_ ` _ \  |
Net::FTP=GLOB(0x85d949c)<<< 220-          | | |\  |  __/ |  | | | | | | | |
Net::FTP=GLOB(0x85d949c)<<< 220-          | |_| \_|\___|_|  |_|_| |_| |_| |
Net::FTP=GLOB(0x85d949c)<<< 220-          |                               |
Net::FTP=GLOB(0x85d949c)<<< 220-          |Fournisseur d'acces independant|
Net::FTP=GLOB(0x85d949c)<<< 220-          |          a Internet           |
Net::FTP=GLOB(0x85d949c)<<< 220-          --------------------------------
Net::FTP=GLOB(0x85d949c)<<< 220-
Net::FTP=GLOB(0x85d949c)<<< 220-Mirroirs FreeBSD et Debian disponibles dans /mirrors
Net::FTP=GLOB(0x85d949c)<<< 220-
Net::FTP=GLOB(0x85d949c)<<< 220-*** Note aux abonnes ***
Net::FTP=GLOB(0x85d949c)<<< 220-
Net::FTP=GLOB(0x85d949c)<<< 220-Nous vous rappelons que le serveur a utiliser pour
Net::FTP=GLOB(0x85d949c)<<< 220-publier vos pages personnelles est : perso.nerim.net.
Net::FTP=GLOB(0x85d949c)<<< 220-
Net::FTP=GLOB(0x85d949c)<<< 220-Merci d'adresser vos remarques concernant ce serveur
Net::FTP=GLOB(0x85d949c)<<< 220-a l'adresse ftp@nerim.net.
Net::FTP=GLOB(0x85d949c)<<< 220->>
Net::FTP=GLOB(0x85d949c)<<< 220-Local time is now 04:01. Server port: 21.
Net::FTP=GLOB(0x85d949c)<<< 220-IPv6 connections are also welcome on this server.
Net::FTP=GLOB(0x85d949c)<<< 220 You will be disconnected after 3 minutes of inactivity.
Net::FTP=GLOB(0x85d949c)>>> user anonymous
Net::FTP=GLOB(0x85d949c)<<< 230 Anonymous user logged in
Net::FTP=GLOB(0x85d949c)>>> TYPE I
Net::FTP=GLOB(0x85d949c)<<< 200 TYPE is now 8-bit binary
Net::FTP=GLOB(0x85d949c)>>> CWD /debian
Net::FTP=GLOB(0x85d949c)<<< 250 OK. Current directory is /debian
/usr/bin/debmirror: Created directory: dists/
/usr/bin/debmirror: Created directory: dists/sarge/
/usr/bin/debmirror: Created directory: .temp/dists/
/usr/bin/debmirror: Created directory: .temp/dists/sarge/
Net::FTP=GLOB(0x85d949c)>>> PASV
Net::FTP=GLOB(0x85d949c)<<< 227 Entering Passive Mode (62,4,17,14,134,244)
Net::FTP=GLOB(0x85d949c)>>> RETR dists/sarge/Release
Net::FTP=GLOB(0x85d949c)<<< 150-Accepted data connection
Net::FTP=GLOB(0x85d949c)<<< 150-The computer is your friend. Trust the computer
Net::FTP=GLOB(0x85d949c)<<< 150 22.3 kbytes to download
Net::FTP=GLOB(0x85d949c)<<< 226-File successfully transferred
Net::FTP=GLOB(0x85d949c)<<< 226 0.020 seconds (measured here), 1.07 Mbytes per second

Le script va récupérer le contenu du miroir debian fourni par NERIM. (Il ne récupérera pas les sources). Il va ensuite créer un miroir debian-security. Une fois terminé, le script a récupéré pour 9,4Go de données par FTP.
[Avertissement]    Avertissement
Afin de pouvoir utiliser le mirroir debian Local par protocole HTTP, il ne faut pas oublier de rajouter une directive Alias dans le fichier de configuration du serveur Web.

Alias /debian /stockage/public/debmirror/

Il faut également modifier le fichier /etc/fai/sources.list qui sera utilisé pour récupérer les paquets debian. Voici ce que donne ce fichier avec la configuration courante:

deb http://serveur1.kns7.org/debian/debian SUITE main contrib non-free
deb http://serveur1.kns7.org/debian/debian SUITE-proposed-updates main contrib non-free
deb http://serveur1.kns7.org/debian/debian-non-US SUITE/non-US main contrib non-free
deb http://serveur1.kns7.org/debian/debian-security SUITE/updates main contrib non-free

Il faut encore spécifier à FAI d'aller chercher les paquets sur le miroir debian local. Cette configuration se fait par un fichier sources.list que l'on placera sous /etc/fai dans lequel on va définir le serveur miroir local (Monté en NFS sur le client).

deb file:/mnt/mirror/debian sarge main contrib non-free
deb file:/mnt/mirror/debian-non-US sarge/non-US main contrib non-free
deb file:/mnt/mirror/debian-security sarge/updates main contrib non-free

Avertissement
Le répertoire /mnt/mirror est le point de montage NFS défini dans la configuration de FAI


2.3.6. Installation et configuration de NFS

Afin que les clients puissent utiliser un montage NFS (servant de disque racine au boot), on installe le serveur NFS (paquets nfs-user-server (ou nfs-kernel-server au choix),nfs-common). Puis la configuration se fait dans le fichier /etc/exports.

2.3.7. Installation de FAI

2.3.7.1. Installation du paquet fai

Il existe un paquet Debian nommé fai-kernels contenant des images noyaux pour clients FAI. Les noyaux (sous forme de paquets Debian sont stockés par défaut sous /usr/lib/fai/kernel. Deux noyaux sont proposé, un noyau 2.4 et un 2.6.

Les paquets nécessaires à l'installation de fai sont : apt-utils, libapt-pkg-perl libncurses et libncurses5-dev Une fois installé, les fichiers de configuration se trouvent dans le répertoire /etc/fai/. Passons à la configuration de la partie Serveur de FAI.

2.3.7.2. Configuration de FAI

La configuration se fait par les fichiers /etc/fai/fai.conf & /etc/fai/make-fai-root.conf

Le fichier /etc/fai/fai.conf se configure sous formes de variables à renseigner. La plupart sont déjà préconfigurées lors de l'install. Voici ce que donne le fichier une fois configuré:

# $Id: fai.conf,v 1.86 2005/05/19 09:28:33 lange Exp $
# /etc/fai/fai.conf -- configuration for FAI (Fully Automatic Installation)
# installserver must be the name seen by the install clients
installserver=serveur1.kns7.org
# the name of the Debian mirror, this is also hardcoded in /etc/fai/sources.list
mirrorhost=serveur1.kns7.org
# Don't use the variable FAI_SOURCES_LIST any more.
# Instead use /etc/fai/sources.list
# Access to Debian mirror via NFS mounted directory
# If FAI_DEBMIRROR is defined, install clients mount it to $MNTPOINT
FAI_DEBMIRROR=$mirrorhost:/stockage/public/debmirror

# if your install server has multiple ethernet device, use this one to
# determine its hostname. Default eth0. Set to the interface to which
# the Beowulf clients are connected.
SERVERINTERFACE=eth0

# 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 /boot/fai. For example, you can use write
# permissions for the group linuxadm. chgrp linuxadm /boot/fai;chmod
# g+w /boot/fai. If the variable is undefined, this feature is disabled.
# Define it, to enable it, eg. LOGUSER=fai
LOGUSER=
# use ssh or rsh for copying log files to user fai and for logging in
# from install clients to install server
FAI_REMOTESH=rsh
FAI_REMOTECP=rcp

# set protocol type for saving logs, default is rcp/scp. Set to ftp if desired.
FAI_LOGPROTO=
# Name of log-server. If undefined, the install server will be used.
LOGSERVER=
# writable directory on remote server, when using FTP protocol
LOGREMOTEDIR="upload"
# password for login to log server, when using FTP protocol
LOGPASSWD=

# the configuration space on the install server
FAI_CONFIGDIR=/usr/local/share/fai
# the location of the config space, as seen by the install client
# it can also be overwritten with T170 via BOOTP
FAI_LOCATION=$installserver:$FAI_CONFIGDIR

# the following variables are read only for most users

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

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

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

# the type of operating system (linux, sunos)
OS_TYPE=`uname -s |  tr /A-Z/ /a-z/`

On peut remarquer la possibilité d'utiliser SSH et SCP pour les copies et les shell distants afin d'acroitre la sécurité. RSH et RCP seront choisis pour cette installation. On choisit dans cette configuration de créer le montage racine NFS (NFSROOT) sur /stockage/fai/nfsroot et de créer le montage mirror (MNTPOINT) dans /stockage/fai/nfsroot/mnt/mirror

Note
Il est nécessaire de créer manuellement ce répertoire.

La fichier de configuration /etc/fai/make-fai-root.conf sert à définir comment sera monté le partage nfs root pour le client. On définit dans ce fichier où se situe le mirroir Debian (FAI_DEBOOTSTRAP), quel kernel sera utilisé pour l'installation cliente (KERNELPACKAGE), quelle méthode sera utilisée pour le démarrage des clients (DHCP ou BOOTP) par la variable FAI_BOOT

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

# 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 $mirrorhost"

FAI_DEBOOTSTRAP="sarge http://$mirrorhost/debian/debian/"

# your extra packages which will be installed into the nfsroot, space separated
NFSROOT_PACKAGES="cfengine expect"

# this local repository holds your local packages that can be installed to
# the install clients. Don't forget to create the index file Packages.gz!
#FAI_LOCAL_REPOSITORY="deb file:/fai/files packages/"

# the encrypted root password on all install clients during
# installation process; used when log in via ssh; pw is: fai
FAI_ROOTPW="56hNVqht51tzc"

# this kernel package will be used when booting the install clients
KERNELPACKAGE=/usr/lib/fai/kernel/kernel-image-2.6.8-fai_1_i386.deb

# 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

# which of DHCP and/or BOOTP should the server create setups for.
# Default are to create setups for both
FAI_BOOT="dhcp bootp"

# export $NFSROOT to this netgroup or this range of IP addresses
# (eg. FAICLIENTS="192.168.1.0/24")
FAICLIENTS="192.168.0.0/24"
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# following lines should be read only for most of you

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"

nfssize="250MB"  # size of the nfsroot. Only informational purpose

# FAI needs these packages that are install into the nfsroot
packages="module-init-tools dhcp3-client ssh file rdate hwinfo portmap
bootpc rsync wget rsh-client less dump reiserfsprogs usbutils
hdparm smartmontools parted mdadm lvm2
dnsutils ntpdate dosfstools cvs jove xfsprogs xfsdump
sysutils dialog discover mdetect libnet-perl netcat libapt-pkg-perl"

Avant de lancer la commande fai-setup, il faut installer les paquets debootstrap et mknbi

# apt-get install debootstrap mknbi

Pour que les clients puissent avoir un point de montage principal (et sommaire) et s'installer, on va créer une racine nfs sur laquelle ils se connecteront au démarrage. Cette phase est réalisé lorsqu'on lance la configuration de FAI par la commande fai-setup, c'est le scriptmake-fai-nfsroot.

# fai-setup
Creating FAI nfsroot can take a long time and will
need more than 250MB disk space in /stockage/fai/nfsroot.
/stockage/fai/nfsroot already exists. Removing /stockage/fai/nfsroot
Creating nfsroot for sarge using debootstrap
Creating base.tgz
tar: La sémantique de l'option -l changera dans les versions futures.
tar: SVP utilisez l'option --one-file-system à la place.
`/etc/fai/sources.list' -> `/stockage/fai/nfsroot/etc/apt/sources.list'
Upgrading /stockage/fai/nfsroot
Adding additional packages to /stockage/fai/nfsroot:
module-init-tools dhcp3-client ssh file rdate hwinfo portmap
bootpc rsync wget rsh-client less dump reiserfsprogs usbutils
hdparm smartmontools parted mdadm lvm2
dnsutils ntpdate dosfstools cvs jove xfsprogs xfsdump
sysutils dialog discover mdetect libnet-perl netcat libapt-pkg-perl
grub lilo kudzu dmidecode hwtools read-edid
Backing up any LVM2 metadata that may exist...done.
Creating SSH2 RSA key; this may take some time ...
Creating SSH2 DSA key; this may take some time ...
Restarting OpenBSD Secure Shell server: sshd.
Checking available versions of rmt, updating links in /etc/alternatives ...
(You may modify the symlinks there yourself if desired - see `man ln'.)
Updating rmt (/usr/sbin/rmt) to point to /usr/sbin/rmt-dump.
Updating rmt.8.gz (/usr/share/man/man8/rmt.8.gz) to point to /usr/share/man/man8/rmt-dump.8.gz.
Recovering jove files ... Done.
`/etc/fai/fai.conf' -> `/stockage/fai/nfsroot/etc/fai/fai.conf'
`/etc/fai/make-fai-nfsroot.conf' -> `/stockage/fai/nfsroot/etc/fai/make-fai-nfsroot.conf'
`/etc/fai/menu.lst' -> `/stockage/fai/nfsroot/etc/fai/menu.lst'
`/etc/fai/sources.list' -> `/stockage/fai/nfsroot/etc/fai/sources.list'
`/etc/fai/sources.list.backup' -> `/stockage/fai/nfsroot/etc/fai/sources.list.backup'
Shadow passwords are now on.
DHCP environment prepared. If you want to use it, you have to enable the dhcpd and the tftp-hpa
daemon.
Warning: Perl 5.8 may have a bug that affects handing of strings in Unicode
locales that may cause misbehaviour with binary files.  To work around this
problem, set $LANG to not have a suffix of .UTF-8 before running this program.
BOOTP environment prepared.
Removing `diversion of /sbin/discover-modprobe to /sbin/discover-modprobe.distrib by fai'
make-fai-nfsroot finished properly.
Reloading NFS servers' configuration files.

   You have no FAI configuration space yet. Copy the simple examples with:
   cp -a /usr/share/doc/fai/examples/simple/* /usr/local/share/fai
   Then change the configuration files to meet your local needs.

FAI setup finished.

Avertissement
Les lignes make-fai-nfsroot finished. et FAI setup finished. . Elles signifient que le script make-fai-nfsroot et fai-setup se sont bien déroulés. FAI est a présent correctement configuré et installé.

 

2.4. Installation d'un client

Il faut en premier lieu définir si le client peut démarrer en Boot PXE. Si ce n'est pas le cas, on peut générer une disquette de boot générique (indépendante de la configuration matérielle de la machine) par la commande make-fai-bootfloppy.

2.4.1. Etapes du déploiement sur un poste client

Le processus d'installation automatisé FAI se déroule en plusieurs étapes sur le poste client.

  • Connexion au serveur DHCP pour obtenir une adresse et le nom du serveur FAI
  • Récupération du noyau de base fourni par FAI pour démarrer un miniOS.
  • Mise en place de la configuration FAI
  • Chargement des modules du noyau
  • Définition des classes et des variables
  • Partitionnement des Disques
  • Création des points de montages, montage des disques locaux
  • Installation des Paquets
  • Lancement des scripts de modification de configuration
  • Redémarrage de la machine cliente

2.4.1.1. Connexion au serveur DHCP

Pour commencer le client obtient une adresse IP valide sur le réseau, et le serveur DHCP lui indique où monter son système racine. (Montage par NFS). Une fois effectué, le client peut se lancer.

2.4.1.2. Récupération du Noyau FAI

Dans ce montage NFS, se trouve un noyau de base (en 2.4 ou 2.6) fourni par FAI et qui permet au client de démarrer sur un système de base allégé, ne contenant uniquement les outils nécessaires à son installation.

2.4.1.3. Mise en place de la configuration FAI

Ensuite, le client récupère sa configuration FAI stockée sous /usr/local/share/fai/ C'est là qu'on retrouve la configuration commune de tous les postes installés. (Définition des classes, variables, des paquets à installer, des hooks,...) Les Hooks sont des scripts pouvant être exécuté durant toute la phase d'installation et permettant de personnaliser la configuration du client. Un Crochet (ou Hook) peut être spécifié pour chaque phase. En effet, avant d'installer un paquet, lancer un script ou toute autre opération, FAI vérifie l'existence d'un Hook, auquel cas il l'exécutera avant de faire l'action par défaut.

La partie configuration est distribuée sous forme de répertoires tous situés sous /usr/local/share/fai/:

  • class Contient la liste des classes définies
  • debconf Sera utilisé pour la méthode debconf (pas testée.)
  • disk_config Contient les informations de partitionnement des disques.
  • files Partie où seront stockés les fichiers nécessaires pendant l'installation. (Paquets, Kernel-Headers...)
  • hooks Contient tous les Hooks définis pour l'installation.
  • package_config Contient la configuration par classes des paquets à installer.
  • scripts Contient des scripts supplémentaires à l'installation par défaut.

L'installation d'un client se décompose en plusieurs tâches :

2.4.1.4. Chargement des Modules du noyau

C'est la tâche confdir: Elle lance la récupération du noyau de base monté en NFS, créé les entrées DNS nécessaires, démarre le syslog de la machine,... Toutes les opérations de "préparation de l'environnement d'installation" sont effectuées à ce moment. Suivi de la tâche setup: Elle règle l'horloge système et ouvre deux shell.

2.4.1.5. Définition des Classes et Variables

Les Classes permettent de définir comment exécuter l'installation par machine. Par exemple, pour installer un serveur Web, on va créer une classe WWW et l'assigner à notre machine. Cette classe WWW définira qu'il faut installer le paquet apache2, et le configurer de telle manière. C'est utile pour regrouper des machines selon le type d'installation que l'on souhaite. Si une machine est unique, on peut aussi l'appeler par son nom d'hôte hostname.

Les Variables sont définies dans des fichiers *.var où * est le nom d'une classe correspondante. Elles définissent des types d'actions à mener par FAI selon la classe de la machine. On y retrouve la définition du mot de passe du shell client, le paramétrage du fuseau horaire, la liste des modules à charger dans le noyau, la possibilité d'ajouter de nouveaux paquets d'installation...

2.4.1.6. Partitionnement des Disques

Le partitionnement des disques intervient ensuite en se basant sur un fichier semblable à /etc/fstab dont voici le contenu :

# cat /usr/local/share/fai/disk_config/FAIBASE

# generic disk configuration for one small disk
# disk size from 500Mb up to what you can buy today
#
# <type> <mountpoint> <size in mb> [mount options]     [;extra options]

disk_config disk1
primary  /             70-200      rw,errors=remount-ro ; -c -j ext3
logical  swap          40-500      rw
logical  /var          90-1000     rw                   ; -m 5  -j ext3
logical  /tmp          50-1000     rw                   ; -m 0 -j ext3
logical  /usr          200-4000    rw                   ; -j ext3
logical  /home         50-         rw,nosuid            ; -m 1 -j ext3

Si cette configuration ne convient pas, il peut être alors idéal de créer un Hook qui crééra le fichier /tmp/fai/fstab sur le client avec les spécifications de chaque partition. Ensuite, le système monte les partitions.

2.4.1.7. Installation des Paquets

Une fois que les partitions sont montées, le système installe les paquets correspondants à la définition de sa classe. Toutes les classes d'installation de paquets sont définis dans /usr/local/share/fai/package_config/. Par exemple, une classe GNOME est définie et permet d'installer les paquets nécessaires à gnome. Voici ce que contient le fichier :

# cat /usr/local/share/fai/package_config/GNOME
PACKAGES install
gnome-desktop-environment
menu gdm
gnumeric
gnome-apt

On s'aperçoit que le mot clef install est spécifié. Il définit qu'il faut installer les paquets suivants. Il existe d'autres mots clef comme remove permettant de supprimer un ou des paquets, taskinst permettant d'installer les paquets définis dans d'autres classes et hold définissant qu'il ne faut pas toucher au paquet.

2.4.1.8. Lancement des Scripts de configuration spécifiques.

Une fois l'installation terminée, FAI lance les scripts qui sont stockés dans /usr/local/share/fai/scripts/. Comme le reste, ils peuvent être regroupés en classes par leur nom. Ils permettent principalement de modifier la configuration des paquets nouvellements installés.

3. Avantages, autres solutions

3.1. Avantages de la solution

Le principal avantage de cette solution est de permettre de déployer en masse et rapidement un système Debian opérationnel et totalement personnalisé. Il devient l'outil idéal pour l'installation de cluster de machines.

De plus il est multiplatteformes, puisqu'il tourne sous Sparc, AMD64, PowerPC, IA64. L'installation par FAI d'autres distributions n'est pour le moment pas implémenté, mais est en cours de projet. A suivre...

3.2 D'autres solutions

Parmi d'autres solutions, on peut citer Ghost qui permet également mais de manière beaucoup moins souple de déployer un grand nombre de machines au sein d'un parc. Ghost fonctionne sur des images que l'on génère à partir d'une installation modèle, faite sur un poste précis et qui ne pourra être déployée que sur ce même type de poste. FAI apporte plus de souplesse en permettant de différencier différents types de machines (par classes) et ainsi garder une installation uniforme mais tout en gardant pour chaque type de machine ses spécificités. On peut également remarquer que la descente d'images par ghost est sensiblement plus longue que l'installation par FAI et augmente rapidement si le nombre de machines sur le réseau est élevé. Ce n'est pas le cas pour FAI.

 

© 2003 - 2019 kns7.org | Site réalisé et hébergé par KNet Solutions | Plan du site | Contact