Skip to content

Unable to find an image with digest 622c60f3d0944014d5fd45df24142eee17c73d1b9ceca6dce636fc5bf9a43a2c #1516

Description

@apyrgio

What happened?

A user has reported the following error in their Debian installation:

dangerzone.errors.ImageNotPresentException: Unable to find an image with digest 622c60f3d0944014d5fd45df24142eee17c73d1b9ceca6dce636fc5bf9a43a2c

What is the problem?

We have reproduced it internally, and the problem is that Podman may report a different digest than the expected one, if multi-arch images are involved. More specifically:

  • if a user pulls the remote Dangerzone image (ghcr.io/freedomofopress/dangerzone/v1:latest), the reported image digest will be sha256:527da9012343066523c5561af64328dd13f79bf74b6c612d31fa8563b2e8ae2a. This is the digest of the multi-arch manifest.
  • If they load the bundled container image for the 0.11.0 release , the image digest will be sha256:622c60f3d0944014d5fd45df24142eee17c73d1b9ceca6dce636fc5bf9a43a2c. This the digest of the linux/amd64 manifest.
  • Finally, if they pull first the remote Dangerzone image, and then somehow trigger Dangerzone to load the bundled Dangerzone image, Podman will keep reporting the digest of the multi-arch image, instead of the linux/amd64 one. This is what confuses Dangerzone and throws an error. Note that this is a bug, but not a security issue.

Who is affected?

Our current understanding is that to trigger this bug, a user needs to:

  1. Install Dangerzone 0.10.0, accept updates, and fetch the latest container image.
  2. Remove the ~/.local/share/dangerzone directory, but not the pulled Dangerzone image.
  3. Install Dangerzone 0.11.0 (the variant that bundles the container image) and run Dangerzone. You should trigger this error.

This is not a usual combination since the user needs to remove an internal Dangerzone directory. In principle though, it affects users across all OSes.

How to reproduce?

A programmatic way to reproduce this on Linux (easier if you are a dev) is:

user@host:~$ ./dev_scripts/env.py --distro debian --version trixie build --full --prod
user@host:~$ ./dev_scripts/env.py --distro debian --version trixie run bash
user@container:~$ rm -rf ~/.local/share/dangerzone/
user@container:~$ podman image prune -af
user@container:~$ podman pull ghcr.io/freedomofpress/dangerzone/v1
user@container:~$ dangerzone
<failure>

Workaround

If you remove the pulled Dangerzone image, things should work again:

podman rmi ghcr.io/freedomofpress/dangerzone/v1:latest

Linux distribution

Debian Trixie

Dangerzone version

0.11.0

Podman info

user@dangerzone:~$ podman version
Client:        Podman Engine
Version:       5.4.2
API Version:   5.4.2
Go Version:    go1.24.4
Built:         Sun Dec 21 18:42:01 2025
Build Origin:  Debian
OS/Arch:       linux/amd64

