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:
@@ -45,24 +45,25 @@
|
|||||||
# zerombr : réinitialise toute table de partitions invalide
|
# zerombr : réinitialise toute table de partitions invalide
|
||||||
# (répond « oui » au lieu de bloquer sur un disque
|
# (répond « oui » au lieu de bloquer sur un disque
|
||||||
# non reconnu).
|
# 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.
|
# --initlabel : réécrit une étiquette de disque neuve.
|
||||||
# --disklabel=msdos : force une table MBR (et non GPT). CRUCIAL en BIOS :
|
# --disklabel : type de table CHOISI SELON LE FIRMWARE par le %pre
|
||||||
# en BIOS+GPT, GRUB i386-pc exige une partition « BIOS
|
# plus bas (ne surtout PAS coder en dur) :
|
||||||
# Boot » (~1 Mo, type EF02) pour embarquer core.img,
|
# • UEFI → gpt : l'ESP peut être créée → grub-install
|
||||||
# qu'Anaconda NE crée PAS avec « bootloader --disabled
|
# EFI fonctionne. Forcer « msdos » en UEFI empêchait
|
||||||
# » → « this GPT partition label contains no BIOS Boot
|
# l'ESP (→ install NON bootable) et réécrivait la
|
||||||
# Partition; embedding won't be possible » →
|
# table pour rien : c'est LE bug corrigé ici.
|
||||||
# grub-install échoue. En MBR, core.img se loge dans
|
# • BIOS → msdos : core.img se loge dans l'espace
|
||||||
# l'espace post-MBR, aucune partition dédiée requise.
|
# post-MBR (pas de partition BIOS Boot EF02 requise,
|
||||||
# ⚠ Ce choix vise le BIOS (cas VMware actuel). Pour l'UEFI il faudra du GPT
|
# qu'Anaconda ne crée pas avec « bootloader --disabled »).
|
||||||
# (+ ESP) — à rendre dépendant du firmware (%pre) le jour où on cible l'UEFI.
|
|
||||||
# L'utilisateur garde la main dans le GUI (il peut repasser en manuel), mais le
|
# 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.
|
# DÉFAUT est 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 ».
|
|
||||||
zerombr
|
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 ------------------------------------
|
# --- Bootloader : géré à la main en %post ------------------------------------
|
||||||
# Anaconda lancerait « grub2-install » / « grub2-mkconfig » (binaires Fedora,
|
# Anaconda lancerait « grub2-install » / « grub2-mkconfig » (binaires Fedora,
|
||||||
@@ -88,6 +89,23 @@ bootloader --disabled
|
|||||||
# poweroff en plein install au 1er test réel).
|
# 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
|
# %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
|
# But : déposer dans la cible ce dont le %post chrooté aura besoin (DNS pour
|
||||||
|
|||||||
Reference in New Issue
Block a user