vagrant-berkshelfは非推奨になるそうなので使わない方針です。
berkshelfのバージョン3系でvagrant-berkshelfを使用したらうまく行きませんでした。
vagrantのプラグインは、各VMごとにインストールされるのではなく、
そのHost全体で共有されるようです。
作業ディレクトリ作成して、vagrantの初期設定。
GuestOSにはcentos7を使用します。addで追加して、listで追加されてことを確認します。
//追加 vagrant box add centos7_64 https://dl.dropboxusercontent.com/s/w3lbekm7eunrskm/centos-7.0-x86_64.box //追加されたことを確認 vagrant box list //作業ディレクトリ作成 mkdir my-centos cd my-centos //初期化 vagrant init centos7_64 //インストール指定なければプラグインインストール(chef用) vagrant plugin install vagrant-omnibus
chef、knife solo、berkshelfのインストール
Bundlerを使ってインストールします。
bundle init vi Gemfile
Gemfileの中身です。knife-soloの0.2系だとバグがあるそうなので、0.3以降を指定しています。
source "https://rubygems.org" gem "chef" gem "knife-solo", "~> 0.3.0" gem "berkshelf"
//インストール。この時ridleyのインストールで時間かかりますが、辛抱強く待ちます bundle --path vendor/bundle --binstubs vendor/bin
cookbooksのひな形作成と、Berksfileの設定、cookbookのダウンロード
knifeの設定をします。基本的にすべてEnterでOK bundle exec knife conifigure //ひな形chef-repoの作成 bundle exec knife solo init chef-repo cd chef-repo vi Berksfile
Berksfileの中身
source "https://supermarket.getchef.com" cookbook "yum" cookbook "git" cookbook "vim" cookbook "apache2" cookbook "php" cookbook "mysql"
cookbooks外部のcookbookをダウンロード
bundle exec berks vendor cookbooks
こんなエラーがでました。
destination already exists /path/to/my-centos/chef-repo/cookbooks. Delete it and try again or use a different filepath.
対象のパスにすでにディレクトリがあるダメなようです。
削除して再実行しました。
rm -r cookbooks bundle exec berks vendor cookbooks
Vaigrant起動用のファイルを修正して、VM起動
vi Vagrantfile
Vagrantfileの中身です。追記したところだけ抜粋です。
#config.vm.provisionのブロック chef.cookbooks_path = "./chef-repo/cookbooks" chef.roles_path = "./chef-repo/roles" chef.data_bags_path = "./chef-repo/data_bags" chef.run_list = [ "recipe[yum]", "recipe[yum-epel]", "recipe[apache2]", "recipe[apache2::mod_php5]", "recipe[apache2::mod_rewrite]", "recipe[php]", "recipe[mysql::server]", "recipe[mysql::client]", "recipe[vim]", "recipe[git]" ] chef.json = { :mysql => { :server_root_password => "foo-bar-buz" } #vagrant-omnibusで使うchefの設定。Vagrantfileの最後のendのすぐ上に追記しておく。 config.omnibus.chef_version = :latest
起動。時間がかかりますが、無事に起動するはず。
vagrant up
注意点
berkshelf、knife-soloのインストール
bundlerを使わずにgemで直接インストールするほうが、何も考える必要ないので楽です。
bundlerを使いたいときは、berkshelfをvagrant経由で起動するのは諦めたほうが良さそうです。
vagrantのプロビジョニング時に、berksコマンドが見つからないといって怒られます。
config.berkshelf.enabled
berkshelf init を使ってできるVagrantfileには、この記述があります。berkshelf3系を使っていると相性悪いそうなので、
falseにして、vagrant up/provisonの時にberkshelfが走らないようにします。
そうしないとエラーで止まります。
config.berkshelf.enabled = true <= falseに変更
Updating Vagrant's berkshelf: '/home/foo/.berkshelf/default/vagrant/berkshelf-20140918-6867-uqf5k4-default' RuntimeError: Couldn't determine Berks version: #<Buff::ShellOut::Response:0x00000002c989a0 @exitstatus=1, @stdout="", @stderr="/home/foo/.rbenv/versions/2.1.2/lib/ruby/2.1.0/rubygems/dependency.rb:298:in `to_specs': Could not find 'berkshelf' (>= 0) among 59 total gem(s) (Gem::LoadError)\n\tfrom /home/foo/.rbenv/versions/2.1.2/lib/ruby/2.1.0/rubygems/dependency.rb:309:in `to_spec'\n\tfrom /home/foo/.rbenv/versions/2.1.2/lib/ruby/2.1.0/rubygems/core_ext/kernel_gem.rb:53:in `gem'\n\tfrom /home/foo/.rbenv/versions/2.1.2/bin/berks:22:in `<main>'\n">
falseに設定して、でも、Berksfileが存在すると下記のようなメッセージがでますが、無視します。
Berkshelf plugin is disabled but a Berksfile was found at your configured path: /path/to/my-centos/Berksfile Enable the Berkshelf plugin by setting 'config.berkshelf.enabled = true' in your vagrant config
参考
vagrant-berkshelf を使わずに Berkshelf + knife-solo で環境作ってみた話 - scramble cadenza
Vagrant+Chef+BerkShelfでLAMPの環境を作る
Berkshelfベースにvagrant, chef(knife-solo)環境を簡単に構築する方法 - Qiita
OSX - Macでchef-soloとBerkshelfの環境構築手順 - Qiita
Cookbookの管理を楽にするBerkshelfの使い方( ー`дー´)キリッ とか。 - 256bitの殺人メニュー
vagrant-berkshelfは非推奨になるとのこと - Qiita