【问题标题】:How does rpmbuild compute which fields to generate?rpmbuild 如何计算要生成哪些字段?
【发布时间】:2023-08-05 21:09:02
【问题描述】:

在比较不同的 RPM 文件时,我注意到并非所有文件都公开相同的标头标签。所以必须有一些逻辑来激活/停用其中一些的创建。

一个例子是构建时间和主机。我偶然发现了两个 RPM 规范。两者都没有提到任何看起来像规范或提供信息的开关的东西。不过,其中一个是使用Build TimeBuild Host 字段生成的,另一个不是(我不允许发布任何一个)。

我知道新的_buildhost 宏。用于生成两者的 RPM 版本不足以使用它。据我所知,这两个包都是从源列表中创建的。不显示构建信息的一个是使用 CMake/CPack 构建的,另一个直接使用 rpmbuild,这是我所拥有的关于严重差异的唯一信息。

两者都定义为Group: AddOn。到目前为止,我还没有找到任何关于哪些组是有效的或它们的含义的远程确定的资源。我唯一发现的是 Fedora 中的 list of deprecated 组。我会对受支持的列表更感兴趣,但到目前为止还没有成功。

到目前为止我发现的资源(省略无意义的): Max RPM Package Building PageRedHat blog-ish tutorialThe RPM build guideThe actual RPM tags documentationThe RPM packaging guide

很遗憾,以上都没有提供我正在寻找的信息。

“给男人一条鱼”问题:如何在rpm 4.11 中禁止创建Build TimeBuild Host,无论是在规范语法中还是在rpmbuild 的使用中?

“教人如何钓鱼”问题:是否有关于使用哪些设置创建哪些标题标签的文档?

【问题讨论】:

    标签: cmake rpm rpmbuild cpack


    【解决方案1】:

    您可以使用Mock 来构建 rpm(无论如何推荐)。并使用config_opts['hostname'] = 'my.own.hostname'。 Mock 将在 chroot 中调用 sethostname()。 这是 AFAIK 的唯一方法。

    rpmbuild 应该尊重SOURCE_DATE_EPOCH - 但我从未使用过它。 您可以使用以下方法设置环境变量: config_opts['environment']['SOURCE_DATE_EPOCH'] = 'foo'

    【讨论】:

    • 感谢您的回复。不幸的是,我坚持使用香草 Fedora 软件包。这还包括对 rpm 4.11 的限制,它还不支持 SOURCE_DATE_EPOCH。根据您回复中的链接,它仅支持 rpm 4.13。
    • 那一定是非常老的 Fedora。甚至 RHEL8.0 也有 rpm 4.14。所有最新的 Fedoras 都有更新的版本。
    • 可能是这样,但它不会改变约束。您是否知道该版本可以影响字段选择的任何方式,或者它真的仅取决于版本?