Un système Linux (dans cet exemple, nous utiliserons Debian/Ubuntu)
Droits d'administrateur (sudo)
Une connexion réseau
Mettre à jour la liste des paquets :
sudo apt updateInstaller dnsmasq :
xxxxxxxxxxsudo apt install dnsmasqSauvegarder la configuration originale :
xxxxxxxxxxsudo cp /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
Créer un nouveau fichier de configuration :
xxxxxxxxxxsudo nano /etc/dnsmasq.conf
Ajouter les lignes suivantes :
xxxxxxxxxxport=69dhcp-range=192.168.1.50,192.168.1.150,12hdhcp-boot=pxelinux.0enable-tftptftp-root=/tftpboot
S'assurer de remplacer eth0 par le nom de votre interface réseau et ajustez la plage DHCP selon votre configuration réseau.
NB : Penser à vérifier que l'adresse ip de la carte réseau filaire (ethernet) soit bien en 192.168.1.49 par exemple via network-manager (outil graphique) ou via /etc/network/interfaces comme suit :
sudo nano /etc/network/interfacesAvec les arguments suivants :
xxxxxxxxxxauto eth0 # remplacer eth0 par le nom de votre interface réseau filaire à chaque occurenceiface eth0 inet static address 192.168.1.49 netmask 255.255.255.0 gateway 192.168.1.1Pour connaître le nom de l'interface réseau filaire, il est possible d'utiliser la commande ifconfig le résultat devrait sensiblement ressembler à celui-ci :
xxxxxxxxxxroot@PXE:~# ifconfigeth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.1.49 netmask 255.255.255.0 broadcast 192.168.1.255 inet6 fe80::be24:11ff:fee9:9b8 prefixlen 64 scopeid 0x20<link> ether bc:24:11:e9:09:b8 txqueuelen 1000 (Ethernet) RX packets 1369771 bytes 111933946 (111.9 MB) RX errors 0 dropped 49007 overruns 0 frame 0 TX packets 81393 bytes 4120418 (4.1 MB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0Ici, eth0 est le nom de l'interface réseau filaire.
Créer le répertoire TFTP :
sudo mkdir -p /tftpbootsudo chmod -R 777 /tftpbootInstaller syslinux pour obtenir les fichiers nécessaires au démarrage PXE :
sudo apt install syslinux pxelinuxCopier les fichiers nécessaires :
xxxxxxxxxxsudo cp /usr/lib/PXELINUX/pxelinux.0 /tftpboot/sudo cp /usr/lib/syslinux/modules/bios/*.c32 /tftpboot/ Créer le répertoire de configuration PXE :
sudo mkdir -p /tftpboot/pxelinux.cfgCréer un fichier de configuration par défaut :
sudo nano /tftpboot/pxelinux.cfg/defaultAjouter un menu de base :
xxxxxxxxxxDEFAULT menu.c32PROMPT 0MENU TITLE PXE Boot MenuTIMEOUT 300
LABEL local MENU LABEL Boot from local drive LOCALBOOT 0
LABEL debian MENU LABEL Install Debian KERNEL debian-installer/amd64/linux APPEND initrd=debian-installer/amd64/initrd.gzPour cet exemple, nous utiliserons Debian :
Télécharger les fichiers d'installation netboot :
cd /tftpbootsudo wget http://ftp.debian.org/debian/dists/stable/main/installer-amd64/current/images/netboot/netboot.tar.gzsudo tar xzf netboot.tar.gzsudo rm netboot.tar.gzRedémarrer le service dnsmasq :
sudo systemctl restart dnsmasqVérifier que le service fonctionne correctement :
sudo systemctl status dnsmasqConfigurer un ordinateur client pour démarrer via PXE (généralement dans les paramètres BIOS/UEFI).
Démarrer l'ordinateur client. Il devrait recevoir une adresse IP de dnsmasq et afficher le menu PXE.
Sélectionner l'option d'installation de Debian pour tester le démarrage PXE.
Rendez-vous à l'adresse suivante : https://store.lacapsule.org/ISO/TOOLBOX-amd64.iso
Une fois le téléchargement terminé, monter l'iso. Dans notre cas, il se trouve dans les Téléchargements :
Créer un répertoire qui servira de point de montage pour l'image ISO :
sudo mkdir /mnt/isoUtiliser la commande mount avec les options appropriées pour monter l'image ISO :
xxxxxxxxxxsudo mount -t iso9660 -o loop '/home/$USER/Téléchargements/TOOLBOX-amd64.iso' /mnt/iso Une fois l'image ISO montée, on peut accéder à son contenu en naviguant vers le point de montage :
cd /mnt/isols -laDans cette image iso se trouvent 5 dossiers dont un caché, symbolisé par un point devant son nom :
xxxxxxxxxxtotal 16drwxr-xr-x 1 lacapsule lacapsule 2048 déc. 30 18:07 ./drwxr-x---+ 3 root root 4096 déc. 31 09:14 ../drwxr-xr-x 1 lacapsule lacapsule 2048 déc. 30 17:57 boot/drwxr-xr-x 1 lacapsule lacapsule 2048 déc. 30 18:07 .disk/drwxr-xr-x 1 lacapsule lacapsule 2048 déc. 30 17:57 efi/drwxr-xr-x 1 lacapsule lacapsule 2048 déc. 30 17:58 isolinux/drwxr-xr-x 1 lacapsule lacapsule 2048 déc. 30 18:01 live/Créer un répertoire TOOLBOX à la racine du répértoire tftpboot qui contiendra les fichiers necessaire au démarage du système
sudo mkdir /tftpboot/TOOLBOX Il faudra copier l'intégralité des répertoires contenus dans notre ISO vers notre répertoire TOOLBOX
sudo cp -r /mnt/iso/* /tftpboot/TOOLBOXNous pouvons à présent ajouter une entrée de menu dans notre fichier default afin de permettre un boot sur le système contenu dans l'iso.
Lorsque c'est terminé il faudra démonter l'ISO :
sudo umount /mnt/isoInstaller le serveur NFS :
sudo apt install nfs-kernel-serverConfigurer le partage NFS :
sudo nano /etc/exportsAjouter la ligne suivante :
/tftpboot *(ro,sync,no_subtree_check)Redémarrer le service NFS :
sudo systemctl restart nfs-kernel-server && sudo exportfs -aOn peut à présent envoyer de gros fichiers tel qu'un filesystem.squashfs via le réseau afin de démarrer dessus en live.
Ouvrir le fichier de configuration du menu :
sudo nano /tftpboot/pxelinux.cfg/defaultModifier les options pour inclure le partage NFS vers notre nouvelle distribution :
xxxxxxxxxxDEFAULT menu.c32PROMPT 0MENU TITLE PXE Boot MenuTIMEOUT 300
LABEL local MENU LABEL Boot from local drive LOCALBOOT 0 LABEL debian MENU LABEL Install Debian KERNEL debian-installer/amd64/linux APPEND initrd=debian-installer/amd64/initrd.gz
# Modification du menu de Debian à notre distribution TOOLBOXLABEL TOOLBOX : Reconditionnement KERNEL TOOLBOX/live/vmlinuz-5.4.0-72-generic APPEND boot=live ksdevice=bootif rootfstype=nfs netboot=nfs nfsroot=192.168.1.127:/tftpboot/TOOLBOX initrd=TOOLBOX/live/initrd.img-5.4.0-72-generic ip=dhcp nosplash -- TEXT HELP Une distribution faite pour le reconditionnement informatique ENDTEXTIl sera nécessaire de modifier l'adresse IP 192.168.1.127 par celle de notre choix.
Pour savoir quelle IP nous devons utiliser, nous devons utiliser celle qui nous est retournée par la commande :
ip -4 addr show $(ip route show default | awk '/default/ {print $5}') | grep -oP '(?<=inet\s)\d+(\.\d+){3}'Pour permettre aux clients ayant des adresses IP en 10.x.x.x d'accéder au réseau 192.168.1.x, on doit configurer le routage sur notre serveur PXE :
Activer le forwarding IP :
xxxxxxxxxxsudo sysctl -w net.ipv4.ip_forward=1Ajoutez une règle de NAT (Network Address Translation) :
xxxxxxxxxxsudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADES'assurer que ces modifications persistent après un redémarrage en les ajoutant à /etc/sysctl.conf et en sauvegardant les règles iptables.
Configurer l'interface réseau de notre serveur PXE pour qu'elle ait une adresse IP dans les deux plages :
Éditer le fichier /etc/network/interfaces :
xxxxxxxxxxsudo nano /etc/network/interfacesAjouter la configuration suivante :
xxxxxxxxxxauto eth0iface eth0 inet static address 192.168.1.x # Adresse dans le réseau 192.168.1.x netmask 255.255.255.0 gateway 192.168.1.1
iface eth0 inet static address 10.0.0.1 # Adresse dans le réseau 10.x.x.x netmask 255.255.255.0Après avoir effectué ces modifications, redémarrer les services concernés :
xxxxxxxxxxsudo systemctl restart networkingsudo systemctl restart dnsmasqCette configuration permettra à notre serveur PXE de distribuer des adresses IP dans la plage 10.x.x.x tout en permettant l'accès au réseau 192.168.1.x. Il faut s'assurer d'adapter les adresses IP et les interfaces réseau en fonction de notre configuration spécifique
Le message d'erreur indique que le service networking n'existe pas sur le système. Cela peut être dû à plusieurs raisons :
On utilise une version récente de Debian qui a migré vers systemd-networkd.
Le paquet ifupdown, qui fournit le service networking, n'est pas installé.
Le service a été désactivé ou supprimé manuellement.
Utiliser systemd-networkd à la place :
sudo systemctl enable systemd-networkdsudo systemctl start systemd-networkdIl est possible de personnaliser le menu du PXE en ajustant les couleurs à notre guise. Pour ce faire, il faudra ajouter des éléments au fichier /tftpboot/pxelinux.cfg/default.
Warning
Vous ne pouvez pas utiliser exactement le même système de personnalisation du menu avec menu.c32 et vesamenu.c32.
menu.c32 utilise uniquement des codes ANSI pour définir les couleurs (par exemple 37;40 pour texte blanc sur fond noir).
vesamenu.c32 utilise à la fois des codes ANSI et des codes hexadécimaux au format ARGB pour une personnalisation plus fine des couleurs.
vesamenu.c32 offre des options de personnalisation supplémentaires, comme la possibilité d'ajouter une image de fond.
Pour rappel, l'utilisation d'une ou l'autre des solutions est déclarée en début de fichier comme suit :
xxxxxxxxxx# Interface visuelle:PROMPT 0DEFAULT vesamenu.c32Exemple d'une personnalisation de menu.c32 :
xxxxxxxxxxmenu color screen 37;40menu color border 30;44menu color title 1;36;44menu color unsel 37;44menu color hotkey 1;37;44menu color sel 7;37;40menu color hotsel 1;7;37;40menu color disabled 1;30;44menu color scrollbar 30;44menu color tabmsg 31;40menu color cmdmark 1;36;40menu color cmdline 37;40menu color pwdborder 30;47menu color pwdheader 31;47menu color pwdentry 30;47menu color timeout_msg 37;40menu color timeout 1;37;40menu color help 37;40menu color msg07 37;40Exemple d'une personnalisation de vesamenu.c32 :
xxxxxxxxxx menu color screen 37;40 #000003 #000003 std menu color border 30;44 #000003 #000003 std menu color title 1;36;44 #2b2b2b #000003 std menu color unsel 37;44 #ffffff #000003 std menu color hotkey 1;37;44 #2b2b2b #000003 std menu color sel 7;37;40 #000003 #ffffff all menu color hotsel 1;7;37;40 #2b2b2b #000003 all menu color disabled 1;30;44 #2b2b2b #000003 std menu color scrollbar 30;44 #2b2b2b #000003 std menu color tabmsg 31;40 #2b2b2b #000003 std menu color cmdmark 1;36;40 #2b2b2b #000003 std menu color cmdline 37;40 #2b2b2b #000003 std menu color pwdborder 30;47 #2b2b2b #000003 std menu color pwdheader 31;47 #2b2b2b #000003 std menu color pwdentry 30;47 #2b2b2b #000003 std menu color timeout_msg 37;40 #2b2b2b #000003 std menu color timeout 1;37;40 #2b2b2b #000003 std menu color help 37;40 #2b2b2b #000003 std menu color msg07 37;40 #2b2b2b #000003 stdxxxxxxxxxxmenu color [élément] [attributs_texte] [couleur_premier_plan] [couleur_arrière_plan] [style]screen : Fond d'écran du menu
border : Bordure du menu
title : Titre du menu
unsel : Éléments non sélectionnés
hotkey : Touches de raccourci
sel : Élément sélectionné
hotsel : Touche de raccourci de l'élément sélectionné
disabled : Éléments désactivés
scrollbar : Barre de défilement
tabmsg : Message de tabulation
cmdmark : Marqueur de commande
cmdline : Ligne de commande
pwdborder : Bordure du champ de mot de passe
pwdheader : En-tête du champ de mot de passe
pwdentry : Saisie du mot de passe
timeout_msg : Message de temporisation
timeout : Compteur de temporisation
help : Texte d'aide
msg07 : Message spécifique (peut varier)
Format : [luminosité];[couleur_texte];[couleur_fond]
Luminosité : 0 (normal), 1 (brillant)
Couleur texte/fond : 30-37 (texte), 40-47 (fond)
30/40 : Noir
31/41 : Rouge
32/42 : Vert
33/43 : Jaune
34/44 : Bleu
35/45 : Magenta
36/46 : Cyan
37/47 : Blanc
Format : #RRGGBB
RR : Rouge (00-FF)
GG : Vert (00-FF)
BB : Bleu (00-FF)
std : Standard
all : Applique le style à tout l'élément
xxxxxxxxxxtextmenu color screen 37;40 #000003 #000003 std# Fond d'écran : texte blanc sur fond noir, couleurs très sombres
menu color border 30;44 #000003 #000003 std# Bordure : texte noir sur fond bleu, couleurs très sombres
menu color title 1;36;44 #2b2b2b #000003 std# Titre : texte cyan brillant sur fond bleu, gris foncé sur noir
menu color sel 7;37;40 #000003 #ffffff all# Élément sélectionné : texte blanc inversé sur fond noir, noir sur blancChoisir une palette de couleurs cohérente pour une meilleure lisibilité.
Utiliser des contrastes pour mettre en évidence les éléments importants.
Tester différentes combinaisons pour trouver ce qui convient le mieux à notre environnement.
Ne pas hésiter à ajuster les couleurs hexadécimales pour des nuances plus précises.
Garder à l'esprit l'accessibilité pour les utilisateurs ayant des problèmes de vision.
GRUB2 offre une alternative à PXELINUX pour configurer un environnement de démarrage PXE avec un menu personnalisé.
Il sera nécessaire d'installer GRUB2 sur le serveur comme suit :
sudo apt install grub2-tools-efi grub2-pc-modulesIl faudra aussi configurer le serveur TFTP en utilisant la commande grub2-mknetdir pour créer le répertoire de démarrage réseau GRUB2 dans la racine TFTP.
Pour un système BIOS :
xxxxxxxxxxgrub2-mknetdir --net-directory=/tftpboot --subdir=/boot/grub -d /usr/lib/grub/i386-pcPour un système UEFI :
xxxxxxxxxxgrub2-mknetdir --net-directory=/tftpboot --subdir=/boot/grub -d /usr/lib/grub/x86_64-efiDans ces commandes :
/tftpboot est le répertoire racine du serveur TFTP.
/boot/grub est le sous-répertoire où les fichiers GRUB2 seront placés.
Le paramètre -d spécifie le répertoire contenant les modules GRUB2 pour l'architecture cible.
Il sera aussi impératif de modifier la configuration de dnsmasq en ouvrant le fichier dans un éditeur :
sudo nano /etc/dnsmasq.confInsérer les lignes suivantes :
dhcp-match=set:efi-x86_64,option:client-arch,7dhcp-boot=tag:efi-x86_64,boot/grub2/x86_64-efi/core.efidhcp-boot=tag:!efi-x86_64,boot/grub2/i386-pc/core.0Pour finir, il est possible de personnaliser totalement son menu comme dans l'exemple suivant :