#!/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"