¿Cómo instalar Vagrant desde los fuentes en Mac?. Hoy me ha pasado que en la versión estable de Vagrant hay un bug que hace que en algunas máquinas virtuales no se copien las claves ssh con los permisos correctos.

La consecuencia es que el comando ‘vagrant ssh’ no funciona y debes copiar manualmente las claves (coñazo)

El bug está explicado en este ticket de Vagrant en Github. Hay algunos workarounds y parches, aunque ya han solucionado el bug en la rama master de Vagrant, pero la siguiente release es en Septiembre (y no puedo esperar).

¿Solución alternativa y válida para futuros bugs?

Instalar Vagrant desde los fuentes.

¿Cómo instalar vagrant desde los fuentes en Mac

Estas son las instrucciones que he seguido para Mac, pero las he completado instalando todas las dependencias y pre-requisitos.

Instalar Ruby

Lo primero es instalar Ruby. Lo mejor es hacerlo utilizando un gestor de versiones de Ruby como rvm.

gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3

# con esto instalamos rvm y lo añadimos a nuestro profile de bash:

\curl -sSL https://get.rvm.io | bash
echo "source $HOME/.rvm/scripts/rvm" >> ~/.profile
source ~/.profile

# A continuación, vemos las versiones disponibles de ruby

rvm list known

# instalamos ruby con rvm y seleccionando la última versión estable que nos dio el comando anterior

rvm install ruby
rvm use 2.3.1 --default

Instalar Vagrant desde los fuentes

# clonar el repo de Github con los fuentes de Vagrant

git clone https://github.com/mitchellh/vagrant.git

# buscar la versión del bundler en el archivo vagrant.gemspec y usarla en el siguiente comando

gem install bundler -v '1.12.5'

# desde la carpeta de vagrant clonada de Github, instalar Vagrant desde los fuentes

bundle install

# crear carpeta de ejecutables

bundle --binstubs exec

# hacer un enlace simbólico para poder usarlo everywhere. Yo he preferido no machacar el ejecutable de Vagrant, sino crear uno nuevo vagrant-source

ln -sf /Users/aromeu/Documents/vagrant/install-from-sources/vagrant/exec/vagrant /usr/local/bin/vagrant-source

# ya lo tenemos. Otra noche más que voy a poder dormir tranquilo

vagrant-source init

Problemas al instalar Vagrant desde los fuentes en Mac

Si ya tenías una instalación de Vagrant es posible que tengas que hacer lo siguiente:

# o bien desinstalar ruby si ya lo tenías antes de empezar

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall"

# a continuación reinstalar Vagrant descargando un instalador desde vagrantup.com para que use la versión que acabas de instalar de ruby

# o bien utilizar rvm para cambiar entre las versiones que tengas de ruby instaladas. Una para el Vagrant instalado desde los fuentes y otra para el Vagrant instalado con binarios

rvm use _version_

Si al hacer vagrant –version aparece un error tal que así:

/Users/aromeu/.rvm/rubies/ruby-2.3.1/lib/ruby/2.3.0/rubygems/dependency.rb:319:in `to_specs': Could not find 'vagrant' (>= 0.a) among 67 total gem(s) (Gem::LoadError)
Checked in 'GEM_PATH=/Users/aromeu/.rvm/gems/ruby-2.3.1:/Users/aromeu/.rvm/gems/ruby-2.3.1@global', execute `gem env` for more information
from /Users/aromeu/.rvm/rubies/ruby-2.3.1/lib/ruby/2.3.0/rubygems/dependency.rb:328:in `to_spec'
from /Users/aromeu/.rvm/rubies/ruby-2.3.1/lib/ruby/2.3.0/rubygems/core_ext/kernel_gem.rb:65:in `gem'
from /Users/aromeu/.rvm/gems/ruby-2.3.1/bin/vagrant:22:in `

'
from /Users/aromeu/.rvm/gems/ruby-2.3.1/bin/ruby_executable_hooks:15:in `eval'
from /Users/aromeu/.rvm/gems/ruby-2.3.1/bin/ruby_executable_hooks:15:in `
'

Entonces añadir al GEM_PATH la ruta con los gems de Vagrant

echo ‘export GEM_PATH="$GEM_PATH:$HOME/.vagrant.d/gems:/opt/vagrant/embedded/gems"’ >> ~/.profile
source ~/.profile

Y listo. Otro día más salvando al mundo.