rpm命令的%pre部分中的rpm命令的奇怪行为

时间:2015-04-10 15:27:57

标签: centos dependencies rpm

我有一些包的几个版本。最后一个在%pre部分中有一个错误,它终止了安装脚本:

mypak-0.0.1-1.el6.noarch.rpm
mypak-0.0.1-2.el6.noarch.rpm
mypak-0.0.1-3.el6.noarch.rpm <-- bad package

我的所有软件包都有prepostpreunpostun部分的调试输出。

我安装了第一个包:

rpm -Uhv mypak-0.0.1-1.el6.noarch.rpm

输出( param 是传递给脚本部分的参数)是:

Preparing...                ########################################### [100%]
pre: 0.0.1-1.el6 ; param = 1
   1:mypak                  ########################################### [100%]
post: 0.0.1-1.el6 ; param = 1

然后我尝试更新我的软件包并(意外地)立即启动包含所有软件包的rpm命令:

rpm -Uhv mypak-0.0.1-*                
warning: package mypak = 0.0.1-1.el6 was already added, replacing with mypak > 0.0.1-2.el6
warning: package mypak = 0.0.1-2.el6 was already added, replacing with mypak > 0.0.1-3.el6
Preparing...                ########################################### [100%]
pre: 0.0.1-3.el6 ; param = 2
!!!version 3 is bad!!!
error: %pre(mypak-0.0.1-3.el6.noarch) scriptlet failed, exit status 1
error:   install: %pre scriptlet failed (2), skipping mypak-0.0.1-3.el6
preun: 0.0.1-1.el6 ; param = 0
postun: 0.0.1-1.el6 ; param = 0

如您所见,我的包裹最终被删除了。此外,即使其他包装依赖它,包装也会被移除。我甚至没有得到任何有关已损坏依赖项的警告!

如果我一个接一个地安装我的包裹,我就不会遇到这个问题。在这种情况下,第三个软件包的安装失败了。我的包的先前版本仍然存在。

我认为这真是一种奇怪的行为。它是rpm中的错误还是我错过了什么?

我在Centos 6.5上使用rpm 4.8.0。

1 个答案:

答案 0 :(得分:1)

在安装时,RPM将忽略(通过替换较新版本)旧版本的同名软件包。重命名某些包,或者不在同一个transactio中安装同名包的多个版本

升级时

%预失败很棘手。如果%pre失败,则不会安装较新的包。和(在已安装旧版本时升级时)将删除已安装的软件包。这里最好的答案是在安装时不依赖于包装中的%pre failure。而是添加提供:/要求: 以便在依赖项检查期间发生包(和事务)失败,或设计一种不同的方法来测试动态属性而不是%pre, 无论是在配置中,还是在文档中,或通过重命名和废弃以前的包,以获得更可靠的包装。