Mise en place d'un serveur PXE - partie 2
Par Ehko le vendredi, mars 23 2018, 21:22 - Informatique - Lien permanent
Je continue ma suite de billet sur l'installation d'un serveur PXE. Le premier est disponible ici.
Maintenant que les principes généraux ont été expliqués, je vais rentrer dans la partie plus pratique : l'installation et la configuration du serveur.
Installation des paquets nécessaires :
apt-get install syslinux syslinux-efi dnsmasq pxelinux
Réglage de l'adresse IP du serveur
Le serveur utilise une adresse IP fixe pour pouvoir être adressé par les machines sur le réseau. Ce réglage peut soit être effectué sur l'interface du routeur, soit directement sur le serveur. Dans ce dernier, bien choisir une adresse IP en dehors de la plage DHCP pour éviter une double attribution.
Pour le réglage sur le serveur, éditer le fichier /etc/networks/interfaces et ajouter les lignes suivantes :
auto eth0 iface eth0 inet static address 192.168.0.200 netmask 255.255.255.0 gateway 192.168.0.1 dns-nameservers 9.9.9.9
Le nom de l'interface réseau (ici eth0) est à adapter en fonction de votre machine. De même qu'il vous faudra peut-être adapter l'adresse IP ou celle du routeur (qui est parfois en 192.168.0.254).
Création de l'arborescence :
L'arborescence est présentée dans le premier billet si vous voulez avoir une vue d'ensemble
- Création des répertoires.
mkdir -p /srv/tftp/boot/
mkdir -p /srv/tftp/bios/pxelinux.cfg/
mkdir -p /srv/tftp/efi32/pxelinux.cfg/
mkdir -p /srv/tftp/efi64/pxelinux.cfg/
- Création de liens symboliques vers le répertoire /srv/tftp/boot/ dans chacun des sous-répertoire dédiés à une architecture. De cette façon les images disque sont disponibles pour toutes les architectures sans être dupliquées.
cd /srv/tftp/bios && ln -s ../boot boot
cd /srv/tftp/efi32 && ln -s ../boot boot
cd /srv/tftp/efi64 && ln -s ../boot boot
Préparation des répertoires :
Il s'agit maintenant de remplir les répertoires avec les fichiers syslinux correspondant au bon système d'amorçage.
- Partie BIOS
ln -s /usr/lib/syslinux/modules/bios/* /srv/tftp/bios/
ln -s /usr/lib/PXELINUX/pxelinux.0 /srv/tftp/bios/
- Partie EFI64
ln -s /usr/lib/syslinux/modules/efi64/* /srv/tftp/efi64/
ln -s /usr/lib/SYSLINUX.EFI/efi64/syslinux.efi /srv/tftp/efi64/
- Partie EFI32
ln -s /usr/lib/syslinux/modules/efi32/* /srv/tftp/efi32/
ln -s /usr/lib/SYSLINUX.EFI/efi32/syslinux.efi /srv/tftp/efi32/
Configuration de dnsmasq :
La configuration se fait en modifiant le fichier /etc/dnsmasq.conf (par exemple avec nano)
nano /etc/dnsmasq.conf
Voici la configuration dnsmasq utilisée :
#=============================================================== # Configuration file for dnsmasq #=============================================================== # Disable DNS Server (DNS already provide by the router) port=0 # Enable DHCP logging log-dhcp # Respond to PXE requests for the specified network; # run as DHCP proxy dhcp-range=192.168.0.0,proxy,255.255.255.0 #Detect the client architecture dhcp-match=set:x86PC, option:client-arch, 0 #BIOS dhcp-match=set:UEFI32, option:client-arch, 6 #UEFI32 dhcp-match=set:UEFI64, option:client-arch, 7 #UEFI64 dhcp-match=set:UEFI64, option:client-arch, 9 #EBC ->use the same bootloader as UEFI64 # Load different PXE boot image depending on client architecture (when runing not as a proxy DHCP) dhcp-boot=tag:x86PC, bios/pxelinux dhcp-boot=tag:UEFI32, efi32/syslinux.efi dhcp-boot=tag:UEFI64, efi64/syslinux.efi # Load different PXE boot image depending on client architecture (when runing as a proxy DHCP) pxe-service=tag:x86PC, X86PC, "BIOS Network Boot", bios/pxelinux pxe-service=tag:UEFI32, BC_EFI, "UEFI32 Network Boot", efi32/syslinux.efi pxe-service=tag:UEFI64, X86-64_EFI, "UEFI64 Network Boot", efi64/syslinux.efi ## Activate TFTP and set the root directory enable-tftp tftp-root=/srv/tftp
Désactivation du DNS de dnsmasq :
Cette modification permet d'empêcher dnsmasq de se définir comme serveur DNS pour les machines démarrées via PXE. Cela permet d'utiliser le routeur comme serveur DNS, comme d'habitude.
nano /etc/default/dnsmasq
DNSMASQ_EXCEPT=lo
Redémarrage du service dnsmasq
On termine en redémarrant le service dnsmasq pour prendre en compte les modifications.
systemctl restart dnsmasq
Installation du serveur NFS
apt-get install nfs-kernel-server
Configuration du serveur NFS:
nano /etc/exports
Il faut ajouter la ligne suivante pour activer le partage sur le répertoire /srv/tftp/boot/.
/srv/tftp/boot 192.168.0.0/24(ro,async,no_root_squash,no_subtree_check)
Application des modifications :
exportfs -rav
Configuration pxelinux
PXELinux charge automatiquement le fichier nommé "default" et situé dans le répertoire "pxelinux.cfg". Si vous démarrez une machine BIOS, ce sera le fichier /srv/tftp/bios/pxelinux.cfg/default qui sera chargé et pour une machine UEFI64, ce sera le fichier /srv/tftp/efi64/pxelinux.cfg/default.
Sur notre serveur, nous utilisons ce fichier pour présenter à l'utilisateur un menu. Celui-ci liste tous les systèmes que nous avons mis en place.
Notre configuration est découpée en plusieurs fichiers regroupant les systèmes dans des catégories : linux mint, windows, utilitaires et autres systèmes. Nous utilisons également un fichier séparé pour la coloration et la mise en page, ainsi qu'une image de fond. Je vous ai mis en pièce jointe de ce billet de blog l'ensemble des fichiers de configuration que nous utilisons.
Attention ! Du fait que nous ayons abandonnés ce système pour nous tourner vers un serveur IPXE (billet explicatif ici), seuls les démarrages de Linux Mint et de ArchLinux ont été testés. Le chargement des isos de WinPE fonctionne également mais est particulièrement lent, du fait de l'utilisation du TFTP.
Préparation des images linux
Le kernel et le fichier d'initialisation de la RAM sont fournis par TFTP. Le reste des images disques GNU/Linux est envoyé par NFS afin d'augmenter la vitesse de transfert. De ce fait, il est nécessaire de décompresser les images disques et de changer les permissions pour qu'aussi bien le serveur TFTP que le serveur NFS puissent y accéder.
- Téléchargement de l'image disque par votre méthode favorite
- Décompression de l'image disque dans le répertoire adéquat. Exemple pour Linux Mint Cinammon 64-bit, avec l'iso dans le répertoire de téléchargement de l'utilisateur "user" :
cd /srv/tftp/boot/linux_mint/cinammon/64-bit/ && 7z x /home/user/Downloads/limuxmint-18.3-cinammon-64bit.iso
- Changement des permissions
chmod -R 775 /srv/tftp/boot/linux_mint/
Note : plutôt que de changer les permissions de manière bourrine comme montré au dessus, il est plus orthodoxe de créer un utilisateur pour chaque logiciel et un groupe commun. En attribuant les fichiers au groupe commun, tous peuvent donc fonctionner correctement et présenter les fichiers sans erreur.
Sources en vrac
Voici une liste de sources sur lesquels je me suis basé pour la mise en place du serveur. Cette liste n'est pas complète car je n'ai pas gardé trace de toutes mes lectures.
- https://manski.net/2016/09/pxe-server-on-existing-network-dhcp-proxy-on-ubuntu/
- https://www.it-connect.fr/installation-et-configuration-dun-serveur-pxe/
- https://blog.mister-muffin.de/2011/09/12/multiboot-live-systems-via-pxe/
- https://wiki.debian-fr.xyz/PXE_avec_support_EFI#Configuration_du_serveur_nfs
- https://wiki.archlinux.org/index.php/PXE
- https://wiki.archlinux.org/index.php/NFS