我们有一系列或RPM作为项目的一部分而构建,其中一些依赖于其他项目。假设我有3个RPM A.rpm,B.rpm和C.RPM,其中B和C都依赖于A,每次更新A时我是否需要重建两个?如果我向A添加新功能以支持B中的功能,但为生成C而构建的代码不了解新功能。我是否需要针对更新的A?
重建C.或者更接近我的实际情况,我有一个具有大约25 RPM的库RPM,这取决于它。我们在库中添加了一项新功能,以支持其中一个RPM的更新,是否需要重建所有其他24个RPM?
提前致谢。
答案 0 :(得分:2)
是和否。有两种依赖:生成和隐式。
如果你谈论C库,那么rpmbuild会产生如下依赖:
$ rpm -R bash
...
libdl.so.2()(64bit)
...
当提供此库的包更新时,它保持相同的SONAME,即相同的二进制接口,那么您不需要重建使用它的包(在此示例中为{{ 1}})。但是当有SONAME碰撞并且包突然提供bash
时,你必须重建需要它的包。
如果依赖项是其他的,那么您不需要重建包。例如,包libdl.so.3
需要firefox
,但任何版本都可以。因此,在更新bash
时,您无需重建bash
。
有时你会依赖某些东西(python-2.x)并且它得到了非常重要的升级(python-3.x),那么你需要重建需要它的包。在这些极少数情况下,您通常会提前了解它,因为您不仅需要重新构建程序包,还要重写应用程序本身的代码。例如。从python2迁移到python3是非常重要的。
大多数情况下的快速提示:除非DNF / YUM告诉您已断开依赖关系,否则无需重建软件包。