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

Lançons system-config-securitylevel

Déplier Autres ports et choisir d'en ajouter un

Configurons un nouveau port/protocole

Rajouter le port tftp sur le protocole udp

Le protocole TFTP utilise l'UDP

Méthode "texte"

Lancer system-config-securitylevel-tui

system-config-securitylevel-tui : via une console ou SSH

À 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

TFTP utilise toujours 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 :

Options d'étendue du serveur DHCP

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).

Édition des options d'étendue

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).

Définition du serveur de démarrage

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).

Définition du fichier de démarrage

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.