There are some commands that have to be run as a normal user after the initial provisioning. I thought I could do this using a separate shell script and the command su --login -c <command> vagrant
, but it's not getting the user's path or other environment settings from .bashrc.
e.g.:
#!/usr/bin/env bash
su --login -c "rbenv install 2.0.0-p353" vagrant
su --login -c "rbenv global 2.0.0-p353" vagrant
su --login -c "gem update --system" vagrant
su --login -c "yes | gem update" vagrant
su --login -c "gem install rdoc" vagrant
su --login -c "gem install rails pg" vagrant
Is there a way to do this? Maybe it has to be done with another provisioning tool like Puppet or Chef? I've thought of creating another shell script that sources the .bashrc
, copying it to the box using a :file provisioner and executing the commands like that, but it seems sort of like a hack.
What's the right way to do this?
You should be able to do this using the Vagrant Shell provisioner, e.g.
Vagrant.configure("2") do |config|
$script = <<-SCRIPT
rbenv install 2.0.0-p353
rbenv global 2.0.0-p353
gem update --system
yes | gem update
gem install rdoc
gem install rails pg
SCRIPT
config.vm.provision "shell", inline: $script, privileged: false
end
The key is to specify privileged: false
so that it will use the default user and not root
.