【问题标题】:Build an RPM dependency chain without installing dependencies on build host构建 RPM 依赖链,无需在构建主机上安装依赖项
【发布时间】:2014-12-09 12:41:31
【问题描述】:

我正在尝试设置一个 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,然后再尝试rpmbuildsubProject1
mainProject.rpm 也是如此:如果我想构建它,我必须安装它所依赖的所有 RPM。

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

是否有一个 RPMbuild 选项可以在类似 chroot 的环境中部署 RPM 依赖项来构建另一个?我认为如果存在这样的东西,它也需要考虑到RPATH。

【问题讨论】:

    标签: dependency-management rpm rpmbuild


    【解决方案1】:

    您也可以考虑使用“--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
    

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      如果您的构建环境不受控制,就我而言,这只是一件坏事。假设你有一个受控的、可重复的构建过程,我相信以这种方式做事应该没问题。

      话虽如此,您实际问题的答案是做什么 Fedora/etc.正在做和使用Koji 或至少与底层chroot 相关的部分称为Mock

      【讨论】:

        猜你喜欢
        • 2012-10-24
        • 2014-12-25
        • 2010-10-26
        • 1970-01-01
        • 2020-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-13
        相关资源
        最近更新 更多