我正在创建一个 RPM 包(我们称之为包 A)。如果重新安装或更新另一个包(包 B),我需要做出反应。因此,我在包 B specfile 中创建了一个触发器:
%triggerin -- B
#myscript
不幸的是,即使我安装或更新了包 A,并且包 B 已经在系统中,触发器也会被激活。只有当包 A 已安装并且包 B 已重新安装或更新时,我才需要执行触发器代码。我如何区分这两种激活类型?
答案1
如果目标已经安装,则 %triggerin 会在 RPM 安装后执行;如果 RPM 已安装,则在目标安装后执行
如果目标已安装,则 %triggerun 会在卸载 RPM 之前执行;如果目标已安装,则 %triggerun 会在卸载目标之前执行。
%triggerpostun 在目标卸载后执行,如果安装了 RPM,但如果 RPM 已卸载,则不会运行
也就是说,您可以使用带有条件的 %triggerin 来避免在安装 A 时执行代码。您可以通过在 %pre 部分中为变量分配值来实现这一点。
像这样:
%定义安装%(rpm -qa | grep A)
%触发
如果 [ $install_ed ne "A" ]; 然后...
我现在没有使用基于 rpm 的机器,所以我无法测试该解决方案,但它应该可以工作
答案2
您能否尝试检查%{installtime:date}
触发器中的情况?仅当时间足够近时才执行操作。