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 规范文件 - 是不是可以动态填充规范文件变量的主要内容,如果未能解决你的问题,请参考以下文章