PXE

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Domaine Déploiement d'OS par le réseau (boot PXE + kickstart)
Paquets syslinux, tftp (ou tftp-server)
Contexte RHEL/CentOS (legacy 4/5, généralisable) — nécessite un serveur DHCP
Voir aussi Chkconfig (activer le service tftp)

Le boot PXE (Preboot eXecution Environment) permet de démarrer une machine directement depuis le réseau, sans CD ni clé USB, pour lancer une installation automatisée (kickstart). Il faut un serveur DHCP qui redirige les clients PXE vers un serveur TFTP fournissant le bootloader, ainsi qu'une source d'installation (FTP/HTTP/NFS) contenant les paquets et le fichier kickstart.

Prérequis

  • un serveur DHCP capable de répondre aux clients PXE
  • un serveur TFTP (paquet tftp / tftp-server)
  • le paquet syslinux (fournit le bootloader pxelinux.0)
  • une source d'installation accessible en FTP/HTTP/NFS, avec le(s) fichier(s) kickstart

Installation (méthode générique syslinux + tftp)

Copier le bootloader PXE fourni par syslinux dans la racine TFTP :

cp /usr/lib/syslinux/pxelinux.0 /tftpboot/pxelinux.0
mkdir /tftpboot/pxelinux.cfg

Créer /tftpboot/pxelinux.cfg/default avec un menu de boot :

PROMPT 1
DEFAULT 0
DISPLAY messages
TIMEOUT 60

label 0
LOCALBOOT 0

label 1
kernel rhel4/vmlinuz
append initrd=rhel4/initrd.img ks=ftp://192.168.0.10/kickstart/rhel4.cfg

label 2
kernel rhel5/vmlinuz
append initrd=rhel5/initrd.img ks=ftp://192.168.0.10/kickstart/rhel5.cfg

Chaque label correspond à un OS démarrable ; celui par défaut (DEFAULT 0) ci-dessus est LOCALBOOT (démarrage sur le disque local, sans rien installer).

DISPLAY messages référence un fichier texte /tftpboot/messages affiché au client pour expliquer les choix possibles, par exemple :

################################################################
Kickstart Installer
 - Taper 0 : pour booter localement
 - Taper 1 : pour installer RedHat 4 Enterprise ES Update 4
 - Taper 2 : pour installer RedHat 5 Enterprise Server Update 1
################################################################

Enfin, déposer le kernel et l'initrd (récupérés depuis un CD/ISO d'installation) au chemin référencé par chaque label :

mkdir /tftpboot/rhel4
cp /media/cdrom/images/pxeboot/vmlinuz /tftpboot/rhel4/
cp /media/cdrom/images/pxeboot/initrd.img /tftpboot/rhel4/

Activer le service TFTP

chkconfig tftp on

Voir Chkconfig pour le détail de la commande (sur systemd, l'équivalent est systemctl enable --now tftp, voir Systemctl).

Configuration DHCP

Ajouter à la configuration DHCP standard (voir DHCPD) un bloc dédié aux clients PXE, qui pointe vers le serveur TFTP et le bootloader :

allow booting;
allow bootp;
class "pxeclients" {
  match if substring(option vendor-class-identifier, 0, 9) = "PXEClient";
  next-server 192.168.0.10;   # IP du serveur TFTP
  filename "pxelinux.0";      # chemin du bootloader, relatif à la racine TFTP
}

Gestion des postes via system-config-netboot (variante RHEL4)

Sur RHEL4, le paquet system-config-netboot fournit les commandes pxeos/pxeboot pour gérer les images d'installation et les postes sans éditer directement les fichiers pxelinux.

Enregistrer une image d'installation

pxeos -a -i "Installation Redhat4-u4" -p "FTP" -D 0 -s 10.0.0.2 \
  -L /RHEL/RHEL4-U4-i386-ES/ -K ftp://10.0.0.2/KS/anaconda-ks.cfg install-rhel4-u4
  • -a : ajouter (-d pour supprimer)
  • -i : description affichée
  • -p : protocole d'installation (NFS/FTP/HTTP)
  • -s : adresse du serveur FTP/HTTP/NFS
  • -L : chemin des sources d'installation sur ce serveur
  • -K : chemin du fichier kickstart
  • dernier paramètre : identifiant de l'OS (libre), réutilisé par pxeboot
pxeos -d install-rhel4-u4     # supprimer l'image

Associer une machine (ou un réseau) à une image

pxeboot -a -O install-rhel4-u4 10.0.0.0    # ajouter
pxeboot -d 10.0.0.0                        # supprimer
  • -O : identifiant de l'OS, doit correspondre à celui déclaré via pxeos
  • dernier paramètre : IP du poste ou du réseau ciblé

Configuration DHCP associée

allow booting;
allow bootp;
class "pxeclients" {
  match if substring(option vendor-class-identifier, 0, 9) = "PXEClient";
  next-server 10.0.0.2;
  filename "linux-install/pxelinux.0";
}

10.0.0.2 est ici le serveur TFTP.

Voir aussi

  • DHCPD — configuration DHCP standard sur laquelle greffer le bloc PXE
  • Chkconfig — activer le service tftp au démarrage
  • Systemctl — équivalent systemd