Centos 在rpm.spec文件中检测平台

Centos 在rpm.spec文件中检测平台,centos,package,rpm,Centos,Package,Rpm,我有一个.spec文件来为Fedora、CentOS和Oracle Linux构建rpm。我需要为内核包安装卸载后触发器。为了在Oracle Linux上实现这一点,我需要在我的规范文件中添加如下内容: %triggerpostun -- kernel-uek %(cat %{SOURCE1001}) %if 0%{?fedora} %triggerpostun -- kernel-core %else %if 0%{?ol7} %triggerpostun -- kernel-uek %el

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

%triggerpostun -- kernel-uek
%(cat %{SOURCE1001})
%if 0%{?fedora}
%triggerpostun -- kernel-core
%else
%if 0%{?ol7}
%triggerpostun -- kernel-uek
%else
%triggerpostun -- kernel
%endif
%endif
%(cat %{SOURCE1006})
在CentOS上,该包称为内核,在Fedora上称为内核内核。我的问题是,如何以可移植的方式在spec文件中指定触发器(以便它可以在所有这些目标平台上工作),而不进行任何复制

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

%triggerpostun -- kernel-uek
%(cat %{SOURCE1001})
%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上正确的包名是内核


我完全不知道如何包装,所以如果您需要更多的上下文来提供建议,请告诉我。

我认为多个
%的问题都是由其他
引起的。我会这样定义条件:

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

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

%if 0%{?rhel} >= 6
%define kernelpkgname kernel
%endif
然后使用
triggerposton
中的
kernelpkgname
变量

%postun
....

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

我在这里看不到:在这里看:。这并不是说你的解决方案是错误的(我没有测试它),但最终我选择了类似于
%triggerposton--kernel,kernel core,kernel uek…
的方法,因为内核包名在这些发行版中是唯一的。