fix(boot-medium): /dev als leeres Verzeichnis wiederherstellen (Kernel-Panic beim echten Boot)

Live auf echter Hardware gefunden (01.09.2026), direkt nachdem der
vorige LXC-Fix (Commit f6bb3db) deployed wurde: "-excludes dev" entfernt
nicht nur die Geraetedateien, sondern das gesamte /dev-Verzeichnis.
live-boots eigenes Initramfs-Skript braucht /dev aber als reinen
Mountpunkt (bindet dort sein eigenes Devtmpfs ein, kurz vor
switch_root) und scheiterte deshalb sofort beim Booten mit "mount:
/root/dev: mount point does not exist", gefolgt von einem Kernel-Panic.

Fix: mkdir -p nach dem Entpacken stellt /dev als leeres Verzeichnis
wieder her - devtmpfs bindet sich selbst darueber, die eigentlichen
Geraetedateien werden nie aus dem Squashfs gebraucht. Dasselbe Muster
wie image_deploy_restore_excluded_dirs() beim Golden Image, nur hier
fuers Boot-Medium selbst.

Diesmal VOR dem Deploy lokal in der enterprise-QEMU-VM boot-getestet
(der vorige Fix wurde ungetestet deployed, was genau zu diesem Bug
fuehrte) - sauberer Boot bestaetigt, kein Kernel-Panic, Auto-Modus laeuft
bis zur Golden-Image-Installation durch.
This commit is contained in:
Thomas Stallinger 2026-09-01 10:26:00 +02:00
parent f6bb3db9b9
commit 0874c2fd0f

View File

@ -85,15 +85,23 @@ echo "Entpacke Squashfs..."
# gefunden (01.09.2026): anode laeuft in einem LXC-Container, der CAP_MKNOD # gefunden (01.09.2026): anode laeuft in einem LXC-Container, der CAP_MKNOD
# grundsaetzlich blockiert (auch fuer root) - unsquashfs scheiterte beim # grundsaetzlich blockiert (auch fuer root) - unsquashfs scheiterte beim
# Wiederherstellen der paar Geraetedateien im Boot-Medium-Squashfs # Wiederherstellen der paar Geraetedateien im Boot-Medium-Squashfs
# (/dev/null, /dev/console, ...) mit "Operation not permitted". Anders als # (/dev/null, /dev/console, ...) mit "Operation not permitted".
# beim Golden Image (siehe package_golden_image.sh) ist das hier unkritisch:
# das Boot-Medium ist nur der Installations-Vermittler, nicht das
# ausgelieferte System - devtmpfs erzeugt /dev beim tatsaechlichen Boot
# ohnehin automatisch neu, die gebackenen Geraetedateien sind nie
# load-bearing.
unsquashfs -excludes -d "${WORK_DIR}/root" "${WORK_DIR}/orig.squashfs" dev || unsquashfs -excludes -d "${WORK_DIR}/root" "${WORK_DIR}/orig.squashfs" dev ||
{ echo "Error: Squashfs konnte nicht entpackt werden." >&2; exit 1; } { echo "Error: Squashfs konnte nicht entpackt werden." >&2; exit 1; }
# ECHTER BUG, live auf echter Hardware gefunden (01.09.2026, direkt nach dem
# vorigen Fix): "-excludes dev" entfernt nicht nur die Geraetedateien,
# sondern das gesamte /dev-VERZEICHNIS - live-boots eigenes Initramfs-
# Skript braucht /dev aber als reinen MOUNTPUNKT (bindet dort sein eigenes
# Devtmpfs ein, kurz vor switch_root) und scheiterte deshalb sofort beim
# Booten mit "mount: /root/dev: mount point does not exist" gefolgt von
# einem Kernel-Panic. Anders als beim Golden Image (siehe
# package_golden_image.sh/image_deploy_restore_excluded_dirs(), wo dasselbe
# Muster schon einmal gefunden wurde) reicht hier ein leeres Verzeichnis -
# devtmpfs bindet sich selbst darueber, die eigentlichen Geraetedateien
# werden nie aus dem Squashfs gebraucht.
mkdir -p "${WORK_DIR}/root/dev"
echo "Schreibe personalisierte installer.conf..." echo "Schreibe personalisierte installer.conf..."
mkdir -p "${WORK_DIR}/root/opt/tuxflotte/config" mkdir -p "${WORK_DIR}/root/opt/tuxflotte/config"
{ {