循环 rdepends Debian 软件包之间的依赖关系

Circular rdepends dependencies between Debian packages

我的印象是 Debian 软件包之间的 depends/rdepends 关系构成了有向无环图 (DAG)。

但是,我只是 运行 进入两个包之间的这些对称 rdepends 依赖关系:

apt-cache rdepends libwww-perl        # includes libsoap-lite-perl
apt-cache rdepends libsoap-lite-perl  # includes libwww-perl

两个软件包都是从 stretch/main 安装的。这是功能还是错误?

主要是一个功能。

不可能有无环图:

  • 大量的包,没有工具来解决依赖问题。

  • 确实存在循环依赖。通过从头开始构建发行版,您会注意到它,例如现在 libc 需要一些外部程序(例如解析器),而这些程序需要 libc。解决它的一种方法是使用 essential 包:这些包构成一个包的核心,它们可以相互依赖。

  • 将库从程序中分离出来,将二进制文件从体系结构中性文件中分离出来很方便(尤其是在数据量很大的情况下)。这可能会产生循环依赖:两个部分应该一起安装。

  • 包关系变化和包变化。所以有时某些部分会被移到另一个包中。循环依赖隐藏了 API 提供者的内部移动。

因为 Debian 不仅仅是一个 "distribution",而是很多 "distributions"(例如 'contrib' 和 'non-free',还有 'security'、'backport', 'experimental' 等)[如 Packages.gz 列表],另外有时我们还包含外部(非 Debian)包,需要非循环依赖图可能很困难,或者它会阻塞 apt,没人想要那个。所以我觉得循环依赖还是一个"feature".

注意:有时周期只是 "optional"。所需的包之一是循环的,但不是所有的可能性。 'virtual packages' 使这变得更加困难。