【问题标题】:Define many macros for rpmbuild at once?一次为 rpmbuild 定义多个宏?
【发布时间】:2015-10-08 09:09:46
【问题描述】:

我想将许多宏传递给rpmuild,而不必手动输入每个宏,甚至不需要多次使用-D 'foo bar' -D 'foo bar' -D 'foo bar' 生成一个很长的makefile。我想“一次性”将这些宏传递给 rpmbuild。

让我描述一下我的用例 - 我有一个名为 buildid 的脚本,它报告有关构建的信息;

user@host: buildid -k tag
1.8.0-1444293343

user@host: buildid -k buildhost.platform
Linux-4.0.7-300.fc22.x86_64-x86_64-with-fedora-22-Twenty_Two

user@host: buildid -k version.formatted.gnu
1.8.0

我在这样的 RPM .spec 文件中使用这些值;

rpmbuild -ba foo.spec -D "tag `buildid -k tag`" -D "buildhost_platform `buildid -k buildhost.platform`" -D "version `buildid -k version.formatted.gnu`"

这是最糟糕的部分 - 一个很长的命令行,有很多输入。即使我使用 Makefile,它仍然很难看。

我的 buildid 脚本非常灵活,可以将这些 buildid 值保存到文件 (.buildid_rpmmacros) 或其他文件中,但更好的是,可以像这样以漂亮的格式将它们打印出来;

user@host: buildid -f rpmmacros
%buildhost.hostname myhost.example.com
%buildhost.platform Linux-4.0.7-300.fc22.x86_64-x86_64-with-fedora-22-Twenty_Two
%buildhost.release 4.0.7-300.fc22.x86_64
%buildhost.system Linux
%buildhost.version #1 SMP Mon Jun 29 22:15:06 UTC 2015
%git.branch master
%git.revision 48a30d610cf1ab57dcc6947b2366b6a5e9a1fcc6
%git.revision.short 48a30d6
%tag 1.8.0-1444293343
%timestamp 1444293343
%version.formatted.gnu 1.8.0
%version.formatted.short 1.8.0
%version.formatted.win 1.8.0.0
%version.major 1
%version.minor 8
%version.release 
%version.revision 0

如果我能做这样的事情,那就太理想了;

rpmbuild -ba foo.spec --macros-stdin < `buildid -f rpmmacros`

最后,宏是项目/RPM 特定的,而不是全局的。这意味着将它们存储在 ~/.rpmmacros 中不是一个可行的解决方案。我可以轻松保存到文件(buildid -nF rpmmacros),但我已经将它们保存到ini 格式的文件中,并且只想以 RPM 宏格式(buildid -f rpmmacro)暂时输出它们


无耻插件 - 如果您对 buildid 工具感兴趣; https://github.com/jamesread/buildid

【问题讨论】:

    标签: scripting rpm rpmbuild


    【解决方案1】:
    1. 如果您想获得可重现的构建,您应该使用“模拟”而不是直接调用 rpmbuild。
    2. Mock 可以有配置,您可以将这些宏放到这些配置中。例如:

      $ cp /etc/mock/fedora-22-x86_64.cfg ~/my-project-fedora-22-x86_64.cfg
      $ vi ~/my-project-fedora-22-x86_64.cfg
      

    将这一行放在此处:

    config_opts['macros']['%Add_your_macro_name_here'] = "add macro value here"
    

    现在您可以使用定义的这些宏来构建它:

    $ mock -r ~/my-project-fedora-22-x86_64.cfg foo.src.rpm
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多