J'ai terminé de développer la commande podman pour lancer un container à partir de l'image Docker de Poezio. Au départ, il y a avait un problème de droits et permissions sur les volumes du containers. Ce problème venait du fait que podman était lancé en utilisateur simple, et que le processus dans le container n'était pas lancé en root (dans le container). En effet, dans mon image Docker, un utilisateur simple est créé pour exécuter poezio et stocker ses données. La majorité des images Docker exécutent le processus en root dans le container.

J'avais expliqué cette problématique dans l'article précédent, avec une solution pour le contourner. Mais j'étais insatisfait de cette solution. Pour gérer les utilisateurs des processus, Podman a introduit le concept de Namespaces. Il y a 3 options qui en résultent : --userns et --uidmap --gidmap.

Si l'utilisateur qui lance la commande est le seul utilisateur de la machine, alors il aura l'UID 1000. Cet UID peut être mappé automatiquement avec l'UID 1000 de l'utilisateur dans le container. On va utiliser l'option --userns=keep-id.

Par contre, si vous lancez la commande en root (avec systemd par exemple), l'utilisateur root possède l'UID 0, donc ça va poser d'autres problème. Il y aura aussi des problèmes avec un utilisateur simple, sur un système multi-user, qui possède un UID différent de 1000. L'option qui permet de les lier à l'utilisateur du container (UID 1000) est :

--userns=keep-id:uid=1000,gid=1000

Cette option ne peut pas être une option par défaut dans les gestionnaires de container (même dans la ligne de commande podman), car on ne peut pas savoir à l'avance si le processus dans le container sera exécuté avec l'UID 0 (root) ou un autre UID. Pour les autres cas d'usage non-standard, il reste les options --uidmap --gidmap à votre disposition.

Voici la commande complète :

$ podman run --userns=keep-id -ti -e TERM --log-driver none \
-v $HOME/podman/poezio-prod/config:/home/poezio-user/.config/poezio:Z \
-v $HOME/podman/poezio-prod/data:/home/poezio-user/.local/share/poezio:Z \
-v $HOME/podman/poezio-prod/proxychains:/home/poezio-user/proxychains:Z \
docker.io/fantomfp/poezio-omemo:0.14-6.fr.x64 /usr/bin/poezio

Maintenant que la commande est finalisée, il devient possible de développer une solution basée sur le gestionnaire de container Kubernetes. Affaire à suivre...

L'image Docker/Podman de Poezio va être mise à jour.