问题描述
我正在使用一个安装了大约 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/
中的文件中或使用 rpmbuild
选项将其传递给 -D
。但对于其余的...是的,您需要修改每个 SPEC 文件,这将是大量工作。
为了节省您的时间 - 您可以使用 Mock,它允许您使用 --chain
选项重建整套 SRC.RPM。它还有 -D
选项。