2013-02-26 47 views
17

如果package "nginx"在廚師被轉換爲apt-get install nginx Ubuntu的節點上,什麼可以在廚師的食譜,這會造成這樣寫:apt-get的更新和apt-get升級廚師

apt-get -y update 
apt-get -y upgrade 

未能進行從apt cookbook找出。

+0

請問這個https://github.com/patdeegan/chef-unattended-upgrades有幫助嗎? – favoretti 2013-02-26 03:41:08

+0

我是這麼認爲的,但如果有更輕的解決方案,我很感興趣。 – 2013-02-26 12:40:36

回答

43

The Opscode "apt" cookbook的默認配方將運行apt-get update以確保更新包緩存。我們建議儘早將它放在節點的運行列表中,以便以後可以使用正確的版本安裝軟件包。

由於某些原因,我們通常不建議用戶在配方中使用「apt-get upgrade」。

  1. apt-get可以升級,其具有衝突的配置或其他問題不能沒有再次運行命令,或手動運行其他APT/dpkg的命令被解析的包裝。
  2. 系統上所有軟件包的自動升級可能會對正在運行的系統產生意想不到的副作用(邊緣案例很多,可能很棘手,所以我無法覆蓋它們)。

對於應始終更新到最新版本的軟件包,請使用「升級」操作。

package "nginx" do 
    action :upgrade 
end 

如果你打算重用的一本菜譜,它定義了菜譜,你可以寫一個食譜,修改現有資源的作用,就像這樣:

resources("package[nginx]").action(:upgrade) 

,配方中的#resources方法在Resource Collection中查找指定的資源(包nginx)。然後發送#action方法與參數:upgrade將告訴大廚,行動應該是升級。

編輯更新:選擇會以這種方式自動升級包時一定要小心。封裝中的上游更改可能會對系統造成不利影響。如果這樣的程序包重新啓動它在後安裝腳本中管理的服務,情況尤其如此。瞭解您的基礎架構,如果有疑問,請運行您自己的軟件包存儲庫,該存儲庫具有您需要的用於應用程序堆棧的關鍵軟件包

+6

大家都這樣說,但是當我包含apt Cookbook並將其稱爲默認配方時,我無法獲取存儲庫列表來更新。更糟糕的是,如果另一個配方合併到我的一個配方中,則依賴於apt,那麼通過登錄到節點似乎沒有可能的手動更新方法。我希望在某些地方有一個明確的解釋,說明如何在你不得不使用apt Cookbook的情況下獲得apt-get版本庫。 – wkhatch 2013-10-23 22:48:09

+0

看起來apt只會每24小時更新一次。該臨時文件控制該進程。在/ var/lib中/公寓/定期/更新成功 - 郵票 – jorfus 2016-02-17 00:57:18

0

公寓廚師食譜不會隨着每位廚師的跑步而更新。控制這個的屬性被稱爲periodic_update_min_delay並被設置爲86400(該屬性應該被稱爲sec_delay)。如果以下文件存在並且超過24小時,apt將更新緩存。

/var/lib/apt/periodic/update-success-stamp 

它也看起來,apt配方(default.rb)包含一個指令,強制您的配方可以調用更新。

# For other recipes to call to force an update 
execute 'apt-get update' do 

如果你這樣做,雖然,你會想要一個not_if避免運行過於頻繁,此時你還不如手動調用它自己。我厭倦了這一切,最終只是在安裝之前在節中調用apt-get update。

execute "apt-get-update" do 
    command "apt-get update" 
end 

我懷疑安全更新的長期解決方案是將更新延遲設置爲幾個小時。