Il s'agit en fait de mettre en place une solution mixte basée sur un serveur de domaine Windows 2K3 pour le serveur DHCP et un serveur CentOS pour le TFTP.
Un tutoriel très complet concernant le PXE est disponible sur le site de Gentil Kiwi.
Ce billet n'est qu'une déclinaison pour un environnement particulier.
Pour le principe de fonctionnement et les prérequis, je vous renvoie donc sur la page de Gentil Kiwi.
En premier lieu, il va falloir installer un serveur TFTP sur notre CentOS. Rien de bien difficile, il suffit de lancer la commande suivante (en root) :
# yum install tftp-server
Ensuite, il va falloir ouvrir le port UDP 69, sinon on aura bien un serveur TFTP mais qui ne pourra pas communiquer avec l'extérieur, ce qui n'a alors que peu d'intérêt.
Il existe deux façons de configurer cela : via une interface graphique ou texte (simple console ou SSH).
Méthode "graphique" :
Lancer Niveau de sécurité et Pare-feu
Déplier Autres ports et choisir d'en ajouter un
Rajouter le port tftp sur le protocole udp
Méthode "texte"
Lancer system-config-securitylevel-tui
À l'aide de la touche Tab, aller sur Personnalisation et valider
Toujours à l'aide de Tab, se positionner sur Autres ports et rajouter tftp:udp
Dans les deux cas, les modifications sont appliquées au bout de quelques secondes.
Et voilà, le serveur TFTP est installé.
Passons au serveur PXE. Pour transformer notre serveur TFTP (qui n'est qu'un simple serveur FTP) en serveur PXE, nous allons faire appel au projet Syslinux et plus particulièrement à sa déclinaison PXELinux
Le projet Syslinux fournit des paquets RPM pour PXELinux. Par exemple, la dernière version de Syslinux lors de l'écriture de ce billet étant la 3.85, le paquet qui nous intéresse est le suivant http://www.kernel.org/pub/linux/utils/boot/syslinux/RPMS/i386/syslinux-tftpboot-3.85-1.i386.rpm.
Le lien est à adapter selon votre architecture et la version à jour. Il suffit de le télécharger et de l'installer via un simple
# rpm -Uvh http://www.kernel.org/pub/linux/utils/boot/syslinux/RPMS/i386/syslinux-tftpboot-3.85-1.i386.rpm
Cela copiera tous les fichiers nécessaires à PXELinux dans /tftpboot
Je ne m'étendrai pas sur la configuration de PXELinux, la page de GentilKiwi étant suffisamment complète.
Je rajouterai juste qu'il existe une possibilité de passer le clavier en français dans le menu PXE en ajoutant
KBDMAP fr.kbd
en début de fichier et en plaçant le dit fichier fr.kbd dans /tftpboot. Vous pouvez trouver celui-ci sur cette page : guim.info.
À titre d'exemple, voici un des fichiers que j'utilise et qui permet le démarrage sur :
- un BartPE spécialisé Ghost 11
- une disquette Ghost pour les stations ayant moins de 512Mo de RAM
- SuperGrubDisk pour une récupération du MBR
- Démarrage local
- Redémarrage
- Extinction
Ces derniers servant en cas d'erreur de manipulation au boot principalement.
KBDMAP fr.kbd DEFAULT menu.c32 TIMEOUT 300 ALLOWOPTIONS 0 PROMPT 0 NOESCAPE 1 SAY Autodestruction en cours ... MENU TITLE Menu PXE Intranet MENU AUTOBOOT Lancement automatique dans # seconde{,s}... LABEL GhostPE MENULABEL Ghost ^BartPE kernel startrom.0 LABEL GhostDos MENULABEL ^Ghost Standalone kernel memdisk raw keeppxe append initrd=ghost/ghostdos.img LABEL SuperGrub MENULABEL ^Super Grub Disk kernel memdisk append initrd=floppy/super_grub_disk.img LABEL Local MENULABEL ^Demarrage sur le disque dur LOCALBOOT 0 LABEL Reboot MENULABEL ^Redemarrer KERNEL reboot.c32 LABEL Stop MENULABEL ^Eteindre KERNEL poweroff.com
À ce point là, nous disposons d'un serveur PXE fonctionnel (enfin une fois que vous aurez créé le ou les fichier(s) de configuration et transféré les images de démarrage, hein ! ). Il reste à configurer le serveur DHCP pour qu'il indique aux stations où aller chercher le PXE.
Dans le cas développé ici, le serveur DHCP est hébergé sur le serveur de domaine qui tourne sous Windows 2K3. Cela doit être similaire sinon identique sur un serveur Windows 2K ou 2K8.
Sur le dit serveur, il faut lancer la console de gestion DHCP (elle doit être présente dans les outils d'administration du serveur, sinon un simple dhcp.msc à partir de la boite de dialogue Exécuter fonctionne aussi) puis sélectionner les optons d'étendue.
Et hop :
Apparaissent alors les options qui ont été définies. Celles qui nous intéressent sont les options 066 et 067. Un clic droit vous permettra de faire apparaitre le menu contextuel et d'accéder à la modification des options.
À ce stade, vous pouvez vous permettre un hurlement de frustration à l'adresse des devs de M$ qui n'ont pas jugé bon d'autoriser le redimensionnement de la fenêtre d'édition qui aurait pourtant été le bienvenu !
Donc à vous d'essayer tant bien que mal de trouver les options 066 et 067 (qui ne devraient pas encore être cochées).
Cochez les puis renseigner les valeurs. Pour le serveur de démarrage, il est conseillé de renseigner l'IP plutôt que le FQDN (172.16.0.15 dans notre cas).
Et pour le fichier de démarrage, il s'agit du fichier pxelinux.0 (ou de gpxelinux.0 si vous souhaitez profiter de certaines fonctionnalités du projet Etherboot). Le / initial indique que le fichier se trouve à la racine du serveur TFTP de démarrage (soit /tftpboot/pxelinux.0 sur notre serveur CentOS dont l'IP est 172.16.0.15).
Note : gpxelinux.0 peut être utile en remplacement de pxelinux.0 pour certaines cartes réseaux récalcitrantes comme se fut le cas des Realtek 8110/8169 à un moment.
Voilà, vous disposez maintenant d'une solution de boot sur PXE complète. Il ne vous reste plus qu'à vous amuser à créer des images de démarrage pour couvrir toutes les situations possibles.
Commentaires