Debian
在 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++ 建構工具安裝到我的容器中,我想避免這種情況……)?
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
這將產生一個 Debian
dpkg
至少可以嘗試處理的軟體包。由於您的軟體包是在 Ubuntu 22.04 上建構的,因此您很可能會遇到依賴問題。為了獲得最佳結果,您應該真正在要執行它的平台上建構包。在您的情況下,這意味著要麼
ubuntu:22.04
用作容器的基礎映像,要麼在 Debian 11 容器中重建您的包。