apt-getはDebian / Ubuntuパッケージの固定バージョンの依存関係を正しく解決できません。

apt-getはDebian / Ubuntuパッケージの固定バージョンの依存関係を正しく解決できません。

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-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.

ベストアンサー1

適切なパーサーは、インストールすることが、指定されたターゲット・バージョンで使用可能な最新のパッケージ・バージョンではない可能性を考慮しません。 Debian は最新バージョンのパッケージ以外のインストールをサポートしていません。あなたのシステムのため。

パッケージセットの各バージョンに対して異なるリポジトリを使用する場合は、固定を使用して特定のソースを好むか、異なるコード名を指定し、aptの-tオプションを使用してターゲットバージョンを選択できます。そうでなければ、これは不可能です。

おすすめ記事