
L'installation par PXE peut sembler un peu gadget mais nous utilisons cette technique pour l'installation massive de machine.
En effet, dans le cadre d'un PRA (Plan de Reprise d'Activité), il faut installer plusieurs dizaines de serveurs et l'installation de chaque machine est couteuse en temps.
L'installation par PXE permet de procéder à une installation sans CD ou DVD d'installation, seulement en ayant l'option PXE d'activé dans le bios.
Le principe : au boot du serveur, la machine requête un serveur DHCP qui lui attribue une adresse IP, passe le relais à un serveur TFTP qui distribue un mini noyau linux qui se charge de lancer l'installation.
En plus du PXE, il est possible d'ajouter un mécanisme d'installation automatique. Ici nous avons choisit Kickstart car il est simple à mettre en place et le fichier de configuration est facilement lisible. Il existe d'autre mécanisme comme FAI (Fully Automated Installation) mais qu semble plus compliqués...
Pour information, une installation de 2 serveurs avec MySQL et DRBD complètement configurés prends en tout et pour tout 20 minutes... Le plus long, qui n'est pas prévu dans l'installation, c'est l'injection de données dans la base !!!
- Logiciels
- Création du miroir
- Configurationdu serveur DHCP
- Installation et configuration du serveur TFTP
- Configuration d'Apache HTTPD
- Configuration du serveur DNS (optionnel si Kickstart)
- Kickstart
- Astuces
Logiciels:
- apt-mirror : Utilitaire pour créer et maintenir un mirroir de package
- Serveur DHCP : Pour l'attribution d'une adresse IP (bien sûr) mais aussi pour fournir le serveur PXE
- Serveur TFTP : Serveur FTP pour initier un menu d'installation et pour fournir un système linux minimaliste
- Apache HTTPD : Serveur pour fournir les packages nécessaires aux installations
- Serveur DNS ( optionnel avec Kickstart ) : Serveur pour faire maintenir les miroirs au sein du réseau
- Kickstart Configurator : Utilitaire pour des installations automatisées
Création du miroir :
Créer l'arborescence suivante :
/mirroir/mirror
/skel
/var
Installer le package
apt-mirror Créer et éditer le fichier
/mirroir/apt-mirror-configuration exemple :
############# config ##################
#
set base_path /mirroir
#
# if you change the base path you must create the directories below with write privileges
#
set mirror_path $base_path/mirror
set skel_path $base_path/skel
set var_path $base_path/var
set cleanscript $var_path/clean.sh
## set defaultarch xxxx (votre architecture i386/hppa/powerPC/ia64...)
set defaultarch i386
set nthreads 2
set tilde 0
#
#
# Miroir Hardy Installer
#
deb http://archive.ubuntu.com/ubuntu hardy main/debian-installer restricted/debian-installer universe/debian-installer multiverse/debian-installer
deb http://archive.ubuntu.com/ubuntu hardy-updates main/debian-installer restricted/debian-installer universe/debian-installer
deb http://archive.ubuntu.com/ubuntu hardy-backports main/debian-installer
deb http://archive.ubuntu.com/ubuntu hardy-security main/debian-installer restricted/debian-installer universe/debian-installer
deb http://archive.ubuntu.com/ubuntu hardy-proposed main/debian-installer restricted/debian-installer universe/debian-installer
deb-amd64 http://archive.ubuntu.com/ubuntu hardy-updates main/debian-installer restricted/debian-installer universe/debian-installer
deb-amd64 http://archive.ubuntu.com/ubuntu hardy-backports main/debian-installer
deb-amd64 http://archive.ubuntu.com/ubuntu hardy-security main/debian-installer restricted/debian-installer universe/debian-installer
deb-amd64 http://archive.ubuntu.com/ubuntu hardy-proposed main/debian-installer restricted/debian-installer universe/debian-installer
############# end config ##############
deb http://archive.ubuntu.com/ubuntu/ hardy main restricted
deb http://archive.ubuntu.com/ubuntu/ hardy-updates main restricted
deb http://archive.ubuntu.com/ubuntu/ hardy-security main restricted
deb http://archive.ubuntu.com/ubuntu/ hardy universe multiverse
deb http://archive.ubuntu.com/ubuntu/ hardy-updates universe multiverse
deb http://archive.ubuntu.com/ubuntu/ hardy-security universe multiverse
deb http://archive.ubuntu.com/ubuntu/ hardy-backports main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ hardy main restricted
deb-src http://archive.ubuntu.com/ubuntu/ hardy-updates main restricted
deb-src http://archive.ubuntu.com/ubuntu/ hardy-security main restricted
deb-src http://archive.ubuntu.com/ubuntu/ hardy universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ hardy-updates universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ hardy-security universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ hardy-backports main restricted universe multiverse
deb-amd64 http://archive.ubuntu.com/ubuntu/ hardy main restricted
deb-amd64 http://archive.ubuntu.com/ubuntu/ hardy-updates main restricted
deb-amd64 http://archive.ubuntu.com/ubuntu/ hardy-security main restricted
deb-amd64 http://archive.ubuntu.com/ubuntu/ hardy universe multiverse
deb-amd64 http://archive.ubuntu.com/ubuntu/ hardy-updates universe multiverse
deb-amd64 http://archive.ubuntu.com/ubuntu/ hardy-security universe multiverse
deb-amd64 http://archive.ubuntu.com/ubuntu/ hardy-backports main restricted universe multiverse<u>
ATTENTION :
la ligne set base_path positionne le répertoire du miroir et set defaultarch positionne l'architecture par défaut.
Si set defaultarch vaut i386, les deb doivent être deb et deb-amd64.
set defaultarch vaut amd64, les deb doivent être deb et deb-i386.
Exécuter :
apt-mirror /mirroir/apt-mirror-configuration
Et ... attendre ...
Configuration du serveur DHCP :
Activer les options de zone 066 (avec l'adresse IP du serveur TFTP ) et 067 ( avec le fichier pxelinux.0 ).
Désactiver l'option 060 ( PXEClient )
Configurer la zone DHCP avec l'option
next-server pointant sur le serveur TFTP et l'option
filename avec
pxelinux.0 comme valeur.
exemple :
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.90 192.168.1.100;
option domain-name-servers 192.168.1.11;
option domain-name "pavnay.local";
next-server 192.168.1.11;
filename "pxelinux.0";
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option routers 192.168.1.11;
default-lease-time 600;
max-lease-time 7200;
} Installation et configuration du serveur TFTP :
Installer le package
tftpd-hpa.
Editer le fichier
/etc/default/tftpd-hpa et le changer comme suit :
#Defaults for tftpd-hpa
RUN_DAEMON="yes"
OPTIONS="-l -s /tftpboot/linux-install"
Créer l'arborescene
/tftpboot/linux-install/pxelinux.cfg Créer le fichier
/tftpboot/linux-install/boot.txt et l'éditer
exemple :
Boot Menu -
=============
1. etch_i386_install
2. Ubuntu Gutsy
3. Ubuntu Hardy
4. Ubuntu Hardy Kickstart
5. Ubuntu Hardy server Kickstart
Créer et éditer le fichier
/tftpboot/linux-install/pxelinux.cfg/default exemple :
DISPLAY boot.txt
DEFAULT 1
LABEL 1
kernel debian/etch/i386/linux
append vga=normal initrd=debian/etch/i386/initrd.gz
LABEL 2
kernel ubuntu/gutsy/linux
append vga=normal initrd=ubuntu/gutsy/initrd.gz
LABEL 3
kernel ubuntu/hardy/ubuntu-installer/i386/linux
append priority=low vga=normal initrd=ubuntu/hardy/ubuntu-installer/i386/initrd.gz
LABEL 4
kernel ubuntu/hardy/ubuntu-installer/i386/linux
append priority=low vga=normal initrd=ubuntu/hardy/ubuntu-installer/i386/initrd.gz ks=http://192.168.1.11/ks.cfg
LABEL 5
kernel ubuntu/hardy/ubuntu-installer/i386/linux
append base-installer/kernel/linux/extra-packages-2.6= pkgsel/install-pattern=~t^ubuntu-standard$ pkgsel/language-pack-patterns= pkgsel/install-language-support=false priority=low vga=normal initrd=ubuntu/hardy/ubuntu-installer/i386/initrd.gz ramdisk_size=16417 root=/dev/ram rw ks=http://192.168.1.11/ks.cfg --
PROMPT 1
TIMEOUT 0 ATTENTION : Les noyaux sont à mettre dans la bonne arborescence (
debian/etch/i386/linux est en fait
/tftpboot/linux-install/debian/etch/i386/linux )
ATTENTION BIS : Les différents noyaux (
linux et
initrd.gz ) sont récupérables via les
netboot ( par exemple
http://archive.ubuntu.com/ubuntu/dists/hardy/main/installer-i386/current/images/netboot/ pour
Hardy et
http://debian.mirror.inra.fr/debian/dists/etch/main/installer-amd64/20070308etch2/images/netboot/ pour
Etch, bien faire attention aux architectures
i386 et
amd64 )
ATTENTION TER : Pour les installations par
Kickstart, mettre la bonne adresse IP / URL vers le fichier
kc.cfg Installer le package
syslinux Copier
/usr/lib/syslinux/pxelinux.0 vers
/tftpboot/linux-install/pxelinux.0exemple de l'arborescence :
ll -R /tftpboot
/tftpboot
/linux-install
boot.txt
pxelinux.0
/debian
/etch
/i386
initrd.gz
linux
/pxelinux.cfg
default
/ubuntu
/gutsy
initrd.gz
linux
/hardy
/ubuntu-installer
/i386
initrd.gz
linux
Lancer le serveur
tftpd-hpa :
/etc/init.d/tftpd-hpa restart
Configuration d'Apache HTTPD :
Pour une installation sans
Kickstart et en mirroir total, créer le
VirtualHost suivant :
<VirtualHost *:80>
ServerAdmin webmaster@ubuntu.com
ServerName archive.ubuntu.com
ServerAlias *.archive.ubuntu.com
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]
</IfModule>
DocumentRoot /mirroir/mirror/archive.ubuntu.com
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /mirroir/mirror/archive.ubuntu.com>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
</Directory>
</VirtualHost>
Pour une installation avec
Kickstart, ajouter ce qui suit à la configuration générale :
Alias /ubuntu /mirroir/mirror/archive.ubuntu.com/ubuntu
<Directory "/mirroir/mirror/archive.ubuntu.com/ubuntu">
Options Indexes
AllowOverride None
Order allow,deny
Allow from all
</Directory>
Configuration du serveur DNS ( optionnel si Kickstart ) :
Créer et éditer le fichier
/etc/bind/db.ubuntu.com
ubuntu.com. IN SOA Toshiba.ubuntu.local. root.localhost. (
20080726; Serial
10800; refresh after 3 hours.
3600; Retry after 1 hour.
604800; expire after 1 week.
86400; Minimum TTL of 1 day.
)
;
; Name servers declaration.
;
ubuntu.com. IN NS Toshiba.ubuntu.local.;
;
; Hostnames declaration.
;
Toshiba.ubuntu.com. IN A 192.168.1.11;
security.ubuntu.com. IN CNAME Toshiba;
archive.ubuntu.com. IN CNAME Toshiba;
fr.archive.ubuntu.com. IN CNAME Toshiba;
Editer le fichier
/etc/bind/named.conf.local
zone "ubuntu.com" in {
type master;
file "/etc/bind/db.ubuntu.com";
};
Au fichier
/etc/bind/named.conf.option
forwarders { 208.67.222.222; 208.67.220.220; 212.27.54.252; 212.27.53.252; };
forward first;
Redémarrer
bind9.
Kickstart :
Utiliser Kickstart Configurator (sous Ubuntu) pour générer les fichiers ks.cfg.
Voici un extrait d'une installation par Kickstart.
L'installation Kickstart est décrit par un fichier de configuration où chaque ligne décrit une étape de l'installation.
Ici, nous commençons par définir les paramêtres systèmes tels que la langue, la prise en charge des périphériques de saisis et la zone horaire.
#System language
lang fr_FR
#Language modules to install
langsupport fr_FR
#System keyboard
keyboard fr
#System mouse
mouse
#System timezone
timezone Europe/Paris
Définition des utilisateurs :
#Root password
rootpw --iscrypted $1$X9qBwlnO$ZfZLp/KohRVYViaS4KgYG0
#Initial user
user pavnay --fullname "pavnay" --iscrypted --password $1$inm.tMDr$8sloyukGUU45uRQZtngmo0
NOTE : Il est possible de ne pas spécifié de mot de passe pour l'utilisateur
root en mettant à la place du mot de passe
--disabled.
NOTE 2 : Il est possible de ne pas encrypter les mots de passe en supprimant l'option
--iscrypted et en mettant les mots de passe en clair
Suit la configuration de l'installation elle-même :
#Reboot after installation
reboot
#Use text mode install
text
#Use interactive kickstart installation method
interactive
#Install OS instead of upgrade
install
#Use Web installation
url --url <a href="http://pxe.viadeo.local/ubuntu" target="_blank">http://pxe.pavnay.local/ubuntu</a>
#System bootloader configuration
bootloader --location=mbr
Définition des partitions (ici, on choisit de faire le partitionnement en automatique mais il est aussi possible de le laisser en manuel en ne spécifiant rien).
Ici, nous créons une partition système / de 5Go, une partition de swap de 200Mo et le reste du disque (grâce à l'option --grow) sera la partition /data, le tout avec un système de fichier ext3 (hormis le swap bien sûr).
#Clear the Master Boot Record
zerombr
#Partition clearing information
clearpart --all --initlabel
#Disk partitioning information
part / --fstype ext3 --size 5024
part swap --size 204
part /data --fstype ext3 --size 1 --grow
Configuration du système d'authentification, du réseau et enfin, on supprime l'interface graphique avec skipx. Si vous voulez installer une interface graphique, il faut utiliser non pas skipx mais par exemple : xconfig --depth=8 --resolution=1024x768 --defaultdesktop=GNOME --startxonboot.
#System authorization infomation
auth --useshadow --enablemd5
#Network information
network --bootproto=dhcp --device=eth0
#Firewall configuration
firewall --disabled
#Do not configure the X Window System
skipx
En suite viens l'installation des packages personnalisés? Il suffit de mettre le nom du package après le tag %package...
#Package install information
%packages
openssh-server
ntpdate
snmpd
g++
make
vim
zlib1g-dev
Et enfin, voici la partie personnalisable : le tag %post (pour post installation) (il existe aussi la balise %pre pour pré-installation).
Cette balise permet de mettre un script bash qui sera exécuté à la fin de l'installation. Ci après, une installation d'un serveur web avec Apache + Tomcat + Java :
%post
# Récupération des archives des logiciels à installer
cd /usr/local/src
wget http://pxe.pavnay.local/packages/common/current/apache.tar.gz
wget http://pxe.pavnay.local/packages/common/current/tomcat-web.tar.gz
wget http://pxe.pavnay.local/packages/i386/current/jrockit.tar.gz
wget http://pxe.pavnay.local/packages/common/current/tomcat-connector.tar.gz
wget http://pxe.pavnay.local/packages/config/current/webserver_conf.tar.gz
# Installation de la JVM
cp jrockit.tar.gz /usr/local
cd /usr/local
tar xvzf jrockit.tar.gz
version=$(ls -d jrockit-*)
ln -s $version java
echo "export JAVA_HOME=/usr/local/java" >> /etc/profile
echo "export PATH=$PATH:$JAVA_HOME/bin" >> /etc/profile
# Installation de tomcat
cp /usr/local/src/tomcat-web.tar.gz /usr/local/.
tar xvzf tomcat-web.tar.gz
version=$(ls -d jakarta-tomcat*)
ln -s $version tomcat
# Installation d'Apache
cp /usr/local/src/apache.tar.gz /tmp/. cd /tmp
tar xvzf apache.tar.gz
version=$(ls -d httpd-*)
cd $version
./configure --prefix=/usr/local/$version --disable-cgi --disable-cgid --disable-imagemap --disable-userdir --enable-rewrite --enable-headers --enable-deflate --with-mpm=prefork
make
make install
ln -s /usr/local/$version /usr/local/apache2
# Installation du connecteur Apache / Tomcat
cp /usr/local/src/tomcat-connector.tar.gz /tmp/.
cd /tmp
tar xvzf tomcat-connector.tar.gz
version=$(ls -d tomcat-connectors-*)
cd $version/native
./configure --with-apxs=/usr/local/apache2/bin/apxs
make
make install
# Installation des scripts de configuration de la machine qui s'exécuteront au premier démarrage de la machine (Adressage IP, etc...)
cd /usr/local/src
wget http://pxe.pavnay.local/packages/config/current/core_conf.tar.gz
for conf in *_conf.tar.gz
do tar xfvz $conf done
echo "alias ll='ls -alh --color=auto'" >> /etc/profile
echo "chmod +x /usr/local/src/firststart.sh" >> /root/.bashrc
echo "/usr/local/src/firststart.sh" >> /root/.bashrc
echo "search pavnay.local" > /etc/resolv.conf
echo "nameserver 192.168.1.5" >> /etc/resolv.conf
Et voilà...
Il ne reste plus qu'à démarrer la machine en PXE ( touche
F12 ).
Astuces
- Personalisation du menu de boot
Cette installation permet d'avoir à l'écran de boot un menu dans lequel il faut saisir un numéro correspondant à l'option voulue (l'affichage se fait grâce au fichier
/tftpboot/install-linux/boot.txt et la gestion du menu grâce au fichier
/tftpboot/linux-install/pxelinux.cfg/default).Il est possible d'avoir un menu plus agréable où la sélection se fait par les touches flèches 'haut" et "bas". Pour y parvenir, il suffit de mettre le fichier
menu.c32 (disponible dans l'archive de
syslinux et rendu exécutable) dans le répertoire
/tftpboot/install-linux/ et de modifier le fichier
default. Les modifications sont simples, il suffit de remplacer l'entête du fichier par :
DEFAULT menu.c32
PROMPT 0
TIMEOUT 0
F1 netinstall.txt
MENU TITLE Installation PXE
Avec
syslinux, il est possible de faire des personnalisations assez poussées du menu (changer les couleurs, ajouter une images en fond d'écran, etc...).
Attention toute fois !!!
Syslinux peut désactiver les claviers USB brancher sur la machine. Ainsi, revenir au menu décrit plus haut est une solution portable pour toutes les machines...
- Partitionnement automatique
Le partitionnement automatique peut ne pas fonctionner.
En effet, suivant les controleurs
RAID, les disques durs peuvent ne pas être reconnus. Nous avons été confronté à ce problème avec des lames DELL M600.
Une solution est d'utiliser le module
megaraid mais nous n'avons pas été en mesure de le faire fonctionner...
Pour utiliser le megaraid, il suffit d'ajouter au fichier Kickstart avant le partitionnement, la ligne suivante :