Ipxe
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.
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/