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
dpkg
これにより、Debian が少なくとも処理できるパッケージが作成されます。パッケージはUbuntu 22.04に基づいて構築されているため、依存関係の問題が発生しやすくなります。
最良の結果を得るには、実行するプラットフォームでパッケージをビルドする必要があります。あなたの場合、これはubuntu:22.04
コンテナのデフォルトイメージとして使用するか、Debian 11コンテナでパッケージを再構築することを意味します。