You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
install: logically bound images are not installed with --composefs-backend #2540
With --composefs-backend, bootc install doesn't copy logically bound images into the installed system. The install exits 0 and prints nothing about bound images. The same install without --composefs-backend puts the image in /ostree/bootc/storage.
Reproduced on quay.io/fedora/fedora-bootc:44 (bootc 1.16.13), binding a busybox image by a tag that is in the host storage before the install:
podman pull docker.io/library/busybox@sha256:f97baa533a26513c453a362be331a43eb60214302f449c16571b23cea141dce4
podman tag docker.io/library/busybox@sha256:f97baa533a26513c453a362be331a43eb60214302f449c16571b23cea141dce4 docker.io/library/busybox:latest
FROM quay.io/fedora/fedora-bootc:44@sha256:5ab8ee5189bb0f3870279723f5343474df002d8d6f46564702b3ad3ba7382d98
COPY bound.container /usr/share/containers/systemd/bound.container
RUN mkdir -p /usr/lib/bootc/bound-images.d && ln -s /usr/share/containers/systemd/bound.container /usr/lib/bootc/bound-images.d/bound.container
podman build -t localhost/gaprepro:1 .
truncate -s 20G a.raw b.raw
podman run --rm --privileged --pid=host --security-opt label=type:unconfined_t \
-v /dev:/dev -v /var/lib/containers:/var/lib/containers -v $PWD:/out localhost/gaprepro:1 \
bootc install to-disk --via-loopback --filesystem ext4 --generic-image --wipe \
--composefs-backend /out/a.raw
# the same again without --composefs-backend, writing b.raw
With each root partition mounted, ostree/bootc/storage/overlay-images/images.json on the ostree disk lists busybox:latest. The composefs disk has no container storage, and the only file on it that mentions busybox is the stock 000-shortnames.conf.
The composefs install doesn't read bound-images.d at all. With a regular file there instead of a symlink, the ostree install fails with Querying bound images: Not a symlink: bound.container, and the composefs install completes.
BoundImages::from_state is called only from ostree_install (install.rs L2092), and the copy happens in install_with_sysroot (L2029-L2043). The composefs branch (L2156-L2226) has neither, and plan-22-logically-bound-install is skipped on composefs (integration.fmf L69-L75).
I think it's clear we probably should not have declared the backend stable without going over the test suite and ensuring we had parity. The root problem is everything under extra-fixme_skip_if_composefs: true.
For now, my inclination here is to first make this case an explicit error.
Activity
cgwalters commentedon Oct 5, 2026
Thanks for filing this (and other issues).
I think it's clear we probably should not have declared the backend stable without going over the test suite and ensuring we had parity. The root problem is everything under
extra-fixme_skip_if_composefs: true.For now, my inclination here is to first make this case an explicit error.
ci: Drop logically bound images from the composefs test images
install: Reject logically bound images with the composefs backend