构建RPM依赖关系链,而不在构建主机上安装依赖关系

时间:2014-10-14 16:21:36

标签: dependency-management rpm rpmbuild

我正在尝试设置一个RPM构建器,它将编译我项目的所有依赖二进制文件和可执行文件。

依赖关系看起来有点像这样:

MainProject.rpm | depends on:
    |
    +-- subProject1.rpm | depends on:
    |       |
    |       +-- subProject2.rpm
    |
    +-- subProject2.rpm

我按此顺序生成所有这些RPM:

-build rpm for subProject2
-install subProject2 RPM in System

-build rpm for subProject1 
-install subProject1 RPM in System

-build rpm for subProject3
-install subProject3 RPM in System

-build rpm for MainProject

我的所有规范文件都在生成合适的RPM,代价是我自己不得不在我的机器上安装subProject2.rpm,然后再尝试rpmbuild subProject1
mainProject.rpm也是如此:如果我想构建它,我必须安装它所依赖的所有RPM。

我觉得这种做事方式非常糟糕,因为我在构建器的文件系统中安装了这些RPM。

是否有RPMbuild选项,比如在类似chroot的环境中部署RPM依赖项来构建另一个?我想如果存在这样的事情,还需要考虑RPATH。

2 个答案:

答案 0 :(得分:0)

如果您的构建环境不受我所控制,那么这只是一件坏事。假设你有一个受控制的,可重复的构建过程,那么这样做应该没问题。

据说你的实际问题的答案是做Fedora /等。正在做和使用Koji或至少与基础chroot相关的部分Mock

答案 1 :(得分:0)

你也可以考虑使用' - root'选项。将它与'rpm'同时使用命令和' rpmbuild'命令。使用此选项,所有rpm约束和操作都将与此类“chroot-like”相关。环境。它必须是完全合格的路径。 例如:

rpmbuild --root /home/user/master-project/rpmroot

至少有三个主要含义:

1)您必须先初始化此区域中的rpm数据库,然后才能将其用于其他命令;

rpm --initdb --root /home/user/master-project/rpmroot

2)备用根中的所有依赖项必须由备用根中的其他一些包满足。如果在您的情况下,例如' MainProject'取决于标准库。

3)正如您所提到的,编译器/链接器也必须知道备用根。 例如:

LIBRARY_PATH=/home/user/master-project/rpmroot/usr/lib
C_INCLUDE_PATH=/home/user/master-project/rpmroot/usr/include
希望这会有所帮助。