以下主厨食谱代码旨在安装或升级名为某事的给定包。这个食谱的目标是:
以某种方式安装似乎运行良好,但是如果升级主厨客户端报告与缺少init.d脚本相关的以下错误,那么看起来包得到了unistalled没有正确重新安装:
ERROR: service[something] (something::something-deploy line 36)
had an error: Chef::Exceptions::Service: service[something]:
unable to locate the init.d script!
感兴趣的食谱代码:
package 'something' do
action :upgrade
notifies :restart, "service[something]", :delayed
end
service 'something' do
action :enable
end
答案 0 :(得分:0)
该问题与用于生成RPM的.spec文件有关。在这样的文件中,宏%preun(这是一个卸载前部分)在包的安装和升级上执行,因此它正在删除linux服务/ etc /init.d/something文件也在升级时
为防止出现上述情况,rpm实用程序有一个参数可用于限制%preun 和%postun 部分的范围,其中 $ 1 == 0 表示该场景为un unistall, $ 1 == 1 表示升级。
解决方案是
%preun
if [ $1 == 0 ]; then
#cleanup
fi