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.

pxe_menu-principal.png

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.