web-dev-qa-db-ja.com

ネットプランがネットワーク構成を管理しているかどうかの検出(シェル)

コンテナーがNetplanによって管理されているかどうか、LXDコンテナーのシェルスクリプトで把握したいと思います。 16.04システムと18.04システムが混在し、18.04システムがアップグレードされているため、これは少し未知のことです。

コンテナに正しいネットワーク構成を書き込むために、/etc/network/interfacesまたはNetplan yamlファイルで構成が静的かどうかを検出する必要があります。

netplan statusのようなものを実際に使用できますが、そのコマンドが存在しないため、代替手段が必要です。

私はかなり尋ねましたが、公式な方法はないようです。

  1. cat /etc/network/interfacesでNetplan情報メッセージを探します。これは明らかに破損しやすいため、このアプローチは好きではありません。
  2. 誰かが/ etc/netplanを探すだけでいいと提案しましたが、Netplanは無効になっているがまだインストールされているため、アップグレードされたシステムでは動作しません。
  3. もう1つの提案は逆でした。ifupdownまたはsystemdがネットワークを管理しているかどうかを確認できました。問題は、実際的な意味でこれを行う方法がわかりません。
3
Arni J

Ifupdownのifstateファイルを確認できます。これにより、ネットワークの構成に使用されたものかどうかがわかります。

/run/network/ifstate

そこにテキストが含まれている場合は、ifupdownが使用されていると予想できます。存在しない場合、システムはネットプランを介して管理されている可能性があります(ただし、NetworkManagerかsystemdかはわかりません)

次に、特定のインターフェイスにどのバックエンドが使用されているかを知りたい場合は、netplanに問い合わせて、出力を解析して必要な情報を取得できます。

netplan generate --mapping enp3s0

次のようなテキストを出力します。

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

そうすれば、インターフェースが設定されたマッチングルールを使用して知ることもできます(インターフェースの「最終」名を使用してマッピングを確認し、ネットプランYAMLにマッチするマッチングルールを通知します)。