Sign in

Search issue titles and bodies, change requests and comments. Private repositories you cannot read are not included.

vole
Clone

Read only, no credentials:

https://rodent.software/git/vole.git

Write over SSH with a registered key:

git clone ssh://git@0.0.0.0:2222/vole.git

A free and open-source forge that lives in your Git repo.

Make the packaged runner able to create a container on Debian and Ubuntu

9704d735dbcce94c67307e0ac4bbef76819768e8 · Keenan Nemetz · 2h ago · parent b7396a11

Make the packaged runner able to create a container on Debian and Ubuntu

Three failures in a row stop a machine built exactly as docs/deploy/runner.md
says, and each one is a setting the distributions either get wrong or leave out:

- The unit sets NoNewPrivileges=true. Rootless podman, Docker, and nerdctl all
  map the caller into the container through setuid newuidmap and newgidmap, and
  that setting stops a setuid helper from gaining privilege, so the mapping
  fails before a container exists. Turn it off and say why: the isolation a job
  gets is its container, so the rest of the hardening stays.

- Debian and Ubuntu ship /etc/containers/registries.conf entirely commented out,
  so a digest-pinned base image written as a short name has no registry to
  resolve against. Install unqualified-search-registries = ["docker.io"] as a
  drop-in. The reference's digest is the pin; the list only says where to ask,
  and a site can override it with a higher-numbered file. Chosen over qualifying
  the repository's own .vole/images, because a contributor adding a workflow
  later hits the same wall on a machine they cannot edit.

- vole-runner runs as a system service, so the runner's account has no systemd
  user manager for podman to ask for a cgroup scope; crun falls back to sd-bus,
  which answers Interactive authentication required, and the first RUN step
  dies. Install [engine] cgroup_manager = "cgroupfs" as a drop-in, which writes
  into the subtree Delegate=yes already gives the service.

Both drop-ins merge with the distribution's configuration instead of replacing
it, and reach the runner's account because system configuration is read for
rootless users too. Every install path installs the package, so the cloud-init
template needs no second copy of either setting to drift.

docs/deploy/runner.md says what each file is for and what the failure looks like
without it, and names the user-unit-with-enable-linger arrangement as the
alternative an operator may choose, including the /run/user/<uid> conflict with
the unit's XDG_RUNTIME_DIR. scripts/check-deploy.py now fails when the package
stops installing either drop-in, or when the unit goes back to defeating the
uid mapping: a runner missing one takes a job and fails it before a step runs,
which reads on the instance as a repository whose build broke.

Closes 01M6YW9ZWB69GVFN7BR53SPWC6
Closes 01M6YWA3JX0WWHJ55JCVDZ2QTP
Closes 01M6YWA79EWR97YYK5NR7R19CK

docs/packaging.md +2

@@ -34,6 +34,8 @@ when the driver's bundled copy is used instead.
34 34 | `/usr/lib/systemd/system/vole.service` | The unit, with hardening and a `/var/lib/vole` state directory |
35 35 | `/usr/lib/systemd/system/vole-runner.service` | The CI runner's unit. Not enabled, and inert until `/etc/vole/runner.env` names an instance |
36 36 | `/etc/vole/runner.env` | Arguments for that unit, as a conffile. See [Deploying § CI runners](deploy/runner.md) |
37 | `/etc/containers/registries.conf.d/50-vole-runner.conf` | Where a short image name is looked up, as a conffile. Debian and Ubuntu ship no unqualified search registries, so a digest-pinned base written as a short name cannot resolve without it. See [Deploying § CI runners](deploy/runner.md#what-the-package-configures-in-the-container-runtime) |
38 | `/etc/containers/containers.conf.d/50-vole-runner.conf` | `cgroup_manager = "cgroupfs"` for the runner's rootless runtime, as a conffile. A system service has no systemd user manager for podman to ask for a cgroup scope. See [Deploying § CI runners](deploy/runner.md#what-the-package-configures-in-the-container-runtime) |
37 39 | `/etc/vole/vole.toml` | Configuration, marked as a conffile so your edits survive upgrades |
38 40 | `/usr/share/doc/vole/` | `LICENSE` and `NOTICE` |
39 41 | `/var/lib/vole/data` | The instance: repositories, databases, stores, host key, audit log |