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:
- Un mini-système d'exploitation de diagnostic et/ou de réparation. On appelle cela une image "rescue"
- Un mini-système d'exploitation. On parle alors de client léger.
- Un vrai système d'exploitation. On parle alors de client disk-less.
- Un mini-système d'exploitation permattant l'installation. C'est cette fonctionnalité qui nous intéresse le plus ici.
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.
- Recherche d'une adresse IP sur un serveur DHCP/BOOTP ainsi que du fichier à booter
- Téléchargement du fichier à booter depuis un serveur TFTP.
- Exécution du fichier à booter.
Principe
PXE fonctionne sur le principe suivant:
- La machine envoie une requète BOOTP
- Le serveur DHCP répond en envoyant la configuration IP + les informations pour joindre le serveur TFTP
- La machine envoie une requète TFTP pour charger pxelinux.0 au serveur TFTP
- Une fois le fichier pxelinux.0 récupéré, la machine l'exécute. Celui-ci va alors récupérer la configuration PXE auprès du serveur en suivant le formalisme suivant:
Cet ordre bien précis correspond à l'adresse MAC (préfixée de 01 qui est le code Ethernet dans la norme PXE), puis l'adresse IP convertie en hexadécimal,
puis, si cela ne suffit toujours pas, l'adresse IP à laquelle on retranche un digit à la fois. Enfin, la machine demande le fichier
default. Ici, ces demandes ont été infructueuses, le système nous indique donc qu'il n'a pas pu charger le fichier de configuration. - Si un fichier de configuration est trouvé, celui-ci est analysé et exploité. On peut par exemple afficher un menu de choix de l'action à effectuer. Ce peut-être lancer un check matériel, démarrer un système de secours, lancer une installation, etc... Dans tout les cas, vous chargerez un noyau et un mini système d'exploitation. Vous ne serez donc limiter que par votre imagination et/ou vos compétences techniques.
Pré-requis
Vous aurez donc besoin:
- D'un serveur DHCP
- D'un serveur TFTP
- Éventuellement d'un serveur Web, dans le cas où vous souhaitez automatiser toute ou partie de l'installation.
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.
Installation de TFTP
Puis, redémarrez le serveur:
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:
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:
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.
Installation de MemTest
Nous n'avons besoin que d'un fichier pour exécuter MemTest.
Installation de SysRescCD
Configuration de l'installateur Debian
2 fichiers sont nécessaires pour chaque architecture.
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
- CentOS
- 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:
- Diagnostic
- Test mémoire
- Test disques
- Récupération système
- Secours Linux
- Secours Windows
- Installation
- Debian
- 32bits
- 64bits
- Ubuntu
- 32bits
- 64bits
- CentOS
- 32bits
- 64bits
- RedHat
- 32bits
- 64bits
- Debian
- Démarrage depuis le disque local
Pour respecter l'orborescence, chaque entrée de menu sélectionnée fera apparaître le sous-menu associé.
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.
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:
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:
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.
