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.
72 lines
2.4 KiB
Bash
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}))"
|
|
}
|