💾 Archived View for thasmanie.fr › podman-nixos.gmi captured on 2024-05-12 at 14:53:39. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2023-12-28)

-=-=-=-=-=-=-

Podman sous NixOS : Netavark Error

publié le 2023/06/28

retour

EDIT du 06/12/2023

En fait j'avais cette erreur car j'applique le profile hardened de NixOS, qui empêche le chargement à chaud des modules kernel. Il suffit d'ajouter celui qui manque pour ne plus avoir besoin de slirp4netns :

boot.kernelModules = [ "xt_conntrack" ];

Intro

Je suis en train de migrer sous NixOS (vraiement un super OS, j'en ferai peut-être un article) et je me suis pris les pieds dans le tapis lors de l'installation de podman :

Error: netavark: create veth pair: Netlink error: Operation not supported (os error 95)

Site officiel de NixOS

Détails

Dans NixOS, on installe rien à la main, tout est déclaratif, voici comment j'active podman :

  virtualisation.podman = {
    enable = true;
    defaultNetwork.settings = { dns_enabled = false; };
  };

Après l'application de cette configuration, je peux lancer un container avec mon user normal, mais pas en root :

$ podman run --rm -ti alpine:3.18 hostname
2e982f4c3469
$ sudo podman run --rm -ti alpine:3.18 hostname
Error: netavark: create veth pair: Netlink error: Operation not supported (os error 95)

On remarque ici que l'erreur vient du module netavark, le composant réseau de podman depuis la version 4. C'est tout frais, et à ce jour, peu d'issues existent.

En cherchant un peu dans les sources, on voit que la fonction create_veth_pair veut juste renvoyer l'adresse mac de l'interface veth après sa création, rien de bien gros.

Donc la question, c'est pourquoi il ne peut pas créer cette interface.

Je débute sous NixOS mais je sais que pas mal de ressources système sont montées en readonly, ça vient peut-être de là. J'ai déjà joué avec le mode rootless de docker et podman et je me souviens qu'il attendait slirp4netns, un package pour la couche réseau.

Sources de netavark

Wiki Archlinux sur Podman

Solution

Le package est déjà installé, il suffit de le spécifier lors du run, et ça marche :

sudo podman run --rm -ti --network=slirp4netns alpine:3.18 hostname
c2d9f54fad8c

Bonus : définition d'un container systemd

Voici comment déclarer un service systemd qui va lancer un container (une image samba perso pour le'exemple) :

  virtualisation.oci-containers.containers = {
    "samba" = {
      image = "localhost/samba:prod";
      extraOptions = [ "--network=slirp4netns" ];
      ports = [ "445:445" ];
      log-driver = "json-file";
      environment = { TZ = "Europe/Paris"; };
      volumes = [
        "/data/samba:/data"
      ];
    };
  };

Bon on peut aussi utiliser un manifest type Pod de kubernetes, et lancer :

podman kube play