在rpm .spec文件中检测平台

时间:2017-06-25 09:05:25

标签: centos package rpm

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

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

在CentOS上,该软件包称为内核,在Fedora上称为内核核心。我的问题是,如何以可移植的方式在我的spec文件中指定触发器(以便它适用于所有这些目标平台),而不会有任何重复?

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

%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上正确的软件包名称是内核。

我是包装的完整菜鸟,所以如果您需要更多上下文来提供建议,请告诉我。

1 个答案:

答案 0 :(得分:0)

我认为多个%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

然后在kernelpkgname中使用triggerpostun变量。

%postun
....

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