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

时间:2018-05-02 09:18:33

标签: debian apt debian-stretch

我认为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安装的。这是一个功能还是一个错误?

1 个答案:

答案 0 :(得分:1)

这主要是一个功能。

不可能有一个非循环图:

  • 包含大量软件包,没有工具可以提供有关依赖项问题的建议。

  • 确实存在循环依赖关系。通过从头开始构建分发,您会注意到它,例如现在 libc 需要一些外部程序(例如解析程序),此类程序需要 libc 。解决这个问题的一种方法是使用essential软件包:这些软件包构建了一个软件包核心,它们可能相互依赖。

  • 将程序库和二进制文件分开构建中性文件(特别是如果数据很大)是很方便的。这可能会产生循环依赖:两个部分应该一起安装。

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

因为Debian不仅仅是一个“发行版”,而是许多“发行版”(例如'contrib'和'non-free',还有'security','backport','experimental'等)[作为包.gz列表],另外有时候我们还包括外部(非Debian)包,要求非循环依赖图可能很困难,或者只是它会阻止 apt ,没有人想要它。所以我认为循环依赖仍然是一个“特征”。

注意:有时候这些周期只是“可选的”。其中一个必需的包是循环的,但不是所有的可能性。 “虚拟套餐”使这更加困难。