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:
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user