[Comme le design de ce micro-blog ne permet pas un affichage digne de ce nom, je vous met à disposition une version PDF de cet article.]
Préambule
Comme il m’a été extrêmement difficile de trouver une méthode pour monter un serveur PXE (méthodes non fonctionnelles, articles pas à jours, etc.) j’ai décidé de vous faire partager ici une procédure fonctionnelle basée sur la dernière version de Debian.
Comme vous pourrez le constater, cet article est basé sur la procédure décrite sur Yoann’s Blog, mais remise au goût du jour et adaptée aux évolutions des outils utilisés.
PXE ??
Avant de commencer il semble nécessaire de présenter ce qu’est le PXE et quels en sont les avantages.
L’amorçage PXE (sigle de Pre-boot eXecution Environment) permet à une station de travail de démarrer depuis le réseau en récupérant une image de système d’exploitation qui se trouve sur un serveur. [Wikipedia]
En résumé, au moment du boot (bios) il est possible, sur certaines machines équipée de booter un OS depuis un serveur PXE comme on booterait à partir d’un CD ou d’une clé USB. Sur d’autres machines non équipées pour le PXE, il est possible de booter depuis un CD un mini-OS (gPXE) qui permet le boot PXE, mais j’y reviendrais sûrement d’ici quelques temps.
L’avantage de monter un tel serveur devient vite évident lorsque l’on souhaite installer un même OS sur plusieures machines possèdant des hardwares hétérogènes (pas de Ghost possible). Ce genre de serveurs est donc très largement répandu dans le monde de l’entreprise.
Pré-requis
Pour bien comprendre les prochaines étape de cet article, posons un peu les choses.
Un serveur PXE se compose d’un serveur DHCP (si vous n’en avez pas déjà un), d’un serveur TFTP et du serveur PXE proprement dit.
Le serveur DHCP permet d’attribuer automatiquement une IP à la machine voulant récupérer l’OS et le serveur TFTP permet de transférer les fichiers nécessaires à l’installation.
Pour monter notre serveur, nous allons avoir besoin de:
- Un PC / Serveur / Machine virtuelle sur le(la)quel(le) est installé Debian Squeeze (6.0)
- Une connexion Internet pour l’installation des paquets
- Si vous avez un routeur qui fait office de DHCP sur le réseau, pensez à désactiver ce service.
- Être root sur la machine lors de cette procédure.
Nous définirions l’environnement ainsi:
- Plage IP: 192.168.200.0/24
- IP serveur: 192.168.200.1
- IP routeur: 192.168.200.254
Installation du DHCP
Nous allons utiliser le serveur « dhcp3″ (différent de « dhcpd ») qui supporte, semble-t-il, correctement le PXE.
Pour l’ensemble des installations et configuration, placez vous en root.
Installation:
apt-get install dhcp3-server
Configuration:
Éditez (vi, nano, pico, …) le fichier /etc/default/dhcp3-server (s’il n’existe pas créez le) de manière à spécifier sur quelle interface doit répondre le serveur DHCP. (j’utilise eth1 car je possède deux cartes réseaux, mais si vous n’en avez qu’une choisissez eth0)
INTERFACES="eth1"
Éditez aussi le fichier /etc/dhcp/dhcpd.conf :
authoritative; ddns-update-style interim; ignore client-updates;
subnet 192.168.200.0 netmask 255.255.255.0 {
range 192.168.200.120 192.168.200.145;
option domain-name-servers 192.168.200.1;
option routers 192.168.200.254;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.200.255;
default-lease-time 43200;
max-lease-time 86400;
server-name "PXE";
next-server 192.168.200.1;
filename "pxe/pxelinux.0";
}
Vous noterez qu’ici j’ai configuré le DHCP de manière à ne distribuer que 25 adresses (.120 à .145) … à vous d’adapter selon vos besoins.
Voici la commande permettant d’arrêter et relancer le serveur DHCP:
/etc/init.d/isc-dhcp-server stop
/etc/init.d/isc-dhcp-server start
Jusqu’ici, nous n’avons pas configuré l’interface réseau sur laquelle va répondre le DHCP (toujours eth0 ou eth1 selon votre cas). Si une telle configuration doit vous priver du net, attendez la fin des installations avant de la mettre en place.
ifconfig eth1 up
ifconfig eth1 192.168.200.1/24
Si vous souhaitez faire cette configuration de manière permanente, éditez le fichier/etc/network/interfaces et affectez une adresse statique.
Installation du serveur TFTP
Nous choisirons ici d’installer le serveur « tftpd-hpa » plutôt que « atftpd » ou « tftpd ».
Installation:
apt-get install tftpd-hpa
Lorsqu’il vous sera demandé d’entrer le répertoire dans lequel doit officier le serveur, entrez: /tftpboot
Configuration:
Éditez ensuite le fichier /etc/default/tftpd-hpa:
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/tftpboot"
TFTP_ADDRESS="192.168.200.1:69"
TFTP_OPTIONS="--secure"
Éditez enfin le fichier /etc/inetd.conf et commentez (#) la ligne suivante:
#:BOOT: TFTP service is provided primarily for booting. Most sites
# run this only on machines acting as "boot servers."
#tftp dgram udp4 wait nobody /usr/sbin/tcpd /usr/sbin/in.tftp [...]
Les commandes pour arrêter et relancer le serveur sont:
/etc/init.d/tftpd-hpa stop
/etc/init.d/tftpd-hpa start
Enfin, il faut crée le répertoire dans lequel va officier le serveur TFTP:
mkdir /tftpboot
chmod 777 /tftpboot -R
Notez que les droit sont ici placés en 777 et qu’une fois votre serveur 100% fonctionnel il serait plus prudent de sécuriser tout cela. ;D
Installation de PXE
Nous allons maintenant installer le serveur PXE proprement dit.
Installation:
apt-get install pxe syslinux
Configuration:
Editez le fichier /etc/pxe.conf de manière à avoir les paramètres suivant (adaptez selon eth0 ou eth1):
# which interface to use interface=eth1 default_address=192.168.200.1
# tftpd base dir
tftpdbase=/tftpboot
Les commandes pour arrêter et relancer le serveur sont:
/etc/init.d/pxe stop
/etc/init.d/pxe start
Nous avons maintenant terminé l’installation des composants principaux du système. La prochaine étape consiste ajouter à notre serveur PXE l’OS à installer sur les machines.
Préparation du serveur
Pour commencer, comme votre serveur TFTP peut servir à plusieurs usages, on va créer un sous dossier spécialement pour le PXE:
mkdir /tftpboot/pxe/
Maintenant il est nécessaire de récupérer l’image de l’OS. Ici nous choisirons d’installer Debian Lenny, mais n’importe quelle version de Debian / Ubuntu est aussi compatible avec cette procédure.
Téléchargement de l’image netboot
wget http://ftp.fr.debian.org/debian/dists/lenny/main/installer-i386/current/images/netboot/netboot.tar.gz -O /tmp/netboot-debian-lenny-i386.tar.gz
Création du répertoire temporaire
mkdir -p /tmp/netboot-debian-lenny-i386/
Décompression de l’image dans le répertoire temporaire
cd /tmp/netboot-debian-lenny-i386/; tar zxvf /tmp/netboot-debian-lenny-i386.tar.gz
Création de l’arborescence
mkdir -p /tftpboot/pxe/
mkdir -p /tftpboot/pxe/boot-screens/
mkdir -p /tftpboot/pxe/pxelinux.cfg/
mkdir -p /tftpboot/pxe/debian-lenny/i386/
Copie des fichiers depuis le répertoire temporaire vers l’arborescence netboot
cp /tmp/netboot-debian-lenny-i386/debian-installer/i386/pxelinux.0 /tftpboot/pxe/
cp /tmp/netboot-debian-lenny-i386/debian-installer/i386/boot-screens/splash.png /tftpboot/pxe/boot-screens/
cp /tmp/netboot-debian-lenny-i386/debian-installer/i386/boot-screens/vesamenu.c32 /tftpboot/pxe/boot-screens/
cp /tmp/netboot-debian-lenny-i386/debian-installer/i386/initrd.gz /tftpboot/pxe/debian-lenny/i386/
cp /tmp/netboot-debian-lenny-i386/debian-installer/i386/linux /tftpboot/pxe/debian-lenny/i386/
On crée ensuite le fichier /tftpboot/pxe/pxelinux.cfg/default qui permet de configurer le boot de l’OS et surtout de spécifier le fichier permettant d’afficher le menu (comme sur une installation Debian classique).
include /boot-screens/menu.cfg
default /boot-screens/vesamenu.c32
prompt 0
timeout 0
Vient le tours du fichier /tftpboot/pxe/boot-screens/menu.cfg permettant la personnalisation du menu:
menu hshift 13
menu width 49
menu title LTU Installer boot menu
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 vshift 12
menu rows 10
menu tabmsgrow 16
menu timeoutrow 17
menu tabmsg Press ENTER to boot or TAB to edit a menu entry
menu autoboot Starting Local System in # seconds
prompt 0
label bootlocal
menu label ^Boot from local disk
menu default
localboot 0
timeout 200 #timeout which is displayed, Wait 10 seconds unless the user types somethin
totaltimeout 1200 #timeout which executes the default definitely, always boot after 2 minutes
menu begin debian
menu title Debian
label mainmenu
menu label ^Back..
menu exit
menu begin debian-lenny
menu title Debian Lenny
label mainmenu
menu label ^Back..
menu exit
menu begin debian-lenny-i386
menu title Debian Lenny i386
label mainmenu
menu label ^Back..
menu exit
default install
label install
menu label ^Install
kernel debian-lenny/i386/linux
append vga=normal initrd=debian-lenny/i386/initrd.gz -- quiet
label expert
menu label ^Expert install
kernel debian-lenny/i386/linux
append priority=low vga=normal initrd=debian-lenny/i386/initrd.gz --
label rescue
menu label ^Rescue mode
kernel debian-lenny/i386/linux
append vga=normal initrd=debian-lenny/i386/initrd.gz rescue/enable=true -- quiet
label auto
menu label ^Automated install
kernel debian-lenny/i386/linux
append auto=true priority=critical vga=normal initrd=debian-lenny/i386/initrd.gz -- quiet
menu end
menu end
menu end
Une fois tous ces fichiers en place vous devriez obtenir l’arborescence suivante:
/tftpboot/:
pxe
/tftpboot/pxe:
boot-screens debian-lenny pxelinux.0 pxelinux.cfg
/tftpboot/pxe/boot-screens:
menu.cfg splash.png vesamenu.c32
/tftpboot/pxe/debian-lenny:
i386
/tftpboot/pxe/debian-lenny/i386:
initrd.gz linux
/tftpboot/pxe/pxelinux.cfg:
default
Lancement du serveur
Si vous n’aviez pas modifier l’IP de votre interface réseau, c’est le moment de le faire.
Lancez ensuite le serveur PXE, TFTP puis DHCP (pensez à désactiver tout autre DHCP sur votre réseau).
Normalement tous les serveurs doivent se lancer sans erreurs. Un tail -f /var/logs/syslog devrait vous en apprendre plus à ce sujet.
Vous pouvez tester le serveur TFTP avec un client TFTP tel que « atftp ».
Boot
Maintenant que le serveur fonctionne, il est temps de booter votre / vos machine(s) et de lancer l’installation. Pour cela dans les options de boot choisissez Network Boot (ou toute autre formulation s’en rapprochant).
Dans les logs (syslog) vous devriez constater que votre DHCP à attribué des IPs et sur les machines le menu de choix de l’installation doit apparaître.
Lancez l’installation et enjoy !
Autres OS
Cet article ne décrit pour le moment que l’installation de système de type Debian. Pour d’autres OS Linux je vous renvoie à l’article ayant inspiré celui-ci qui traite notamment de CentOS et Fedora.