web-dev-qa-db-fra.com

Détecter si netplan gère la configuration du réseau (Shell)

J'aimerais savoir dans un script Shell d'un conteneur LXD si le conteneur est géré par Netplan. Cela peut être un peu un inconnu car j'ai un mélange de 16.04 systèmes 18.04 et de systèmes 18.04 mis à niveau.

Afin d'écrire la configuration réseau correcte dans le conteneur, je dois détecter si la configuration est statique dans /etc/network/interfaces ou dans un fichier Netplan yaml.

Je pourrais vraiment utiliser quelque chose comme netplan status mais comme cette commande n'existe pas, j'ai besoin d'alternatives.

J'ai posé pas mal de questions, et il semble n'y avoir aucun moyen officiel. Les suggestions que j'ai eues jusqu'à présent:

  1. cat /etc/network/interfaces et cherchez le message d'information Netplan à cet endroit. Je n'aime pas cette approche, car elle serait évidemment sujette à la casse.
  2. Quelqu'un m'a suggéré de rechercher simplement/etc/netplan - mais cela ne fonctionnera pas sur les systèmes mis à niveau, car Netplan est désactivé mais toujours installé.
  3. Une autre suggestion était l'inverse: que je puisse vérifier si ifupdown ou systemd gère le réseau. Le problème est que je ne suis pas sûr de savoir comment faire cela dans un sens pratique.
3
Arni J

Vous pourrez peut-être vérifier le fichier ifstate de ifupdown, qui vous indiquera si c'est ce qui a été utilisé pour configurer le réseau:

/run/network/ifstate

Si c'est le cas et qu'il contient du texte, vous pouvez vous attendre à ce que ifupdown soit utilisé. S'il n'est pas présent, le système est probablement géré via netplan (mais cela ne vous dira pas s'il s'agit de NetworkManager ou de systemd)

Ensuite, si vous voulez savoir quel back-end est utilisé pour une interface particulière, vous pouvez demander à netplan et analyser le résultat pour obtenir les informations dont vous avez besoin:

netplan generate --mapping enp3s0

Il produit un texte comme ceci:

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

De cette façon, vous pouvez également savoir à l'aide des règles de correspondance configurées par l'interface (vous utilisez le nom "final" d'une interface pour vérifier le mappage, il vous indique quelle règle de correspondance se trouve dans le plan YAML qui lui correspond).