web-dev-qa-db-ja.com

debパッケージを作成するときにファイルを強制的にオーバーライドするにはどうすればよいですか?

ProgramX.Yのdebパッケージを作成しようとしていますが、次のコマンドでdeb pacakgeを生成すると、destineシステムに同じプログラムが存在する可能性がありますが、他のバージョン(programX.Z)です。

dpkg-buildpackage -us -uc --source-option=--include-binaries --source-option=-isession

他のバージョンのプログラム(programX.Z)があるシステムにパッケージをインストールしようとすると、次のようになります。

dpkg: error processing programX.Y.deb (--install):
    trying to overwrite `/usr/lib/XXX', which is also in package programX.Z

--force-overwriteを渡すと問題は解決しますが、その解決策は必要ありません。

問題は、システムにインストールして自動的に上書きできるプログラムバージョンのdebパッケージを作成するにはどうすればよいかということです。例はpythonです。 Python3には多くのバージョンがあります(3.1、3.2、3.3、3.4、3.5 ...)。 python3.4をインストールしたシステムにカスタムpythonパッケージバージョン3.6をインストールしたい。

可能です?

3
RdlP

--force-overwriteと同等のパッケージを作成することはできませんが、他の解決策があります。

  • パッケージは競合するファイルを邪魔にならないように移動できます。これは迂回と呼ばれ、 dpkg-divert を使用して処理されます。
  • 2つのパッケージに共通する(競合する)ファイルは、通常、3番目のパッケージで出荷されます(同一であると想定)。これは、/usr/lib/XXXの問題に対する適切な解決策である可能性があります。
  • パッケージの複数のバージョンを同時インストール可能にすることができ、必要に応じて、代替手段を使用してデフォルトを選択するか、「デフォルト」パッケージを選択します。これは、Pythonインタープリターパッケージ、GCCコンパイラーで採用されているアプローチです。現在、Debian不安定版では、Python 3.5および3.6が利用可能であり、サイドにインストールできます。 -by-side;デフォルトのPython 3(3.5)は、python3セットのパッケージのシンボリックリンクを使用して決定されます。
5
Stephen Kitt