APT 抱怨我的包的依赖关系已损坏/未满足,但它们在我的存储库中可用。怎么修?

APT 抱怨我的包的依赖关系已损坏/未满足,但它们在我的存储库中可用。怎么修?

我管理一个 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% 确定这会起作用。

作为一般解决方案,您必须在存储库中使用不同的套件,并确保PACKAGEDEPENDENCY存在于同一套件中相互可接受的版本中;因此, 4.0.0 版本DEPENDENCY将进入不同的套件,没有PACKAGE, 直到PACKAGE在兼容版本中可用。

答案2

我发现我遇到的问题是我更改了软件包的下载源。在设置>关于>下载源中。我将其更改为离我位置较近的服务器,因为这增强了应用程序下载速度,特别是 Flatpak 软件包。

我通过将设置返回到“主”来解决这个问题,一切都运行良好。当我尝试安装barrier时,我遇到了这个问题,这是一个允许您在不同设备和跨操作系统之间共享鼠标的程序。

相关内容