Closed
Description
I'm unable to pull zstd:chunked
container images built on a composefs host onto a non-composefs host. Non-zstd:chunked
container images work fine, and the zstd:chunked
images work fine on the composefs host. I started getting this issue around the same time that #2191 was opened; I assumed that #2194 would fix it, but it didn't.
Reproduction
Build the images
$ mount | grep 'on / '
composefs on / type overlay (ro,relatime,seclabel,lowerdir+=/run/ostree/.private/cfsroot-lower,datadir+=/sysroot/ostree/repo/objects,redirect_dir=on,metacopy=on)
$ podman --version
podman version 5.4.2
$ cat > Containerfile <<EOF
FROM scratch
COPY /usr/bin/busybox /usr/bin/busybox
CMD ["/usr/bin/busybox", "echo", "Hello, World!"]
EOF
$ podman build --no-cache --disable-compression --file=./Containerfile --tag=maxchernoff.ca/composefs-zstd-chunked /
$ skopeo copy --dest-tls-verify=false --dest-compress-format=zstd:chunked containers-storage:maxchernoff.ca/composefs-zstd-chunked:latest docker://localhost:23719/composefs-zstd-chunked:zstd-chunked
$ podman build --no-cache --disable-compression --file=./Containerfile --tag=maxchernoff.ca/composefs-zstd-chunked /
$ skopeo copy --dest-tls-verify=false --dest-compress-format=zstd containers-storage:maxchernoff.ca/composefs-zstd-chunked:latest docker://localhost:23719/composefs-zstd-chunked:zstd
$ podman build --no-cache --disable-compression --file=./Containerfile --tag=maxchernoff.ca/composefs-zstd-chunked /
$ skopeo copy --dest-tls-verify=false --dest-compress-format=gzip containers-storage:maxchernoff.ca/composefs-zstd-chunked:latest docker://localhost:23719/composefs-zstd-chunked:gzip
My container registry is public, so feel free to pull from it.
Run the images on composefs
$ mount | grep 'on / '
composefs on / type overlay (ro,relatime,seclabel,lowerdir+=/run/ostree/.private/cfsroot-lower,datadir+=/sysroot/ostree/repo/objects,redirect_dir=on,metacopy=on)
$ podman --version
podman version 5.4.2
$ podman run --pull=newer -it --rm maxchernoff.ca/composefs-zstd-chunked:zstd-chunked
Trying to pull maxchernoff.ca/composefs-zstd-chunked:zstd-chunked...
Getting image source signatures
Copying blob f10b285e2625 skipped: already exists
Copying config 66342d349b done |
Writing manifest to image destination
Hello, World!
$ podman run --pull=newer -it --rm maxchernoff.ca/composefs-zstd-chunked:zstd
Trying to pull maxchernoff.ca/composefs-zstd-chunked:zstd...
Getting image source signatures
Copying blob 3b2700f8dc1a skipped: already exists
Copying config 26e0464471 done |
Writing manifest to image destination
Hello, World!
$ podman run --pull=newer -it --rm maxchernoff.ca/composefs-zstd-chunked:gzip
Trying to pull maxchernoff.ca/composefs-zstd-chunked:gzip...
Getting image source signatures
Copying blob ed4c195b07bd skipped: already exists
Copying config c814e33ebf done |
Writing manifest to image destination
Hello, World!
podman info
host: arch: amd64 buildahVersion: 1.39.4 cgroupControllers: - cpu - memory - pids cgroupManager: systemd cgroupVersion: v2 conmon: package: conmon-2.1.13-1.fc42.x86_64 path: /usr/bin/conmon version: 'conmon version 2.1.13, commit: ' cpuUtilization: idlePercent: 96.63 systemPercent: 1.54 userPercent: 1.82 cpus: 4 databaseBackend: sqlite distribution: distribution: fedora variant: iot version: "42" eventLogger: journald freeLocks: 2047 hostname: maxchernoff.ca idMappings: gidmap: - container_id: 0 host_id: 1000 size: 1 - container_id: 1 host_id: 524288 size: 65536 uidmap: - container_id: 0 host_id: 1000 size: 1 - container_id: 1 host_id: 524288 size: 65536 kernel: 6.14.5-300.fc42.x86_64 linkmode: dynamic logDriver: journald memFree: 2463440896 memTotal: 8309497856 networkBackend: netavark networkBackendInfo: backend: netavark dns: package: aardvark-dns-1.14.0-1.fc42.x86_64 path: /usr/libexec/podman/aardvark-dns version: aardvark-dns 1.14.0 package: netavark-1.14.1-1.fc42.x86_64 path: /usr/libexec/podman/netavark version: netavark 1.14.1 ociRuntime: name: crun package: crun-1.21-1.fc42.x86_64 path: /usr/bin/crun version: |- crun version 1.21 commit: 10269840aa07fb7e6b7e1acff6198692d8ff5c88 rundir: /run/user/1000/crun spec: 1.0.0 +SYSTEMD +SELINUX +APPARMOR +CAP +SECCOMP +EBPF +CRIU +LIBKRUN +WASM:wasmedge +YAJL os: linux pasta: executable: /usr/bin/pasta package: passt-0^20250507.geea8a76-1.fc42.x86_64 version: "" remoteSocket: exists: true path: /run/user/1000/podman/podman.sock rootlessNetworkCmd: pasta security: apparmorEnabled: false capabilities: CAP_CHOWN,CAP_DAC_OVERRIDE,CAP_FOWNER,CAP_FSETID,CAP_KILL,CAP_NET_BIND_SERVICE,CAP_SETFCAP,CAP_SETGID,CAP_SETPCAP,CAP_SETUID,CAP_SYS_CHROOT rootless: true seccompEnabled: true seccompProfilePath: /usr/share/containers/seccomp.json selinuxEnabled: true serviceIsRemote: false slirp4netns: executable: "" package: "" version: "" swapFree: 16898842624 swapTotal: 16898842624 uptime: 0h 29m 11.00s variant: "" plugins: authorization: null log: - k8s-file - none - passthrough - journald network: - bridge - macvlan - ipvlan volume: - local registries: localhost:23719: Blocked: false Insecure: true Location: localhost:23719 MirrorByDigestOnly: false Mirrors: null Prefix: localhost:23719 PullFromMirror: "" maxchernoff.ca: Blocked: false Insecure: true Location: localhost:23719 MirrorByDigestOnly: false Mirrors: null Prefix: maxchernoff.ca PullFromMirror: "" search: - registry.fedoraproject.org - registry.access.redhat.com - docker.io store: configFile: /var/home/max/.config/containers/storage.conf containerStore: number: 1 paused: 0 running: 0 stopped: 1 graphDriverName: overlay graphOptions: {} graphRoot: /var/home/max/.local/share/containers/storage graphRootAllocated: 261466619904 graphRootUsed: 139354480640 graphStatus: Backing Filesystem: btrfs Native Overlay Diff: "true" Supports d_type: "true" Supports shifting: "false" Supports volatile: "true" Using metacopy: "false" imageCopyTmpDir: /var/tmp imageStore: number: 24 runRoot: /run/user/1000/containers transientStore: false volumePath: /var/home/max/.local/share/containers/storage/volumes version: APIVersion: 5.4.2 BuildOrigin: Fedora Project Built: 1743552000 BuiltTime: Tue Apr 1 18:00:00 2025 GitCommit: be85287fcf4590961614ee37be65eeb315e5d9ff GoVersion: go1.24.1 Os: linux OsArch: linux/amd64 Version: 5.4.2
Run the images on not composefs
$ mount | grep 'on / '
/dev/nvme1n1p3 on / type btrfs (rw,noatime,seclabel,compress=zstd:1,ssd,discard=async,space_cache=v2,subvolid=5,subvol=/)
$ podman --version
podman version 5.4.2
$ podman run --pull=newer -it --rm maxchernoff.ca/composefs-zstd-chunked:zstd-chunked
Trying to pull maxchernoff.ca/composefs-zstd-chunked:zstd-chunked...
Getting image source signatures
Error: partial pull of blob sha256:f10b285e2625d1374b4383ebd7caaa9ab7557e1f5b5337bab4cb490c009a02df: staging a partially-pulled layer: checksum mismatch for "/usr/bin/busybox" (got "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" instead of "sha256:ac4814e3ed58c1d53367f0705f7026bd0bb672a536cb07cb5c9d96f9d3fcfaed")
$ podman run --pull=newer -it --rm maxchernoff.ca/composefs-zstd-chunked:zstd
Trying to pull maxchernoff.ca/composefs-zstd-chunked:zstd...
Getting image source signatures
Copying blob 3b2700f8dc1a done |
Copying config 26e0464471 done |
Writing manifest to image destination
Hello, World!
$ podman run --pull=newer -it --rm maxchernoff.ca/composefs-zstd-chunked:gzip
Trying to pull maxchernoff.ca/composefs-zstd-chunked:gzip...
Getting image source signatures
Copying blob ed4c195b07bd done |
Copying config c814e33ebf done |
Writing manifest to image destination
Hello, World!
podman info
host: arch: amd64 buildahVersion: 1.39.4 cgroupControllers: - cpu - io - memory - pids cgroupManager: systemd cgroupVersion: v2 conmon: package: conmon-2.1.13-1.fc42.x86_64 path: /usr/bin/conmon version: 'conmon version 2.1.13, commit: ' cpuUtilization: idlePercent: 97.11 systemPercent: 0.89 userPercent: 2 cpus: 16 databaseBackend: sqlite distribution: distribution: fedora variant: workstation version: "42" eventLogger: journald freeLocks: 2048 hostname: max-new-laptop idMappings: gidmap: - container_id: 0 host_id: 1000 size: 1 - container_id: 1 host_id: 100000 size: 65536 uidmap: - container_id: 0 host_id: 1000 size: 1 - container_id: 1 host_id: 100000 size: 65536 kernel: 6.14.5-300.fc42.x86_64 linkmode: dynamic logDriver: journald memFree: 1220481024 memTotal: 32949731328 networkBackend: netavark networkBackendInfo: backend: netavark dns: package: aardvark-dns-1.14.0-1.fc42.x86_64 path: /usr/libexec/podman/aardvark-dns version: aardvark-dns 1.14.0 package: netavark-1.14.1-1.fc42.x86_64 path: /usr/libexec/podman/netavark version: netavark 1.14.1 ociRuntime: name: crun package: crun-1.21-1.fc42.x86_64 path: /usr/bin/crun version: |- crun version 1.21 commit: 10269840aa07fb7e6b7e1acff6198692d8ff5c88 rundir: /run/user/1000/crun spec: 1.0.0 +SYSTEMD +SELINUX +APPARMOR +CAP +SECCOMP +EBPF +CRIU +LIBKRUN +WASM:wasmedge +YAJL os: linux pasta: executable: /usr/bin/pasta package: passt-0^20250507.geea8a76-1.fc42.x86_64 version: "" remoteSocket: exists: true path: /run/user/1000/podman/podman.sock rootlessNetworkCmd: pasta security: apparmorEnabled: false capabilities: CAP_CHOWN,CAP_DAC_OVERRIDE,CAP_FOWNER,CAP_FSETID,CAP_KILL,CAP_NET_BIND_SERVICE,CAP_SETFCAP,CAP_SETGID,CAP_SETPCAP,CAP_SETUID,CAP_SYS_CHROOT rootless: true seccompEnabled: true seccompProfilePath: /usr/share/containers/seccomp.json selinuxEnabled: true serviceIsRemote: false slirp4netns: executable: "" package: "" version: "" swapFree: 42949029888 swapTotal: 42949660672 uptime: 15h 3m 26.00s (Approximately 0.62 days) variant: "" plugins: authorization: null log: - k8s-file - none - passthrough - journald network: - bridge - macvlan - ipvlan volume: - local registries: search: - registry.fedoraproject.org - registry.access.redhat.com - docker.io store: configFile: /home/max/.config/containers/storage.conf containerStore: number: 0 paused: 0 running: 0 stopped: 0 graphDriverName: overlay graphOptions: {} graphRoot: /home/max/.local/share/containers/storage graphRootAllocated: 1985756528640 graphRootUsed: 1291860529152 graphStatus: Backing Filesystem: btrfs Native Overlay Diff: "true" Supports d_type: "true" Supports shifting: "false" Supports volatile: "true" Using metacopy: "false" imageCopyTmpDir: /var/tmp imageStore: number: 13 runRoot: /run/user/1000/containers transientStore: false volumePath: /home/max/.local/share/containers/storage/volumes version: APIVersion: 5.4.2 BuildOrigin: Fedora Project Built: 1743552000 BuiltTime: Tue Apr 1 18:00:00 2025 GitCommit: be85287fcf4590961614ee37be65eeb315e5d9ff GoVersion: go1.24.1 Os: linux OsArch: linux/amd64 Version: 5.4.2
Metadata
Metadata
Assignees
Labels
No labels