No description
Find a file
Jonathan Lebon c2ff52a7cf
bootc-base-imagectl: simplify manifest path logic
The `if os.path.isdir(args.manifest)` bit dates from the introduction
of this script, but doesn't really work. I suspect the intent here was
to abstract over some manifests being top-level YAML files and others
being directories).

Except that:
1. The script didn't actually check the right path. It's checking
   `$PWD/{args.manifest}` instead of `$MANIFESTDIR/{args.manifest}`.
2. `list` doesn't have the equivalent logic to look for `manifest.yaml`
   files in subdirectories.
3. Nowadays, there is both a e.g. `standard.yaml` _and_ a
   `standard/manifest.yaml` directory. The established semantic there
   AIUI is that the top-level manifests are opinionated for a specific
   OS (Fedora/CentOS/RHEL), whereas the directories are shared across
   all of those.

So let's just nuke support for the directory path.
2025-06-17 15:32:25 -04:00
.tekton Drop fedora- prefix from canonical manifests 2025-06-17 15:32:25 -04:00
fedora-includes Move fedora-generic to fedora-includes 2025-02-25 08:27:20 -05:00
finalize.d Install bootc-base-imagectl in Pungi path 2025-06-09 13:51:00 -04:00
iot whitespace changes to appease downstream CI 2025-05-09 12:52:16 -04:00
minimal manifests: consistently use set -xeuo pipefail in postprocess scripts 2025-05-26 14:41:11 -04:00
minimal-plus Rename tier-x → minimal-plus 2025-03-18 10:12:38 -04:00
standard Move python3-libdnf5 to fedora only 2025-06-17 12:52:34 -04:00
tests Move python3-libdnf5 to fedora only 2025-06-17 12:52:34 -04:00
.gitlab-ci.yml chore(deps): update quay.io/buildah/stable docker tag to v1.40.1 2025-06-10 09:10:24 +00: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 all dependencies 2025-06-05 14:14:04 +00:00
bootc-base-imagectl bootc-base-imagectl: simplify manifest path logic 2025-06-17 15:32:25 -04:00
bootc-base-imagectl.md whitespace changes to appease downstream CI 2025-05-09 12:52:16 -04:00
Containerfile Containerfile: drop type=cache mount from RUN 2025-05-20 17:45:34 -04:00
COPYING Enable pre-commit 2023-10-30 22:27:12 +02: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 fedora-42: update repos list 2025-06-09 13:48:58 -04:00
fedora-bootc-config.json Only rawhide 2024-05-28 19:53:56 +03:00
fedora-bootc.yaml Swap symlink state for fedora-bootc -> fedora-standard 2025-02-25 08:27:20 -05:00
fedora-iot.yaml Drop fedora- prefix from canonical manifests 2025-06-17 15:32:25 -04:00
fedora-minimal-plus.yaml Drop fedora- prefix from canonical manifests 2025-06-17 15:32:25 -04:00
fedora-minimal.yaml Drop fedora- prefix from canonical manifests 2025-06-17 15:32:25 -04:00
fedora-rawhide.yaml Remove releasever from manifests; add pungi treefile stubs 2024-10-23 15:27:50 -04:00
fedora-standard.yaml Drop fedora- prefix from canonical manifests 2025-06-17 15:32:25 -04:00
fedora.repo fedora.repo: Drop trailing whitespace 2024-04-18 16:33:36 -04:00
install-manifests Drop fedora- prefix from canonical manifests 2025-06-17 15:32:25 -04:00
iot.yaml Drop fedora- prefix from canonical manifests 2025-06-17 15:32:25 -04:00
LICENSE Initial split from Fedora CoreOS 2022-12-09 15:32:25 -05:00
minimal-plus.yaml Drop fedora- prefix from canonical manifests 2025-06-17 15:32:25 -04:00
minimal.yaml Drop fedora- prefix from canonical manifests 2025-06-17 15:32:25 -04:00
README.md README: Markdown lint fixes 2025-04-09 12:11:18 -04:00
renovate.json Group compose changes per Fedora version 2025-06-04 10:46:16 +02:00
standard.yaml Drop fedora- prefix from canonical manifests 2025-06-17 15:32:25 -04:00

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 standard 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.

  • standard: This image is the default, what is published as https://quay.io/repository/fedora/fedora-bootc
  • minimal: This content set is more of a convenient centralization point for CI and curation around a package set that is intended as a starting point for a container base image.
  • minimal-plus: This content set is intended to be the shared base used by all image-based Fedora variants (IoT, Atomic Desktops, and CoreOS).

standard inherits from minimal-plus and minimal-plus in turn inherit from minimal.

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

Available Tiers + Versions

NOTE: The location and naming of these images is subject to change.

Version standard minimal minimal-plus
Rawhide quay.io/fedora-testing/fedora-bootc:rawhide-standard quay.io/fedora-testing/fedora-bootc:rawhide-minimal quay.io/fedora-testing/fedora-bootc:rawhide-minimal-plus
Fedora 42 quay.io/fedora-testing/fedora-bootc:42-standard quay.io/fedora-testing/fedora-bootc:42-minimal quay.io/fedora-testing/fedora-bootc:42-minimal-plus

More information

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

Badges

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