在 Ubuntu 上使用 checkinstall 将 deb 文件构建安装到基于 Debian 的 docker 容器中

在 Ubuntu 上使用 checkinstall 将 deb 文件构建安装到基于 Debian 的 docker 容器中

我在我的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 容器中重建包。

相关内容