Repository navigation
Conversation
| .partition(|(k, _)| k.starts_with(BOOT_IMAGE_REF_KEY)) | ||
| } | ||
|
|
||
| const DOCKER_CONFIG_MEDIA_TYPE: &str = "application/vnd.docker.container.image.v1+json"; |
There was a problem hiding this comment.
I had actually kind of wanted to take a hard stance that composefs only supports OCI.
We have an existing issue for this.
I understand the rationale behind wanting to support v2s2, but it has larger ramifications...right now we have many places which claim to return OCI types but with this will suddenly return v2s2...or fail right?
There was a problem hiding this comment.
I am fine to drop this commit
| length, | ||
| filename, | ||
| } => { | ||
| let name = std::str::from_utf8(filename).with_context(|| { |
There was a problem hiding this comment.
This and some other changes look like they could be factored out into a clean "prep changes PR"?
There was a problem hiding this comment.
🟡 Changes recommended
Import compatibility, storage selection, config retrieval, and subprocess lifecycle regressions remain unresolved.
6 open issues
Forward storage options to the new importer · New Run skopeo inside the Podman user namespace · New Release the parent's stdin descriptor after spawning · New Normalize containers-storage image ID references · New Keep converted manifests and config blobs consistent · New Install the child cleanup guard immediately after spawning · New
What changed in this PR
Adds containers-storage imports through skopeo’s varlink socket, avoiding intermediate OCI layouts and enabling file-content reuse.
Changes:
- Adds proxy sessions and index-based layer requests.
- Reuses verified layer transfers and supports non-UTF-8 filenames.
- Updates image-type handling, logging, and integration tests.
| File | Description |
|---|---|
| crates/composefs-oci/src/varlink_types.rs | Adds layer-index requests and errors. |
| crates/composefs-oci/src/skopeo_varlink.rs | Implements skopeo proxy imports. |
| crates/composefs-oci/src/oci_image.rs | Recognizes Docker container configs. |
| crates/composefs-oci/src/lib.rs | Routes local imports through skopeo. |
| crates/composefs-oci/src/layer_sync.rs | Supports byte-oriented filenames and transfer diagnostics. |
| crates/composefs-oci/src/cstor.rs | Shares transfer logic and verifies layer digests. |
| crates/composefs-oci/Cargo.toml | Adds version parsing and logging support. |
| crates/composefs-integration-tests/src/tests/cstor.rs | Updates references and import-stat assertions. |
| crates/composefs-integration-tests/src/lib.rs | Adds storage-reference formatting helper. |
Review effort: Balanced
| tracing::debug!("skopeo proxy protocol version {version}"); | ||
|
|
||
| // OpenImage | ||
| let (img_val, _, _) = proxy_call(&sock, "OpenImage", vec![imgref.into()])?; |
| "GetBlob", | ||
| vec

Add a way to import images from containers-storage without the data being copied through an intermediate OCI layout. The importer connects to a skopeo producer over a varlink socket and asks it for each layer.
The producer answers with a splitfdstream. File contents that are already on disk arrive as file descriptors, so reflinks or hardlinks can be used instead of re-reading and re-writing the data.
Needs: podman-container-tools/container-libs#651