如何控制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