有什么方法可以通过命令行参数覆盖 RPM 规范文件?

Any way to override RPM Spec file through command line arguments?

我正在使用一个安装了大约 2000 RPMS 的系统。现在,根据一些新要求,我需要构建一个包含 RPMS 的新系统映像,这样所有安装的 RPMS 都必须附带该 RPM 中每个二进制文件的 HMAC 文件。本质上,我需要一种机制来计算 HMAC 并添加包含该文件的 HMAC 的文件,这适用于在创建 RPM 时进入 RPM 的所有二进制文件。作为 PoC 的一部分,我对单个示例 RPM 的规范进行了以下更改,它在构建 RPM 时生成了该 RPM 中存在的二进制文件的 HMAC 文件。

+%define __spec_install_post \
+        %{?__debug_package:%{__debug_install_post}} \
+        %{__arch_install_post} \
+        %{__os_install_post} \
+            LD_PRELOAD=%{devfsdir}%{_libdir}/libcrypto.so %{devfsdir}/usr/bin/fipshmac $RPM_BUILD_ROOT/<binary filename> \
+%{nil}
+
 
@@ -63,6 +73,10 @@
 -----------
+/usr/bin/.<filename>.hmac


 %files coverage -f coverage_filelist.txt

但目前系统有大约 2000 个 RPMS 作为标准 ISO 的一部分安装。并且为每个单独的 RPM 更改规范文件将是费力和困难的。

还有一点洞察力,RPM 是如何创建的,ISO 是如何最终从中构建的 - 有一个构建脚本,它在包含所有依赖关系图的 .def 文件之后为每个 RPM 单独调用 rpmbuild每分钟转数。

能否请您建议是否可以在不编辑单个规范文件的情况下进行任何改进,或者是否可以使用类似于 Makefile.overrides 的所有机制通用的机制来覆盖包的 Makefile ?

如果我可以将命令行参数传递给 rpmbuild 命令,我的工作就完成了,该命令将 运行 一个脚本来为将打包到 RPM 中的二进制文件生成 HMAC 文件,并考虑新的打包时生成的HMAC文件。

[我对 RPM 和 rpmbuild 的概念还很陌生。所以请原谅任何错误。]

如果您需要符合 FIPS 的发行版,那么 RHEL 是正确的选择。但是 FIPS-140-3 是相当新的,分发才刚刚开始使用它。例如,目前建议(尚未接受)用于 Fedora 34 https://fedoraproject.org/wiki/Changes/Signed_RPM_Contents

回到您原来的问题 - 您不需要在每个 SPEC 文件中定义该宏。您可以将其放入 /usr/lib/rpm/macros.d/ 中的文件中,或使用 -D 选项将其传递给 rpmbuild。但是剩下的...是的,您将需要修改每个 SPEC 文件,这将是很多工作。

为了节省您的时间 - 您可以使用 Mock,它允许您使用 --chain 选项重建整套 SRC.RPM。它也有选项 -D