Debian

在 Ubuntu 上使用 checkinstall 將 deb 文件建構安裝到基於 Debian 的 docker 容器中

  • October 30, 2022

我在我的 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++ 建構工具安裝到我的容器中,我想避免這種情況……)?

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

引用自:https://unix.stackexchange.com/questions/723013