« Ipxe » : différence entre les versions

De Wiki doc

m (→‎Compilation : Ajout d'une parenthèse.)
(Ajout d'une explication sur la compilation multi-plateforme + remplacement des balises sources obsolètes + ajout d'un lien en introduction + corrections typographiques)
 
Ligne 1 : Ligne 1 :
[[Category:pxe]]
[[Category:pxe]]
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.
[https://ipxe.org/start 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 [http://ipxe.org site officiel] à [http://boot.ipxe.org/ipxe.iso cette adresse]. Nous allons détailler les étapes de compilation manuelles. Il est à noter que l'usage de l'outil en ligne ([https://github.com/xbgmsharp/ipxe-buildweb/ 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.
Une image IPXE pré-compilée est disponible sur le [http://ipxe.org site officiel] à [http://boot.ipxe.org/ipxe.iso cette adresse]. Nous allons détailler les étapes de compilation manuelles. Il est à noter que l'usage de l'outil en ligne ([https://github.com/xbgmsharp/ipxe-buildweb/ 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.
Ligne 13 : Ligne 13 :
'''Édition du fichier de configuration'''
'''Édition du fichier de configuration'''


L'outil ''make'' lit le fichier de configuration <source lang="bash" inline>./src/config/general.h</source> pour déterminer les modules à intégrer à la compilation.
L'outil ''make'' lit le fichier de configuration <code>./src/config/general.h</code> 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 (<source lang="bash" inline>#</source>). Les modules à définir doivent êtres passés en paramètre à <source lang="bash" inline>define</source> et ceux qui ne doivent pas l'être, à <source lang="bash" inline>undefine</source>.
Tout les paramètres à prendre en compte doivent être précédés par un croisillon (<code>#</code>). Les modules à définir doivent êtres passés en paramètre à <code>define</code> et ceux qui ne doivent pas l'être, à <code>undefine</code>.


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 <source lang="bash" inline>...</source>) :
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 <code>...</code>) :


  cd ./ipxe/src/
  cd ./ipxe/src/
  vim config/general.h
  vim config/general.h


<source lang="bash">
<syntaxhighlight lang="bash">
...
...
#define NET_PROTO_IPV6          /* IPv6 protocol */
#define NET_PROTO_IPV6          /* IPv6 protocol */
Ligne 30 : Ligne 30 :
#define SANBOOT_PROTO_ISCSI
#define SANBOOT_PROTO_ISCSI
...
...
</source>
</syntaxhighlight>


  make -j 9
  make -j 9


Un fichier <source lang="bash" inline>bin/ipxe.iso</source> 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 Windows via PXE|Installation de Windows via PXE]]).
Un fichier <code>bin/ipxe.iso</code> 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 Windows via PXE|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 [https://ipxe.org/appnote/buildtargets documentation] du projet.


=Test=
=Test=
Ligne 40 : Ligne 49 :
  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
  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 <source lang="bash" inline>/tmp/pxe</source> (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 :
J'ai copié les fichiers nécessaires au démarrage ''PXE'' de mon serveur dans le <code>/tmp/pxe</code> (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
  iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j MASQUERADE
Ligne 47 : Ligne 56 :
  ip l set vnet0 up
  ip l set vnet0 up


Ne pas oublié le serveur HTTP sur l'hôte (un [[Busybox#Serveur_WEB|busybox httpd]] fait très bien l'affaire) :
Ne pas oublié le serveur ''HTTP'' sur l'hôte (un [[Busybox#Serveur_WEB|busybox httpd]] fait très bien l'affaire) :
  busybox httpd -fvv -h /tmp/pxe/
  busybox httpd -fvv -h /tmp/pxe/



Dernière version du 28 février 2024 à 13:17

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