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

dpkgDebian で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コンテナでパッケージを再構築することを意味します。

関連情報