Ipxe

De Wiki doc

IPXE est une ROM contenant un micrologiciel permettant d'amorcer un système depuis le réseau (comme celui intégré aux cartes mères). Sa particularité réside dans le fait qu'il ne se limite pas à une utilisation basique du protocole PXE mais va beaucoup plus loin. Il est notamment possible d'amorcer un système via HTTP/HTTPS, FTP, SLAM, NFS et ISCSI en plus du TFTP/TFTP-Multicast traditionnel. Il est également capable d’exécuter des scripts et on peut le personnaliser avant sa compilation pour intégrer plus ou moins de fonctionnalité en fonction des besoins.

Une image IPXE pré-compilée est disponible sur le site officiel à cette adresse. Nous allons détailler les étapes de compilation manuelles. Il est à noter que l'usage de l'outil en ligne (auto-hébergeable) https://rom-o-matic.eu/ permet une compilation à distance en cliquant sur les éléments que l'on veut intégrer à notre image.

Compilation

Installation des dépendances

apt install git make gcc perl binutils liblzma-dev genisoimage

Téléchargement des sources

git clone git://git.ipxe.org/ipxe.git

Édition du fichier de configuration

L'outil make lit le fichier de configuration ./src/config/general.h pour déterminer les modules à intégrer à la compilation.

Tout les paramètres à prendre en compte doivent être précédés par un croisillon (#). Les modules à définir doivent êtres passés en paramètre à define et ceux qui ne doivent pas l'être, à undefine.

Aussi, voici ce que nous avons pour la gestion de l'IPv6, du NFS et de l'ISCSI (fichier partiel, j'ai juste mis ce que j'ai modifié en remplaçant les autres lignes par ...) :

cd ./ipxe/src/
vim config/general.h
...
#define NET_PROTO_IPV6          /* IPv6 protocol */
...
#define DOWNLOAD_PROTO_NFS
...
#define SANBOOT_PROTO_ISCSI
...
make -j 9

Un fichier bin/ipxe.iso a été créé. Nous y trouvons également d'autre fichiers tel que des ROM pour cartes réseau et un noyau Linux iPXE (ipxe.lkrn) permettant l'amorçage par le réseau via pxelinux (nous utilisons ce dernier dans notre documentation sur l'Installation de Windows via PXE).

Multi-plateforme

Pour compiler l'outil sur les plateformes UEFI (32 et 64 bits) et Bios pour amorçage PXE, les commandes suivantes peuvent êtres utilisées :

make bin-x86_64-efi/ipxe.efi -j 9
make bin-i386-efi/ipxe.efi -j 9
make bin-i386-pcbios/ipxe.pxe -j 9

Les binaires d'amorçage sont disponibles aux noms indiqués dans les commandes pour leur plateforme respective. La liste supportés est disponible sur la page de documentation du projet.

Test

Dés à présent, l'ISO généré peut être utilisé dans un média amorçable, un serveur PXE ou testé via Qemu comme suit :

qemu-system-x86_64 -m 1024 -vga qxl -fda /tmp/ipxe/src/bin/ipxe.iso -tftp /tmp/pxe -bootp lpxelinux.0 -boot n -net user -net nic,model=e1000,macaddr=00:11:22:33:44:55 -net tap,ifname=qtap0 -netdev tap,id=t0,ifname=vnet0,script=no,downscript=no -device e1000,netdev=t0 --enable-kvm -cpu host -smp cores=2,threads=1,sockets=1

J'ai copié les fichiers nécessaires au démarrage PXE de mon serveur dans le /tmp/pxe (créé pour l'occasion) de mon hôte. L'interface réseau vnet0 se créée toute seule sur l'hôte et permet une communication paire à paire avec la machine virtuelle (c'est avec ce lien que l'amorçage s'effectue). La deuxième interface permet à la MV de sortir sur le WAN si un routage est effectué dans votre réseau ou si vous utilisez du NAT comme ceci :

iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
ip a a 172.16.1.1/24 dev vnet0
ip l set vnet0 up

Ne pas oublié le serveur HTTP sur l'hôte (un busybox httpd fait très bien l'affaire) :

busybox httpd -fvv -h /tmp/pxe/

Sources