2016-08-05 45 views
0

我是RPM大楼中的一名newby。我必须构建RPM,只有在目标机器上存在文件/ etc/i-am-a-require时才会安装软件包。所以我写了如何在SPEC文件脚本的%pre部分返回false时回滚RPM安装

%pre 
if test -f "/etc/i-am-a-requirement"; then 
echo "I'm OK to continue" 
else 
echo "The file is not found, the RPM won't be installed" 
-- How to add failure here? -- 
fi 

我知道,通常我们期望RPM有依赖的包,但在这种情况下,在“/ etc/I-AM-A-要求”分布二进制,所以它不会有一个包在所有。

+0

http://stackoverflow.com/questions/9932562/how-to-exit-rpm-install-in-case-of-an-error?rq = 1 –

回答

1

%pre,%post等脚本无法停止安装rpm。一旦你在脚本里面,安装将继续执行脚本的退出代码。

你应该使用要求:

Requires: /etc/i-am-a-requirement 
+1

如果'/ etc/i-am-a-requirements'不在rpm包中,它能起作用吗? – WilQu

+1

'%post'不能,但'%pre'可以 - 只需调用'false'。它不会“回滚”你在脚本中做的任何事情。至于你回答的“需求”标志,这是正确的解决方案。如果直接查看文件系统或检查RPM数据库,我不确定。 –

+0

感谢@aaron的澄清。 wilqu:是的,它只与一个文件一起工作,但正如Aaron所说,不确定是否会在磁盘上搜索文件或者只是在rpm数据库中搜索文件。 –

相关问题