Copy file from host to vagrant

Problem

You would like to quickly copy a file from the local host to the vagrant machine.

Solution

Find the private key, ssh and IP port with ssh-config:

$ vagrant ssh-config
Host default
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /path/to/private/key
  IdentitiesOnly yes
  LogLevel FATAL

Copy the file using the private key as a parameter to scp:

scp -P 2222 -i /path/to/private/key /path/to/file vagrant@127.0.0.1:~

Taken from the answer here

Can’t install RMagick 2.13.1. Can’t find Magick-config

Problem

You are trying to install rmagick in an Ubuntu 12.04 virtual box, but you get the following error:

Can't install RMagick 2.13.1. Can't find Magick-config

Solution

Make sure you install both the imagemagick and the libmagickwand-dev packages with either apt-get :

sudo apt-get install imagemagick libmagickwand-dev

or in a puppet script as:

package {
  "imagemagick":
    ensure => installed
}

package {
  "libmagickwand-dev":
    ensure  => installed
}

$rvm_path (/home/ubuntu/.rvm/) does not exist. error

Problem

When you want to use the capistrano recipe to deploy to a vagrant virtual box as described in ‘Deploying Rails’, and after you have corrected the rvm_path as described here, you get the following error message:

$rvm_path (/home/ubuntu/.rvm/) does not exist.

Solution

Make sure that after adding the rvm_path add also the following to the deploy.rb file, since rvm is installed system wide.

set :rvm_type, :system

Suggestion from here.

.rvm/bin/rvm-shell: No such file or directory error

Problem

When trying to set up the capistrano deploy recipe to deploy to the vagrant virtual box as described in ‘Deploying rails’, you get the error:

.rvm/bin/rvm-shell: No such file or directory

when you have installed rvm system wide on the virtual box.

Solution

Make sure that you add the following into your deploy.rb file to set up the path for rvm:

set :rvm_bin_path, "/usr/local/rvm/bin"

Solution taken from here

Could not find puppet (>= 0) amongst [] (Gem::LoadError)

Problem

When you try to apply the puppet configuration into a vagrant box and using systemwide rvm installation (if you follow the instructions here), you have the following error:

vagrant@precise64:~$ sudo puppet apply --verbose puppet/manifests/site.pp
/usr/local/rvm/rubies/ruby-1.9.3-p327/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:247:in `to_specs': Could not find puppet (>= 0) amongst [] (Gem::LoadError)
from /usr/local/rvm/rubies/ruby-1.9.3-p327/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:256:in `to_spec'
from /usr/local/rvm/rubies/ruby-1.9.3-p327/lib/ruby/site_ruby/1.9.1/rubygems.rb:1231:in `gem'
from /usr/local/rvm/gems/ruby-1.9.3-p327/bin/puppet:18:in `
' from /usr/local/rvm/gems/ruby-1.9.3-p327/bin/ruby_noexec_wrapper:14:in `eval' from /usr/local/rvm/gems/ruby-1.9.3-p327/bin/ruby_noexec_wrapper:14:in `
'

Solution

Use rvmsudo instead of sudo to make sure that the paths are correct:

vagrant@precise64:~$ rvmsudo puppet apply --verbose puppet/manifests/site.pp

Vagrant – rvm – ruby – puppet installation instructions

Problem

In order to install a vagrant box with rvm and puppet following the examples in the ‘Deploying Rails’ book, the updated steps needed are described below.
The two main differences are a) rvm system wide installation as recommended here, and b) the puppet 3.0.1 version support of ruby 1.9.3 here

Solution

So below are the steps followed to make it work.

  1. Remove system ruby
    sudo rm -rf /opt/vagrant_ruby/
  2. Remove vagrant_ruby.sh script as it adds a path that no longer exists:
    sudo rm /etc/profile.d/vagrant_ruby.sh
  3. Install rvm with system wide installation:
    curl -L get.rvm.io | sudo bash -s stable
  4. Add vagrant user and any other additional user to the rvm group:
    sudo usermod --append --groups rvm vagrant (or ubuntu)
  5. Exit and login back in to install ruby 1.9.3-p327 (current)
    vm$ exit
    $ vagrant ssh
    vm$ rvm install 1.9.3-p327
  6. install necessary ruby dependencies suggestest by previous command:
    sudo apt-get install build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion pkg-config
  7. Creat a gemset to be used with the desired rvm ruby version:
    rvm gemset create rails3_2_11
  8. Use the created gemset to install puppet gem:
    rvm gemset use rails3_2_11
  9. Install puppet as the vagrant user and NOT as sudo:
    gem install puppet -v 3.0.1
  10. install the puppet user and group as per book instructions:
    vm$ sudo useradd --comment "Puppet" --no-create-home --system --shell /bin/false puppet
  11. Optionally create a puppet directory to put manifests and modules and create a .rvmrc file to use specified gemset, by adding the following line to puppet/.rvmrc:
    rvm gemset use rails3_2_11
  12. use rvmsudo instead of sudo to apply the puppet scripts:
    rvmsudo puppet apply --verbose puppet/manifests/site.pp

Creating a Vagrant Box with Debian Lenny 32, rvm and Ruby 1.9.3

As an addition to the excellent beta book ‘Deploying Rails’, as I had problems using the suggested lucid64 image, I’ve tried to install a debian lenny 32 image with rvm and Ruby 1.9.3.

The steps needed are listed below

 

  1. Download the lenny package:
    localhost$ vagrant box add debian-lenny-32 https://s3-eu-west-1.amazonaws.com/glassesdirect-boxen/debian/debian_lenny_32.box
  2. Make a new directory for the virtual box:
    localhost$ mkdir -p ~/deployingrails/lenny32
  3. change into created directory and create the Vagrant file:
    localhost$ cd ~/deployingrails/lenny32
    vagrant init
  4. change the Vagrant file to use the virtual box we have downloaded:
    Vagrant::Config.run do |config|
      config.vm.box = "lenny32"
    end
  5. Start the VM:
    localhost$ vagrant up
  6. If there is a warning about the Guest additions here install the latest guest additions by following the description here, but only use the update and upgrade steps as:
    localhost$ vagrant ssh
    vagrant$ sudo apt-get update
    vagrant$ sudo apt-get upgrade
  7. After finishing the upgrade logout (exit) from the VM and issue the command to restart the VM:
    localhost$ vagrant reload
  8. login to the VM again:
    localhost$ vagrant ssh
  9. Install curl to be able to download the installation script for:
    vagrant$ sudo apt-get install curl
  10. Download and install rvm by using the script described here http://beginrescueend.com/rvm/install/ :
    vagrant$ bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
  11. Add the loading of the RVM function into .bashrc, by running the following in the command prompt:
    vagrant$ echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function' >> ~/.bashrc
  12. Reload the bashrc file:
    vagrant$ source ~/.bashrc
  13. Make sure that the rvm is loaded as function:
    vagrant$ type rvm | head -1
    rvm is a function
  14. Run the rvm requirement to see the needed libraries and then run the suggested ones (except libreadline6 and libreadline6-dev that are not there in debian):
    vagrant$ sudo apt-get install build-essential openssl curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison
  15. Install Ruby 1.9.3 :
    vagrant$ rvm install ruby-1.9.3
  16. Use the ruby 1.9.3 as default:
    vagrant$ rvm use 1.9.3 --default
  17. Finally create a new VM package to use in future:
    localhost$ vagrant package --output lenny32-rvm-ruby193
  18. And add it our box list:

    localhost$ vagrant box add lenny32-rvm-ruby193 lenny32-rvm-ruby193
    localhost$ vagrant box list