由于版本0.10.10中的错误,当前的Chef食谱未运行。如何将Vagrant使用的Chef版本升级到0.10.12?
我不想只是为VM的当前实例更新它-我一直在销毁和重建它们。我是否需要在“无业游民”基本框或我的(物理)系统的安装中进行某些更改?
Answers:
使用Vagrant插件vagrant-omnibus非常适合我:
vagrant plugin install vagrant-omnibus
然后,您可以在配置之前先在Vagrantfile中配置您的Chef版本:
config.omnibus.chef_version = :latest
您还可以指定特定版本:
config.omnibus.chef_version = '11.6.0'
:latest
为特定版本,是否可以使用?
config.omnibus.chef_version = '11.6.0'
config.omnibus.chef_version = :latest config.vm.provision :chef_solo do |chef|
但是厨师solo似乎仍在使用10.26.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"
在您屏蔽之前转到您的Vagrantfile config.vm.provision :chef_solo
。
hauraki在http://dougireton.com/blog/2012/12/23/automatically-upgrading-chef-client-on-vagrant-up/上的评论的道具
编辑以包括杰森·梅菲尔德的评论。确保也给他投票。我增加--no-upgrade
了速度以匹配--conservative
第二行。您可以改为执行Jason的操作,并删除--no-upgrade
和--conservative
。
已编辑以包括匿名用户建议的编辑
config.vm.provision :shell, inline: 'apt-get install ruby1.9.1-dev'
config.vm.provision :shell, :inline => 'wget -q https://opscode-omnibus-packages.s3.amazonaws.com/ubuntu/12.04/x86_64/chef_11.6.2-1.ubuntu.12.04_amd64.deb -O /tmp/chef_11.6.2-1.ubuntu.12.04_amd64.deb'
config.vm.provision :shell, :inline => "dpkg -i /tmp/chef_11.6.2-1.ubuntu.12.04_amd64.deb"
重建基本框。首先,在不进行预配和使用SSH的情况下启动它。
vagrant up --no-provision
vagrant ssh
然后,执行更新框所需的命令。这可以包括更新Chef和Ruby。(可选)更新操作系统的软件包等。您应该清除所有不需要的框,例如下载的软件包文件或缓存。
例如,我在我的Vagrant框中使用了Chef的Opscode Omnibus Full Stack Full Installer安装程序(最初由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 / boxes / BOXNAME)。
如果使用的是Chef Test Kitchen,则可以在.kitchen.yml
文件中指定Chef版本,如下所示:
provisioner:
name: chef_zero
require_chef_omnibus: 12.6.0