Erkennen, ob netplan die Netzwerkkonfiguration (Shell) verwaltet

4

Ich möchte in einem Shell-Skript in einem LXD-Container herausfinden, ob der Container von Netplan verwaltet wird. Dies kann ein bisschen unbekannt sein, da ich eine Mischung aus 16.04-Systemen und 18.04-Systemen mit einem Upgrade habe.

Um die korrekte Netzwerkkonfiguration in den Container zu schreiben, muss /etc/network/interfacesfestgestellt werden , ob die Konfiguration in oder in einer Netplan-Yaml-Datei statisch ist .

Ich könnte so etwas wirklich gebrauchen, netplan statusaber da dieser Befehl nicht existiert, brauche ich Alternativen.

Ich habe ein bisschen herumgefragt und es scheint keinen offiziellen Weg zu geben. Die Vorschläge, die ich bisher hatte:

  1. cat /etc/network/interfacesund suchen Sie dort nach der Netplan-Infomeldung. Ich mag diesen Ansatz nicht, da dies offensichtlich bruchgefährdet wäre.
  2. Jemand schlug vor, ich könnte nur nach / etc / netplan suchen - aber das funktioniert nicht auf aktualisierten Systemen, da Netplan deaktiviert, aber immer noch installiert ist.
  3. Ein weiterer Vorschlag war das Gegenteil: Ich könnte überprüfen, ob ifupdown oder systemd das Netzwerk verwaltet. Das Problem ist, ich bin mir nicht sicher, wie ich das in praktischer Hinsicht machen soll.
Arni J
quelle

Antworten:

4

Möglicherweise können Sie in ifupdown nach der ifstate- Datei suchen, um zu erfahren, ob dies zur Konfiguration des Netzwerks verwendet wurde:

/run/network/ifstate

Wenn das vorhanden ist und Text enthält, können Sie davon ausgehen, dass ifupdown verwendet wird. Wenn es nicht vorhanden ist, wird das System wahrscheinlich über netplan verwaltet (aber das sagt Ihnen nicht, ob es sich um NetworkManager oder systemd handelt).

Wenn Sie wissen möchten, welches Backend für eine bestimmte Schnittstelle verwendet wird, können Sie netplan fragen und die Ausgabe analysieren, um die benötigten Informationen zu erhalten:

netplan generate --mapping enp3s0

Es gibt folgenden Text aus:

id=enp3s0, backend=NetworkManager, set_name=(null), match_name=enp3s0, match_mac=(null), match_driver=(null)

Auf diese Weise können Sie auch anhand der Übereinstimmungsregeln ermitteln, für die die Schnittstelle konfiguriert wurde (Sie verwenden den "endgültigen" Namen einer Schnittstelle, um das Mapping zu überprüfen. Er gibt Aufschluss darüber, welche Übereinstimmungsregel in der Netplan-YAML dafür übereinstimmt.).

Mathieu Trudel-Lapierre
quelle
Vielen Dank für Ihre gründliche Antwort. Ich suche jetzt nach / run / network / ifstate, um festzustellen, welche Netzwerkkonfiguration zu schreiben ist, und alles scheint gut zu funktionieren :)
Arni J