【问题标题】:Detecting the platform in rpm .spec file在 rpm .spec 文件中检测平台
【发布时间】:2017-11-28 09:59:13
【问题描述】:

我有一个 .spec 文件来为 Fedora、CentOS 和 Oracle Linux 构建 rpm。我需要为内核包安装一个卸载后触发器。为了在 Oracle Linux 上实现这一点,我需要在我的规范文件中添加这样的内容:

%triggerpostun -- kernel-uek
%(cat %{SOURCE1001})

在 CentOS 上,这个包被称为 kernel,而在 Fedora 上,它被称为 kernel-core。我的问题是,如何以可移植的方式在我的规范文件中指定触发器(以便它适用于所有这些目标平台),而不需要任何重复?

编辑:关于我尝试过的一些信息 - 我尝试将以下内容放入我的规范文件中:

%if 0%{?fedora}
%triggerpostun -- kernel-core
%else
%if 0%{?ol7}
%triggerpostun -- kernel-uek
%else
%triggerpostun -- kernel
%endif
%endif
%(cat %{SOURCE1006})

但在 CentOS 上,这给了我这样的触发器:

triggerpostun scriptlet (using /bin/sh) -- kernel-uek
for filename in /boot/*.ksplice-updates*; do
    if [[ -h $filename && ! -e $filename ]]; then
        rm $filename
    fi
done

这是错误的,因为 CentOS 上正确的包名是 kernel。

我完全是包装新手,所以如果您需要更多上下文来提供建议,请告诉我。

【问题讨论】:

标签: centos package rpm


【解决方案1】:

我认为多个%else 会导致问题。我会这样定义条件:

%if 0%{?fedora}
%define kernelpkgname kernel-core
%endif

%if 0%{?ol7}
%define kernelpkgname kernel-uek
%endif

%if 0%{?rhel} >= 6
%define kernelpkgname kernel
%endif

然后在triggerpostun 中使用kernelpkgname 变量。

%postun
....

%triggerpostun -- %{kernelpkgname}
cat %{SOURCE1006}

【讨论】:

  • 并不是说你的解决方案是错误的(我没有测试它),但最后我选择了类似%triggerpostun -- kernel, kernel-core, kernel-uek ... 的东西,因为内核包名称在这些发行版中是唯一的.
猜你喜欢
  • 1970-01-01
  • 2021-10-29
  • 2014-09-07
  • 2015-03-07
  • 2017-03-28
  • 2010-09-21
  • 2015-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多