Fullmoon System

PXE et Kickstart : installation automatisée de Rocky Linux 9 en UEFI

EdwardMoon

Ce guide concerne les clients UEFI x86_64 qui récupèrent shim/GRUB signés et le noyau via PXE/TFTP, puis l'arborescence Rocky Linux et Kickstart par HTTP. UEFI HTTP Boot et le BIOS classique exigent d'autres fichiers et règles DHCP et ne sont pas couverts par cet exemple.

L'exemple utilise Rocky Linux 9.8. Le noyau, l'initrd et l'arborescence des paquets doivent appartenir à la même version. DHCP affecte tout le réseau : testez d'abord sur un VLAN isolé, sans conflit avec le DHCP de production.

Composants PXE et Kickstart

Composant Rôle Règle d'exploitation
DHCP Fournit l'IP, le fichier d'amorçage et le serveur de démarrage Ne pas concurrencer un DHCP existant faisant autorité
TFTP/PXE Transfère shim UEFI, GRUB, noyau et initrd Servir uniquement les petits fichiers d'amorçage
HTTP Arborescence d'installation et ks.cfg Journaux d'accès et exposition minimale
Kickstart Automatise les réponses de l'installateur Anaconda Validation, versionnement et secrets séparés

1. Vérifier l'ISO et préparer l'arborescence

# Télécharger d'abord l'ISO DVD officielle Rocky 9.8 x86_64 dans le répertoire actuel.
curl --fail --location --remote-name https://download.rockylinux.org/pub/rocky/9.8/isos/x86_64/CHECKSUM
test -f Rocky-9.8-x86_64-dvd.iso
sha256sum --check --ignore-missing CHECKSUM
# Poursuivre uniquement après un résultat OK pour cette ISO DVD exacte.

sudo dnf install -y httpd rsync dnsmasq tcpdump
sudo install -d -m 0755 /mnt/rocky9 /var/www/html/rocky/9.8
sudo mount -o loop,ro Rocky-9.8-x86_64-dvd.iso /mnt/rocky9
# La cible est une nouvelle arborescence 9.8 dédiée ; --delete peut supprimer les fichiers existants.
sudo rsync -aH --delete /mnt/rocky9/ /var/www/html/rocky/9.8/
sudo restorecon -RFv /var/www/html/rocky

Vérifiez que le CHECKSUM téléchargé depuis la source HTTPS officielle correspond à l'ISO DVD 9.8 exacte. Un résultat OK pour un autre fichier ne valide pas cette ISO. Si la politique d'approvisionnement exige les signatures, vérifiez aussi la signature Rocky avec une clé officielle de confiance. Montez l'ISO en lecture seule et conservez toute l'arborescence.

2. Configurer HTTP

Attribuez préalablement 192.0.2.10/24 à l'interface de laboratoire dédiée ens192 et placez sa connexion dans la zone internal de firewalld. Adaptez passerelle, DNS et interface au VLAN isolé. Avant d'activer les services, vérifiez que firewall-cmd --get-zone-of-interface=ens192 renvoie internal. Ne déplacez pas une interface de production vers cette zone de laboratoire.

sudo dnf install -y httpd
sudo systemctl enable --now httpd
sudo firewall-cmd --permanent --zone=internal --add-service=http
sudo firewall-cmd --reload

curl --fail --head http://192.0.2.10/rocky/9.8/.treeinfo
sudo journalctl -u httpd --since '-10 min' --no-pager

3. Installer les fichiers d'amorçage TFTP

Utilisez les fichiers UEFI signés de la même ISO DVD vérifiée. shim charge grubx64.efi depuis le même répertoire, puis GRUB charge le noyau et l'initrd correspondants. Ne démarrez pas de tftp.socket séparé : dnsmasq gérera UDP 69 à l'étape suivante.

sudo install -d -m 0755 /var/lib/tftpboot/rocky9
sudo install -m 0644 /mnt/rocky9/EFI/BOOT/BOOTX64.EFI /var/lib/tftpboot/shimx64.efi
sudo install -m 0644 /mnt/rocky9/EFI/BOOT/grubx64.efi /var/lib/tftpboot/grubx64.efi
sudo install -m 0644 /mnt/rocky9/images/pxeboot/vmlinuz /var/lib/tftpboot/rocky9/vmlinuz
sudo install -m 0644 /mnt/rocky9/images/pxeboot/initrd.img /var/lib/tftpboot/rocky9/initrd.img
sudo restorecon -RFv /var/lib/tftpboot
ls -l /var/lib/tftpboot/{shimx64.efi,grubx64.efi,rocky9/vmlinuz,rocky9/initrd.img}
Si les chemins sont absents ou si les noms de fichiers diffèrent sur le support, interrompez la copie et vérifiez l'architecture et le contenu de l'ISO. Avec Secure Boot, la chaîne de signatures de shim, GRUB et du noyau doit correspondre aux paramètres de confiance du firmware.

4. Configurer DHCP et TFTP

Enregistrez ce contenu dans /etc/dnsmasq.d/pxe.conf et recherchez les conflits avec la configuration dnsmasq existante. Traitez les architectures DHCP 7 et 9 comme UEFI x86_64. N'annoncez pas de fichiers aux autres architectures.

sudoedit /etc/dnsmasq.d/pxe.conf

Cette configuration dnsmasq est destinée à un VLAN de laboratoire dédié. Si un DHCP de production existe, ne l'appliquez pas : demandez à son administrateur de configurer bootfile et next-server selon l'architecture.

