scripts/iso R-60 fix: judge a sweep candidate on the lease's OWN routing — flush vmbr0 before the bounded dhclient

Live drill finding (nested leg, 2026-07-22): the installer's no-DHCP
fallback bakes not just the 192.168.100.2 static address but a DEFAULT
ROUTE via 192.168.100.1, and dhclient-script never replaces an existing
default route — so the sweep's hub probe rode the dead gateway and
failed even though the candidate's lease had landed, and the gate
oscillated (lease -> probe fail -> byte-identical restore -> screen).
The candidate probe now flushes vmbr0's addresses+routes after the
re-point, letting the lease install its own; the restore path and each
next candidate re-apply configured state via ifreload. Validated live
by hot-patching the drill box: heal in 33s from restart — self-heal
log, inet-dhcp persist, .felhom-bak, hub registration + pairing banner.
Full virgin-ISO drill follows.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UuFPHmHNrCJj1VhY6QdDMU
This commit is contained in:
2026-07-22 11:25:17 +02:00
parent cf1862c8ab
commit 699325bd8a
+7
View File
@@ -197,6 +197,13 @@ sweep_nics() {
render_candidate_interfaces "$n" > "${INTERFACES_FILE}.felhom-tmp" \
&& mv "${INTERFACES_FILE}.felhom-tmp" "$INTERFACES_FILE"
ifreload -a 2>/dev/null
# Drill finding (2026-07-22, nested leg): the installer's fallback bakes a DEFAULT ROUTE via
# 192.168.100.1, and dhclient-script does not replace an existing default route — the probe
# then rides the dead gateway and fails even though the lease landed. A candidate must be
# judged on the lease's OWN addressing/routing, so clear vmbr0 first; the restore path (and
# any next candidate) re-applies the configured state via ifreload.
ip addr flush dev vmbr0 2>/dev/null
ip route flush dev vmbr0 2>/dev/null
timeout "$SWEEP_DHCP_TIMEOUT" dhclient -1 vmbr0 2>/dev/null
local drc=$?
if [[ $drc -eq 0 ]] && hub_reachable; then