Skip to content

[pull] main from bootc-dev:main#158

Merged
pull[bot] merged 14 commits into
TheTechOddBug:mainfrom
bootc-dev:main
May 6, 2026
Merged

[pull] main from bootc-dev:main#158
pull[bot] merged 14 commits into
TheTechOddBug:mainfrom
bootc-dev:main

Conversation

@pull
Copy link
Copy Markdown

@pull pull Bot commented May 6, 2026

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

cgwalters and others added 14 commits May 5, 2026 18:34
`just bcvk up` with `BOOTC_variant=composefs` silently ignored the
variant — it read the env var but never passed `--composefs-backend`
or related flags to `bcvk libvirt run`, so the VM always installed
with the ostree backend.

Extract a shared `BcvkInstallOpts` helper (new `bcvk.rs` module) that
both `sysext.rs` and `tmt.rs` use to build bcvk CLI arguments from
`BOOTC_*` environment variables. This fixes the sysext path and
eliminates the duplicated firmware/install arg construction in tmt.

Assisted-by: OpenCode (Claude Opus 4)
Signed-off-by: Colin Walters <walters@verbum.org>
The xtask run-tmt command now reads BOOTC_bootloader, BOOTC_filesystem,
BOOTC_seal_state, and BOOTC_boot_type directly via clap env support.
When BOOTC_variant=composefs, --composefs-backend is implied
automatically. This means `just test-tmt` works correctly with
composefs env vars set, without the Justfile needing to forward
flags manually.

Assisted-by: OpenCode (Claude Opus 4)
Signed-off-by: Colin Walters <walters@verbum.org>
Add a podman_client module for pulling container images through
podman's native libpod HTTP API with streaming per-blob download
progress displayed via indicatif.

Starts a transient `podman system service` against bootc's custom
storage root (reusing bind_storage_roots and setup_auth helpers)
and talks to it over a Unix socket. The response NDJSON stream is
read line-by-line via AsyncBufReadExt.

Also fix get_ensure_imgstore() to work on composefs-only systems by
falling back to physical_root when ostree is not initialized.

Factor setup_auth() out of new_podman_cmd_in() so both the CLI
podman commands and the API service share the same auth setup.

Assisted-by: OpenCode (Claude Opus 4)
Signed-off-by: Colin Walters <walters@verbum.org>
The composefs backend has a multi-dimensional configuration space
(variant, bootloader, boot_type, seal_state, filesystem) with
non-obvious constraints between them. Add a clear reference table
and common workflow examples to CONTRIBUTING.md, and a quick-start
cheat sheet to the Justfile header.

Assisted-by: OpenCode (Claude Opus 4)
Signed-off-by: Colin Walters <walters@verbum.org>
By far the biggest change here is to how we do our GC
logic. Now, composefs-rs itself holds refs to the EROFS
images; we just need to hold onto the images themselves.

Assisted-by: OpenCode (Claude Opus 4)
Signed-off-by: Colin Walters <walters@verbum.org>
Add unified storage support to the composefs path, leveraging
the new support for containers-storage.

See: composefs/composefs-rs#285
Assisted-by: OpenCode (Claude Opus 4)
Assisted-by: OpenCode (Claude Sonnet 4.6)
Signed-off-by: Colin Walters <walters@verbum.org>
Instead of reading the in memory filesystem to get /usr/lib/os-release
get it from the mounted EROFS. This is also prep for providing backwards
compatibility due to our newly introduced prefix `bootc_composefs-`
where we'll need to create new boot entries and we can get the `os_id`
from the mounted root

Signed-off-by: Pragyan Poudyal <pragyanpoudyal41999@gmail.com>
Signed-off-by: Colin Walters <walters@verbum.org>
While finishing up GC, we had come up with the idea of prepending our
boot binaries (UKI PEs, BLS directories) with a certain prefix and we
ended up hard requiring these prefixes.

If someone has an older version of bootc which they used to install
their system with, then upgrade to a new version, many if not all of the
important operations would cease to work.

This basically handles the backwards compatibility of new binaries on
older systems by prepending our custom prefix to all existing boot binaries

Signed-off-by: Pragyan Poudyal <pragyanpoudyal41999@gmail.com>
Signed-off-by: Colin Walters <walters@verbum.org>
prepend_custom_prefix() already checks has_prefix on each entry and
skips those that already have it, so it is safe to call on every boot
with no extra cost when migration is already done. Running it
unconditionally ensures it fires correctly on systems upgrading from
older bootc versions that lacked the prefix.

Signed-off-by: Pragyan Poudyal <pragyanpoudyal41999@gmail.com>
Signed-off-by: Colin Walters <walters@verbum.org>
Add some basic infra to mock up enough of an installed root
to use in unit tests - specifically targeted for the bootloader
logic.

Assisted-by: OpenCode (Claude Opus 4)
Signed-off-by: Colin Walters <walters@verbum.org>
…yment

Switching to an image whose composefs EROFS digest is identical to any
existing deployment (booted, staged, rollback, or pinned) is now an
error.  Two images from different sources can produce byte-identical
content; silently reusing an existing state directory would be wrong
because its /etc was seeded from a different image.

Assisted-by: OpenCode (Claude Sonnet 4.5)
Signed-off-by: Colin Walters <walters@verbum.org>
When a user has previously opted into unified storage, all subsequent
switch and upgrade operations should continue using that path. Previously
only the target image was checked; this also checks the booted image,
so that switching to a new image while already on unified storage
automatically stays on the unified path without requiring an explicit flag.

Assisted-by: OpenCode (Claude Sonnet 4.5)
Signed-off-by: Colin Walters <walters@verbum.org>
When iterating with the bcvk dev VM, developers often have a locally
built composefs image (localhost/bootc). Automatically using that if it
exists avoids having to explicitly set BOOTC_BASE_IMAGE on every
invocation, and ensures the VM uses the correct bootloader (e.g.
systemd-boot) rather than the upstream base's grub.

Assisted-by: OpenCode (Claude Sonnet 4.5)
Signed-off-by: Colin Walters <walters@verbum.org>
Regression test for #1808 where
`bootc internals cfs gc` was deleting objects backing live deployments.

Add `--assert-no-op` to `bootc internals composefs-gc` (implies
`--dry-run`) which exits non-zero if GC would remove any objects or
prune any OCI symlinks.  This gives tests and health-checks a clean
machine-readable signal without parsing human-readable output.

Use it in the composefs readonly smoke test in place of the previous
approach of capturing stdout and grepping for count strings.

Assisted-by: OpenCode (Claude Sonnet 4.6)
Signed-off-by: Colin Walters <walters@verbum.org>
@pull pull Bot locked and limited conversation to collaborators May 6, 2026
@pull pull Bot added the ⤵️ pull label May 6, 2026
@pull pull Bot merged commit 961141a into TheTechOddBug:main May 6, 2026
0 of 6 checks passed
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants