RPM 触发器 - 区分软件包安装和触发器激活

RPM 触发器 - 区分软件包安装和触发器激活

我正在创建一个 RPM 包(我们称之为包 A)。如果重新安装或更新另一个包(包 B),我需要做出反应。因此,我在包 B specfile 中创建了一个触发器:

%triggerin -- B
#myscript

不幸的是,即使我安装或更新了包 A,并且包 B 已经在系统中,触发器也会被激活。只有当包 A 已安装并且包 B 已重新安装或更新时,我才需要执行触发器代码。我如何区分这两种激活类型?

答案1

如果目标已经安装,则 %triggerin 会在 RPM 安装后执行;如果 RPM 已安装,则在目标安装后执行

如果目标已安装,则 %triggerun 会在卸载 RPM 之前执行;如果目标已安装,则 %triggerun 会在卸载目标之前执行。

%triggerpostun 在目标卸载后执行,如果安装了 RPM,但如果 R​​PM 已卸载,则不会运行

也就是说,您可以使用带有条件的 %triggerin 来避免在安装 A 时执行代码。您可以通过在 %pre 部分中为变量分配值来实现这一点。

像这样:

%定义安装%(rpm -qa | grep A)

%触发

如果 [ $install_ed ne "A" ]; 然后...

我现在没有使用基于 rpm 的机器,所以我无法测试该解决方案,但它应该可以工作

答案2

您能否尝试检查%{installtime:date}触发器中的情况?仅当时间足够近时才执行操作。

相关内容