Reproducible, single-layer, non-root Ubuntu base image — digest-pinned, multi-series and multi-arch, with the hook library downstream images inherit.
  • Shell 94.4%
  • Dockerfile 3.9%
  • Makefile 1.1%
  • Jinja 0.6%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Damián Búho 53e939fca9
All checks were successful
published / release-tag (push) Successful in 1s
published / runner-is-ready (push) Successful in 3s
published / signing-is-ready (push) Successful in 3s
published / projectfile-is-valid (push) Successful in 2s
published / source-is-compliant (push) Successful in 5s
published / source-is-secure (push) Successful in 6s
published / projectfile-is-ok (push) Successful in 3s
published / source-passes-lint (push) Successful in 35s
published / documentation-passes-lint (push) Successful in 48s
published / image-is-built (noble, amd64) (push) Successful in 38s
published / image-is-built (resolute, amd64) (push) Successful in 44s
published / image-is-secure (noble, amd64) (push) Successful in 8s
published / image-is-secure (resolute, amd64) (push) Successful in 9s
published / container-is-verified (noble, amd64) (push) Successful in 30s
published / container-is-verified (resolute, amd64) (push) Successful in 32s
published / image-is-published (noble, kiota) (push) Successful in 6s
published / image-is-published (resolute, kiota) (push) Successful in 6s
published / image-is-published (noble, dockerhub) (push) Successful in 31s
published / image-is-published (resolute, dockerhub) (push) Successful in 44s
published / release-is-published (push) Successful in 1s
published / release-notes-are-published (push) Successful in 3s
published / published (push) Successful in 0s
chore(version): 0.27.3
2026-10-27 18:30:51 -03:00
.compose chore: init 2026-08-15 13:07:51 -03:00
.container fix(deps): bump upstreams 2026-10-27 12:00:03 -03:00
.forgejo/workflows build(workflows): enable zstd in artifacts 2026-10-26 14:24:36 -03:00
.github/workflows build(workflows): enable zstd in artifacts 2026-10-26 14:24:36 -03:00
.makefile chore(makefile): sync m6e submodules 2026-10-26 15:57:15 -03:00
.scripts chore: pin ubuntu base image digests and add pinning script 2026-09-10 16:18:19 -03:00
docs fix(b19-exec): claim the record before start and hold an early stop 2026-10-25 21:32:42 -03:00
LICENSES chore: init 2026-08-15 13:07:51 -03:00
scaffold perf(container): declare M6E_VERSION next to the user stage 2026-10-08 02:09:35 -03:00
.claudeignore chore: sorting for claudeignore 2026-09-13 12:48:14 -03:00
.containerignore build: ignore .worktrees (oci/docker) 2026-09-29 23:59:11 -03:00
.dockerignore build: ignore .worktrees (oci/docker) 2026-09-29 23:59:11 -03:00
.gitattributes chore: clean j2 from attributes 2026-09-14 00:36:26 -03:00
.gitignore build: ignore .worktrees 2026-09-29 23:56:09 -03:00
.gitmodules build: hard .gitmodules before big refactoring of m6e 2026-09-02 18:39:54 -03:00
.hadolint.yaml chore: init 2026-08-15 13:07:51 -03:00
.yamllint chore(yamllint): generate from the projectfile 2026-09-17 22:37:47 -03:00
AGENTS.md perf(b19-log): source the level filter in healthcheck.d and process-hooks 2026-10-26 22:03:05 -03:00
AI_POLICY.md chore(style): unify project naming schema 2026-09-13 14:45:05 -03:00
CITATION.cff chore(version): 0.27.3 2026-10-27 18:30:51 -03:00
CLAUDE.md chore: init 2026-08-15 13:07:51 -03:00
CODE_OF_CONDUCT.md chore(style): unify project naming schema 2026-09-13 14:45:05 -03:00
CODEOWNERS chore: init 2026-08-15 13:07:51 -03:00
CONTRIBUTING.md chore: regenerate contributing 2026-09-30 06:39:20 -03:00
Dockerfile feat(b19-exec)!: supervise named background daemons 2026-10-25 02:53:49 -03:00
lefthook.yaml chore: regenerate lefthook.yaml 2026-09-29 22:37:46 -03:00
LICENSE chore: init 2026-08-15 13:07:51 -03:00
Makefile feat(image): publish every series as a tag of one repository 2026-09-30 18:02:13 -03:00
projectfile.yaml chore(version): 0.27.3 2026-10-27 18:30:51 -03:00
README.md feat(security): distrust CA certificates by SHA-256 fingerprint 2026-10-20 21:00:10 -03:00
SECURITY.md docs(security): show the fingerprint of the reporting key 2026-10-15 23:27:05 -03:00
SUPPORT.md chore(docs): reenable codeberg 2026-09-18 14:35:29 -03:00

