feat: bake podman/uidmap/fuse-overlayfs into the actions-runner image - #1
Merged
Merged
Conversation
Adds podman (plus uidmap/fuse-overlayfs, needed for rootless user-namespace + storage-driver support) to the runner image, and a new publish-podman-runner.yml workflow that builds/pushes it to this fork's own GHCR namespace (ghcr.io/promptexecution/actions-runner-podman) independent of upstream's release-branch-driven docker-publish.yml. Built for app4dog#92 (middleware CI's build-image job fails on a self-hosted runner with no docker.sock, docker having been deliberately purged in favor of podman-only). Verified locally: image builds clean, podman --version/info work when run directly; podman run as the runner user inside a container started FROM this image still can't create its own nested rootless user namespace (newuidmap: Operation not permitted, reproduces even with --privileged on the outer container) -- this is a real, empirically-confirmed limitation of nesting rootless user-namespace creation two levels deep, not a missing capability flag. The intended consumption model is therefore host-podman-socket passthrough (CONTAINER_HOST pointing at a mounted host podman.sock) rather than this image's own podman creating a third nested namespace layer -- see the b00t-cli gh-runner tooling change that wires this up.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds podman (+ uidmap, fuse-overlayfs) to the runner image, and a new
publish-podman-runner.ymlworkflow that builds/pushes to this fork's own GHCR namespace (ghcr.io/promptexecution/actions-runner-podman), independent of upstream's release-branch-drivendocker-publish.yml.Built for app4dog/middleware#92 (CI's
build-imagejob fails on a self-hosted runner with no docker.sock — docker was deliberately purged in favor of podman-only).Important finding
Verified locally: the image builds clean,
podman --version/podman infowork when run directly. Butpodmanrun as the runner user inside a container started from this image still can't create its own nested rootless user namespace —newuidmap: write to uid_map failed: Operation not permitted, reproduces even with--privilegedon the outer container. This is a real, empirically-confirmed kernel limitation (nesting rootless user-namespace creation two levels deep), not a missing capability flag.So this image alone doesn't make podman usable for actual builds on a runner that's itself deployed as a rootless podman pod — the consumption model needs to be host-podman-socket passthrough (
CONTAINER_HOSTpointing at a mounted hostpodman.sock) rather than this image's own podman trying to create a third nested namespace layer. That wiring lives in the b00t-cligh-runnertooling, not this repo.Test plan
podman build -f images/Dockerfile --build-arg RUNNER_VERSION=2.336.0— clean buildpodman run --user runner <image> podman --version— works/etc/subuid//etc/subgidcorrectly allocated for therunneruser--cap-add SETUID --cap-add SETGID, and--privileged