Installer Podman sur Debian 10 avec home en NFS

Podman, qui permet de faire tourner des images docker sans docker et donc sans privilège root ou accès priviligié sur les serveurs s’installe bien sous Debian à quelques détails près:

  • il faut autoriser l’utilisation des namespace pour les utilisateurs:
$ sudo sysctl kernel.unprivileged_userns_clone=1
#et pour un usage pérenne 
$ sudo  echo 'kernel.unprivileged_userns_clone=1' > /etc/sysctl.d/userns.conf 
echo 'deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/Debian_10/ /' > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/Debian_10/Release.key | sudo apt-key add -

sudo apt-get update -qq
sudo apt-get -qq -y install podman
  • Pour des comptes utilisateurs non locaux, il faut qu’ils apparaissent dans les fichiers suivants:
    /etc/subuid et /etc/subgid

Par exemple pour ajouter tous les uidnumber > 1000 dans ces deux fichiers

for i in `getent passwd  |cut -d: -f3 |sort -n |grep -E "[0-9]{4}" |grep -v 65534`; do echo $i:100000:65536 >> /etc/subuid; echo $i:100000:65536 >> /etc/subgid; done
  • Enfin, si les comptes ont leur home sur NFS, podman ne pourra utiliser le NFS pour y exécuter les images. Il faut donc ajouter cette configuration pour chaque utilisateur:
$ mkdir -p ~/.config/containers
$ cat > .config/containers/storage.conf << EOF
[storage]
graphroot = "/tmp/$USER/containers/storage"
rootless_storage_path = "/tmp/$USER/containers/storage" 
EOF

Et mettre à jour la configuration:

$ podman system migrate
  • Enfin, on peut jouer avec:
$ podman run  --rm debian /bin/echo Hello World.
Trying to pull docker.io/library/debian...
Getting image source signatures
Copying blob e4c3d3e4f7b0 done  
Copying config 1510e85017 done  
Writing manifest to image destination
Storing signatures
Hello World.

J’ai eu besoin d’ajouter le paramètre driver dans mon fichier .config/containers/storage.conf :

[storage]
graphroot = "/tmp/salleman/containers/storage"
rootless_storage_path = "/tmp/salleman/containers/storage" 
driver = "vfs