web-dev-qa-db-ja.com

APTパッケージの依存関係が壊れている/満たされていないという苦情がありますが、リポジトリで利用できます。修正方法は?

依存関係(DEPENDENCY<<1.2)を持つパッケージPACKAGEのaptリポジトリを管理しています。 PACKAGEDEPENDENCYの両方が私のリポジトリで利用可能です。

DEPENDENCYのバージョン(バージョン4.0.0)をリリースしましたが、同じPACKAGE完全にクリーンなマシンにをインストールすると、次のエラーで失敗します。

The following packages have unmet dependencies:
 PACKAGE : Depends: DEPENDENCY (< 1.2.0) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

利用可能なDEPENDENCYのバージョンを確認すると、<< 1.2要件を満たす既知のパッケージがあることがわかります。

Sudo apt list -a DEPENDENCY
Listing... Done
DEPENDENCY/stable 4.0.0 all
DEPENDENCY/stable 1.1.12 all
DEPENDENCY/stable 1.1.11 all
DEPENDENCY/stable 1.1.10 all
...

私は実際にパッケージ[〜#〜]と[〜#〜]を管理しているので、リポジトリ側でこれを修正できますが、どうすればよいですか? aptが正しい依存関係を認識しないのはなぜですか?

apt --fix-brokenを実行しても、サーバー側でパッケージが何らかの理由で壊れているため、機能しません)。

2
jenny

APTは、要件に基づいてパッケージのバージョンを解決するのではなく、可用性(および優先順位)に基づいて解決します。言い換えれば、それは実際にはコヒーレントリポジトリで動作するように設計されていますつまりパッケージの単一バージョンのリポジトリ。関連するすべてのパッケージはリポジトリ内のバージョンでインストールできます。 (これがDebianリポジトリのほとんどの場合の動作方法であり、リリースリポジトリの要件です。)

DEPENDENCYは同じスイート内の複数のバージョンで使用できますが、特に明記されていない限り、APTは最高バージョンの4.0.0のみを考慮します。

おそらく、APT状況を手動で解決するのを手伝う必要があります:

apt install PACKAGE DEPENDENCY=1.1.12

それでも、それがうまくいくかどうかは100%わかりません。

一般的な解決策として、リポジトリで異なるスイートを使用し、PACKAGEDEPENDENCYが同じスイート内で相互に受け入れ可能なバージョンで存在することを確認する必要があります。したがって、DEPENDENCYのバージョン4.0.0は、互換性のあるバージョンでPACKAGEが使用可能になるまで、PACKAGEなしで別のスイートになります。

2
Stephen Kitt