2012-07-04 41 views
69

由於版本0.10.10中的錯誤,當前Chef recipe沒有運行。如何將Vagrant使用的廚師版本升級到0.10.12?如何控制Vagrant用於配置虛擬機的Chef版本?

我不想只更新它的虛擬機的當前實例 - 我不斷破壞和重建這些。我需要改變流浪者基地箱中的東西,還是我的(物理)系統安裝中的東西?

回答

103

使用放浪插件vagrant-omnibus對我來說真是棒極了:

config.omnibus.chef_version = :latest 

您還可以指定一個特定的:

vagrant plugin install vagrant-omnibus 

然後,您可以簡單地做配置之前配置在Vagrantfile你的廚師版本版本:

config.omnibus.chef_version = '11.6.0' 
+11

這應該被表決,並且可能被標記爲正確答案而不是更老的標記正確的答案。 – jimeh

+0

是的。這是線程的正確答案,因爲它不依賴於Ubuntu機器。對於一個完整的工作示例[請查看我的回購](https://github.com/elgalu/jenkins-box-for-travis/blob/74c56b7/Vagrantfile#L25) –

+0

如果您將':latest'替換爲特定版本? –

31

重建基盒。首先,不需要配置和SSH即可啓動它。

vagrant up --no-provision 
vagrant ssh 

然後,執行您需要更新框的命令。這可以包括更新廚師和Ruby。或者,更新操作系統的軟件包等。您應該清理不需要的所有內容,例如下載的軟件包文件或緩存。

例如,我在我的Vagrant盒中使用Opscode Omnibus Full Stack Installer for Chef(最初使用VeeWee構建),我也更新了軟件包。

sudo dpkg --purge chef chef-full 
sudo true && curl -L https://www.opscode.com/chef/install.sh | sudo bash 
sudo apt-get update && sudo aptitude safe-upgrade 
sudo rm /var/cache/apt/archives/*.deb 

不要忘記將磁盤「歸零」以減小尺寸。

# a bunch of commands like gem install chef, apt-get upgrade, whatever 
sudo dd if=/dev/zero of=/EMPTY bs=1M 
sudo rm /EMPTY 
exit 

然後,打包盒子並將其添加到您的Vagrant環境中以供使用。

vagrant package 
vagrant box add mynewlucid32 package.box 

如果你想使用相同的郵箱名稱,你需要(〜/ .vagrant.d /盒/ BOXNAME)首先刪除現有框。

+0

你可以找到這個和幾個命令在postinstall.sh腳本這裏:https://gist.github.com/1052287 – StephenKing

+0

僅供參考,而不是'了wget -O - https://opscode.com /chef/install.sh | sudo bash'以下是新的[推薦](http://wiki.opscode.com/display/chef/Installing+Omnibus+Chef+Client+on+Linux+and+Mac)程序。 'sudo true && curl -L https://www.opscode.com/chef/install.sh | sudo bash'前者可能會導致「無法取回有效的包裹!」 – pdeschen

40

config.vm.provision :chef_solo塊之前添加行

config.vm.provision :shell, :inline => 'apt-get install build-essential ruby1.9.1-dev --no-upgrade --yes' 
config.vm.provision :shell, :inline => "gem install chef --version 11.4.2 --no-rdoc --no-ri --conservative" 

您Vagrantfile。

道具豪拉基的評論http://dougireton.com/blog/2012/12/23/automatically-upgrading-chef-client-on-vagrant-up/

編輯,包括傑森梅菲爾德的評論。確保並給他一個upvote。我添加了--no-upgrade以加快速度並匹配第二行的--conservative。您可以改爲執行Jason的操作,並刪除--no-upgrade--conservative

編輯匿名user228653包括建議編輯

+0

謝謝 - 目前尚無法對此進行測試,但聽起來很合理。(注意:博主:廚師實際上運行了兩次,一次是升級廚師,然後是一次真正。) –

+0

實際上,我認爲你幾乎可以忽略博客文章這是另一種解決方案,但是我從評論中挑選出來的內容很短,很有效。 –

+2

已通過測試並正在爲我工​​作 –

11

我無法張貼在答案的意見,但我想,把註釋添加到布賴恩·拉森的回答以上。爲了讓他的供應命令起作用,我需要在它之前添加一行,以便能夠在安裝新的Chef版本期間構建gem原生擴展。因此,它成爲:

config.vm.provision :shell, inline: 'apt-get install ruby1.9.1-dev' 
config.vm.provision :shell, inline: 'gem install chef --version 11.4.4 --no-rdoc --no-ri' 

這是在Ubuntu 13.04,在關係到人的情況下。

11

有一些options您可以在使用Chef進行配置時指定。其中之一是version,它允許你指定你想要的廚師版本。

例如,看到這種提取物的chef.version線從我的Vagrantfile

config.vm.provision :chef_solo do |chef| 
    chef.version = "10.14.2" 
    chef.cookbooks_path = "cookbooks" 
    chef.add_recipe("vagrant_main") 
end 
+2

在我看來,這應該被標記爲正確的答案。理由:(1)它獨立於外部插件和操作系統(2)使標準化團隊的開發環境更容易。 – Mia

0

如果您使用的廚師測試廚房,那麼您可以在.kitchen.yml文件中指定大廚的版本,像這樣:

provisioner: 
    name: chef_zero 
    require_chef_omnibus: 12.6.0 
相關問題