70

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

我不想只为当前的虚拟机实例更新它——我一直在破坏和重建它们。我是否需要更改 Vagrant 基础盒中的某些内容,或者我的(物理)系统安装中的某些内容?

4

6 回答 6

104

使用 Vagrant 插件vagrant-omnibus对我来说非常有用:

vagrant plugin install vagrant-omnibus

然后,您可以在进行配置之前在 Vagrantfile 中简单地配置您的主厨版本:

config.omnibus.chef_version = :latest

您还可以指定特定版本:

config.omnibus.chef_version = '11.6.0'
于 2013-08-13T15:43:21.393 回答
40

添加行

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-upgradeand --conservative

编辑以包括匿名用户的建议编辑228653

于 2013-05-06T15:10:37.563 回答
31

重建基础箱。首先,在没有配置和 SSH 的情况下启动它。

vagrant up --no-provision 
vagrant ssh

然后,执行更新框所需的命令。这可以包括更新 Chef 和 Ruby。(可选)更新操作系统的软件包等。您应该清理所有不需要的东西,例如下载的软件包文件或缓存。

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

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)。

于 2012-07-14T16:40:54.140 回答
12

使用 Chef 进行配置时,您可以指定许多选项。其中之一是version,它允许您指定所需的 Chef 版本。

例如,请参阅我的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
于 2015-04-10T07:19:02.673 回答
11

我无法对答案发表评论,但我想在上面 Bryan Larsen 的答案中添加注释。为了让他的配置命令正常工作,我需要在它之前添加一行,以便能够在安装新的 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 上,以防对任何人都很重要。

于 2013-06-27T23:44:15.807 回答
0

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

provisioner:
  name: chef_zero
  require_chef_omnibus: 12.6.0
于 2017-01-07T00:41:03.277 回答