Search code examples
vagrantvagrant-provision

vagrant bootstrap: source ~/.profile not working


So I'm trying to install nvm and node in vagrant but can't seem to make it work. Apparently I'm having trouble getting it to load/read nvm since nvm requires you to reload your terminal. ~/.profile doesn't seem to be doing the job

using ubuntu/xenial64

This is my bootstrap.sh file

#install nvm
cd ~

curl -sL https://raw.githubusercontent.com/creationix/nvm/v0.31.2/install.sh -o install_nvm.sh
bash install_nvm.sh

#this command makes it so that you don't need to re-open the terminal for 'nvm' to be available
source ~/.profile

#use nvm to install node
nvm install 6.2.2
nvm use 6.2.2

the error I get (slightly modified to hide personal information):

==> default: Checking for guest additions in VM...
==> default: Mounting shared folders...
    default: /installation_data => C:/work/<PATH_OMMITED>
==> default: Running provisioner: shell...
    default: Running: C:/Users/ahmed/AppData/Local/Temp/vagrant-shell20160703-8248-1c82peg.sh
==> default: => Downloading nvm from git to '/home/ubuntu/.nvm'
=>  default:
==> default: Cloning into '/home/ubuntu/.nvm'...
==> default: * (HEAD detached at v0.31.2)
==> default:   master
==> default: => Appending source string to /home/ubuntu/.bashrc
==> default: => Close and reopen your terminal to start using nvm
==> default: /tmp/vagrant-shell: line 11: nvm: command not found
==> default: /tmp/vagrant-shell: line 12: nvm: command not found
The SSH command responded with a non-zero exit status. Vagrant
assumes that this means the command failed. The output for this command
should be in the log above. Please read the output to determine what
went wrong.

Solution

  • Instead of sourcing ~/.profile try this:

    echo "--- Installing Node.js ---"
    git clone https://github.com/creationix/nvm.git /home/vagrant/.nvm && cd /home/vagrant/.nvm && git checkout `git describe --abbrev=0 --tags`
    source /home/vagrant/.nvm/nvm.sh
    nvm install 6.2.2
    nvm use 6.2.2
    n=$(which node);n=${n%/bin/node}; chmod -R 755 $n/bin/*; sudo cp -r $n/{bin,lib,share} /usr/local
    echo $n
    

    Please refer this post. Tested on scotch box. Seems to just work fine.