v0.5.1 25d29f5

images.md RawHistoryFolder

Images and kernel

A job runs in the image named by ERMITE_RUNNER_IMAGE.

Mode Value Contents
container OCI reference Default ermite-runner-ubuntu-26.04:latest
vm Directory vmlinux (Image on arm64) and base.ext4. Default <state dir>/image

Both come from images/ubuntu-26.04/Dockerfile (Ubuntu 26.04 LTS). The runner executable and Node.js are attached by the host. They are never part of the image.

Build

scripts/build-kernel.sh tmp/image   # vm only: builds the guest kernel
scripts/build-image.sh tmp/image    # builds the OCI image and tmp/image/base.ext4
  • build-kernel.sh downloads Linux 6.18 LTS from kernel.org and checks the tarball against the published sha256 sums. It needs bc, flex, bison, pahole, libelf and openssl headers.
  • build-image.sh needs Docker or Podman (rootless is fine) and e2fsprogs 1.47.1 or newer. No root is needed.
  • The OCI image is tagged ermite-runner-ubuntu-26.04:latest. Set IMAGE_TAG to change it.
  • The kernel config is images/kernel/config-6.18 plus per-architecture fragments. The build fails if a listed option does not survive olddefconfig.
  • arm64 builds with ARCH_NAME=arm64.
  • CONFIG_BINFMT_MISC is built in and mounted by the guest init, so docker/setup-qemu-action can run foreign-architecture containers.

What the image must contain

  • User runner, uid and gid 1001, home /home/runner. Steps run as this user. Without it, steps run as root (test images only).
  • /home/runner/work and /opt/hostedtoolcache, owned by runner.
  • bash and sh. python3 and a python command for shell: python.
  • dockerd and passwordless sudo for runner, for jobs that use Docker.
  • Common tools: git, curl, jq, build-essential, ca-certificates, tzdata, zip and unzip.

pwsh is not in the image. A step that asks for it fails with pwsh: command not found.

source
1# Images and kernel
2
3A job runs in the image named by `ERMITE_RUNNER_IMAGE`.
4
5| Mode | Value | Contents |
6| --- | --- | --- |
7| `container` | OCI reference | Default `ermite-runner-ubuntu-26.04:latest` |
8| `vm` | Directory | `vmlinux` (`Image` on arm64) and `base.ext4`. Default `<state dir>/image` |
9
10Both come from `images/ubuntu-26.04/Dockerfile` (Ubuntu 26.04 LTS). The runner executable and Node.js are attached by the host. They are never part of the image.
11
12## Build
13
14```sh
15scripts/build-kernel.sh tmp/image   # vm only: builds the guest kernel
16scripts/build-image.sh tmp/image    # builds the OCI image and tmp/image/base.ext4
17```
18
19- `build-kernel.sh` downloads Linux 6.18 LTS from kernel.org and checks the tarball against the published sha256 sums. It needs `bc`, `flex`, `bison`, `pahole`, libelf and openssl headers.
20- `build-image.sh` needs Docker or Podman (rootless is fine) and e2fsprogs 1.47.1 or newer. No root is needed.
21- The OCI image is tagged `ermite-runner-ubuntu-26.04:latest`. Set `IMAGE_TAG` to change it.
22- The kernel config is `images/kernel/config-6.18` plus per-architecture fragments. The build fails if a listed option does not survive `olddefconfig`.
23- arm64 builds with `ARCH_NAME=arm64`.
24- `CONFIG_BINFMT_MISC` is built in and mounted by the guest init, so `docker/setup-qemu-action` can run foreign-architecture containers.
25
26## What the image must contain
27
28- User `runner`, uid and gid 1001, home `/home/runner`. Steps run as this user. Without it, steps run as root (test images only).
29- `/home/runner/work` and `/opt/hostedtoolcache`, owned by `runner`.
30- `bash` and `sh`. `python3` and a `python` command for `shell: python`.
31- `dockerd` and passwordless `sudo` for `runner`, for jobs that use Docker.
32- Common tools: git, curl, jq, build-essential, ca-certificates, tzdata, zip and unzip.
33
34`pwsh` is not in the image. A step that asks for it fails with `pwsh: command not found`.

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 4

Tags 11

↑↓ moveenter openesc close