Il passe par le firmware de la carte réseau (boot menu & NIC)
Le firmware PXE fait une requête DHCP qui lui donne les informations
IP
Serveur BOOTP (TFTP pour simplifier)
Le nom de l’image avec laquelle booter
PXE télécharge l’image en TFTP
PXE boot l’image
Ça, c’était bien quand j’avais un NAS avec tout ce qu’il fallait comme stockage. Mais je suis passé sur un APU2 avec OpenSense. Je suis donc passé de 6To de stockage à 13Go en SDD. Par contre, je suis aussi passé d’un ASDL faiblar à de la fibre qui met le datacenter d’OVH dans mon salon.
Il me fallait donc une solution pour booter à partir d’une machine sur Internet.
iPXE arrive à la rescousse. C’est une version open source (c’est un point positif) de firmware PXE. Mais surtout avec beaucoup plus de fonctionnalités (et c’est là que ça devient intéressant). Comme la possibilité de télécharger les images en HTTP à la place de TFTP.
Par contre, le firmware n’est pas forcément disponible dans les cartes réseau communes.
Ça tombe bien, on peut faire une image compatible PXE pour iPXE (Upsa powered).
Si on reprend la suite de tout à l’heure :
PXE télécharge l’image iPXE en TFTP
PXE boot l’image iPXE
iPXE télécharge le reste de sa configuration en HTTP (ou autre protocole)
Il te faudra donc :
Un serveur DHCP (sur ton routeur/firewall OpenSense)
Un serveur TFTP (toujours ton serveur OpenSense)
Une image iPXE (sur le serveur TFTP donc OpenSense)
Un serveur HTTP (chez OVH ou ton serveur local)
Alors, je dis OpenSense, et le reste de l’article est basé dessus. Mais ça fonctionnera parfaitement avec PFSense, DD-WRT, un Linux installé à la “main”.
J’ai passé pas mal de temps a essayer de faire fonctionner les images générées par rom-o-matic. Mais c’était pénible de remettre la configuration, attendre la génération sur le serveur. Et puis, c’est cool de leur libérer un peu de CPU.
Mais tu peux facilement reproduire la configuration ci-dessous dans les paramètres ROM-o-Matic. Mais c’est beaucoup moins marrant :)
Bon. On y va ? Ou bien ?
Installation du serveur iPXE
Tu fais comme tu veux. Mais moi, je mets Nginx comme serveur HTTP. Voici la configuration du virtualhost à mettre :
Tu vas maintenant installer tous les fichiers nécessaires à la partie iPXE :
Installation des sources pour l’installeur Ubuntu
Généreration du binaire iPXE
C’est là, ou ça prend du temps pour avoir tous les bons paramètres fonctionnels. Voilà un patch de git vs ma configuration :
Maintenant, tu vas pouvoir compiler tout ça :
Et voilà, c’est terminé pour la partie iPXE.
Maintenant, tu dois configurer le DHCP / TFTP (sur l’OpenSense)
On va commencer par DNSMasq pour la partie TFTP :
Dans Service / Dnsmasq DNS / Settings :
Cocher “Enable” si ce n’est pas fait
“Listen port” -> “5353” ou autre chose, mais pas 53 qui rentrerait en conflit avec Unbound
“Network interface” -> “LAN”, j’ai mis ça pour éviter de répondre aux requêtes sur la partie WAN
“Advanced” voir ci-dessous
Clique sur “Save”. Et passes à Unbound :
Dans Service / DHCPv4 / LAN :
Dans la partie “TFTP server”
“Set TFTP hostname” -> “192.168.2.1”
“Set Bootfile” -> “/tftp/undionly.kpxe”
Et pour finir, tu vas copier le firmware que tu as construit tout à l’heure. Ouvre un shell (en ssh par exemple):