12

I'm running Debian, namely:

# uname -A
Linux martlins2 5.10.0-8-amd64 #1 SMP Debian 5.10.46-4 (2021-08-03) x86_64 GNU/Linux

and for some time I see some errors telling that some parts of some packages uses unknown compression while doing apt update. In particular, the cause of the issue lays in the middle of the dpkg:

# apt update
(...)
# apt upgrade
(...)
dpkg-deb: error: archive '/var/cache/apt/archives/libdrm-amdgpu1_2.4.107+git2109030500.d201a4~oibaf~i_amd64.deb' uses unknown compression for member 'control.tar.zst', giving up
Traceback (most recent call last):
  File "/usr/share/apt-listchanges/DebianFiles.py", line 124, in readdeb
    output = subprocess.check_output(command)
  File "/usr/lib/python3.9/subprocess.py", line 424, in check_output
    return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
  File "/usr/lib/python3.9/subprocess.py", line 528, in run
    raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['dpkg-deb', '-f', '/var/cache/apt/archives/libdrm-amdgpu1_2.4.107+git2109030500.d201a4~oibaf~i_amd64.deb', 'Package', 'Source', 'Version', 'Architecture', 'Status']' returned non-zero exit status 2.

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/bin/apt-listchanges", line 323, in <module>
    main(config)
  File "/usr/bin/apt-listchanges", line 104, in main
    pkg = DebianFiles.Package(deb)
  File "/usr/share/apt-listchanges/DebianFiles.py", line 358, in __init__
    parser.readdeb(self.path)
  File "/usr/share/apt-listchanges/DebianFiles.py", line 127, in readdeb
    raise RuntimeError(_("Error processing '%(what)s': %(errmsg)s") %
RuntimeError: Error processing '/var/cache/apt/archives/libdrm-amdgpu1_2.4.107+git2109030500.d201a4~oibaf~i_amd64.deb': Command '['dpkg-deb', '-f', '/var/cache/apt/archives/libdrm-amdgpu1_2.4.107+git2109030500.d201a4~oibaf~i_amd64.deb', 'Package', 'Source', 'Version', 'Architecture', 'Status']' returned non-zero exit status 2.

dpkg-deb: error: archive '/tmp/apt-dpkg-install-XiLPN8/01-libdrm-amdgpu1_2.4.107+git2109030500.d201a4~oibaf~i_amd64.deb' uses unknown compression for member 'control.tar
.zst', giving up
dpkg: error processing archive /tmp/apt-dpkg-install-XiLPN8/01-libdrm-amdgpu1_2.4.107+git2109030500.d201a4~oibaf~i_amd64.deb (--unpack):
 dpkg-deb --control subprocess returned error exit status 2
(...)
Errors were encountered while processing:
 /tmp/apt-dpkg-install-XiLPN8/01-libdrm-amdgpu1_2.4.107+git2109030500.d201a4~oibaf~i_amd64.deb
(...)
E: Sub-process /usr/bin/dpkg returned an error code (1)

To proove it, I've run the dpkg command (simplified) directly:

# dpkg -f /var/cache/apt/archives/libdrm-amdgpu1_2.4.107+git2109030500.d201a4~oibaf~i_amd64.deb 'Package'
dpkg-deb: error: archive '/var/cache/apt/archives/libdrm-amdgpu1_2.4.107+git2109030500.d201a4~oibaf~i_amd64.deb' uses unknown compression for member 'control.tar.zst', giving up

The file really does use such compression:

# file /var/cache/apt/archives/libdrm-amdgpu1_2.4.107+git2109030500.d201a4~oibaf~i_amd64.deb
/var/cache/apt/archives/libdrm-amdgpu1_2.4.107+git2109030500.d201a4~oibaf~i_amd64.deb: Debian binary package (format 2.0), with control.tar.zs, data compression zst


I do have installed the zstd package:

# apt search zstd
(...)
libzstd1/stable,stable,now 1.4.8+dfsg-2.1 amd64 [installed,automatic]
  fast lossless compression algorithm
(...)
zstd/stable,stable,now 1.4.8+dfsg-2.1 amd64 [installed]
  fast lossless compression algorithm -- CLI tool

Furthermore, I found following dpkg bugreport: https://bugs.launchpad.net/ubuntu/+source/dpkg/+bug/1764220 saying the zstd support have been added in 1.18.4ubuntu1.7 version. My version of dpkg is 1.20.9:

# dpkg --version
Debian 'dpkg' package management program version 1.20.9 (amd64).
(...)

so that may not be an issue.

I've also removed the whole contents of the /var/cache/apt/archives/* and re-update && upgraded. Didn't help.

Do you have any tips what to do with that? Is there/Are there an further packages missing? Does the Debian version doesn't have such feature? Is it an configuration issue? Is there any workaround?

martlin
  • 143
  • 1
  • 1
  • 5

3 Answers3

23

Debian’s dpkg package didn’t support zstd compression prior to version 1.21.18. Support was added just in time for Debian 12.

I’m guessing you’ve added a Ubuntu PPA; you shouldn’t use those with Debian.

Stephen Kitt
  • 411,918
  • 54
  • 1,065
  • 1,164
  • Oh, you're right! Lessons learned: Check not only the `/etc/apt/sources.list/`, but also the `/etc/apt/sources.list.d/*` ones. – martlin Oct 07 '21 at 20:17
7

If you are running Debian < 12 and need to install a .deb package that uses zstd, you can repack it:

# Extract files from the archive
ar x some-package.deb
# Uncompress zstd files an re-compress them using xz
zstd -d < control.tar.zst | xz > control.tar.xz
zstd -d < data.tar.zst | xz > data.tar.xz
# Re-create the Debian package in /tmp/
ar -m -c -a sdsd /tmp/some-package.deb debian-binary control.tar.xz data.tar.xz
# Clean up
rm debian-binary control.tar.xz data.tar.xz control.tar.zst data.tar.zst

You should now be able to install the newly generated package:

apt-get install /tmp/some-package.deb

Quique
  • 171
  • 1
  • 2
  • I had a deb repository running on a Debian 10 server. Had this issue when adding a recent Ubuntu deb to the repo (TigerVNC). This solution worked. – Bastion Jul 18 '23 at 21:02
2

To expand on @stephen-kitt's answer, this can also occur in Ubuntu when one adds a debian official repo like bookworm to /etc/apt/sources.list and then accidentally upgrades dpkg to the Debian version.

The fix in this case is to remove the source and sudo apt upgrade dpkg/jammy-updates or whatever ubuntu package shows up in apt list.

micimize
  • 121
  • 2
  • or if you are fortunate enough to read this before your sources are jammy, you can use ubuntu 20 (focal): `sudo apt upgrade dpkg/focal-updates` – Dave Ankin Sep 24 '22 at 23:41