如果我更新RPM,是否必须重建所有基于它的RPM

时间:2018-06-13 19:27:17

标签: dependencies rpm rpm-spec

我们有一系列或RPM作为项目的一部分而构建,其中一些依赖于其他项目。假设我有3个RPM A.rpm,B.rpm和C.RPM,其中B和C都依赖于A,每次更新A时我是否需要重建两个?如果我向A添加新功能以支持B中的功能,但为生成C而构建的代码不了解新功能。我是否需要针对更新的A?

重建C.

或者更接近我的实际情况,我有一个具有大约25 RPM的库RPM,这取决于它。我们在库中添加了一项新功能,以支持其中一个RPM的更新,是否需要重建所有其他24个RPM?

提前致谢。

1 个答案:

答案 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告诉您已断开依赖关系,否则无需重建软件包。