Je suis membre de l'atelier-soudé depuis quelques mois. Il s'agit d'une association de co-réparation d'objets électroniques et électriques. En gros, si vous avez un soucis avec un de vos appareils, vous venez et vous allez pouvoir le réparer vous même en bénéficiant de l'aide, des connaissances et des conseils des membres, et en utilisant le matériel mis à disposition.

Au sein de l'association, nous réparons régulièrement des ordinateurs et il faut souvent réinstaller le système d'exploitation ou démarrer sur un support externe pour diagnostic la panne. Nous utilisions jusqu'à présent des clés USB pour installer les systèmes d'exploitation. Le soucis majeur de cette solution est que nous n'avions jamais le bon système sous la main ou la bonne version et que nous passions donc notre temps à effacer et flasher ces clés USB.

Mais cette époque est (bientôt) révolue ! Nous sommes en train de mettre en place un serveur PXE pour pouvoir démarrer des systèmes d'exploitation depuis le réseau. Cette suite de billet détaille la démarche que nous avons suivis.

Attention ! Le système présenté dans ce billet et le suivant n'est pas complet. Lors de la mise en place du démarrage des systèmes Windows, j'ai fait le choix de basculer d'un serveur PXE à un serveur IPXE. Ceci car le téléchargement des isos WinPE en TFTP est beaucoup trop lent. IPXE permet de passer ces fichiers en HTTP ce qui fait passer le temps de chargement de quelques minutes à quelques secondes. Seul le démarrage des systèmes Linux Mint et ArchLinux est fonctionnel.

J'ai tout de même décidé de publier ces billets car l'ensemble est fonctionnel et plutôt bien abouti. Il est seulement lent pour le transfert des images disques WinPE et des utilitaires en ISO, pas pour les systèmes d'exploitation Linux car il utilise NFS. Je n'ai également testé qu'un nombre réduit de systèmes d'exploitation.

Le billet détaillant la mise en place du serveur IPXE est disponible ici.


Principe

Un serveur PXE permet à un ordinateur de démarrer depuis le réseau en récupérant une image qui se trouve sur un serveur. Le démarrage PXE, appelé amorce PXE, s'effectue en trois étapes :

  • Récupération d'une adresse IP sur un serveur DHCP. Par le biais du protocole DHCP, le fichier à amorcer est également indiqué à la machine.
  • Téléchargement du fichier à amorcer depuis un serveur Trivial FTP (TFTP).
  • Exécution du fichier à amorcer.

Le fichier d'amorçage peut ensuite lancer le démarrage d'un installateur, présenter un menu de choix pour l'utilisateur, récupérer des fichiers distants...


Présentation du système mis en place

Notre serveur PXE fonctionne avec les éléments suivants :

  • dnsmasq : logiciel intégrant un serveur DNS (non utilisé ici), un serveur DHCP permettant de faire du PXE et un serveur TFTP. Le choix s'est porté sur ce logiciel car il permet de faire du proxy DHCP, qu'il est simple à configurer et qu'il intègre la plupart des outils nécessaires au serveur PXE.

Petite parenthèse : un proxy DHCP permet de fournir les éléments du protocole DHCP nécessaires au démarrage PXE sans être le serveur DHCP principal qui fournit les adresses IP. Cette fonctionnalité là était nécessaire car le routeur fournissant l'accès à internet pour l'atelier-soudé fait également office de serveur DHCP et nous ne voulions pas modifier sa configuration. De plus, le routeur est constamment démarré contrairement au serveur PXE.

  • pxelinux : logiciel dérivé de Syslinux permettant le démarrage PXE depuis un serveur. L'utilisation des éléments de Syslinux permet ensuite de présenter un menu personnalisé à l'utilisateur, de charger des utilitaires ou de démarrer n'importe quel système d'exploitation.
  • Un serveur NFS : système de partage de fichiers distant entre machine de type Unix. Il fournit les images disques de tous les systèmes d'exploitation (excepté Windows).

Le serveur est installé sur une machine sous Linux Mint car c'est ce que l'atelier-soudé avait en stock. Linux Mint est une distribution dérivée de Ubuntu, elle même dérivée de Debian. L'ensemble des commandes présentées dans ce billet et les suivants devraient donc être compatible avec tous les systèmes dérivés de Debian, Ubuntu compris. Et tout doit également fonctionner sur d'autres distributions GNU/Linux, moyennant quelques modifications simples au niveau des commandes du gestionnaire de paquet.

Notre serveur PXE est également capable de fournir à l'ordinateur le fichier d'amorçage correspondant à son système bas niveau : BIOS ou UEFI.


Structure des répertoires

Voici à quoi ressemble la structure des répertoires du serveur PXE après installation :

/srv/
    |_ tftp/
    |      |_ boot/
    |      |      |_ linux_mint/
    |      |      |         |_ cinammon/
    |      |      |         |           |_ 32-bit
    |      |      |         |           |_ 64-bit
    |      |      |         |_ MATE/
    |      |      |         |           |_ 32-bit
    |      |      |         |           |_ 64-bit
    |      |      |         |_ XFCE/
    |      |      |         |           |_ 32-bit
    |      |      |         |           |_ 64-bit
    |      |      |         |_ KDE/
    |      |      |         |           |_ 32-bit
    |      |      |         |           |_ 64-bit
    |      |      |_ windows_10/
    |      |      |         |_ 32-bit
    |      |      |         |_ 64-bit
    |      |      |_ windows_7
    |      |      |_ windows_XP
    |      |      |_ archlinux/
    |      |      |         |_ x86_64
    |      |      |_ utilitaires
    |      |      |_ ...
    |      |
    |      |_ bios/
    |      |      |_ boot  -> ../boot/
    |      |      |_ pxelinux.cfg/
    |      |      |              |_ default
    |      |      |              |_ linux_mint.menu
    |      |      |              |_ windows.menu
    |      |      |              |_ autre.menu
    |      |      |              |_ utilitaires.menu
    |      |      |_ pxelinux.0
    |      |      |_ ldlinux.c32
    |      |      |_ (bios)*.c32
    |      |      |_ ...
    |      |
    |      |_ efi32/
    |      |      |_ boot  -> ../boot/
    |      |      |_ pxelinux.cfg/
    |      |      |              |_ default
    |      |      |              |_ ...
    |      |      |_ syslinux.efi
    |      |      |_ ldlinux.e32
    |      |      |_ (efi32)*.c32
    |      |      |_ ...
    |      |
    |      |_ efi64/
    |      |      |_ boot  -> ../boot/
    |      |      |_ pxelinux.cfg/
    |      |      |              |_ default
    |      |      |              |_ ...
    |      |      |_ syslinux.efi
    |      |      |_ ldlinux.e34
    |      |      |_ (efi64)*.c32
    |      |      |_ ...
    |
    |_ samba/
    |      |_ windows/
    |      |      |_ windows_10/
    |      |      |         |_ 32-bit
    |      |      |         |_ 64-bit
    |      |      |_ windows_7
    |      |      |_ windows_XP

Ce billet commence à être bien assez long à mon goût. Et il me reste encore à expliciter l'installation et la configuration du serveur PXE. Je vous réserve donc tout ça pour un autre billet (disponible ici).