user@dangerzone:~$ podman info -f 'json'
{
  "host": {
    "arch": "amd64",
    "buildahVersion": "1.39.3",
    "cgroupManager": "cgroupfs",
    "cgroupVersion": "v2",
    "cgroupControllers": [
      "cpu",
      "memory",
      "pids"
    ],
    "conmon": {
      "package": "conmon_2.1.12-4_amd64",
      "path": "/usr/bin/conmon",
      "version": "conmon version 2.1.12, commit: unknown"
    },
    "cpus": 8,
    "cpuUtilization": {
      "userPercent": 6.84,
      "systemPercent": 1.79,
      "idlePercent": 91.37
    },
    "databaseBackend": "sqlite",
    "distribution": {
      "distribution": "debian",
      "version": "13",
      "codename": "trixie"
    },
    "eventLogger": "file",
    "freeLocks": 2048,
    "hostname": "dangerzone",
    "idMappings": {
      "gidmap": [
        {
          "container_id": 0,
          "host_id": 1000,
          "size": 1
        },
        {
          "container_id": 1,
          "host_id": 2000,
          "size": 2000
        }
      ],
      "uidmap": [
        {
          "container_id": 0,
          "host_id": 1000,
          "size": 1
        },
        {
          "container_id": 1,
          "host_id": 2000,
          "size": 2000
        }
      ]
    },
    "kernel": "7.0.14-arch1-1",
    "logDriver": "k8s-file",
    "memFree": 9679360000,
    "memTotal": 33358118912,
    "networkBackend": "netavark",
    "networkBackendInfo": {
      "backend": "netavark",
      "version": "netavark 1.14.0",
      "package": "netavark_1.14.0-2_amd64",
      "path": "/usr/lib/podman/netavark",
      "dns": {
        "version": "aardvark-dns 1.14.0",
        "package": "aardvark-dns_1.14.0-3_amd64",
        "path": "/usr/lib/podman/aardvark-dns"
      }
    },
    "ociRuntime": {
      "name": "crun",
      "package": "crun_1.21-1_amd64",
      "path": "/usr/bin/crun",
      "version": "crun version 1.21\ncommit: 10269840aa07fb7e6b7e1acff6198692d8ff5c88\nrundir: /tmp/storage-run-1000/crun\nspec: 1.0.0\n+SYSTEMD +SELINUX +APPARMOR +CAP +SECCOMP +EBPF +CRIU +WASM:wasmedge +YAJL"
    },
    "os": "linux",
    "remoteSocket": {
      "path": "/tmp/storage-run-1000/podman/podman.sock",
      "exists": true
    },
    "rootlessNetworkCmd": "pasta",
    "serviceIsRemote": false,
    "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": false
    },
    "slirp4netns": {
      "executable": "/usr/bin/slirp4netns",
      "package": "slirp4netns_1.2.1-1.1_amd64",
      "version": "slirp4netns version 1.2.1\ncommit: 09e31e92fa3d2a1d3ca261adaeb012c8d75a8194\nlibslirp: 4.8.0\nSLIRP_CONFIG_VERSION_MAX: 5\nlibseccomp: 2.6.0"
    },
    "pasta": {
      "executable": "/usr/bin/pasta",
      "package": "passt_0.0~git20250503.587980c-2+deb13u1_amd64",
      "version": ""
    },
    "swapFree": 0,
    "swapTotal": 0,
    "uptime": "2h 58m 19.00s (Approximately 0.08 days)",
    "variant": "",
    "linkmode": "dynamic"
  },
  "store": {
    "configFile": "/home/user/.config/containers/storage.conf",
    "containerStore": {
      "number": 0,
      "paused": 0,
      "running": 0,
      "stopped": 0
    },
    "graphDriverName": "overlay",
    "graphOptions": {

    },
    "graphRoot": "/home/user/.local/share/containers/storage",
    "graphRootAllocated": 737595678720,
    "graphRootUsed": 613539483648,
    "graphStatus": {
      "Backing Filesystem": "extfs",
      "Native Overlay Diff": "true",
      "Supports d_type": "true",
      "Supports shifting": "false",
      "Supports volatile": "true",
      "Using metacopy": "false"
    },
    "imageCopyTmpDir": "/var/tmp",
    "imageStore": {
      "number": 1
    },
    "runRoot": "/tmp/storage-run-1000/containers",
    "volumePath": "/home/user/.local/share/containers/storage/volumes",
    "transientStore": false
  },
  "registries": {

  },
  "plugins": {
    "volume": [
      "local"
    ],
    "network": [
      "bridge",
      "macvlan",
      "ipvlan"
    ],
    "log": [
      "k8s-file",
      "none",
      "passthrough",
      "journald"
    ],
    "authorization": null
  },
  "version": {
    "APIVersion": "5.4.2",
    "Version": "5.4.2",
    "GoVersion": "go1.24.4",
    "GitCommit": "",
    "BuiltTime": "Sun Dec 21 18:42:01 2025",
    "Built": 1766335321,
    "BuildOrigin": "Debian",
    "OsArch": "linux/amd64",
    "Os": "linux"
  }
}

user@dangerzone:~$ podman images
REPOSITORY                            TAG         IMAGE ID      CREATED     SIZE
ghcr.io/freedomofpress/dangerzone/v1  latest      9f3234b9c53e  6 days ago  1.07 GB

Document conversion logs

N/A

Additional info

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    Status
    In Progress

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions