【问题标题】:rpmbuild requires depending on the OS version where the rpm will be installedrpmbuild 需要取决于将安装 rpm 的操作系统版本
【发布时间】:2021-04-29 05:24:29
【问题描述】:

我正在使用 rpmbuild 构建一个 rpm。已经构建的 rpm 将安装在 rhel6、rhel7 或 rhel8 机器上。在 rhel8 上,需要一些其他发行版本(rhel6 和 rhel7)中不需要的依赖项。 在包的名称上使用条件(如下)不是一种选择。

Requires: (pkgA >= 3.2 or pkgB)

我想在规范文件中做的是:

%if %{VERSIONMAJOS} < 8
Requires: sssd >= 1.15 , sudo >= 1.8.6p3
%else
Requires: sssd >= 1.15 , sudo , oddjob , oddjob-mkhomedir
%endif

如何定义变量 VERSIONMAJOS? 我不能使用宏 %{rhel}(如此处所示 https://unix.stackexchange.com/questions/9296/how-can-i-specify-os-conditional-build-requirements-in-an-rpm-spec-file),因为该变量是在构建 rpm 期间定义的(如果我正确理解 DistTag 页面 https://fedoraproject.org/wiki/Packaging:DistTag)。 当我在 rhel6、rhel7 或 rhel8 上使用命令 yum -y nameOfRmp.rpm 时,我需要的是不同的库要求。

【问题讨论】:

标签: dependencies dependency-management yum rpmbuild rpm-spec


【解决方案1】:

使用%{?rhel} 宏。在基于 RHEL 的发行版中,它将等同于主要发行版。它通常与前导 0 一起使用,这样当规范文件更有可能在未定义的其他发行版上成功构建时。

%if 0%{?rhel} < 8
Requires: sssd >= 1.15 , sudo >= 1.8.6p3
%else
Requires: sssd >= 1.15 , sudo , oddjob , oddjob-mkhomedir
%endif

对于具有不同Requires 集的每个 发行版,您需要构建一个单独的RPM 包。

基于分布的动态需求根本不可能。这不是 RPM 的工作原理。

【讨论】:

  • 我已经扩展了我的答案。您不会只构建一个通过某些“动态需要每个发行版”来满足所有发行版的 RPM 文件(没有这样的东西)。您构建了多个 RPM,一个用于您打算支持的每个发行版。 RPM 的 dist 进入文件名,因此很容易区分哪个 RPM 文件适用于哪个发行版的哪个版本。
  • 这是一个示例 - Fedora 32 和 RHEL 8 从“docker”移动到“podman” - github.com/AaronDMarasco/packpack/blob/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-05
  • 2018-03-23
  • 1970-01-01
  • 1970-01-01
  • 2019-08-17
  • 1970-01-01
相关资源
最近更新 更多