2017-05-09 42 views
0

以下廚師食譜代碼旨在安裝或升級給定的包名爲東西。這個配方的目標是:正確的方式來執行一個包安裝或與廚師升級

  • 執行初始安裝包/服務
  • 的保持服務運行時沒有必要升級包
  • 如果新版本的升級服務該RPM是可用的,在這種情況下,重新啓動服務升級

不知何故出現安裝運行良好後,但在升級廚師客戶端的事件報告與缺少以下錯誤的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

這麼想的服務名稱在升級過程中改變了嗎? (tomcat以tomcat7爲例)?這將解釋爲什麼找不到init.d腳本。 – Tensibai

+0

RPM名稱已更改,但本身沒有服務......我將命名格式從* something-1.0-230.rpm *更改爲* something-2017.05.09.231-231.rpm *其中230和231是內部編號。我不確定這是否會導致服務名稱發生改變 – gextra

+1

我無法猜測您的rpm的功能,請檢查filesytem以確保有什麼和不是。但是,如果廚師找不到init.d腳本,這意味着有些東西在某處將其刪除,而這不是廚師,無論是yum(由包資源使用)還是您的rpm內部代碼在設置時都存在問題。用一個僞造的食譜我不能說,這只是猜測 – Tensibai

回答

0

的問題涉及到用於生成RPM代表.spec文件。在這樣的文件中,宏包%preun(這是一個預卸載部分)在包的安裝升級上執行,因此它在升級時也刪除了linux服務/etc/init.d/something文件

爲了防止上述,轉速實用程序具有可用於限制%preun%postun部分,其中$ 1 == 0它指示場景是未範圍的參數unistall和$ 1 == 1視爲升級。

的解決方案是

%preun 
if [ $1 == 0 ]; then 
    #cleanup 
fi