Serveur d'installation et de diagnostic PXE pour Debian, Ubuntu, CentOS et RedHat

Jean Baptiste FAVRE

février 2009

Introduction

PXE est une fonctionnalité intégrée dans les cartes réseaux "récentes". Cela permet à votre machine d'aller chercher les logiciels nécessaires à son démarrage sur le réseau. Ces logiciels peuvent être:

PXE permet donc d'installer un système sans utiliser le classique CDROM. Ceci est notamment intéressant dans le cas d'une installation à distance. Quoi de plus satisfaisant que d'installer une nouvelle machine confortablement installé dans son canapé, plutôt que dans l'environnement bruyant du DataCenter ?

PXE repose donc sur le concept classique "client-serveur". La machine à installer est le client, il vous faudra donc un serveur PXE. Néanmoins, c'est techniquement un peu plus compliqué: le démarrage par PXE s'effectue en plusieurs étapes.

  1. Recherche d'une adresse IP sur un serveur DHCP/BOOTP ainsi que du fichier à booter
  2. Téléchargement du fichier à booter depuis un serveur TFTP.
  3. Exécution du fichier à booter.

Principe

PXE fonctionne sur le principe suivant:

Pré-requis

Vous aurez donc besoin:

Je ne décrirai pas la configuration du serveur DHCP dans ce document. Tout au plus devez-vous être capable d'envoyer, en plus de la configuration réseau basique, les informations pour joindre le serveur PXE dhcp-boot=TFTP_BOTT_FILENAME,TFTP_NAME_SERVER,IP_TFTP_SERVEUR.

Exemple d'option de configuration du boot DHCP pour DNSMASQ
dhcp-boot=pxelinux.0,xps-129,192.168.0.129

Installation de TFTP

Installation du serveur TFTP sous Debian
aptitude install tftpd-hpa
Configuration du serveur TFTP sous Debian
$ cat /etc/default/tftpd-hpa 
#Defaults for tftpd-hpa
RUN_DAEMON="yes"
OPTIONS="-l -s /var/lib/tftpboot"

Puis, redémarrez le serveur:

Redémarrage du serveur TFTP
/etc/init.d/tftpd-hpa restart

Avant de commencer, il est important de s'organiser. La partie réellement importante concerne le serveur TFTP. Pour notre projet, nous aurons besoin des répertoires suivants:

