Apt

APT 抱怨我的包的依賴項損壞/未滿足,但它們在我的儲存庫中可用。怎麼修?

  • December 12, 2019

我為 package 管理一個 apt 儲存庫,PACKAGE它具有依賴項(DEPENDENCY<<1.2)。兩者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是行不通的,因為包在伺服器端以某種方式損壞)。

APT 不會根據需求解析包的版本,而是基於可用性(和優先級)。換句話說,它真的被設計為與連貫的儲存庫一起工作,具有單個版本包的儲存庫,所有相關的包都可以與儲存庫中的版本一起安裝。(這就是 Debian 儲存庫大部分時間的工作方式,並且是發布儲存庫的要求。)

即使DEPENDENCY同一套件中有多個版本,除非另有說明,否則 APT 將僅考慮最高版本 4.0.0。

您可能需要幫助 APT 手動解決問題:

apt install PACKAGE DEPENDENCY=1.1.12

即便如此,我也不能 100% 確定這會奏效。

作為一般解決方案,您必須在儲存庫中使用不同的套件,並確保PACKAGE並且DEPENDENCY存在於同一套件中的相互可接受的版本中;因此,版本 4.0.0DEPENDENCY將進入不同的套件,沒有PACKAGE, 直到PACKAGE在兼容版本中可用。

引用自:https://unix.stackexchange.com/questions/556857