开发人员提供了带有 spec 文件的源代码。是否可以构建一个适用于所有 CentOS 7.x 版本的 RPM,这是一个好主意吗?
答案1
从软件包开发者的角度来看,CentOS == Red Hat Enterprise Linux(没有许可/版权的 Red Hat 内容和徽标,也没有企业支持层)
因此,您可以使用广泛的 Red Hat 文档(一个很好的概述这里)
主要版本内的兼容性
Red Hat Enterprise Linux 产品系列的核心目标之一是为第三方应用程序提供稳定、一致的运行时环境。为了实现这一目标,Red Hat 致力于为主要版本中发布的所有软件包更新保留应用程序二进制兼容性、配置文件兼容性和数据文件兼容性。例如,从 Red Hat Enterprise Linux 6.1 到 Red Hat Enterprise Linux 6.2 的软件包更新,或修复已发现安全漏洞的软件包更新,不应破坏已部署应用程序的功能只要它们遵守标准的应用程序二进制接口(应用生物特征识别 (ABI))。
来源
如果软件包开发人员按照开发人员指南和应用程序兼容性指南 那么就应该可以构建一个适用于主要 CentOS / RHEL 版本的所有补丁 / 次要版本级别的单个二进制 RPM 包。
这确实是个好主意。
答案2
除非该软件包依赖于另一个库更新或在某个点版本中引入的内容,否则整个 CentOS 7 的单一构建就足够了。
您可以在更新存储库中看到此类示例。许多软件包将使用 %dist 标签,该标签el7,但你也可以看到一些带有标签的el7_4。
看:http://vault.centos.org/7.4.1708/updates/x86_64/Packages/
您可以在 spec 文件中使用条件语句,根据 %dist 标记的值设置某些依赖项。这通常是为了处理主要版本之间的依赖项差异,但您可以将其调整为点版本。
%if "%{dist}" == "el7"
Require: package-versionA
%end
%if "%{dist}" == "el7_4"
Require: package-versionB
%end
笔记:这是未经测试的伪代码。您可能需要进行修改,但它应该很接近。
然后,您需要确保您的构建环境为构建过程提供了正确的 dist 标签值。有多种方法可以做到这一点,我们需要了解有关您的构建环境的更多信息。
答案3
所有 Centos 7.x 都只是小升级,所以我认为你不需要在 rpm 中做出改变。所有 centos 软件包都以 为后缀el7
,而不是以el7.6
或类似后缀,所以我认为你可以安全地这样做(我们已经这样做了至少两年)。