70

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

VMの現在のインスタンス用に更新するだけではなく、それらを破棄して再構築し続けます。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

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

ジェイソンメイフィールドのコメントを含むように編集。必ず彼にも賛成票を投じてください。--no-upgrade私は物事をスピードアップし、2行目のに一致させるために追加しまし--conservativeた。代わりに、Jasonが行ったことを実行し、との両方を削除することができ--no-upgradeます--conservative

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

于 2013-05-06T15:10:37.563 に答える
31

ベースボックスを再構築します。まず、プロビジョニングせずに起動し、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)を削除する必要があります。

于 2012-07-14T16:40:54.140 に答える
12

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
于 2015-04-10T07:19:02.673 に答える
11

回答にコメントを投稿することはできませんが、上記のブライアン・ラーセンの回答にメモを追加したいと思います。彼のプロビジョニングコマンドを機能させるには、新しい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にありました。

于 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 に答える