Drei zusammenhaengende Punkte aus dem zweiten echten Hardware-Test
(02.09.2026):
1. "Das backend40-Script/Partitionierung zeigt viele Zeilen Ausgaben...
Nach dem Entpacken kommen wieder sehr viele Zeilen Ausgaben" - neue
run_module_backend() (utils.sh) faengt jetzt auch 40_backend.sh ab
(Partitionieren/Formatieren/chroot-Fixup/Bootloader/Postinstall
verborgen wie jedes andere Modul), OHNE animierten Kreisel (statischer
Titel, da das Modul seinen eigenen Fortschritt zeigt). Der Download-
Fortschrittsbalken selbst bleibt sichtbar: curl schreibt ihn bei
aktivem TUXFLOTTE_TTY_LIVE direkt auf /dev/tty1, umgeht damit gezielt
die stdout/stderr-Umleitung des Moduls (image_deploy.sh).
2. "Wenn ich... mit Enter den Neustart auslösen möchte, kommt es zu
zahlreichen squashfs-Fehlern, weil das Dateisystem nicht mehr da ist."
- "toram" im Bootappend (build_boot_medium.sh) kopiert das gesamte
Boot-Medium beim Start einmalig in eine Tmpfs; danach ist der Stick fuer
den laufenden Betrieb komplett irrelevant, ein Ziehen jederzeit
gefahrlos moeglich - vorher blieb das laufende System per Squashfs+
Loop-Mount direkt vom physischen Medium abhaengig.
3. Neues Boot-Banner (pics/tuxflotte-terminal-80neu.txt).
Beim eigenen Testen von Punkt 1 zwei echte Bugs gefunden+behoben (siehe
Kommentare in image_deploy.sh): "pipeline || true" ueberschreibt
PIPESTATUS mit dem einelementigen Ergebnis von "true", sobald die
Pipeline fehlschlaegt - traf live bei einer echten Netzwerkunterbrechung
waehrend des Downloads auf ("pipe_status[1]: unbound variable" unter
"set -u"). Der Wechsel auf eine "if"-Bedingung (set -e-Ausnahme ohne ein
zweites Kommando) reichte allein nicht, PIPESTATUS blieb bei einem
echten, mitten im Transfer abgebrochenen curl|tar manchmal trotzdem
unvollstaendig - jetzt zusaetzlich robust mit ":-1"-Fallback direkt auf
den einzelnen Indizes statt einer vorausgesetzten vollstaendigen Kopie.
Live in QEMU verifiziert: neues Banner + verborgenes Partitionier-Rauschen
+ sichtbarer Fortschrittsbalken bestaetigt (Screenshot). Eine echte,
waehrend des Testens aufgetretene Netzwerk-Durchsatzverschlechterung
(anode nur noch ~4,6 MB/s, unabhaengig von diesem Code) verhinderte einen
weiteren vollstaendigen Erfolgsdurchlauf in dieser Session - der
pipe_status-Fix selbst wurde aber genau durch diese Unterbrechung bestaetigt
(sauberer [FEHLER]-Abbruch mit klarer Meldung statt Bash-Crash). toram
selbst (Boot bis zum Auto-Modus-Start, Konfiguration/Partitionierung liefen
durch) und die Rauschen-Unterdrueckung sind bestaetigt; die volle
Stick-waehrend-Reboot-Sequenz bleibt fuer den naechsten echten
Hardware-Test zu bestaetigen.
94 lines
3.6 KiB
Bash
Executable File
94 lines
3.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -Eeuo pipefail
|
|
|
|
# Baut das eigenstaendige Tuxflotte-Boot-Medium (Debian trixie, per
|
|
# Debian-live-build) - siehe Plan ~/.claude/plans/inherited-floating-treasure.md
|
|
# und Memory project_independent_boot_medium.md.
|
|
#
|
|
# Ersetzt langfristig scripts/build.sh/build_customer_iso.sh (Casper-Patchen
|
|
# einer echten Linux-Mint-Live-ISO): dieses Boot-Medium enthaelt nur
|
|
# Tuxflottes eigenen, headless-tauglichen Code (Module 00-40,
|
|
# backends/mint-image/) und beruehrt niemals Ubiquity/Casper/eine
|
|
# Distributions-Live-Session - macht die Bug-Klasse, die zu dieser
|
|
# Architektur gefuehrt hat (siehe Memory-Datei), strukturell unmoeglich.
|
|
#
|
|
# --dev aktiviert einen SSH-Debug-Zugang (Testzugang tuxflotte/test123,
|
|
# analog bestehender Test-Fixtures wie WLAN-Test-Org) - ohne --dev bleibt
|
|
# SSH deaktiviert, keine gebackenen Zugangsdaten (Produktiv-Default,
|
|
# konsistent damit, dass auch das Golden Image selbst keine Zugangsdaten
|
|
# enthaelt). Siehe boot-medium/config/hooks/live/0900-tuxflotte-ssh-mode.hook.chroot.
|
|
#
|
|
# "toram" im Bootappend (02.09.2026, echter Hardware-Test): ohne dieses
|
|
# Flag bleibt das laufende System ueber Squashfs+Loop-Mount direkt vom
|
|
# physischen Boot-Medium abhaengig - zieht der Kunde den USB-Stick, sobald
|
|
# er dazu aufgefordert wird (siehe "Fertig!"-Hinweis in backend.sh), noch
|
|
# WAEHREND des anschliessenden Reboot-Shutdowns, verliert das noch
|
|
# laufende System mitten im Herunterfahren seine eigene Root-Partition -
|
|
# Ergebnis waren zahlreiche Squashfs-I/O-Fehler. "toram" kopiert das ganze
|
|
# Boot-Medium beim Start einmalig in eine Tmpfs (RAM) - danach ist der Stick
|
|
# fuer den laufenden Betrieb komplett irrelevant, ein Ziehen jederzeit
|
|
# gefahrlos moeglich. Kostet etwas Bootzeit (das ganze Medium, ~700 MB,
|
|
# muss zuerst einmal komplett gelesen werden) und etwas mehr RAM
|
|
# waehrenddessen - auf jeder Zielhardware, die ueberhaupt Linux Mint
|
|
# Cinnamon stemmen soll, unproblematisch.
|
|
|
|
usage() {
|
|
echo "Usage: $0 [--dev]" >&2
|
|
echo " --dev SSH-Debug-Zugang aktivieren (tuxflotte/test123)" >&2
|
|
}
|
|
|
|
DEV_BUILD=false
|
|
for arg in "$@"; do
|
|
case "$arg" in
|
|
--dev) DEV_BUILD=true ;;
|
|
-h|--help) usage; exit 0 ;;
|
|
*) echo "Error: Unbekannter Parameter: $arg" >&2; usage; exit 1 ;;
|
|
esac
|
|
done
|
|
|
|
if [[ "${EUID}" -ne 0 ]]; then
|
|
echo "Error: muss als root laufen (live-build braucht root fuer chroot/mount)." >&2
|
|
exit 1
|
|
fi
|
|
|
|
for cmd in lb; do
|
|
command -v "${cmd}" >/dev/null 2>&1 ||
|
|
{ echo "Error: fehlendes Werkzeug: ${cmd} (apt-get install live-build)" >&2; exit 1; }
|
|
done
|
|
|
|
REPO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
BOOT_MEDIUM_DIR="${REPO_DIR}/boot-medium"
|
|
DEV_MARKER="${BOOT_MEDIUM_DIR}/config/includes.chroot/etc/tuxflotte-dev-build"
|
|
|
|
[[ -d "${BOOT_MEDIUM_DIR}/config" ]] ||
|
|
{ echo "Error: ${BOOT_MEDIUM_DIR}/config fehlt - lb config wurde noch nie ausgefuehrt." >&2; exit 1; }
|
|
|
|
cd "${BOOT_MEDIUM_DIR}"
|
|
|
|
if [[ "${DEV_BUILD}" == true ]]; then
|
|
echo "==> Dev-Build: SSH-Debug-Zugang wird aktiviert (tuxflotte/test123)."
|
|
mkdir -p "$(dirname "${DEV_MARKER}")"
|
|
touch "${DEV_MARKER}"
|
|
else
|
|
echo "==> Produktiv-Build: SSH bleibt deaktiviert."
|
|
rm -f "${DEV_MARKER}"
|
|
fi
|
|
|
|
echo "==> lb clean"
|
|
lb clean
|
|
|
|
echo "==> lb config"
|
|
lb config \
|
|
--distribution trixie \
|
|
--architectures amd64 \
|
|
--archive-areas "main contrib non-free non-free-firmware" \
|
|
--binary-images iso-hybrid \
|
|
--bootloaders "grub-efi,syslinux" \
|
|
--debian-installer none \
|
|
--bootappend-live "boot=live components toram quiet splash vconsole.keymap=de"
|
|
|
|
echo "==> lb build"
|
|
lb build
|
|
|
|
echo "==> Boot-Medium gebaut: ${BOOT_MEDIUM_DIR}/live-image-amd64.hybrid.iso"
|