web-dev-qa-db-ja.com

apt-getがDebian / Ubuntuパッケージの修正バージョンへの依存関係を適切に解決しない

カスタムパッケージfooがあり、別のパッケージの固定バージョンbarの制御ファイルに依存関係があります。

Depends: bar (= 1.2.3)

foobarパッケージの両方が自分のリポジトリで公開されています。さらに、リポジトリにbarの複数のバージョンがあります。たとえば、1.2.3と2.1.0です。ここで、fooを新しいマシンにインストールしようとすると、

apt-get install foo

それは失敗する

The following packages have unmet dependencies:
 foo : Depends: bar (= 1.2.3) but 2.1.0 is to be installed

つまりapt-getは、使用するパッケージの適切なバージョンを正しく理解していないようです。

競合を追加してみました:

Depends: bar (= 1.2.3)
Conflicts: bar (>> 1.2.3)

しかし、それはエラーが

The following packages have unmet dependencies:
 foo : Depends: bar (= 1.2.3) but it is not going to be installed

インストール中にバーのバージョンを指定すると、機能します:

apt-get install foo bar=1.2.3

しかし、これは現実的ではありません(実際のケースには複数のレベルの依存関係があり、コマンドラインですべてを手動で検索して指定するために独自の依存関係リゾルバーを実装する必要は本当にありません-aptです)。

したがって、問題は、適切に動作し、依存関係の正しいバージョンを自動的にインストールする(コマンドラインでそれらのバージョンを明示的に指定する必要なしに)ようにする方法はありますか?また、バージョンの固定を使用してapt_preferencesルートに行く必要がないようにしたいので、2つの場所でバージョンを管理する必要があることを付け加えておきます。

完全を期すために、さまざまなaptデバッグ出力をオンにしたときの完全な出力を次に示します。

apt-get -o Debug::pkgProblemResolver=1 -o Debug::pkgDepCache::AutoInstall=1 -o Debug::pkgDepCache::Marker=1 install foo

Reading package lists... Done
Building dependency tree       
Reading state information... Done
  foo:AMD64 Depends on bar [ AMD64 ] < none -> 2.1.0 > ( universe/utils ) (= 1.2.3) can't be satisfied!
Starting pkgProblemResolver with broken count: 1
Starting 2 pkgProblemResolver with broken count: 1
Investigating (0) foo [ AMD64 ] < none -> 1.0.0 > ( misc )
Broken foo:AMD64 Depends on bar [ AMD64 ] < none -> 2.1.0 > ( universe/utils ) (= 1.2.3)
  Considering bar:AMD64 0 as a solution to foo:AMD64 9998
  Re-Instated bar:AMD64
Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 foo : Depends: bar (= 1.2.3) but 2.1.0 is to be installed
E: Unable to correct problems, you have held broken packages.
6
roadrunner

Aptリゾルバーは、特定のターゲットリリースでパッケージの最新バージョンではないものをインストールする可能性を考慮していません。 Debianは、システムのパッケージの最新バージョン以外のインストールをサポートしていません。

パッケージ(のセット)のバージョンごとに異なるリポジトリを使用している場合は、ピニングを使用して特定のOriginを優先するか、それらに異なるコード名を付けて、aptの-tオプションを使用してターゲットリリースを選択できます。それ以外の場合は不可能です。

3
Wouter Verhelst