Structure des répertoires du serveur TFTP
/var/lib/tftpboot/
|-- installers
|   |-- centos
|   |   `-- 5.3
|   |       |-- i386
|   |       `-- x86_64
|   |-- debian
|   |   `-- lenny
|   |       |-- i386
|   |       `-- x86_64
|   |-- redhat
|   |   `-- 5.3
|   |       |-- i386
|   |       `-- x86_64
|   `-- ubuntu
|       `-- 9.10
|           |-- i386
|           `-- x86_64
|-- pxelinux.cfg
`-- config
    |-- centos
    |-- debian
    |-- redhat
    `-- ubuntu

Quelques observations sur cette organisation:

config
Le répertoire accueillera les fichiers de configuration PXE propres à chaque distribution. En effet, un système de menu permettra de choisir simplement le système d'exploitation à installer. Dans un environnement de production, vous pourrez préférer différencier les machines selon leur fonction. Il vous suffira d'adapter l'arborescence.
installer
Le répertoire accueillera le mini système d'exploitation nécessaire au démarrage de l'installation. Tout ceci repose sur SysLinux. Je ne détaillerai pas non plus syslinux, un livre ne suffirait pas à faire le tour exhaustif de ses fonctionnalités.
pxelinux.cfg
Le répertoire rassemblera les fichiers de démarrage. Je reviendrai plus en détail dessus un peu plus tard.

Le serveur TFTP est installé et configuré, il est maintenant temps de personnaliser tout ça.

Installation de SysLinux

Le compagnon habituel, et efficace, de PXE s'appelle SysLinux. Nous aurons besoin de lui. Installons-le:

Téléchargement et installation de SysLinux
cd
 #  wget //www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-3.83.tar.gz
 #  tar -xvzf syslinux-3.83.tar.gz

Parmis tous les fichiers que SysLinux met à notre disposition, nous utiliserons ceux permettant un démarrage PXE, à savoir core/pxelinux.0 et com32/menu/vesamenu.c32.

Mise en place de SysLinux
cp core/pxelinux.0 /var/lib/tftpboot/
 #  cp com32/menu/vesamenu.c32 /var/lib/tftpboot/

Installation de MemTest

Nous n'avons besoin que d'un fichier pour exécuter MemTest.

Récupération et installation de MemTest
wget //www.memtest.org/download/4.00/memtest86+-4.00.bin.gz
 #  gzip -d memtest86+-4.00.bin.gz
 #  mv memtest86+-4.00.bin /var/lib/tftpboot/installer/memtest/memtest86+

Installation de SysRescCD

Récupération et installation de SysRescCD
cd
 #  mkdir -p sysresccd/cdrom
 #  cd sysresccd
 #  wget //downloads.sourceforge.net/project/systemrescuecd/sysresccd-x86/1.3.5/systemrescuecd-x86-1.3.5.iso?use_mirror=freefr .
 #  mount -oloop systemrescuecd-x86-1.3.5.iso cdrom
 #  cd cdrom
 #  cp sysrcd.md5 /var/lib/tftpboot/installer/sysresccd/
 #  cp sysrcd.dat /var/lib/tftpboot/installer/sysresccd/
 #  cd isolinux
 #  cp initram.igz /var/lib/tftpboot/installer/sysresccd/
 #  cp rescuecd /var/lib/tftpboot/installer/sysresccd/

Configuration de l'installateur Debian

2 fichiers sont nécessaires pour chaque architecture.

Installateur Debian
cd /var/lib/tftpboot
mkdir -p debian/lenny/{i386,x86_64}
wget ftp://ftp.fr.debian.org/debian/dists/lenny/main/installer-i386/20090123lenny6/images/netboot/debian-installer/i386/linux debian/lenny/i386
wget ftp://ftp.fr.debian.org/debian/dists/lenny/main/installer-i386/20090123lenny6/images/netboot/debian-installer/i386/initrd.gz debian/lenny/i386

wget ftp://ftp.fr.debian.org/debian/dists/lenny/main/installer-amd64/20090123lenny6/images/netboot/debian-installer/amd64/linux debian/lenny/x86_64
wget ftp://ftp.fr.debian.org/debian/dists/lenny/main/installer-amd64/20090123lenny6/images/netboot/debian-installer/amd64/initrd.gz debian/lenny/x86_64

Configuration des installateurs pour les autres distributions

L'installation des autres distributions se fait de manière similaire. Les fichiers kernel et initrd sont disponibles là:

Ubuntu
Emplacement de l'installateur Ubuntu
//fr.archive.ubuntu.com/ubuntu/dists/karmic/main/installer-i386/current/images/netboot/ubuntu-installer/i386/linux
//fr.archive.ubuntu.com/ubuntu/dists/karmic/main/installer-i386/current/images/netboot/ubuntu-installer/i386/initrd.gz
//fr.archive.ubuntu.com/ubuntu/dists/karmic/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/linux
//fr.archive.ubuntu.com/ubuntu/dists/karmic/main/installer-amd64/current/images/netboot/ubuntu-installer/amd64/initrd.gz
CentOS
Emplacement de l'installateur CentOS
ftp://ftp.free.fr/mirrors/ftp.centos.org/5.4/os/i386/images/pxeboot/vmlinuz
ftp://ftp.free.fr/mirrors/ftp.centos.org/5.4/os/i386/images/pxeboot/initrd.img
ftp://ftp.free.fr/mirrors/ftp.centos.org/5.4/os/x86_64/images/pxeboot/vmlinuz
ftp://ftp.free.fr/mirrors/ftp.centos.org/5.4/os/x86_64/images/pxeboot/initrd.img
RedHat
Les fichiers d'installation adaptés à RedHat ne sont disponibles que'à partir du CD d'install, ou via le RedHat Network.

Personnalisation de TFTP

Nous avons vu que, une fois le fichier pxelinux.0 chargé, la machine va chercher un fichier de configuration portant différents noms. Un seul nom ne changera jamais: pxelinux.cfg/default.

Pour nos tests et afin d'éviter une complexité inutile, nous utiliserons le fichier pxelinux.cfg/default. C'est donc le fichier par défaut.

D'autre part, tous les chemins seront relatifs à TFTPBOOT, ici /var/lib/tftpboot. Nous souhaitons obtenir le menu suivant:

Pour respecter l'orborescence, chaque entrée de menu sélectionnée fera apparaître le sous-menu associé.

Fichier pxelinux.cfg/default
default vesamenu.c32

menu title PXE installer menu
menu background config/splash.png

menu hshift 0
menu vshift 7
menu width 50
menu margin 0

# Couleurs
menu color title  * #FFFFFFFF *
menu color border * #00000000 #00000000 none
menu color sel    * #ffffffff #76a1d0ff *
menu color hotsel 1;7;37;40 #ffffffff #76a1d0ff *
menu color tabmsg * #ffffffff #00000000 *
menu color help   37;40 #ffdddd00 #00000000 none

# Position des zones de texte
menu helpmsgrow 15
menu cmdlinerow 16
#menu timeoutrow 16
menu tabmsgrow 14
menu tabmsg Choisissez l'OS que vous souhaitez installer

# Pas de prompt, ni timeout
prompt 0
timeout 100

# Unactivate escape keyboard and disallow options
noescape 1
allowoptions 0

include config/menu.cfg

Arrêtond nous un instant sur l'entrée menu background. Celle-ci vous permet d'agayer un peu votre écran PXE grâce à une image au format png. Les dimensions de l'image doivent être 640x480. Les anciennes versions de SysLinux imposaient d'autres contraintes à propos des couleurs (plus exactement sur l'ordonnancement des couleurs). Ces contraintes n'existent plus avec les versions actuelles de SysLinux.

Le fichier config/menu.cfg contiendra le premier niveau de l'arborescence.

Fichier config/menu.cfg
menu begin diagnostic
    menu title ^Hardware diagnostic
    include config/diag/menu.cfg
menu end

label separator
    menu label -----

menu begin debian
    menu title ^Debian Install
    include config/debian/menu.cfg
menu end

menu begin ubuntu
    menu title ^Ubuntu Install
    include config/ubuntu/menu.cfg
menu end

menu begin centos
    menu title ^CentOS Install
    include config/centos/menu.cfg
menu end

menu begin redhat
    menu title ^RedHat Install
    include config/redhat/menu.cfg
menu end

label separator
    menu label -----

label bootlocal
    menu label ^Boot from local disk
        menu default
        localboot 0
        timeout 100
        totaltimeout 1200

Voilà notre fichier par défaut. Il sera chargé, en l'état actuel de notre système, par toute les machines qui démarreront en PXE. Les sous-menu, appelés par la directive include sont au format suivant:

Fichier config/debian/menu.cfg
label install
    menu label Debian GNU/Linux Lenny ^32 bits
    menu default
    kernel installers/debian/lenny/i386/linux
    append vga=normal initrd=installers/debian/lenny/i386/initrd.gz -- quiet
label install
    menu label Debian GNU/Linux Lenny ^64 bits
    kernel installers/debian/lenny/x86_64/linux
    append vga=normal initrd=installers/debian/lenny/x86_64/initrd.gz -- quiet
label separator
    menu label -----
label mainmenu
    menu label ^Back..
    menu exit

Vous pouvez ajouter autant de déclaration que vous le souhaitez, mais attention tout de même à la place disponible.

Je vous laisse l'adapter à Ubuntu, CentOS et RedHat: c'est peu ou prou la même chose.

Dernier exemple, le sous-menu diagnostic. Ce sous-menu est un peu particulier en ce qu'il doit pouvoir lancer les utilitaires de diagnostic:

Fichier config/diag/menu.cfg
label memtest
    menu label ^Memory diagnostic tool (Memtest)
    kernel installer/memtest/memtest86+
label sysresccd
    menu label ^Recovery CD (SysRescCD)
    kernel installer/sysresccd/rescuecd
    append scandelay=5 initrd=installer/sysresccd/initram.igz boottftp=tftp://10.0.0.101/installer/sysresccd/sysrcd.dat setkeymap=fr
label separator
    menu label -----
label mainmenu
    menu label ^Back..
    menu exit

Rien de très particulier concernant memtest. En revanche, un peu plus de choses à dire concernant SysRescCD. Les options ajoutées (ligne append) sont issues de la documentation de SysRecCD.

J'ai fait le choix de n'utiliser que TFTP, mais il est aussi possible d'utiliser HTTP. C'est par exemple le choix qui sera préféré (TFTP utilise UDP et HTTP TCP, donc vous aurez donc moins de d'erreur en utilisant le second plutôt que le premier) si vous avez déjà un serveur HTTP en production, et notamment si vous l'utilisez conjointement à TFTP pour l'installation automatique de vos serveurs.

Conclusion

Vous pouvez maintenant installer des machines via le réseau. En cas de problème, vous pouvez également réaliser un certain nombre de diagnostics. Maintenant, cette solution n'est pas parfaite. En effet, l'installation reste manuelle. Néanmoins, vous avez presque toutes les briques nécessaires pour l'automatisation complète du processus. À vous de vous plonger dans la documentation officielle de votre distribution préférée.

Format

Ce document est disponible aux formats suivants:

À propos de Jean Baptiste FAVRE

Je suis responsable d'exploitation dans le domaine de l'hébergement. Je travaille, entre autres, sur la virtualisation et l'amélioration des performances web. De temps en temps, j'arrive à décrocher de mon clavier pour lire un bon bouquin en écoutant de la musique.

License

Creative Commons License Cette publication est publiée sous contrat Creative Common by-nc-sa

Valid XHTML 1.0 Strict |  Valid CSS |  contrat Creative Common by-nc-sa

Table des matières

  1. Introduction
  2. Principe
  3. Pré-requis
  4. Installation de TFTP
  5. Installation de SysLinux
  6. Installation de MemTest
  7. Installation de SysRescCD
  8. Configuration de l'installateur Debian
  9. Configuration des installateurs pour les autres distributions
  10. Personnalisation de TFTP
  11. Format
  12. À propos ...
  13. License