我管理一个 apt 存储库,用于 package PACKAGE
,它具有 dependency (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
行不通的,因为包在服务器端以某种方式被破坏了)。
答案1
APT 不会根据需求来解析软件包的版本,而是根据可用性(和优先级)来解析软件包的版本。换句话说,它实际上是为了与连贯的存储库一起工作而设计的,IE具有单一版本包的存储库,其中所有相关包都可以与存储库中的版本一起安装。 (这就是 Debian 存储库大多数时候的工作方式,也是发布存储库的要求。)
虽然DEPENDENCY
同一套件中有多个版本可用,除非另有说明,APT 将仅考虑最高版本 4.0.0。
您可能需要手动帮助 APT 解决该情况:
apt install PACKAGE DEPENDENCY=1.1.12
即便如此,我也不能 100% 确定这会起作用。
作为一般解决方案,您必须在存储库中使用不同的套件,并确保PACKAGE
和DEPENDENCY
存在于同一套件中相互可接受的版本中;因此, 4.0.0 版本DEPENDENCY
将进入不同的套件,没有PACKAGE
, 直到PACKAGE
在兼容版本中可用。
答案2
我发现我遇到的问题是我更改了软件包的下载源。在设置>关于>下载源中。我将其更改为离我位置较近的服务器,因为这增强了应用程序下载速度,特别是 Flatpak 软件包。
我通过将设置返回到“主”来解决这个问题,一切都运行良好。当我尝试安装barrier时,我遇到了这个问题,这是一个允许您在不同设备和跨操作系统之间共享鼠标的程序。