Coding Week 11 — Documenting Podman for Users
This week’s goal was mostly to find out the simplest documentation for users running Podman, and to make draft PRs for the compose files and scripts so the mentors can test them.
The simplest documentation problem
One of the biggest challenges I faced during the whole coding period was finding the exact workflow any Linux user can follow to run Podman, while keeping it as simple as possible.
Last week, when I ran RoboticsAcademy with and without GPU passthrough, I was using Podman 6.0.2 and podman-compose 1.6.0. Neither of those comes from Ubuntu 24.04’s apt packages. I had installed Podman through Homebrew and podman-compose through pip. So I wanted to find a solution that works with Podman 4.9.3, the version Ubuntu 24.04 actually ships.
The blocker was that nvidia-ctk generates a CDI specification containing an
additionalGids field, which Podman 4.9.3 cannot parse, so it rejects the whole
file and finds no GPU. Thankfully NVIDIA had already proposed a solution in
this issue: https://github.com/NVIDIA/nvidia-container-toolkit/issues/1860.
Generating the spec with --feature-flag no-additional-gids-for-device-nodes
produces an older format that 4.9.3 reads fine.
Once I was on 4.9.3, two other problems I had been documenting disappeared.
Ubuntu’s podman-compose 1.0.6 and crun 1.14.1 both work correctly with it.
They only break against the newer Podman I had been using. So the whole
installation step is now just sudo apt install podman podman-compose.
One extra step users do need: they must add themselves to the video and
render groups. The compatibility flag above works by removing the group IDs
from the spec, so those permissions have to come from the host instead.
Container stopping challenge
Normally, when a container is running in the terminal and the user presses Ctrl+C, Docker stops it. Podman doesn’t. The application shuts down its launchers, but the container keeps running and serving requests.
The reason is that podman-compose 1.0.6 doesn’t exit on SIGINT, and the
cleanup code in the script never gets a chance to run. To stop the stack, a
separate podman-compose -p roboticsacademy down has to be run from the
project root directory in a second terminal.
Work done this week
Apart from the documentation work, there are now three PRs open:
- Documentation: https://github.com/JdeRobot/RoboticsAcademy/pull/3961
- Scripts, adding the
-pflag for Podman: https://github.com/JdeRobot/RoboticsAcademy/pull/3960 - Compose files for Podman: https://github.com/JdeRobot/RoboticsAcademy/pull/3959
Next week’s targets
- Test the problems and workflow for Windows users
-
Change in PR #3961: move the Podman instructions into a separate file rather than adding them to InstructionsForDevelopers
- Testing the podman documentation by setting everything up from scratch
Part of my GSoC 2026 work with JdeRobot. Project tracked at github.com/TheRoboticsClub/gsoc2026-Kartik_Jangid.