feat(installer): Netzwerkverbindung mit Wiederholungsversuchen statt Sofortabbruch
Live auf echter Hardware gefunden (01.09.2026): eine vorkonfigurierte SSID war im Moment des Scans nicht sichtbar (Kunde stand ungluenstig, das eigene Handy war im selben WLAN aber verbunden) - bisher brach 05_network.sh beim ersten Fehlschlag sofort fatal ab, ohne dem Kunden eine Chance zu geben, den Standort zu wechseln oder ein Netzwerkkabel einzustecken. Neue establish_network_connection()-Schleife (Default: 10 Versuche, 15s Pause, beides per TUXFLOTTE_NETWORK_MAX_ATTEMPTS/ TUXFLOTTE_NETWORK_RETRY_DELAY konfigurierbar) wiederholt bei jedem Versuch die KOMPLETTE Erkennung von vorne (nicht nur WLAN erneut) - damit wird auch ein waehrend der Wartezeit eingestecktes Netzwerkkabel erkannt, nicht nur ein erneuter WLAN-Versuch. Lokal in der enterprise-QEMU-VM verifiziert: Netzwerk-Link waehrend des Boots per virsh domif-setlink kurzzeitig deaktiviert - Retry-Meldung "Verbindungsversuch 1/10 fehlgeschlagen..." erschien korrekt, nach Wiederherstellen des Links lief der Installer beim naechsten Versuch automatisch weiter bis zur Golden-Image-Installation.
This commit is contained in:
parent
0874c2fd0f
commit
ebd827ee2f
@ -22,6 +22,15 @@ readonly CONNECTION_EXPORT="${RUNTIME_DIR}/connection.nmconnection"
|
|||||||
readonly SERVER_URL="${TUXFLOTTE_SERVER_URL:-https://anode.tuxflotte.de/health}"
|
readonly SERVER_URL="${TUXFLOTTE_SERVER_URL:-https://anode.tuxflotte.de/health}"
|
||||||
readonly SERVER_TIMEOUT="${TUXFLOTTE_SERVER_TIMEOUT:-10}"
|
readonly SERVER_TIMEOUT="${TUXFLOTTE_SERVER_TIMEOUT:-10}"
|
||||||
|
|
||||||
|
# Live auf echter Hardware gefunden (01.09.2026): eine vorkonfigurierte SSID
|
||||||
|
# war im Moment des Scans nicht sichtbar (Kunde stand ungluecklich, Handy im
|
||||||
|
# selben WLAN war aber verbunden) - bisher brach das Modul beim ersten
|
||||||
|
# Fehlschlag sofort fatal ab. Ein Kunde kann den Standort wechseln oder ein
|
||||||
|
# Netzwerkkabel einstecken, wenn er ein paar Sekunden Zeit dazu bekommt -
|
||||||
|
# deshalb Wiederholungsversuche mit Pause statt sofortigem Abbruch.
|
||||||
|
readonly MAX_CONNECTION_ATTEMPTS="${TUXFLOTTE_NETWORK_MAX_ATTEMPTS:-10}"
|
||||||
|
readonly RETRY_DELAY_SECONDS="${TUXFLOTTE_NETWORK_RETRY_DELAY:-15}"
|
||||||
|
|
||||||
readonly NMCLI="${NMCLI:-nmcli}"
|
readonly NMCLI="${NMCLI:-nmcli}"
|
||||||
readonly CURL="${CURL:-curl}"
|
readonly CURL="${CURL:-curl}"
|
||||||
|
|
||||||
@ -500,6 +509,55 @@ export_connection_profile() {
|
|||||||
log "Aktives Verbindungsprofil wurde geschützt vorgemerkt."
|
log "Aktives Verbindungsprofil wurde geschützt vorgemerkt."
|
||||||
}
|
}
|
||||||
|
|
||||||
|
attempt_connection() {
|
||||||
|
if check_existing_connection; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if try_ethernet; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
local wifi_device
|
||||||
|
wifi_device="$(get_wifi_device || true)"
|
||||||
|
|
||||||
|
if [[ -z "${wifi_device}" ]]; then
|
||||||
|
warn "Keine funktionierende Ethernet-Verbindung und keine WLAN-Hardware gefunden."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
log "Ethernet ist nicht verfügbar. WLAN-Initialisierung wird gestartet."
|
||||||
|
|
||||||
|
if [[ -n "${TUXFLOTTE_WIFI_SSID:-}" ]]; then
|
||||||
|
connect_wifi_noninteractive "${wifi_device}"
|
||||||
|
else
|
||||||
|
connect_wifi "${wifi_device}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Wiederholt Ethernet-Prüfung + WLAN-Verbindungsversuch mit Pause dazwischen,
|
||||||
|
# statt beim ersten Fehlschlag sofort abzubrechen - siehe Fund oben. Prueft
|
||||||
|
# bei jedem Versuch wieder von vorne (nicht nur WLAN erneut), damit ein in
|
||||||
|
# der Wartezeit eingestecktes Netzwerkkabel ebenfalls erkannt wird.
|
||||||
|
establish_network_connection() {
|
||||||
|
local attempt=1
|
||||||
|
|
||||||
|
while (( attempt <= MAX_CONNECTION_ATTEMPTS )); do
|
||||||
|
if attempt_connection; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if (( attempt < MAX_CONNECTION_ATTEMPTS )); then
|
||||||
|
warn "Verbindungsversuch ${attempt}/${MAX_CONNECTION_ATTEMPTS} fehlgeschlagen. Neuer Versuch in ${RETRY_DELAY_SECONDS}s - Gerät ggf. näher ans WLAN bringen oder ein Netzwerkkabel einstecken."
|
||||||
|
sleep "${RETRY_DELAY_SECONDS}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
((attempt += 1))
|
||||||
|
done
|
||||||
|
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
require_root
|
require_root
|
||||||
require_command "${NMCLI}"
|
require_command "${NMCLI}"
|
||||||
@ -511,29 +569,8 @@ main() {
|
|||||||
|
|
||||||
log "Prüfe vorhandene Netzwerkverbindungen."
|
log "Prüfe vorhandene Netzwerkverbindungen."
|
||||||
|
|
||||||
if check_existing_connection; then
|
establish_network_connection ||
|
||||||
:
|
fatal "Nach ${MAX_CONNECTION_ATTEMPTS} Versuchen konnte keine Verbindung zum Tuxflotte-Server hergestellt werden."
|
||||||
elif try_ethernet; then
|
|
||||||
:
|
|
||||||
else
|
|
||||||
local wifi_device
|
|
||||||
|
|
||||||
wifi_device="$(get_wifi_device || true)"
|
|
||||||
|
|
||||||
if [[ -z "${wifi_device}" ]]; then
|
|
||||||
fatal "Keine funktionierende Ethernet-Verbindung und keine WLAN-Hardware gefunden."
|
|
||||||
fi
|
|
||||||
|
|
||||||
log "Ethernet ist nicht verfügbar. WLAN-Initialisierung wird gestartet."
|
|
||||||
|
|
||||||
if [[ -n "${TUXFLOTTE_WIFI_SSID:-}" ]]; then
|
|
||||||
connect_wifi_noninteractive "${wifi_device}" ||
|
|
||||||
fatal "Es konnte keine Verbindung zum Tuxflotte-Server hergestellt werden."
|
|
||||||
else
|
|
||||||
connect_wifi "${wifi_device}" ||
|
|
||||||
fatal "Es konnte keine Verbindung zum Tuxflotte-Server hergestellt werden."
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
store_network_state
|
store_network_state
|
||||||
export_connection_profile
|
export_connection_profile
|
||||||
|
|||||||
@ -22,6 +22,15 @@ readonly CONNECTION_EXPORT="${RUNTIME_DIR}/connection.nmconnection"
|
|||||||
readonly SERVER_URL="${TUXFLOTTE_SERVER_URL:-https://anode.tuxflotte.de/health}"
|
readonly SERVER_URL="${TUXFLOTTE_SERVER_URL:-https://anode.tuxflotte.de/health}"
|
||||||
readonly SERVER_TIMEOUT="${TUXFLOTTE_SERVER_TIMEOUT:-10}"
|
readonly SERVER_TIMEOUT="${TUXFLOTTE_SERVER_TIMEOUT:-10}"
|
||||||
|
|
||||||
|
# Live auf echter Hardware gefunden (01.09.2026): eine vorkonfigurierte SSID
|
||||||
|
# war im Moment des Scans nicht sichtbar (Kunde stand ungluecklich, Handy im
|
||||||
|
# selben WLAN war aber verbunden) - bisher brach das Modul beim ersten
|
||||||
|
# Fehlschlag sofort fatal ab. Ein Kunde kann den Standort wechseln oder ein
|
||||||
|
# Netzwerkkabel einstecken, wenn er ein paar Sekunden Zeit dazu bekommt -
|
||||||
|
# deshalb Wiederholungsversuche mit Pause statt sofortigem Abbruch.
|
||||||
|
readonly MAX_CONNECTION_ATTEMPTS="${TUXFLOTTE_NETWORK_MAX_ATTEMPTS:-10}"
|
||||||
|
readonly RETRY_DELAY_SECONDS="${TUXFLOTTE_NETWORK_RETRY_DELAY:-15}"
|
||||||
|
|
||||||
readonly NMCLI="${NMCLI:-nmcli}"
|
readonly NMCLI="${NMCLI:-nmcli}"
|
||||||
readonly CURL="${CURL:-curl}"
|
readonly CURL="${CURL:-curl}"
|
||||||
|
|
||||||
@ -500,6 +509,55 @@ export_connection_profile() {
|
|||||||
log "Aktives Verbindungsprofil wurde geschützt vorgemerkt."
|
log "Aktives Verbindungsprofil wurde geschützt vorgemerkt."
|
||||||
}
|
}
|
||||||
|
|
||||||
|
attempt_connection() {
|
||||||
|
if check_existing_connection; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if try_ethernet; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
local wifi_device
|
||||||
|
wifi_device="$(get_wifi_device || true)"
|
||||||
|
|
||||||
|
if [[ -z "${wifi_device}" ]]; then
|
||||||
|
warn "Keine funktionierende Ethernet-Verbindung und keine WLAN-Hardware gefunden."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
log "Ethernet ist nicht verfügbar. WLAN-Initialisierung wird gestartet."
|
||||||
|
|
||||||
|
if [[ -n "${TUXFLOTTE_WIFI_SSID:-}" ]]; then
|
||||||
|
connect_wifi_noninteractive "${wifi_device}"
|
||||||
|
else
|
||||||
|
connect_wifi "${wifi_device}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Wiederholt Ethernet-Prüfung + WLAN-Verbindungsversuch mit Pause dazwischen,
|
||||||
|
# statt beim ersten Fehlschlag sofort abzubrechen - siehe Fund oben. Prueft
|
||||||
|
# bei jedem Versuch wieder von vorne (nicht nur WLAN erneut), damit ein in
|
||||||
|
# der Wartezeit eingestecktes Netzwerkkabel ebenfalls erkannt wird.
|
||||||
|
establish_network_connection() {
|
||||||
|
local attempt=1
|
||||||
|
|
||||||
|
while (( attempt <= MAX_CONNECTION_ATTEMPTS )); do
|
||||||
|
if attempt_connection; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if (( attempt < MAX_CONNECTION_ATTEMPTS )); then
|
||||||
|
warn "Verbindungsversuch ${attempt}/${MAX_CONNECTION_ATTEMPTS} fehlgeschlagen. Neuer Versuch in ${RETRY_DELAY_SECONDS}s - Gerät ggf. näher ans WLAN bringen oder ein Netzwerkkabel einstecken."
|
||||||
|
sleep "${RETRY_DELAY_SECONDS}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
((attempt += 1))
|
||||||
|
done
|
||||||
|
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
require_root
|
require_root
|
||||||
require_command "${NMCLI}"
|
require_command "${NMCLI}"
|
||||||
@ -511,29 +569,8 @@ main() {
|
|||||||
|
|
||||||
log "Prüfe vorhandene Netzwerkverbindungen."
|
log "Prüfe vorhandene Netzwerkverbindungen."
|
||||||
|
|
||||||
if check_existing_connection; then
|
establish_network_connection ||
|
||||||
:
|
fatal "Nach ${MAX_CONNECTION_ATTEMPTS} Versuchen konnte keine Verbindung zum Tuxflotte-Server hergestellt werden."
|
||||||
elif try_ethernet; then
|
|
||||||
:
|
|
||||||
else
|
|
||||||
local wifi_device
|
|
||||||
|
|
||||||
wifi_device="$(get_wifi_device || true)"
|
|
||||||
|
|
||||||
if [[ -z "${wifi_device}" ]]; then
|
|
||||||
fatal "Keine funktionierende Ethernet-Verbindung und keine WLAN-Hardware gefunden."
|
|
||||||
fi
|
|
||||||
|
|
||||||
log "Ethernet ist nicht verfügbar. WLAN-Initialisierung wird gestartet."
|
|
||||||
|
|
||||||
if [[ -n "${TUXFLOTTE_WIFI_SSID:-}" ]]; then
|
|
||||||
connect_wifi_noninteractive "${wifi_device}" ||
|
|
||||||
fatal "Es konnte keine Verbindung zum Tuxflotte-Server hergestellt werden."
|
|
||||||
else
|
|
||||||
connect_wifi "${wifi_device}" ||
|
|
||||||
fatal "Es konnte keine Verbindung zum Tuxflotte-Server hergestellt werden."
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
store_network_state
|
store_network_state
|
||||||
export_connection_profile
|
export_connection_profile
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user