我在我的Ubuntu 22.04笔记本电脑上编译了一个C++软件,并用于checkinstall
安装它。这会构建相应的.deb
文件,这很好。
但现在我想将该.deb
文件安装到基于“Debian GNU/Linux 11 (bullseye)”的 docker 容器中,并dpkg
显示此错误:
# dpkg --install mypackage-8.0.0_20221030-1_amd64.deb
dpkg-deb: error: archive 'mypackage-8.0.0_20221030-1_amd64.deb' uses unknown compression for member 'control.tar.zst', giving up
dpkg: error processing archive mypackage-8.0.0_20221030-1_amd64.deb (--install):
dpkg-deb --control subprocess returned error exit status 2
Errors were encountered while processing:
mypackage-8.0.0_20221030-1_amd64.deb
如何.deb
在不编译软件的情况下将此文件安装到我的容器中再次(这意味着将所有 C++ 构建工具安装到我的容器中,我想避免这种情况......)?
答案1
dpkg
在 Debian 中不支持zstd
压缩。为了能够在 Debian 中提取您的软件包,您需要将其转换:
提取其成分:
ar -x mypackage-8.0.0_20221030-1_amd64.deb
解压它们:
zstd -d control.tar.zst zstd -d data.tar.zst
重新压缩它们:
xz control.tar xz data.tar
重新创建你的包:
rm mypackage-8.0.0_20221030-1_amd64.deb ar -rc mypackage-8.0.0_20221030-1_amd64.deb debian-binary control.tar.xz data.tar.xz
这将生成一个 Debiandpkg
至少可以尝试处理的包。由于您的软件包是在 Ubuntu 22.04 上构建的,因此您很容易遇到依赖性问题。
为了获得最佳结果,您确实应该在要运行该包的平台上构建该包。就您而言,这意味着要么用作ubuntu:22.04
容器的基础映像,要么在 Debian 11 容器中重建包。