Virtualización Vagrant
Vagrant es una utilidad escrita en Ruby y open source para administrar máquinas virtuales de forma simple y desde la interfaz de comandos. Se apoya en un entorno de virtualización basado en VirtualBox que es generalmente utilizado para la automatización de entornos de desarrollo, pruebas unitarias, maquinas sandbox, etc.
Es muy útil cuando uno o varios desarrolladores disponen de varios perfiles y requisitos en proyectos, por ejemplo programar bajo PHP, Python, Ruby, Java, etc con diferentes gestores de bases de datos y versiones (MySQL 5.0, MySQL 5.5, MariaDB, PostGreSQL 9.2, MongoDB, etc), diferentes sistemas operativos, diferentes IDE’s, diferentes servidores web, control de versiones (git, mercurial, subversion, …) y estas configuraciones pueden provocar conflictos entre sí a la larga o directamente ser incompatibles. El mundo del desarrollador se hace cada día más complejo para establecer toda la infraestructura y componentes necesarios cumpliendo las dependencias exigidas.
Vagrant ofrece una solución basada en un aislamiento para cada perfil deseado a través de la virtualización independiente en máquinas virtuales donde pueden ser configuradas para cada necesidad del desarrollador. Esto no sería muy diferente a otras soluciones ya que aún sería necesario configurar máquinas virtuales, elegir un tipo de virtualización (KVM, Xen, OpenVZ, VirtualBox, VMWare, etc), instalar sistemas operativos, etc. Por ello Vagrant actúa como una herramienta independiente de más alto nivel donde permite abstraerse de detalles. De esta forma, automatiza y se ahorra tiempo a perfiles tan diferentes como desarrolladores independientes, equipos de trabajo o grandes empresas.
Instalación
Para instalarlo, por ejemplo en Ubuntu 12.10, necesitamos tener instalado ruby y VirtualBox (en el futuro esta previsto el soporte de otros tipos de virtualizaciones)
$ sudo apt-get install virtualbox ruby ruby1.9.1-dev
Después instalamos vagrant como gema de ruby:
$ sudo gem install vagrant --no-ri --no-rdoc -V
Las opciones de:
- –no-ri –no-rdoc permiten ahorrar tiempo evitando instalar la documentación de la gema que por lo general es un proceso lento y no suele ser buena documentación o estar obsoleta (si crees que realmente vas a usar la documentación elimina esta opción,).
- -V es para la opción “verbose” o modo impresión. Con esta opción se obtiene información del proceso breve y permite conocer como va el estado de la instalación.
Este articulo se ha elaborado sobre la versión 1.0.5 de Vagrant. Para visualizar la información de que versión de vagrant se esta utilizando:
$ vagrant --version
Vagrant version 1.0.5
Creando un box
Las plantillas estándar de imágenes base para máquinas virtuales reciben el nombre de boxes. Permiten crear un entorno virtual predefinido. Tienen la extensión .box y están ideadas con la intención de ser archivos portables para que puedan ser usados en otras plataformas o entornos virtuales diferentes. En el sitio oficial de Vagrant se ofrece un breve listado para usar.
También existen otras verificadas oficialmente que proceden de la comunidad de usuarios. Pero si ninguna se adapta a tus necesidades (sistema operativo, versión, software base instalado, etc) puedes intentar crearte una box por ti mismo
Por ejemplo podríamos escoger el box oficial de Ubuntu 12.04 (Precise Pangolin) 64 bits desde:
http://files.vagrantup.com/precise64.box
Y el box de la comunidad de usuarios de Centos 6.3 (Versión mínima) desde:
https://dl.dropbox.com/u/7225008/Vagrant/CentOS-6.3-x86_64-minimal.box
Para crear un box o maquina virtual es necesario inicializar Vagrant con un nombre para el box y un archivo .box que puede estar situado localmente o puede ser descargado remotamente de una URL.
Para el box seleccionado podemos crear un directorio e inicializarlo desde el .box remoto:
$ mkdir precise64
$ sudo vagrant init precise64 http://files.vagrantup.com/precise64.box
Para la versión de Centos, seria similar pero cambiando por:
$ mkdir centos63minimal
$ sudo vagrant init centos63minimal https://dl.dropbox.com/u/7225008/Vagrant/CentOS-6.3-x86_64-minimal.box
Este comando crea ademas un archivo llamado Vagrantfile de configuración y otro .vagrant (estado de la máquina e identificador) en el directorio donde se ejecuta el comando.
Las boxes quedan almacenadas en ~/.vagrant.d/boxes/ bajo una carpeta con el nombre que se haya establecido. En ese directorio es donde realmente se guarda la imagen de VirtualBox en un fichero del tipo .vmdk ylas propiedades de la máquina virtual en un .ovf.
Podemos listar los box disponibles con el comando:
$ vagrant box list
precise64
Si queremos cambiar el nombre de nuestra box, podemos hacerlo cambiando la directiva config.vm.box en el archivo Vagrantfile:
config.vm.box = "centos63minimal"
Para iniciar nuestra máquina virtual en modo gráfico si nos fuera necesario, es posible realizarlo mediante la directiva config.vm.boot_mode en el archivo Vagrantfile:
config.vm.boot_mode = :gui
Para volver al anterior modo basta con cambiar a:
config.vm.boot_mode = :headless
Inicializar un box y gestionarlo
Para inicializar un box se ejecuta el comando:
sudo vagrant up
Si tienes algun error en la ejecución, es útil utilizar el modo DEBUG de Vagrant con:
$ VAGRANT_LOG=DEBUG sudo vagrant up
Suelen existir problemas en la creación del puente de red que permite la conexión a internet de la máquina virtual en determinadas configuraciones de red. Yo particularmente he tenido problemas si establecía una conexión mediante wifi (para otro tipo de virtualización KVM y VirtualBox, ya que es posible que el modo wireless no admita crear puentes de red), pero ningún problema si la conexión se establecía por clave ethernet.
También tenemos otras acciones para administrar vagrant como:
$ sudo vagrant halt
Para la máquina virtual
$ sudo vagrant reload
Recarga la configuración
$ sudo vagrant suspend
Suspende el estado de la máquina virtual
$ sudo vagrant resume
Activa el estado de la máquina virtual
$ sudo vagrant destroy
Destruye la máquina virtual
Acceder al box sin modo gráfico
Para acceder al modo “headless”, es decir por consola, es posible hacerlo mediante ssh con el comando:
$ sudo vagrant ssh
Los usuarios de acceso y contraseñas habituales de los box prefefinidos y oficiales son:
root/vagrant
vagrant/vagrant
Automatización de software y configuraciones
Una vez establecida el box, necesitamos automatizar los programas que serán instalados y configuraciones base de software. Para ello puede utilizarse Chef o Puppet, que son quizás parte de otro artículo.
Fuentes
Documentación oficial de Vagrant (código fuente documentación)
Daniel Vigueras (Scalia) – Vagrant: virtualizando entornos de desarrollo
Excelente material.
Tengo una duda, como puedo instalar una versión especifica de un programa?
He leído en la documentacion que puedes especificarlo con el atributo -version-
package “mysql-server” do
version “5.1.66-1”
action :install
end
Sin embargo no funciona, he intentado utilizando el atributo -source- pero tampoco da resultados
Gracias
El provisioning de Vagrant no se trata en este artículo, pero supongo que te refieres en este caso a hacerlo con Chef. Según la documentación http://wiki.opscode.com/display/chef/Recipes#Recipes-Composition tal y como propones sería correcto y debería funcionarte en el cookbook que hayas definido. Sino es el caso, deberías tener alguna entrada en el log de errores o similares.
Con Puppet sería algo como:
[code]
package { “mysql-server”:
ensure => “5.1.66-1”
}[/code]
Existe alguna forma de iniciar en modo gráfico?
Sí, esta explicada en el artículo. Únicamente es necesario modificar el archivo Vagrantfile y cambiar la directiva config.vm.boot_mode = :gui. Después iniciar la máquina virtual con “vagrant up”.
Pingback: Vagrant [Entornos virtuales de desarrollo] | @l30bravo
Hola buenas tardes, soy nueva en esto, ante todo daros las gracias de antemano.
Ando intentando instalar una box, pero me esta dando problemas, me dice lo siguiente el DEBUG
“The box ‘wheezy64′ could not be found”
Pero si que la tengo porque al hacer un vagrant box list, me aparece.
¿Que puede estar pasando?
Al hacer el vagrant up me sale el siguiente error:
Progress: 90%/opt/vagrant/embedded/gems/gems/vagrant-1.3.5/lib/vagrant/machine.rb:204:in `initialize’: Permission denied – /home/~/Prueba/vagrant02/.vagrant/machines/default/virtualbox/id (Errno::EACCES)
Pingback: Como borrar todos los archivos o directorios vacíos de un directorio - Shakaran