Thomas Stallinger bc13169418 feat(boot-medium): systemd-Autostart, Fortschrittsanzeige, SSH-Dev-Modus (Phase 2)
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.
2026-08-31 14:40:39 +02:00

72 lines
2.4 KiB
Bash

#!/usr/bin/env bash
log_info() {
echo "[INFO ] $*"
}
log_warn() {
echo "[WARN ] $*" >&2
}
log_error() {
echo "[ERROR] $*" >&2
}
log_success() {
echo "[ OK ] $*"
}
# Klar abgesetzte Fortschrittsanzeige fuer die tty-Konsole des Boot-Mediums
# (kein Desktop, kein Kiosk-Browser - die Terminal-Ausgabe selbst ist die
# einzige UI, die eine Person vor dem Geraet sieht). Gilt fuer Dev- UND
# Produktiv-Build gleichermassen, nicht nur zum Debuggen - siehe Plan
# "Klare Fortschrittsanzeige auf der Konsole". Format/Stil bewusst an die
# bestehenden Banner in 17_device_status.sh angelehnt (Titel + "="-Linie
# gleicher Laenge, keine Sonderzeichen, die auf einer rohen VT-Konsole
# fehlen koennten).
declare -A TUXFLOTTE_STEP_LABELS=(
[00_preflight.sh]="Vorbereitung"
[05_network.sh]="Netzwerkverbindung wird hergestellt"
[10_hardware.sh]="Hardware wird erkannt"
[12_enrollment_auth.sh]="Aktivierungscode wird geprüft"
[15_server_handshake.sh]="Verbindung zu anode wird hergestellt"
[17_device_status.sh]="Gerätestatus wird abgerufen"
[20_profile_selection.sh]="Bereitstellungsvorlage wird ausgewählt"
[25_installation_confirm.sh]="Installationsbestätigung"
[30_runtime_blueprint.sh]="Installationsplan wird aufgelöst"
[40_backend.sh]="Golden Image wird geladen und installiert"
[20_storage.sh]="Speicher-Zusatzprüfung"
[99_finish.sh]="Abschluss"
)
readonly -a TUXFLOTTE_STEP_ORDER=(
00_preflight.sh 05_network.sh 10_hardware.sh 12_enrollment_auth.sh
15_server_handshake.sh 17_device_status.sh 20_profile_selection.sh
25_installation_confirm.sh 30_runtime_blueprint.sh 40_backend.sh
20_storage.sh 99_finish.sh
)
TUXFLOTTE_STEP_COUNT=0
log_step() {
local module_name="$1"
local label="${TUXFLOTTE_STEP_LABELS[$module_name]:-$module_name}"
local total="${#TUXFLOTTE_STEP_ORDER[@]}"
local bold="" reset=""
TUXFLOTTE_STEP_COUNT=$((TUXFLOTTE_STEP_COUNT + 1))
# Klartext-Fallback ohne Terminal (z.B. wenn stdout in eine Log-Datei
# umgeleitet wird) - kein tput-Aufruf, ncurses-bin ist bewusst nicht Teil
# des schlanken Paketsatzes, rohe ANSI-Codes reichen und sind ueberall
# ohne Zusatzpaket verfuegbar.
if [[ -t 1 ]]; then
bold=$'\033[1m'
reset=$'\033[0m'
fi
local title
title="[${TUXFLOTTE_STEP_COUNT}/${total}] ${label}"
printf '\n%s%s%s\n' "${bold}" "${title}" "${reset}"
printf '%s\n\n' "$(printf '=%.0s' $(seq 1 ${#title}))"
}