我正在尝试设置一个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。
答案 0 :(得分:0)
如果您的构建环境不受我所控制,那么这只是一件坏事。假设你有一个受控制的,可重复的构建过程,那么这样做应该没问题。
答案 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
希望这会有所帮助。