Netzwerkeinstellungen: netplan/systemd-networkd als drittes Backend + DHCP-Interface-Default-Fix

Auf einer echten, frisch installierten Ubuntu-24.04-VM (192.168.80.114,
Standard-Setup, Netz per DHCP) zeigten sich zwei reale Bugs:

1. Systemeinstellungen > Netzwerkeinstellungen: 'Kein unterstütztes
   Backend erkannt' trotz laufendem Netz -- _detect_network_backend()
   kannte nur NetworkManager und dhcpcd, nicht netplan/systemd-networkd,
   den mit Abstand haeufigsten Fall auf einem normalen Ubuntu-Host.
   Neues drittes Backend 'netplan' ergaenzt: Erkennung ueber
   systemd-networkd + vorhandenes netplan-Binary, Moduserkennung ueber
   das 'dynamic'-Flag des Kernels auf der aktuellen Adresse, Anwenden
   ueber eine eigene Override-Datei (/etc/netplan/90-poe-manager.yaml,
   gewinnt alphabetisch gegen z.B. cloud-inits 50-*.yaml) plus
   Aufruf von netplan apply, Backup/Auto-Rollback wie bei den anderen
   Backends.
   Live verifiziert: Anwenden loeste echten DHCP-Lease-Renew aus, nach
   Ablauf der 45s-Bestaetigungsfrist wurde die Override-Datei automatisch
   wieder entfernt (Rollback funktioniert).

2. DHCP-Konfiguration: 'Keine IPv4-Adresse auf eth0 gefunden', obwohl
   das Interface-Dropdown korrekt 'enp1s0' zeigte -- DHCP_DEFAULTS hatte
   'eth0' hart kodiert (Annahme aus einer aelteren Testumgebung), was auf
   Systemen mit Predictable Network Interface Names schlicht nicht
   existiert. _load_dhcp_settings() korrigiert das jetzt: liegt der
   gespeicherte/Default-Wert nicht unter den tatsaechlich vorhandenen
   Schnittstellen, wird automatisch die erste echte vorgeschlagen.

Neue Abhaengigkeit PyYAML fuer das Schreiben der netplan-Override-Datei.
This commit is contained in:
2026-08-11 13:04:43 +02:00
parent 9e23243872
commit 2b5d9d1b48
4 changed files with 127 additions and 24 deletions
+22 -14
View File
@@ -290,17 +290,25 @@ risikolos über `hostnamectl set-hostname` gesetzt (kein Revert-Timer nötig,
da eine Änderung nicht die Erreichbarkeit kappt).
- **Backend-Erkennung**: prüft, ob NetworkManager oder dhcpcd aktiv ist
(`systemctl is-active`). Ist keins von beiden aktiv, bleibt die Seite
bewusst **rein lesend** (Status wird trotzdem angezeigt) — ohne
zuverlässige Erkennung des Backends keine Änderung, um nicht ins Blaue zu
raten.
(`systemctl is-active`); ist keins von beiden aktiv, aber `systemd-networkd`
aktiv und `netplan` installiert, wird **netplan** angenommen — der Standard
auf einem frisch installierten Ubuntu (Server wie Cloud-Image). Ist keins
der drei erkennbar, bleibt die Seite bewusst **rein lesend** (Status wird
trotzdem angezeigt) — ohne zuverlässige Erkennung des Backends keine
Änderung, um nicht ins Blaue zu raten.
- **Anzeige**: aktuelles Interface, IP/Prefix, Gateway, DNS-Server sowie
Modus (DHCP/Statisch) — Modus wird backend-spezifisch ermittelt
(`nmcli ipv4.method` bzw. ein `static ip_address=`-Eintrag im
betreffenden `interface`-Block von `/etc/dhcpcd.conf`).
(`nmcli ipv4.method`, ein `static ip_address=`-Eintrag im betreffenden
`interface`-Block von `/etc/dhcpcd.conf`, bzw. bei netplan am `dynamic`-Flag
des Kernels auf der aktuellen Adresse — zuverlässiger als die u.U. mehreren
überlagernden YAML-Dateien unter `/etc/netplan/` selbst zu parsen).
- **Änderung**: Interface, Modus (DHCP/Statisch), bei Statisch zusätzlich
IP/Prefix/Gateway, sowie unabhängig davon eigene DNS-Server (funktioniert
in beiden Modi — z.B. IP per DHCP, aber feste DNS-Server).
in beiden Modi — z.B. IP per DHCP, aber feste DNS-Server). Bei netplan
landet die Änderung in einer eigenen, niedrig priorisierten Override-Datei
(`/etc/netplan/90-poe-manager.yaml`) statt in der vom Distributor bzw.
cloud-init mitgelieferten — netplan wendet Dateien alphabetisch an, spätere
Werte gewinnen pro Schlüssel, damit bleibt die Original-Datei unangetastet.
- **Sicherheitsnetz** (wie `netplan try`): vor jeder Änderung wird die
vorherige Konfiguration gesichert. Nach dem Anwenden läuft ein
Hintergrund-Timer (Standard 45s) — wird die Änderung nicht **explizit
@@ -308,14 +316,14 @@ da eine Änderung nicht die Erreichbarkeit kappt).
erreichbar ist), rollt die App automatisch auf die gesicherte
Konfiguration zurück. Verhindert, dass ein Tippfehler bei IP/Gateway den
Host von der Web-UI/SSH abschneidet.
- Da diese Session ausschließlich in WSL (eigene virtuelle Netzwerkschicht,
weder NetworkManager noch dhcpcd) läuft, konnte der Anwenden-Pfad nicht
gegen eine echte Instanz verifiziert werden — Erkennung/Statusanzeige
sind live getestet (korrekte "kein Backend erkannt"-Erkennung + rein
lesender Fallback), Anwenden/Rollback-Logik gegen beide Backends per
gemockten `subprocess.run`/Dateizugriffen inkl. eines echten
- Live gegen eine echte Ubuntu-24.04-VM verifiziert (Standard-Installation,
Netz per DHCP über netplan/systemd-networkd bezogen) — sowohl die
Erkennung/Statusanzeige als auch der komplette Anwenden-Pfad inkl. der
eigenen Override-Datei. NetworkManager und dhcpcd sind zusätzlich per
gemockten `subprocess.run`/Dateizugriffen verifiziert (inkl. eines echten
`dhcpcd.conf`-Rewrites und eines vollständigen Anwenden-dann-Auto-
Rollback-Durchlaufs verifiziert.
Rollback-Durchlaufs), da in der WSL-Entwicklungsumgebung keins von beiden
verfügbar ist.
## Änderungslog