在%post中,我正在运行几个将验证rpm安装的测试。 但是如果测试失败或后脚本失败,我该如何恢复rpm安装?
答案 0 :(得分:1)
你不可能,你不应该。
%post
为时已晚,无法中止。您的所有文件都已放在磁盘上等等。
你可以禁用自己,这样你就不会跑,但这就是它。
如果这些事情你真的不能让它失败那么你能做的最好就是在%pre
期间进行测试并在那里中止(但即使这样也是邪恶的)。
答案 1 :(得分:1)
这是我在%{basedeploymentpath}
中使用的黑客回滚:
rpm -ev
在上面的代码段中,如果找不到代表目录的变量&
,则在包的名称上调用%post
,使用1
分叉进程。在提到的条件下,rpm -ivh
脚本将以代码warning: %post(...) scriptlet failed, exit status 1
退出。
如果安装过程随后在命令行(rpm -ivh
)运行,并且安装后存在错误情况,则会显示以下结果:0
这是一个丑陋的黑客,但它的工作原理。 注意:如果在运行echo $?
操作后执行rpm -ivh
, set_fact:
groups: "{{ env }}_{{ hostname }}_groups"
命令的退出状态仍将显示为成功(退出pairLists: {
env_1: {
host1_1: [1,2,3,4],
host2_1: [2,3,4,5],
},
env_2: {
host2_1: [3,2,3,4],
host2_2: [6,5,4,3],
},
}
)