Apt
APT 抱怨我的包的依賴項損壞/未滿足,但它們在我的儲存庫中可用。怎麼修?
我為 package 管理一個 apt 儲存庫,
PACKAGE
它具有依賴項(DEPENDENCY<<1.2)
。兩者PACKAGE
都DEPENDENCY
可以在我的儲存庫中找到。我們剛剛發布了一個版本
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
在兼容版本中可用。