バージョン0.10.10のバグのため、現在のChefレシピが実行されていません。Vagrantが使用するChefのバージョンを0.10.12にアップグレードするにはどうすればよいですか?
VMの現在のインスタンス用に更新するだけではなく、それらを破棄して再構築し続けます。Vagrantベースボックスの何かを変更する必要がありますか、それとも(物理)システムのインストールの何かを変更する必要がありますか?
バージョン0.10.10のバグのため、現在のChefレシピが実行されていません。Vagrantが使用するChefのバージョンを0.10.12にアップグレードするにはどうすればよいですか?
VMの現在のインスタンス用に更新するだけではなく、それらを破棄して再構築し続けます。Vagrantベースボックスの何かを変更する必要がありますか、それとも(物理)システムのインストールの何かを変更する必要がありますか?
Vagrantプラグインvagrant-omnibusの使用は私にとって素晴らしい働きをしました:
vagrant plugin install vagrant-omnibus
次に、プロビジョニングを行う前に、Vagrantfileでシェフのバージョンを設定するだけです。
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"
ブロックの前にVagrantfileに追加しますconfig.vm.provision :chef_solo
。
http://dougireton.com/blog/2012/12/23/automatically-upgrading-chef-client-on-vagrant-up/に関するhaurakiのコメントへの小道具
ジェイソンメイフィールドのコメントを含むように編集。必ず彼にも賛成票を投じてください。--no-upgrade
私は物事をスピードアップし、2行目のに一致させるために追加しまし--conservative
た。代わりに、Jasonが行ったことを実行し、との両方を削除することができ--no-upgrade
ます--conservative
。
匿名ユーザーによる提案された編集を含むように編集228653
ベースボックスを再構築します。まず、プロビジョニングせずに起動し、SSHで接続します。
vagrant up --no-provision
vagrant ssh
次に、ボックスを更新するために必要なコマンドを実行します。これには、ChefとRubyの更新が含まれる場合があります。必要に応じて、OSなどのパッケージを更新します。ダウンロードしたパッケージファイルやキャッシュなど、不要なものはすべてボックスからクリーンアップする必要があります。
たとえば、Vagrantボックス(元々はVeeWeeで構築された)でChef用のOpscode Omnibusフルスタックインストーラーを使用し、パッケージも更新します。
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をプロビジョニングに使用するときに指定できるオプションがいくつかあります。これらの1つはversion
、です。これにより、必要なChefバージョンを指定できます。
たとえば、私chef.version
のaからのこの抜粋の行を参照してください。Vagrantfile
config.vm.provision :chef_solo do |chef|
chef.version = "10.14.2"
chef.cookbooks_path = "cookbooks"
chef.add_recipe("vagrant_main")
end
回答にコメントを投稿することはできませんが、上記のブライアン・ラーセンの回答にメモを追加したいと思います。彼のプロビジョニングコマンドを機能させるには、新しい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'
これは、誰にとっても重要な場合に備えて、Ubuntu13.04にありました。
Chef Test Kitchenを使用している場合は、次の.kitchen.yml
ようにファイルでChefのバージョンを指定できます。
provisioner:
name: chef_zero
require_chef_omnibus: 12.6.0