port=0
interface=ens192
bind-interfaces
dhcp-range=192.0.2.100,192.0.2.180,255.255.255.0,12h
dhcp-option=3,192.0.2.1
dhcp-option=6,192.0.2.53

enable-tftp
tftp-root=/var/lib/tftpboot
dhcp-match=set:efi64,option:client-arch,7
dhcp-match=set:efi64,option:client-arch,9
dhcp-boot=tag:efi64,shimx64.efi
log-dhcp
sudo dnsmasq --test
sudo systemctl enable --now dnsmasq
sudo firewall-cmd --permanent --zone=internal --add-service=dhcp
sudo firewall-cmd --permanent --zone=internal --add-service=tftp
sudo firewall-cmd --reload
sudo journalctl -u dnsmasq -f

5. Créer le menu de démarrage

Menu GRUB UEFI

Enregistrez ce menu dans /var/lib/tftpboot/grub.cfg, à la racine TFTP. Lors des tests, examinez les journaux dnsmasq ou les captures pour connaître le chemin réellement demandé par GRUB.

sudoedit /var/lib/tftpboot/grub.cfg
sudo restorecon -RFv /var/lib/tftpboot
set timeout=5

menuentry 'Install Rocky Linux 9.8 with Kickstart' {
    linuxefi /rocky9/vmlinuz ip=dhcp       inst.repo=http://192.0.2.10/rocky/9.8/       inst.ks=http://192.0.2.10/ks/rocky9.cfg
    initrdefi /rocky9/initrd.img
}

Comparez les commandes GRUB à la véritable configuration du support. Certaines combinaisons firmware/GRUB utilisent linux et initrd : testez d'abord le démarrage sur une VM du même type.

6. Écrire un Kickstart au moindre privilège

Enregistrez l'exemple dans /var/www/html/ks/rocky9.cfg. Remplacez le hachage du mot de passe opsadmin par un véritable hachage et restreignez HTTP au VLAN d'installation. Conserver la valeur fictive empêchera une connexion administrateur normale.

sudo install -d -m 0755 /var/www/html/ks
sudoedit /var/www/html/ks/rocky9.cfg
text
url --url=http://192.0.2.10/rocky/9.8/
lang ko_KR.UTF-8
keyboard kr
timezone Asia/Seoul --utc
network --bootproto=dhcp --device=link --activate

rootpw --lock
user --name=opsadmin --groups=wheel --iscrypted   --password='$6$REPLACE_WITH_A_REAL_HASH'

ignoredisk --only-use=sda
zerombr
clearpart --all --initlabel --drives=sda
autopart --type=lvm
selinux --enforcing
firewall --enabled --service=ssh
reboot

%packages
@^minimal-environment
chrony
%end

%post --log=/root/ks-post.log
systemctl enable chronyd
%end
clearpart --all efface les données des disques sélectionnés. Vérifiez les noms et les WWN des disques pour chaque modèle de serveur et testez d'abord sur une VM vide. Remplacez le mot de passe fictif par un véritable hachage robuste, sans exposer de secrets sur un serveur web public ou dans Git.

7. Valider la syntaxe Kickstart

sudo dnf install -y pykickstart
ksvalidator -v RHEL9 /var/www/html/ks/rocky9.cfg

curl --fail http://192.0.2.10/ks/rocky9.cfg | head
curl --fail http://192.0.2.10/rocky/9.8/.treeinfo | head
sudo restorecon -RFv /var/www/html/ks

8. Tester sur une VM UEFI

  1. Créer une VM UEFI avec disque vide sur le VLAN dédié.
  2. Capturer les paquets pour vérifier l'adresse, next-server et bootfile de l'offre DHCP.
  3. Vérifier la réponse des emplacements inst.repo et inst.ks indiqués dans les arguments du noyau.
  4. Observer ensemble les journaux Anaconda et les accès HTTP pendant l'installation.
  5. Après redémarrage, vérifier SELinux, le pare-feu, l'heure et le compte d'administration.
sudo tcpdump -ni ens192 -vvv 'port 67 or port 68 or port 69'
sudo tail -f /var/log/httpd/access_log /var/log/httpd/error_log

# Vérifier depuis le shell de l'environnement d'installation
ip address
cat /proc/cmdline
curl --fail http://192.0.2.10/ks/rocky9.cfg
journalctl -b --no-pager | tail -200

9. Vérifier le système installé

cat /etc/rocky-release
uname -r
sudo dnf upgrade --refresh -y
sudo systemctl --failed --no-pager
getenforce
sudo firewall-cmd --list-all
chronyc tracking
sudo journalctl -p err -b --no-pager

Considérez l'installation comme un résultat de construction reproductible. Conservez ensemble la somme de l'ISO, la version Kickstart, les empreintes d'amorçage, le type de firmware testé et les traces des installations réussies.

Sécurité et exploitation

  • Restreindre l'URL Kickstart au VLAN d'installation nécessaire.
  • Ne pas insérer de jetons d'inscription ou de clés privées SSH dans le fichier.
  • Surveiller les volumes inhabituels de requêtes dans les journaux HTTP.
  • Réserver TFTP à l'amorçage et servir les paquets par HTTP.
  • Examiner les changements DHCP de production et préparer le retour arrière.
  • Bloquer PXE hors des fenêtres d'installation actives.

Ressources officielles et articles associés

Conclusion

PXE et Kickstart réunissent DHCP, distribution des fichiers d'amorçage, arborescence HTTP et instructions validées. Pour cet exemple UEFI x86_64, vérifiez les chemins PXE/TFTP et HTTP, puis validez la somme ISO, la syntaxe, l'installation sur VM vide et la sécurité après installation avant de passer à la production.