I have setup a vagrant box using precise64 (ubuntu 14.04) and installed packages needed for octopress. I can ssh into the vagrant box and generate posts and run preview for my octopress site.

Now I want to create a provision script to automatically run following commands once machine is up.

gem install bundler
rbenv rehash
bundle install
rake install
rake generate
rake preview

so I created a shell script using above commands. But when I try to run vagrant up or vagrant provision it's giving me following error.

==> default: ERROR:  While executing gem ... (Gem::FilePermissionError)
==> default:     You don't have write permissions into the /opt/vagrant_ruby/lib/ruby/gems/1.8 directory.
==> default: bash: rbenv: command not found

My Vagrantfile's provision configuration is like this. I tried privileged option making true too.

config.vm.provision :shell, :privileged => false, :upload_path => "/home/vagrant/octopress/start.sh", :path => "start.sh"

What am I doing wrong here?

As you can see in above logs, provision script is trying to use gem from /opt/vagrant_ruby/lib/ruby/gems directory. But when I ssh into vagrant box and check the location of gem and rbenv, those packages are located inside users home directory (/home/vagrant). The problem seems to provision script is not using 'vagrant' user's environment variables. But when I check whoami inside the script, I am getting vagrant as output.

Is there any way to run provision script with vagrant user's variable?


This vagrant plugin it fixed the problem for me:


you can run your provision script after vagrant up your VM:

config.trigger.after :command, :option => "value" do
    run "script"

and don't forget to add sudo to your commands.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.