Skip to content

Vagrant

[Actualizado a 8 de julio de 2026]

Vagrant es un software de código abierto que nos permite crear y mantener entornos de desarrollo portables, puede trabajar con VMware, VirtualBox, Hyper-V, KVM, AWS e incluso también con contenedores de Docker, por tanto, es ideal para simplificar la configuración de estos software de virtualización.

En otras palabras, nos permite gestionar máquinas virtuales desde código...

  1. Buscar y descargar la base
  2. Generar archivo base con vagrant init generic/alpine318
  3. Arrancar la máquina virtual (y generarla si es necesario)vagrant up
  4. Actualizar la configuración de la máquina vagrant provision o vagrant up --provision
  5. Detener la máquina vagrant halt
  6. Eliminar la máquina vagrant destroy

Trabajo en casa

Método de trabajo: Clase invertida

Investigar en la web como generar el archivo Vagrantfile con las características que vamos a desarrollar en clase.

En clase:

Hacer los archivos Vagrantfile (7 distintos) que resuelva los siguientes supuestos:

  1. Añadir una segunda interfaz de red
  2. Ponerla en modo bridge
  3. Añadir 2 mv en un sólo fichero
  4. Conectar esas 2 mv en una red interna
  5. Limitar el uso de ram a 512MB
  6. Limitar el uso de cores a 1
  7. Instalar el paquete git en una de las mv

Tip: A veces desde el centro puede tardar en devolvernos la terminal, pero en muchas ocasiones estará disponible para el acceso aunque no al 100%.

Boxes

Registry iescastelar_com

  • Ubuntu Desktop 24.04 (actualizado a jun-2026) ➡️ vagrant init iescastelar_com/ubuntu24-desktop --box-version 20260628
  • Ubuntu Desktop 26.04 ➡️
  • Ubuntu Server 26.04 ➡️
  • Alpine Linux 3.24.1 (versión virtual) ➡️

Estas imágenes tienen habilitado el super-usuario grogu para inspección por parte del docente.

Alpine

  • vagrant init generic/alpine318
  • Tiene un init y no systemd
  • Puede ser recomendable sustituirlo por minit para imágenes multi-procesos
  • Actualizar paquetes apk update y el sistema con apk upgrade
  • Instalar paquetes apk add apache2
  • Docker: apk add --update docker openrc y luego rc-update add docker boot

Ubuntu

  • En el Vagrantfile config.vm.box = "bento/ubuntu-24.04" y config.vm.box_version = "202508.03.0"

Configuración

Ubicación

¿Dónde queremos ubicar la configuración base de vagrant? Los boxes, etc...

En GNU/Linux debemos export VAGRANT_HOME="/home/luis/vagrant" y en Windows con setx VAGRANT_HOME "d:/vagrant_home".

Networking

Privada

Red en modo NAT o que el GUEST puede acceder al exterior usando la IP del HOST, pero el exterior NO podrá acceder al GUEST, y HOST y GUEST se ven mutauamente: - Ip estática: config.vm.network "private_network", ip: "192.168.55.10" - Ip dinámica: config.vm.network "private_network", type: "dhcp"

Pública

Red en modo bridge o que el HOST y el GUEST sean iguales en la red: - Bridge automático: config.vm.network "public_network" - Bridge manual: config.vm.network "public_network", bridge: "eth0"

Machine-ID

Ubuntu - UUID

Uno de los problemas que podemos tener al generar varias máquinas partiendo desde el mismo box base es que las mismas pueden tener el mismo uuid (machine-id) por lo que al solicitar ip al servidor DHCP pudiera ser que obtengan la misma IP (no todos los dhcp tienen esta funcionalidad).

Para solucionarlo podemos generar un nuevo uuid por una vez y ya tendríamos suficiente, aunque lo ideal será añadirlo al fichero de provision con lo que nos aseguraremos que será ejecutado cada vez que recreemos la vm.

# Generar nuevo uuid
     rm -f /etc/machine-id`
     dbus-uuidgen --ensure=/etc/machine-id

# Obtenemos nueva IP del DHCP
     dhclient -r eth1
     dhclient eth1
     ip link set eth1 down
     ip link set eth1 up

# Fuente: David G.S. - Alumno de ASIR2 curso 23/24
Referencias:

Windows - CMID

De forma similar, windows también tiene un número de identificación de máquina cliente (Client Machine ID - CMID) que debe regenerarse si clonamos máquinas.

Para ello debemos ejecutar slmgr /rearm y reiniciar la máquina.

Podemos comprobar el valor actual o nuevo con el comando C:\Windows\System32\slmgr.vbs /dlv

Fuente: learn.microsoft.com

También interesante la preparación del sistema con Sysprep

Tips

  • Podemos listar las MV de virtualbox con VBoxManage list vms
  • Especifidad de configuración según load and merge
  • Configurando el nombre amigable config.vm.hostname = "UbuntuServer22_Vagrant"
  • Afinando consumos: Vagrantfile config.vm.provider "virtualbox" do |vb| vb.name = "nombre" vb.memory = "512" vb.cpus = 2 end
  • Snapshots con:
    • Hacerla: vagrant snapshot save nombre-de-instantanea
    • Listarlas: vagrant snapshot list
    • Recuperarlas: vagrant snapshot restore nombre-de-instantanea

Problemas

Sincronización de carpetas

Aunque por defecto se comparte el directorio actual de trabajo del HOST con el directorio /vagrant del GUEST (mv), algunos BOXES no lo realizan correctamente y debemos espeficarlo con config.vm.synced_folder ".", "/vagrant"

En ocasiones no es suficiente y debemos indicarle el tipo de sincronización config.vm.synced_folder ".", "/vagrant", type: "rsync" y luego en el HOST lanzar el comando vagrant rsync-auto que volcará una compia del HOST al GUEST.

Recursos