Get Vagrant running with berkshelf on Mavericks
So, here I was trying to setup Vagrant on my Mac. Everything went fine till the
vagrant up command and boom:
myfirstvagrantproject $ vagrant up Bringing machine 'projectname' up with 'virtualbox' provider... ==> projectname: The cookbook path '/Users/cruisemaniac/.berkshelf/projectname/vagrant/berkshelf-20140909-37664-1gf5t34-projectname' doesn't exist. Ignoring... Updating Vagrant's berkshelf: '/Users/cruisemaniac/.berkshelf/projectname/vagrant/berkshelf-20140909-37664-1gf5t34-projectname' RuntimeError: Couldn't determine Berks version: #<Buff::ShellOut::Response:0x00000101040360 @exitstatus=1, @stdout="", @stderr="/Users/cruisemaniac/.rbenv/versions/2.1.2/lib/ruby/2.1.0/rubygems/dependency.rb:298:in `to_specs': Could not find 'berkshelf' (>= 0) among 56 total gem(s) (Gem::LoadError)\n\tfrom /Users/cruisemaniac/.rbenv/versions/2.1.2/lib/ruby/2.1.0/rubygems/dependency.rb:309:in `to_spec'\n\tfrom /Users/cruisemaniac/.rbenv/versions/2.1.2/lib/ruby/2.1.0/rubygems/core_ext/kernel_gem.rb:53:in `gem'\n\tfrom /Users/cruisemaniac/.rbenv/versions/2.1.2/bin/berks:22:in `<main>'\n">
I knew vagrant liked
berkshelf to assist in the scripts that handle provisioning the VM. So I went ahead and installed the gems before starting out with the vagrant install.
What I could not understand was how berkshelf which was installed under my rbenv (via homebrew) was not found while the gem was being picked up right! « I know, shitty!
My local setup gave me this:
myfirstvagrantproject $ vagrant version Installed Version: 1.6.5 Latest Version: 1.6.5 You're running an up-to-date version of Vagrant! myfirstvagrantproject $ berks --version 3.1.5 myfirstvagrantproject $ which berks /Users/cruisemaniac/.rbenv/shims/berks
All is well right? Well, No!
Apparently, the berkshelf gem used by vagrant requries chefdk, the chef development kit and wont work hanky panky without that.
Remove any berkshelf AND chef gems from your ruby installationbefore you start off with the chefdk installation.
Install chefdk into your
/opt folder - again a requirement. Add this to the
.bash_profile before your gems are loaded.
.bash_profile and you must be good to go.
The other option is that you dont use berkshelf with chef OR you use puppet.
If you dont want to use berkshelf, open the
Vagrantfile and set the following to false:
Vagrant.configure("2") do |config| config.berkshelf.enabled = false ... # other configuration code
You would also have to remove the
Berkshelf file sitting in your vagrant directory to prevent Vagrant from complaining about an existing Berkshelf file that its not using!
Hope this helps.