fix(anaconda): use firmware-dependent disklabel for bootable installs

Replace hardcoded msdos disklabel with firmware-aware configuration:
- UEFI systems now use GPT, allowing ESP creation for grub-install EFI
- BIOS systems continue using MBR/msdos where core.img fits in post-MBR space

This fixes the bug where forcing msdos on UEFI prevented ESP creation,
resulting in non-bootable installations. The disklabel is now dynamically
generated by a %pre script that detects firmware type and writes the
appropriate clearpart command to /tmp/fws-clearpart.ks for inclusion.

Clarifies that clearpart --all only affects GUI-selected disks, addressing
multi-disk scenarios where users may not want all disks wiped.
This commit is contained in:
2026-07-08 02:03:54 +02:00
parent f3ffcb62b8
commit ae8140ccff
@@ -45,24 +45,25 @@
# zerombr : réinitialise toute table de partitions invalide
# (répond « oui » au lieu de bloquer sur un disque
# non reconnu).
# clearpart --all : supprime TOUTES les partitions de TOUS les disques.
# clearpart --all : supprime TOUTES les partitions des disques
# SÉLECTIONNÉS dans le GUI (l'utilisateur choisit le
# disque cible — les autres, ex. disques de jeux, ne
# sont pas touchés s'il ne les sélectionne pas).
# --initlabel : réécrit une étiquette de disque neuve.
# --disklabel=msdos : force une table MBR (et non GPT). CRUCIAL en BIOS :
# en BIOS+GPT, GRUB i386-pc exige une partition « BIOS
# Boot » (~1 Mo, type EF02) pour embarquer core.img,
# qu'Anaconda NE crée PAS avec « bootloader --disabled
# » → « this GPT partition label contains no BIOS Boot
# Partition; embedding won't be possible » →
# grub-install échoue. En MBR, core.img se loge dans
# l'espace post-MBR, aucune partition dédiée requise.
# ⚠ Ce choix vise le BIOS (cas VMware actuel). Pour l'UEFI il faudra du GPT
# (+ ESP) — à rendre dépendant du firmware (%pre) le jour où on cible l'UEFI.
# --disklabel : type de table CHOISI SELON LE FIRMWARE par le %pre
# plus bas (ne surtout PAS coder en dur) :
# • UEFI → gpt : l'ESP peut être créée → grub-install
# EFI fonctionne. Forcer « msdos » en UEFI empêchait
# l'ESP (→ install NON bootable) et réécrivait la
# table pour rien : c'est LE bug corrigé ici.
# • BIOS → msdos : core.img se loge dans l'espace
# post-MBR (pas de partition BIOS Boot EF02 requise,
# qu'Anaconda ne crée pas avec « bootloader --disabled »).
# L'utilisateur garde la main dans le GUI (il peut repasser en manuel), mais le
# DÉFAUT est désormais un disque net → réinstall fiable à chaque fois.
# ⚠ VM mono-disque : « --all » efface le seul disque, c'est voulu. Sur une
# machine multi-disques il faudrait cibler avec « --drives=sda ».
# DÉFAUT est un disque net → réinstall fiable à chaque fois.
zerombr
clearpart --all --initlabel --disklabel=msdos
# Table de partitions injectée par le %pre (GPT en UEFI, MBR en BIOS).
%include /tmp/fws-clearpart.ks
# --- Bootloader : géré à la main en %post ------------------------------------
# Anaconda lancerait « grub2-install » / « grub2-mkconfig » (binaires Fedora,
@@ -88,6 +89,23 @@ bootloader --disabled
# poweroff en plein install au 1er test réel).
# ============================================================================
# %pre — TABLE DE PARTITIONS SELON LE FIRMWARE
# Génère /tmp/fws-clearpart.ks (inclus dans la section commandes ci-dessus) :
# GPT en UEFI (→ ESP créable → grub-install EFI fonctionne), MBR/msdos en BIOS.
# Les scripts %pre s'exécutent AVANT l'application des commandes du kickstart,
# donc le %include voit toujours le fichier généré ici.
# ============================================================================
%pre --log=/tmp/fws-pre.log
if [ -d /sys/firmware/efi ]; then
disklabel=gpt
else
disklabel=msdos
fi
echo "clearpart --all --initlabel --disklabel=$disklabel" > /tmp/fws-clearpart.ks
%end
# ============================================================================
# %post --nochroot — s'exécute dans le LIVE, la cible montée sous /mnt/sysroot
# But : déposer dans la cible ce dont le %post chrooté aura besoin (DNS pour