我有一个.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上正确的软件包名称是内核。
我是包装的完整菜鸟,所以如果您需要更多上下文来提供建议,请告诉我。
答案 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}