Configuration d'un serveur PXE pour le déploiement automatisé de systèmes Linux

Serveur PXE :


Adresse IP : 192.168.0.25
Masque de sous-réseau : 255.255.255.0
Passerelle : 192.168.0.254
Système d'exploitation : CentOS 7.9

Distributions prises en charge :

  • CentOS 7.9
  • Rocky Linux 8
  • Rocky Linux 9
  • openEuler 22.03
  • Kylin V10 SP3
  1. Installation des paquets requis

Installer les dépôts et les outils nécessaires :


yum install -y epel-release
yum install -y dhcp tftp-server xinetd syslinux httpd

Activer les services au démarrage :


systemctl enable dhcpd xinetd httpd
  1. Organisation du stockage

Créer la structure de répertoires :


mkdir -p /data/pxe/{os,ks,scripts}

Vérifier avec tree /data/pxe, ce qui devrait afficher :


/data/pxe
├── ks
├── os
└── scripts
  1. Configuration du serveur HTTP

Créer un lien symbolique vers le document root d’Apache :


ln -s /data/pxe /var/www/html/pxe

Redémarrer Apache et valider l’accès :


systemctl restart httpd
curl http://192.168.0.25/pxe/

La réponse attendue est Index of /pxe.

  1. Configuration du service DHCP

Modifier /etc/dhcp/dhcpd.conf :


default-lease-time 600;
max-lease-time 7200;
authoritative;

subnet 192.168.0.0 netmask 255.255.255.0 {
    range 192.168.0.100 192.168.0.200;
    option routers 192.168.0.254;
    option subnet-mask 255.255.255.0;
    option domain-name-servers 192.168.0.25;
    next-server 192.168.0.25;
    filename "pxelinux.0";
}

Appliquer la configuration :


systemctl restart dhcpd
  1. Configuration du service TFTP

Activer TFTP dans /etc/xinetd.d/tftp :


disable = no

Préparer le répertoire racine TFTP :


mkdir -p /var/lib/tftpboot/pxelinux.cfg
cp /usr/share/syslinux/{pxelinux.0,menu.c32,ldlinux.c32} /var/lib/tftpboot/

Redémarrer xinetd :


systemctl restart xinetd

Vérifier que le port UDP 69 est ouvert :


netstat -lunp | grep :69
  1. Montage des images ISO

Pour chaque distribution, monter l’ISO et copier son contenu :

CentOS 7.9


mkdir -p /data/pxe/os/CentOS-7-x86_64-Minimal-2009
mount -o loop CentOS-7-x86_64-Minimal-2009.iso /mnt
cp -r /mnt/* /data/pxe/os/CentOS-7-x86_64-Minimal-2009/
umount /mnt

Kylin V10 SP3


mkdir -p /data/pxe/os/Kylin-Server-V10-SP3-2403-Release-20240426-X86_64
mount -o loop Kylin-Server-V10-SP3-2403-Release-20240426-X86_64.iso /mnt
cp -r /mnt/* /data/pxe/os/Kylin-Server-V10-SP3-2403-Release-20240426-X86_64/
umount /mnt
  1. Copie des noyaux PXE

Extraire les fichiers vmlinuz et initrd.img vers TFTP :

CentOS 7.9


mkdir -p /var/lib/tftpboot/CentOS-7-x86_64-Minimal-2009
cp /data/pxe/os/CentOS-7-x86_64-Minimal-2009/images/pxeboot/{vmlinuz,initrd.img} \
   /var/lib/tftpboot/CentOS-7-x86_64-Minimal-2009/

Kylin


mkdir -p /var/lib/tftpboot/Kylin-Server-V10-SP3-2403-Release-20240426-X86_64
cp /data/pxe/os/Kylin-Server-V10-SP3-2403-Release-20240426-X86_64/images/pxeboot/{vmlinuz,initrd.img} \
   /var/lib/tftpboot/Kylin-Server-V10-SP3-2403-Release-20240426-X86_64/
  1. Menu PXE personnalisé

Créer /var/lib/tftpboot/pxelinux.cfg/default :


DEFAULT menu.c32
MENU TITLE Menu d'installation PXE

LABEL centos7
MENU LABEL Installer CentOS 7.9 (Minimal)
KERNEL CentOS-7-x86_64-Minimal-2009/vmlinuz
APPEND initrd=CentOS-7-x86_64-Minimal-2009/initrd.img \
       inst.repo=http://192.168.0.25/pxe/os/CentOS-7-x86_64-Minimal-2009 \
       ks=http://192.168.0.25/pxe/ks/CentOS-7-x86_64-Minimal-2009.cfg

LABEL kylin
MENU LABEL Installer Kylin V10 SP3
KERNEL Kylin-Server-V10-SP3-2403-Release-20240426-X86_64/vmlinuz
APPEND initrd=Kylin-Server-V10-SP3-2403-Release-20240426-X86_64/initrd.img \
       inst.repo=http://192.168.0.25/pxe/os/Kylin-Server-V10-SP3-2403-Release-20240426-X86_64 \
       inst.ks=http://192.168.0.25/pxe/ks/Kylin-Server-V10-SP3-2403-Release-20240426-X86_64.cfg
  1. Fichiers Kickstart

Exemple pour CentOS 7 (/data/pxe/ks/CentOS-7-x86_64-Minimal-2009.cfg) :


install
url --url=http://192.168.0.25/pxe/os/CentOS-7-x86_64-Minimal-2009
lang zh_CN.UTF-8
keyboard us
timezone Asia/Shanghai
rootpw test@123456
firewall --disabled
selinux --disabled
bootloader --location=mbr
clearpart --all --initlabel
autopart
reboot

%packages
@core
%end

%post
curl -s http://192.168.0.25/pxe/scripts/init.sh | bash
%end

Dupliquer ce fichier pour Kylin et ajuster l’URL du dépôt si nécessaire.

  1. Script post-installation

Créer /data/pxe/scripts/init.sh :


#!/bin/bash
timedatectl set-timezone Asia/Shanghai
systemctl enable chronyd
mkdir -p /root/.ssh
echo "ssh-rsa AAAA... votre_cle_publique" >> /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
systemctl restart sshd

Rendre exécutable :


chmod +x /data/pxe/scripts/init.sh
  1. Redémarrage des services


systemctl restart dhcpd xinetd httpd
  1. Installation côté client

Configurer le BIOS :

  • Mode de démarrage : Legacy BIOS
  • Périphérique de démarrage : Réseau (PXE)

Séquence d’installation :

  1. Obtention d’une adresse IP via DHCP

  2. Téléchargement du menu PXE

  3. Sélection du système à installer

  4. Installation automatique via Kickstart

  5. Exécution du script post-installation

  6. Redémarrage final

  7. Validaiton du fonctionnement


Surveiller les logs en temps réel :


journalctl -u dhcpd -f
tail -f /var/log/httpd/access_log
tail -f /var/log/messages

Vérifier l’accessibilité des ressources :


curl http://192.168.0.25/pxe/os/CentOS-7-x86_64-Minimal-2009/
curl http://192.168.0.25/pxe/ks/CentOS-7-x86_64-Minimal-2009.cfg

Une fois toutes les vérifications réussies, le déploiement en masse peut commencer.

Étiquettes: PXE DHCP TFTP kickstart CentOS

Publié le 26 septembre à 20h01