fix: Root-Partition auf UEFI nicht mehr zusaetzlich $bootable{ } markieren

Real beim Testen entdeckt: nach einem nachweislich korrekten Klick auf
'Jetzt installieren' (Debug-Log erreichte sogar 'grub-installer/bootdev
seen') sprang der Installer immer wieder zurueck auf dieselbe
Partitionierungsseite - ausgeloest durch die wiederholt gestellte
Debconf-Frage 'ubiquity/partman-rebuild-cache'
(/lib/partman/update.d/99signal_ubiquity), die ubi-partman.py's
rebuild_cache() aufruft.

Vergleich mit der Original-Recipe, aus der unsere ESP-Stanza kopiert
wurde (/usr/lib/partman/recipes-amd64-efi/30atomic): dort traegt NUR die
ESP-Stanza die Boot-Kennzeichnung (method{ efi }), die Root-Partition
bekommt kein zusaetzliches $bootable{ }. Unser Rezept setzte
$bootable{ } bisher unbedingt auf Root, unabhaengig von EFI/BIOS -
moeglicherweise die Ursache der wiederholten Neubewertung durch partman.

Root_extra_flags jetzt bedingt: nur im BIOS-Zweig (wo keine ESP existiert,
die diese Rolle uebernehmen koennte) weiterhin $bootable{ } gesetzt.
Noch nicht live verifiziert - naechster Schritt.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Thomas Stallinger 2026-08-29 16:57:43 +02:00
parent 124594e2ae
commit 2e68dbea71

View File

@ -156,6 +156,7 @@ _tuxflotte_render_partman_recipe() {
local size_mb
local esp_mb=0
local bios_grub_mb=0
local root_extra_flags
scheme="$(jq --raw-output '.scheme // "single"' <<<"${partitioning_json}")"
@ -179,6 +180,25 @@ _tuxflotte_render_partman_recipe() {
esp_mb=512
disk_size_mb="$(( disk_size_mb - esp_mb ))"
recipe_body="${esp_mb} ${esp_mb} ${esp_mb} fat32 \$reusemethod{ } \$primary{ } method{ efi } format{ } . "
# Root NICHT zusaetzlich $bootable{ } markieren wie im BIOS-Zweig
# unten (real beim Testen entdeckt, 29.08.2026): auf UEFI traegt
# bereits die ESP-Stanza oben die eigentliche Boot-Kennzeichnung
# (method{ efi }) - das im Original-Rezept
# /usr/lib/partman/recipes-amd64-efi/30atomic (Quelle der
# ESP-Stanza) uebernommene Wurzel-Partitionsschema markiert die
# Root-Partition dort ebenfalls NICHT als bootable. Ein
# zusaetzliches $bootable{ } auf der Root-Partition scheint partman
# in einen Zustand zu bringen, den es nach dem Commit staendig neu
# bewerten will: der Installer klickte "Jetzt installieren"
# nachweislich korrekt (Debug-Log erreichte sogar
# "grub-installer/bootdev seen"), sprang aber danach immer wieder
# zurueck auf dieselbe Partitionierungsseite (ubi-partman.py:
# rebuild_cache(), ausgeloest durch die wiederholt gestellte
# Debconf-Frage "ubiquity/partman-rebuild-cache" aus
# /lib/partman/update.d/99signal_ubiquity). Noch nicht abschliessend
# verifiziert, ob dies die alleinige Ursache ist - siehe
# ADR-0023-Nachtrag.
root_extra_flags='$primary{ }'
else
# Analoges Pendant fuer reinen BIOS-Betrieb: partman legt den
# Datentraeger auch ohne EFI offenbar als GPT an (real beim Testen
@ -197,6 +217,10 @@ _tuxflotte_render_partman_recipe() {
bios_grub_mb=1
disk_size_mb="$(( disk_size_mb - bios_grub_mb ))"
recipe_body="${bios_grub_mb} ${bios_grub_mb} ${bios_grub_mb} free \$iflabel{ gpt } \$reusemethod{ } method{ biosgrub } . "
# Im BIOS-Zweig (anders als EFI oben) bleibt $bootable{ } auf der
# Root-Partition noetig - hier gibt es keine ESP, die diese Rolle
# uebernimmt.
root_extra_flags='$primary{ } $bootable{ }'
fi
case "${scheme}" in
@ -205,7 +229,7 @@ _tuxflotte_render_partman_recipe() {
[[ "${root_mb}" -ge 2048 ]] ||
{ backend_fatal "Zieldatenträger ist zu klein (${disk_size_mb} MB)."; return 1; }
recipe_body="${recipe_body}$(_tuxflotte_partman_stanza "${root_mb}" "${root_filesystem}" "/" '$primary{ } $bootable{ }')"
recipe_body="${recipe_body}$(_tuxflotte_partman_stanza "${root_mb}" "${root_filesystem}" "/" "${root_extra_flags}")"
;;
custom)
extra_count="$(jq '.extra_partitions | length' <<<"${partitioning_json}")"
@ -236,7 +260,7 @@ _tuxflotte_render_partman_recipe() {
[[ "${root_mb}" -ge 2048 ]] ||
{ backend_fatal "Root-Partition wäre bei dieser Aufteilung zu klein."; return 1; }
recipe_body="${recipe_body}$(_tuxflotte_partman_stanza "${root_mb}" "${root_filesystem}" "/" '$primary{ } $bootable{ }')"
recipe_body="${recipe_body}$(_tuxflotte_partman_stanza "${root_mb}" "${root_filesystem}" "/" "${root_extra_flags}")"
for ((i = 0; i < extra_count; i++)); do
mountpoint="$(jq --raw-output ".extra_partitions[${i}].mountpoint" <<<"${partitioning_json}")"