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
- 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
- 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
- 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.
- 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
- 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
- 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
- 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/
- 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
- 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.
- 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
- Redémarrage des services
systemctl restart dhcpd xinetd httpd
- 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 :
-
Obtention d’une adresse IP via DHCP
-
Téléchargement du menu PXE
-
Sélection du système à installer
-
Installation automatique via Kickstart
-
Exécution du script post-installation
-
Redémarrage final
-
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.