我需要在 MacOS 上为 Java 软件包构建 RPM。我使用的是自制程序中的 rpmbuild,版本 4.14.2.1。工具链设置正确,最后我得到了有效的 RPM。只有一个障碍:RPM 的目标操作系统字符串为“darwin”,因为它是在那里构建的,并且尝试在普通 Linux(想想 CentOS)上安装它会失败并显示以下消息
Transaction check error:
package myrpm.noarch is intended for a different operating system
事实上,查询 RPM 证实了原因:
# rpm -qp --qf '%{os}\n' myrpm.noarch.rpm
darwin
为了不更改我的源代码树,我想将必要的属性放在本地.rpmrc
文件中。
我需要如何设置才能最终获得真正独立于平台的 RPM?
为了澄清这一点:rpm 包含可在任何具有 Java 8 JRE 和类似 POSIX 文件系统的系统上运行的软件和路径。它至少应该可以安装在 darwin/MacOS 和 Redhat/CentOS/SuSE 宇宙上。
答案1
构建 noarch RPM 的方法实际上是修改 spec 文件以包含以下指令:
BuildArch: noarch
我不确定您是否可以在配置文件(例如 )中配置相同的内容.rpmrc
,但无论如何,这样做可能是一个坏主意,因为它会阻止您的 rpmbuild 安装构建实际特定于架构的软件包,即使您不这样做如果您自己不需要它们,那么此时它仍然是一个“损坏的”(或者可能不兼容/不完整)的 rpmbuild 设置。
如果您确实有权访问规范文件(以您的包命名的文件,带有.spec
扩展名),请考虑使用该指令更新它以正确构建 noarch 包BuildArch: noarch
,在这种情况下,无论它在哪里构建,它都可以正常工作,无需对本地 rpmbuild 配置进行任何修改。