diff --git a/backends/mint-image/backend.sh b/backends/mint-image/backend.sh index f48c038..5def95f 100644 --- a/backends/mint-image/backend.sh +++ b/backends/mint-image/backend.sh @@ -52,14 +52,43 @@ backend_fatal() { return 1 } +# Live auf echter USB-Stick-Hardware gefunden (01.09.2026): auf einem +# CD-ROM (wie in allen bisherigen QEMU-Tests) ist das Boot-Medium ein +# eigener Geraetetyp ("rom"), der von der lsblk-Filterung unten schon +# ausgeschlossen wird - auf einem echten USB-Stick ist das Boot-Medium +# selbst aber ein ganz normales "disk"-Blockgeraet, genau wie die interne +# Zielplatte. Ohne Ausschluss kann die Erkennung darunter den Stick selbst +# waehlen (abhaengig von der Aufzaehlungsreihenfolge) - "parted mklabel" +# darauf schlaegt dann IMMER fehl ("...have been unable to inform the +# Kernel of the change, probably because it/they are in use"), weil man +# nicht die Platte partitionieren kann, von der man gerade lebt. Der +# vorherige Fix (Zielplatte freigeben + Neueinlesen wiederholen) half +# deshalb nicht - das war die falsche Diagnose fuer dieses Problem. +_mint_image_boot_medium_disk() { + local medium_source parent + + medium_source="$(findmnt --noheadings --output SOURCE /run/live/medium 2>/dev/null)" || return 1 + [[ -n "${medium_source}" ]] || return 1 + + parent="$(lsblk --noheadings --output PKNAME "${medium_source}" 2>/dev/null | head -n1)" + [[ -n "${parent}" ]] || return 1 + + printf '/dev/%s\n' "${parent}" +} + # Analog zu _tuxflotte_detect_target_disk() in backends/mint/backend.sh - # bewusst hier dupliziert statt geteilt, um dieses Backend unabhaengig vom # Mint-Referenzbackend zu halten (siehe Modul-Kommentar oben). Ein Umzug in # eine gemeinsame lib waere ein sinnvolles spaeteres Aufraeumen, sobald # mehr als zwei Backends dieselbe Logik brauchen. _mint_image_detect_target_disk() { + local boot_medium_disk + boot_medium_disk="$(_mint_image_boot_medium_disk || true)" + lsblk --nodeps --noheadings --bytes --output NAME,TYPE,SIZE --paths | - awk '$2 == "disk" && $3 > 0 && $1 !~ /(nbd|zram|loop)[0-9]*$/ { print $1; exit }' + awk -v exclude="${boot_medium_disk}" ' + $2 == "disk" && $3 > 0 && $1 !~ /(nbd|zram|loop)[0-9]*$/ && $1 != exclude { print $1; exit } + ' } backend_init() { diff --git a/boot-medium/config/includes.chroot/opt/tuxflotte/backends/mint-image/backend.sh b/boot-medium/config/includes.chroot/opt/tuxflotte/backends/mint-image/backend.sh index f48c038..5def95f 100644 --- a/boot-medium/config/includes.chroot/opt/tuxflotte/backends/mint-image/backend.sh +++ b/boot-medium/config/includes.chroot/opt/tuxflotte/backends/mint-image/backend.sh @@ -52,14 +52,43 @@ backend_fatal() { return 1 } +# Live auf echter USB-Stick-Hardware gefunden (01.09.2026): auf einem +# CD-ROM (wie in allen bisherigen QEMU-Tests) ist das Boot-Medium ein +# eigener Geraetetyp ("rom"), der von der lsblk-Filterung unten schon +# ausgeschlossen wird - auf einem echten USB-Stick ist das Boot-Medium +# selbst aber ein ganz normales "disk"-Blockgeraet, genau wie die interne +# Zielplatte. Ohne Ausschluss kann die Erkennung darunter den Stick selbst +# waehlen (abhaengig von der Aufzaehlungsreihenfolge) - "parted mklabel" +# darauf schlaegt dann IMMER fehl ("...have been unable to inform the +# Kernel of the change, probably because it/they are in use"), weil man +# nicht die Platte partitionieren kann, von der man gerade lebt. Der +# vorherige Fix (Zielplatte freigeben + Neueinlesen wiederholen) half +# deshalb nicht - das war die falsche Diagnose fuer dieses Problem. +_mint_image_boot_medium_disk() { + local medium_source parent + + medium_source="$(findmnt --noheadings --output SOURCE /run/live/medium 2>/dev/null)" || return 1 + [[ -n "${medium_source}" ]] || return 1 + + parent="$(lsblk --noheadings --output PKNAME "${medium_source}" 2>/dev/null | head -n1)" + [[ -n "${parent}" ]] || return 1 + + printf '/dev/%s\n' "${parent}" +} + # Analog zu _tuxflotte_detect_target_disk() in backends/mint/backend.sh - # bewusst hier dupliziert statt geteilt, um dieses Backend unabhaengig vom # Mint-Referenzbackend zu halten (siehe Modul-Kommentar oben). Ein Umzug in # eine gemeinsame lib waere ein sinnvolles spaeteres Aufraeumen, sobald # mehr als zwei Backends dieselbe Logik brauchen. _mint_image_detect_target_disk() { + local boot_medium_disk + boot_medium_disk="$(_mint_image_boot_medium_disk || true)" + lsblk --nodeps --noheadings --bytes --output NAME,TYPE,SIZE --paths | - awk '$2 == "disk" && $3 > 0 && $1 !~ /(nbd|zram|loop)[0-9]*$/ { print $1; exit }' + awk -v exclude="${boot_medium_disk}" ' + $2 == "disk" && $3 > 0 && $1 !~ /(nbd|zram|loop)[0-9]*$/ && $1 != exclude { print $1; exit } + ' } backend_init() {