如何控制Vagrant使用的configuration虚拟机的版本?

由于版本0.10.10中的错误,当前的Chef食谱未运行。 如何将Vagrant使用的厨师版本升级到0.10.12?

我不想仅仅更新虚拟机的当前实例 – 我一直在摧毁和重build这些虚拟机。 我需要改变stream浪者基地箱中的东西,或者我的(物理)系统安装中的东西吗?

使用stream浪汉插件vagrant-omnibus为我工作的很好:

vagrant plugin install vagrant-omnibus 

然后,您可以在进行configuration之前在Vagrantfile中简单configuration您的厨师版本:

 config.omnibus.chef_version = :latest 

您也可以指定一个特定的版本:

 config.omnibus.chef_version = '11.6.0' 

添加行

 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" 

到你的config.vm.provision :chef_solo块之前的config.vm.provision :chef_solo

http://dougireton.com/blog/2012/12/23/automatically-upgrading-chef-client-on-vagrant-up/上的道义;

包括Jason Mayfield的评论。 确定并给他一个upvote。 我添加了--no-upgrade来加快速度,并在第二行匹配--conservative 。 你可以做一些Jason的工作,同时删除--no-upgrade--conservative

编辑,以包括由匿名user228653build议编辑

重build基地箱。 首先,不需要configuration和SSH就可以启动它。

 vagrant up --no-provision vagrant ssh 

然后,执行您需要更新框的命令。 这可以包括更新厨师和Ruby。 (可选)更新操作系统的软件包等。您应该清理一些不需要的东西,比如下载的软件包文件或caching。

例如,我在我的Vagrant盒子(最初用VeeWee构build )中使用了Opscode Omnibus Full Stack安装程序 ,我也更新了软件包。

 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 / boxes / BOXNAME)。

我无法发表评论的答案,但我想给Bryan Larsen的回答添加一个注释。 为了使他的configuration命令工作,我需要在它之前添加一行,以便能够在安装新的Chef版本的过程中构buildgem本机扩展。 因此,它成为:

 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上,以防万一。

使用Chef进行configuration时,您可以指定多个选项 。 其中之一是version ,它允许你指定你想要的厨师版本。

例如,请参阅我的chef.version摘录中的chef.version行:

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

如果您正在使用Chef Test Kitchen,则可以在.kitchen.yml文件中指定Chef版本,如下所示:

 provisioner: name: chef_zero require_chef_omnibus: 12.6.0