Vagrant es buena cosa. En esta primera entrada solamente voy a comentar como podemos rápidamente levantar una Debian 10 con cierto software instalado. De forma muy sencilla.
Esto es de utilidad para desarrolladores/as que buscan un entorno en el que probar, un entorno en el que desarrollar sus mierdas sin manchar. Y que lo mismo quieren uno hoy, mañana otro, en 5 minutos otro limpio, etc…
Vagrant sirve para esto y mucho más. El tema es que del tirón levantas una máquina y la provisionas como definas que ha de estar provisionada.
El trabajo por tanto está en generar un buen archivo Vagrantfile y luego poder compartirlo.
Por defecto se utiliza Vagrant con VirtualBox (Con b de box no v de nazis). Y por el momento en esta serie de posts es lo que vamos a utilizar.
Los comandos vagrant que vamos a utilizar en este primer post son:
- vagrant init
- vagrant up
- vagrant status
- vagrant halt
- vagrant destroy
- vagrant ssh
- vagrant provision
Website: www.vagrantup.com/
Download: releases.hashicorp.com/vagrant/2.2.14/vagrant_2.2.14_linux_amd64.zip
Actualmente (En el momento de escribir esto, día 4 de Febrero del 2021) la última versión es la 2.2.14 . Se pueden ver versiones más viejas aquí: releases.hashicorp.com/vagrant/
Instalar Vagrant
En Ubuntu 20.04.2 LTS por ejemplo si se instala desde repositorio se tiene la 2.2.6. Esa mismo nos puede servir, no es necesario ir a la última siempre.
En fin, repito, no hace falta que instales el binario de la última versión si no lo deseas. Puedes usar el que viene en los repos de tu distro.
No obstante si deseas desplegar la última versión puedes hacerlo así:
# wget "https://releases.hashicorp.com/vagrant/2.2.14/vagrant_2.2.14_linux_amd64.zip"
# unzip vagrant_2.2.14_linux_amd64.zip
# rm -rf vagrant_2.2.14_linux_amd64.zip
# ./vagrant --version
# cp -pRv vagrant /usr/bin/vagrant
# vagrant --version
En Debian por ejemplo el proceso es el mismo.
Levantar una máquina virtual con Debian 10 Buster
$ mkdir ~/maquinas
$ cd ~/maquinas
$ vagrant init debian/buster64
$ vagrant up
Finalmente se puede entrar en la máquina así:
$ vagrant ssh
Se sale con exit o control + D . Para destruir la máquina así:
$ vagrant halt
$ vagrant destroy
Suele dejar esto un archivo oculto llamado .vagrant de modo que si queremos borrar todo podemos borrar también ese directorio.
Creando una máquina Debian Buster con algunos cambios
Cuando creamos el vagrant init (en nuestro caso vagrant init debian/buster10) se genera el Vagrantfile en el directorio.
Podemos visualizarlo con less, more, cat, … y ver que realmente lo que contiene es muchos comentarios y poca configuración. Podemos quitar los comentarios y nos quedará algo así:
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.box = "debian/buster64"
config.vm.hostname = "wordpress"
end
En este caso he añadido: config.vm.hostname = «wordpress»
Si arrancamos la máquina y nos metemos en ella ( con vagrant up y luego vagrant ssh ) veremos que el hostname efectivamente se llama wordpress.
Se pueden ver más opciones de configuración en la documentación de vagrant: www.vagrantup.com/docs/vagrantfile/machine_settings#config-vm-hostname
Una opción de Vagrantfile ya con algunos otros cambios (una IP, que se instale wget por si no está instalado, que se baje un archivo en /tmp/ llamado zx_firmware.tar.gz , …).
# -*- mode: ruby -*-
# vi: set ft=ruby :
$scriptProvision = <<-SCRIPT
sudo apt update
sudo apt install wget -y
wget -q "http://fanta.56k.es/04-Firmware/ZX/ZX_SPECTRUM_FIRMWARE.tar.gz" -O /tmp/zx_firmware.tar.gz
SCRIPT
Vagrant.configure("2") do |config|
config.vm.box = "debian/buster64"
config.vm.hostname = "wordpress"
config.vm.define "wordpress"
config.vm.post_up_message = "Esto es un mensaje que verás al realizar vagrant up. Hola amigo"
config.vm.network "public_network", ip: "10.0.0.1", hostname: true
config.vm.provision "shell", inline: $scriptProvision
end
Esto se tira por ejemplo así:
vagrant up ; vagrant provision
Y luego si entramos con vagrant ssh veremos que la máquina tiene ese archivo en su interior.
Y esto puede servir para por ejemplo instalar nginx, colocar una versión de wordpress en /var/www . Descargar una configuración de nginx, instalar mariaDB, etc…
Digamos que se puede definir rápidamente una debian 10 para trabajar en desarrollo. Una máquina con todo el tinglado montado esperando que entre la persona desarrolladora a cargárselo o hacer sus pruebas.
Y eso es por el momento todo. En futuras entradas más cosas sobre Vagrant con virtualBox.
Saludos cordiales.