RPM 规范文件 - 是不是可以动态填充规范文件变量

Posted

技术标签:

【中文标题】RPM 规范文件 - 是不是可以动态填充规范文件变量【英文标题】: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) 中的行?

【问题讨论】:

【参考方案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 脚本检查文件是否存在,如果不存在,则回显错误消息并以非-零状态。

以上是关于RPM 规范文件 - 是不是可以动态填充规范文件变量的主要内容,如果未能解决你的问题,请参考以下文章

是否有任何语法或技巧可以创建多行 rpm 规范文件宏

在 RPM 规范文件中使用脚本定义版本

rpm 规范文件中的 chkconfig 命令

将规范文件转换为 debian

CentOS 5.5 - 在 RPM 规范文件中创建符号链接

rpm 规范文件的安装后脚本中的 yum/rpm install 命令