web-dev-qa-db-ja.com

VagrantがVMのプロビジョニングに使用するChefのバージョンを制御する方法は?

バージョン0.10.10のバグのため、現在のChefレシピは実行されていません。 Vagrantが使用するChefのバージョンを0.10.12にアップグレードするにはどうすればよいですか?

VM-私はそれらを破壊し、再構築し続けています。Vagrantベースボックスの何かを変更する必要がありますか、私の(物理的)システムのインストール?

70
Steve Bennett

Vagrantプラグインの使用 vagrant-omnibus 私にとってはうまくいきました:

vagrant plugin install vagrant-omnibus

プロビジョニングを行う前に、Vagrantfileでシェフバージョンを設定するだけです。

config.omnibus.chef_version = :latest

特定のバージョンを指定することもできます。

config.omnibus.chef_version = '11.6.0'
104
mirkokiefer

行を追加する

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ブロックの前のVagrantfileに。

http://dougireton.com/blog/2012/12/23/automatically-upgrading-chef-client-on-vagrant-up/ に関するhaurakiのコメントの小道具

jason Mayfieldのコメントを含むように編集されました。確認して、彼にも賛成票を渡してください。 --no-upgradeを追加して速度を上げ、2行目の--conservativeに一致させました。代わりに、Jasonが行ったことを行い、--no-upgrade--conservativeの両方を削除することができます。

匿名ユーザーによる提案された編集を含むように編集228653

40
Bryan Larsen

ベースボックスを再構築します。まず、プロビジョニングとSSHなしで起動します。

vagrant up --no-provision 
vagrant ssh

次に、ボックスを更新するために必要なコマンドを実行します。これには、ChefとRubyの更新が含まれます。必要に応じて、OSなどのパッケージを更新します。ダウンロードしたパッケージファイルやキャッシュなど、不要なすべてのボックスをクリーンアップする必要があります。

たとえば、VagrantボックスでOpscode Omnibus 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/boxes/BOXNAME)を削除する必要があります。

31
jtimberman

Chefをプロビジョニングに使用するときに指定できる options が多数あります。これらの1つは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
12
Sam

回答にコメントを投稿することはできませんが、上記の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でのことで、だれにとっても重要です。

11
Jason Mayfield

Chef Test Kitchenを使用している場合、次のように.kitchen.ymlファイルでChefバージョンを指定できます。

provisioner:
  name: chef_zero
  require_chef_omnibus: 12.6.0
0
codeforester