Go to file
Colin Walters 8b72e30e19 build-sys: Rework to use new compose rootfs + FROM scratch pattern
This takes some of the logic from what's currently in custom base image branch
and applies it here for the main branch.

We need this in order to not depend on the logic that was
removed in https://github.com/containers/buildah/issues/5952

Note that with the latest rpm-ostree v2025.5 `--source-root`
is significantly improved and we don't need to manually copy
dnf variables or gpg keys.

Signed-off-by: Colin Walters <walters@verbum.org>
2025-02-21 18:13:35 -05:00
tier-0 base/bootloader: Drop /usr/lib/ostree-boot/loader 2025-02-05 15:16:59 -05:00
tier-1 growpart: Add `ConditionPathExists=/usr/bin/growpart` 2025-01-14 10:26:11 -05:00
tier-x tier-x: Drop systemd-resolved 2025-02-07 09:23:38 -05:00
.gitlab-ci.yml CI: also build tier-0 and tier-x 2024-09-17 22:35:11 -04:00
.mdl_style.rb Update .mdl_style.rb 2023-11-09 16:14:45 +02:00
.mdlrc Update .mdlrc 2023-11-09 16:18:33 +02:00
.pre-commit-config.yaml chore(deps): update pre-commit hook pre-commit/pre-commit-hooks to v4.6.0 2024-06-03 00:05:58 +00:00
COPYING Enable pre-commit 2023-10-30 22:27:12 +02:00
Containerfile build-sys: Rework to use new compose rootfs + FROM scratch pattern 2025-02-21 18:13:35 -05:00
LICENSE Initial split from Fedora CoreOS 2022-12-09 15:32:25 -05:00
README.md README.md: Slightly more docs for tiers 2024-12-20 15:50:40 -05:00
fedora-40.yaml Remove releasever from manifests; add pungi treefile stubs 2024-10-23 15:27:50 -04:00
fedora-41.yaml Remove releasever from manifests; add pungi treefile stubs 2024-10-23 15:27:50 -04:00
fedora-42.yaml tier-1: add f42 treefile after branching 2025-02-05 16:44:49 -05:00
fedora-bootc-config.json Only rawhide 2024-05-28 19:53:56 +03:00
fedora-bootc.yaml Remove releasever from manifests; add pungi treefile stubs 2024-10-23 15:27:50 -04:00
fedora-generic.yaml tier-x: Drop systemd-resolved 2025-02-07 09:23:38 -05:00
fedora-rawhide.yaml Remove releasever from manifests; add pungi treefile stubs 2024-10-23 15:27:50 -04:00
fedora-tier-0.yaml Remove releasever from manifests; add pungi treefile stubs 2024-10-23 15:27:50 -04:00
fedora-tier-1.yaml CI: also build tier-0 and tier-x 2024-09-17 22:35:11 -04:00
fedora-tier-x.yaml Remove releasever from manifests; add pungi treefile stubs 2024-10-23 15:27:50 -04:00
fedora.repo fedora.repo: Drop trailing whitespace 2024-04-18 16:33:36 -04:00
renovate.json Update renovate.json 2024-08-21 07:22:28 +00:00

README.md

Fedora bootc base images

Create and maintain base bootable container images from Fedora packages.

Motivation

The original Docker container model of using "layers" to model applications has been extremely successful. This project aims to apply the same technique for bootable host systems - using standard OCI/Docker containers as a transport and delivery format for base operating system updates.

Building images

The current default user experience is to build layered images on top of the official binary base images produced and tested by this project. See the documentation5 for more info.

You can build custom base images by forking this repository; however, https://gitlab.com/fedora/bootc/tracker/-/issues/32 tracks a more supportable mechanism that is not simply forking. For more information see6.

Build process

Building the images in this repo can be done with podman build, but note the build process uses a special podman-ecosystem specific mechanism to create fully custom images while inside a Containerfile. You need to enable some privileges as nested containerization is required.

podman build --security-opt=label=disable --cap-add=all \
  --device /dev/fuse -t localhost/fedora-bootc .

See the Containerfile for more details. This builds the default tier-1 image.

Fedora versions

By default, the base images are built for Fedora rawhide. To build against a different Fedora version, you can override the FROM image used to obtain the Fedora repos and dnf variables. E.g.:

podman build --from quay.io/fedora/fedora:41 ...

Deriving

You are of course also free to fork, customize, and build base images yourself. See this page6 of the documentation for more information.

Tiers

At the current time, there is just one reference base image published to the registry. Internally the content set is split up somewhat into "tiers", but this is an internal implementation detail and may change at any time.

It is planned to rework and improve this in the future, especially to support smaller custom images. For more on this, see this tracker issue.

  • tier-1: This image is the default, what is published as https://quay.io/repository/fedora/fedora-bootc
  • tier-0: This content set is more of a convenient centralization point for CI and curation around a package set that we can all agree is the rough minimum necessary for a usable system. It's not meant to be used as is, but layered upon.
  • tier-x: This content set is the shared base used by all image-based Fedora variants (IoT, Atomic Desktops, and CoreOS). Changes to this tier may be done without accounting for external users. To build this, pass --build-arg=MANIFEST=fedora-tier-x.yaml to the build command above.

tier-1 inherits from tier-x and tier-x in turn inherit from tier-0.

All non-trivial changes to tier-0 and tier-x should be ACKed by at least one stakeholder of each Fedora variant WGs.

More information

Documentation: https://docs.fedoraproject.org/en-US/bootc/

Badges

Badge Description Service
Renovate Dependencies Renovate
Pre-commit Static quality gates pre-commit