为什么 openSUSE 很多软件包之间有循环依赖?

我最近跑了一些包依赖之间的分析,我本来以为包的依赖关系会是一个有向无环图(DAG),但是实际上并不是。

比如我发现 terminfo-base 和 libncurses6 之间有循环依赖:

$ rpm -q --requires terminfo-base | grep ncurses
ncurses >= 6.5.20240713

$ rpm -q --requires libncurses6|grep terminfo
terminfo-base

以及 sonnet 和 libKF5SonnetCore5

$ rpm -q --requires sonnet
libKF5SonnetCore.so.5()(64bit)
$ rpm -q --requires libKF5SonnetCore5
sonnet >= 5.116.0 

这种循环依赖正常吗?是不是应该把这种循环依赖的包合并?

1赞

@xzhao

cyclic dependencies 在各发行版的 packaging 都存在啊…只不过各家解决的方法不同…

openSUSE 有 Open Build Service,所以我们是在:

  1. prjconf 里面通过 Ignore/Order/Preinstall: https://build.opensuse.org/projects/Base:System/prjconf

  2. rpm specfile 里的 #! BuildIgnore

  3. 以及各种 -mini 软件包

去解决环形依赖。

另外这两个例子不太对,你举的两个例子都是在一个包的一次编译里出来的。可以看下不同发行版对 python-packaging 或者 readline 的处理。