我有一些包的几个版本。最后一个在%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
我的所有软件包都有pre
,post
,preun
和postun
部分的调试输出。
我安装了第一个包:
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。
答案 0 :(得分:1)
在安装时,RPM将忽略(通过替换较新版本)旧版本的同名软件包。重命名某些包,或者不在同一个transactio中安装同名包的多个版本
升级时%预失败很棘手。如果%pre失败,则不会安装较新的包。和(在已安装旧版本时升级时)将删除已安装的软件包。这里最好的答案是在安装时不依赖于包装中的%pre failure。而是添加提供:/要求: 以便在依赖项检查期间发生包(和事务)失败,或设计一种不同的方法来测试动态属性而不是%pre, 无论是在配置中,还是在文档中,或通过重命名和废弃以前的包,以获得更可靠的包装。