カスタムパッケージfoo
があり、別のパッケージの固定バージョンbar
の制御ファイルに依存関係があります。
Depends: bar (= 1.2.3)
foo
とbar
パッケージの両方が自分のリポジトリで公開されています。さらに、リポジトリに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.
Aptリゾルバーは、特定のターゲットリリースでパッケージの最新バージョンではないものをインストールする可能性を考慮していません。 Debianは、システムのパッケージの最新バージョン以外のインストールをサポートしていません。
パッケージ(のセット)のバージョンごとに異なるリポジトリを使用している場合は、ピニングを使用して特定のOriginを優先するか、それらに異なるコード名を付けて、aptの-tオプションを使用してターゲットリリースを選択できます。それ以外の場合は不可能です。