【问题标题】:RPM spec file - Is it possible to dynamically populate a spec file variableRPM 规范文件 - 是否可以动态填充规范文件变量
【发布时间】:2012-05-01 07:41:18
【问题描述】:

我有一个规格文件。我需要 % 定义一个从系统上的单行文件获取其值的规范变量。

例如

%define path `cat /home/user/path_file`

并且在 path_file 中是一行

/var/www/html/hosts

这部分有效。我说从 RPM BUILD 输出开始,有时${path} 的值实际上是我的命令cat /home/user/path_file,有时该值是应该是 path_file (/var/www/html/hosts) 中的行?

【问题讨论】:

    标签: rpm rpmbuild rpm-spec


    【解决方案1】:

    您可以在规范文件的顶部使用%(cmd) 定义rpmbuild 变量。请注意,命令在括号中,而不是大括号中。一个例子:

    %define whoami %(whoami)
    

    在规范文件的其他地方,例如脚本或构建/安装部分,在大括号中正常使用变量,如下所示:

    echo "The user that built this is %{whoami}"
    

    cmd 可以是任何东西,包括你的 cat 命令。小心 - 当另一个用户重建规范文件时,它可能找不到该文件。所以最好像这样使用 %{sourcedir} 宏:

    %define path %(cat %{sourcedir}/path_file)
    

    并确保path_file 在源目录中并作为源包含在规范文件中。

    【讨论】:

    • Corey - 如果我希望 /home/user/path_file 成为 rpm 运行所必需的?我可以在我的规范文件中将其设为 PreReq 或 Required 参数吗?当我尝试 required 它说文件不存在并且它完全存在?
    • PreReq 等选项取决于系统上安装的文件,实际上是在 rpm 数据库中查找拥有该文件的包的存在。它不会检查文件系统是否存在文件。
    • @last_shogun 还有一些 prereq 之外的方法,等等,例如使用 %pre 脚本检查文件是否存在,如果不存在,则回显错误消息并以非-零状态。
    猜你喜欢
    • 2013-08-09
    • 1970-01-01
    • 1970-01-01
    • 2018-06-16
    • 1970-01-01
    • 2013-01-10
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    相关资源
    最近更新 更多