Description
Status quo
See the filesystem docs.
Proposal 1 (Phase 0): pull into c/storage
Basically our initial fetch we pull the base OS image via just directly doing a podman pull
or skopeo copy
the same way we pull LBIs.
From there, we do a reflink/hardlink copy into the ostree store (i.e. This would duplicate metadata, but not data on disk. Reflinks should always work. If we have to do hardlinks it could potentially confuse the st_nlink
count if any LBIs happen to share layers. But that seems unlikely.
Incremental transition
Probably the best way to do this is to change things so on upgrade, we only pull layers into the LBI storage if they didn't already exist in the ostree store or so.
More info
Today this project uses ostree-containers for the base image.
Much more recently, we landed logically bound app images which ended up requiring a bootc-owned containers/storage instance.
This left us in a confusing situation where we have two image storage backends used by bootc - one for the booted host, and one for LBIs.
The code they don't share is mostly containers/storage.
This issue tracks unification: Having bootc leverage more of containers/storage (which is going to likely require containers/storage improvements.
Update 20250632: See also #1190 for transitioning to a "native composefs" storage.