Español · Українська

B19 / Ubuntu

Reproducible, single-layer, non-root Ubuntu base image — digest-pinned, multi-series and multi-arch, with the hook library downstream images inherit.

Stand with Ukraine Projectfile inside License Cosign PRs welcome REUSE compliance

Project status Last commit on kiota.ch Last commit on Codeberg Last commit on GitHub

Publish pipeline on GitHub Vulnerability audit on GitHub Dependency freshness on GitHub Analysis sweep on GitHub

Publish pipeline on kiota.ch Vulnerability audit on kiota.ch Dependency freshness on kiota.ch Analysis sweep on kiota.ch

Features

  • Persistent APT cache across builds
  • Service process management with log routing (b19-exec)
  • Cached artifact downloads with integrity verification
  • Timed command execution with failure reporting (b19-run)
  • Run-once initialization (bootstrap.d)
  • Modular build hooks (build.d)
  • Compromised certificate authorities distrusted ahead of upstream
  • Automatic CPU count detection
  • Declarative dependency management (b19-deps)
  • Pluggable startup system (entrypoint.d)
  • Feature toggles for all subsystems
  • Built-in health monitoring (healthcheck.d)
  • Multilingual shell output (b19-i18n)
  • Image lineage tracking
  • Structured, level-filtered logging (b19-log)
  • Non-root container by default
  • Air-gapped / offline build and runtime support
  • Runtime overlay injection
  • Reproducible base image (pinned by digest)
  • Port validation
  • Unified lifecycle runner family
  • Docker secrets auto-loading
  • Interactive shell hooks
  • Graceful signal handling
  • Jinja2 configuration templates (minijinja-cli)
  • Built-in test framework (test.d)
  • Nothing hangs forever
  • Pre-installed utility tools
  • XDG Base Directory paths

See Features for the full list.

What this provides

  • Container image ghcr.io/damian-buho/b19/ubuntu:resolute
  • Container image ghcr.io/damian-buho/b19/ubuntu:noble
  • Container image damianbuho/b19-ubuntu:resolute
  • Container image damianbuho/b19-ubuntu:noble

Installation

Pull the published container image:

Pull from GHCR — linux/amd64, linux/arm64, linux/riscv64

docker pull ghcr.io/damian-buho/b19/ubuntu:resolute

Pull from DockerHub — linux/amd64

docker pull damianbuho/b19-ubuntu:resolute

Series: resolute | noble

Stable releases also publish X.Y.Z, X.Y and X tags — pull the precision you want to pin.

If the registries above are unreachable, pull from the origin instead:

Pull from Kiota — linux/amd64

docker pull kiota.ch/b19/ubuntu:resolute

Series: resolute | noble

Usage

Build on top of this image:

From GHCR

FROM ghcr.io/damian-buho/b19/ubuntu:resolute

From DockerHub

FROM damianbuho/b19-ubuntu:resolute

Series: resolute | noble

For the recommended multi-stage pattern and the build-hook system (build.d), scaffold a derivative with b19/scripts/scaffold.sh from m6e/b19.

Building

Clone the repository with its submodules:

git clone --recurse-submodules https://codeberg.org/b19/ubuntu ubuntu && cd ubuntu

Build the container image locally:

make container-build

Run make with no arguments for the default target; run make help to list every target.

For the local dev loop, make dev-container brings up the dev-container.

Pipeline entry points:

  • make analyzed — Run the heavy analysis sweep (mutation testing, benchmarks)
  • make audited — Re-scan the pinned dependencies and published artifacts for new vulnerabilities
  • make check-outdated — Report every pinned dependency that lags upstream
  • make release-is-ready — Run the pseudo-CI pipeline locally — build, test and scan, without publishing

Documentation

Policies

License

This project is licensed under MIT — see the LICENSE file for details.