如何解决rpmbuild 需要取决于将安装 rpm 的操作系统版本
我正在用 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
时不同的库要求。
解决方法
使用 %{?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 的工作原理。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。