Neuer Service tuxflotte-installer.service startet installer.sh beim Boot direkt auf tty1 (Type=idle, Conflicts=getty@tty1.service) - kein manuelles Anmelden/sudo mehr noetig, egal ob Auto-Modus oder interaktiver Test-/Entwicklungslauf. Wrapper boot-autostart.sh spiegelt die Ausgabe zusaetzlich nach /var/log/tuxflotte-installer.log. log_step() (scripts/lib/logging.sh) gibt vor jedem Modul einen klar abgesetzten "[n/12] <Label>"-Block aus - gilt fuer Dev- UND Produktiv-Build gleichermassen (die tty-Konsole ist die einzige UI, die eine Person vor dem Geraet sieht, kein Kiosk-Browser mehr). scripts/build_boot_medium.sh buendelt lb clean/config/build (loeste die bisherigen Hand-Aufrufe ab) und steuert per --dev-Flag einen SSH- Debug-Zugang (tuxflotte/test123) - ohne --dev bleibt SSH deaktiviert, keine gebackenen Zugangsdaten (Produktiv-Default). Zwei echte, live gefundene Bugs unterwegs behoben: - Debians trixie-sshd_config deaktiviert PasswordAuthentication per Default - fuer den Dev-Testzugang explizit wieder aktiviert. - Ein ExecStopPost, der getty@tty1.service nach Dienstende neu startet, ist unzuverlaessig (Race mit dem eigenen TTY-Teardown, Job wurde angestossen, blieb aber inactive/dead). Geloest durch einen deterministischen Fallback in boot-autostart.sh selbst: die Konsole faellt nach installer.sh in eine interaktive Shell statt auf einen eventuell nie zurueckkehrenden getty zu warten. Live verifiziert in der enterprise-QEMU-VM (zwei frische Enrollment- Sessions, echte anode-Aktivierung, "Bekanntes Geraet erkannt"-Pfad): Boot laeuft ohne jede manuelle Anmeldung direkt in installer.sh, alle 12 Fortschritts-Banner erscheinen korrekt nummeriert, Commit-Gate und kontrollierter Abbruch funktionieren, SSH-Login mit Passwort funktioniert, Fallback-Shell nach Programmende reagiert auf Eingaben.
80 lines
2.7 KiB
Bash
Executable File
80 lines
2.7 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.
|
|
|
|
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 quiet splash vconsole.keymap=de"
|
|
|
|
echo "==> lb build"
|
|
lb build
|
|
|
|
echo "==> Boot-Medium gebaut: ${BOOT_MEDIUM_DIR}/live-image-amd64.hybrid.iso"
|