¿Qué es Vagrant?
Lanzado por primera vez en marzo de 2010 por Mitchell Hashimoto de Hashicorp y su compañero de aventuras John Bender, Vagrant es una herramienta de línea de comandos de código abierto para la gestión del ciclo de vida de máquinas virtuales (VM). La utilidad tiene como objetivo aumentar la productividad en el desarrollo al simplificar este proceso. Aunque Vagrant originalmente estaba ligado a Oracle VirtualBox, desde la versión 1.1 también ha incluido soporte para VMware, KVM y otros. Sin embargo, por útil que sea la virtualización en el desarrollo web, usar Vagrant no siempre es una opción infalible.
¿Por qué usar Vagrant? ¿Vale la pena?
En primer lugar, Vagrant ofrece una mayor flexibilidad con un entorno basado en hipervisor. Esto permite a los desarrolladores crear entornos que requieren características disponibles solo en otros sistemas.
Por ejemplo, si necesitas desarrollar una aplicación que soporte una variedad de sistemas operativos y kernels, podrías crear fácilmente varias máquinas virtuales para ejecutar pruebas utilizando Vagrant. Del mismo modo, si deseas replicar el entorno de tu cliente (sistema operativo, recursos, etc.), combinar VMs y Vagrant también podría ser particularmente útil.
Instalar Vagrant en una Estación de Trabajo
Para comenzar con Vagrant, descarga el instalador o el paquete adecuado desde la página oficial de Descargas de Vagrant. Las instrucciones a continuación son para Vagrant v2.3.3 (la versión más reciente a diciembre de 2022).
Instalación de Vagrant en Windows
Para instalar Vagrant en Windows, primero debes descargar el paquete MSI. A continuación, simplemente ejecuta el archivo y sigue un proceso de instalación regular.
Nota: El instalador agregará automáticamente ‘vagrant’ a tu ruta de sistema, por lo que también estará disponible en terminales. Si Vagrant no se encuentra, sin embargo, intenta cerrar sesión y volver a iniciar sesión en el sistema, ya que esto es común en Windows.
Instalación de Vagrant en MacOS Catalina
Suponiendo que ya tienes un gestor de paquetes ‘brew’ instalado, para configurar rápidamente Vagrant en Mac, puedes ejecutar la instalación con este comando en una sola línea:
```bash
$> brew install vagrant
```
Alternativamente, puedes instalar Vagrant desde binarios.
Instalación de Vagrant en Linux
Para sistemas Linux, demostraremos el proceso de instalación para Vagrant en Ubuntu 20.04:
Instala la clave:
```bash
$> wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
```
Agrega el repositorio:
```bash
$> echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
```
Actualiza y ejecuta la instalación:
```bash
$> sudo apt update && sudo apt install vagrant
```
¡Eso es todo! Ahora todo lo que necesitas hacer es abrir tu terminal y escribir “vagrant”. También vale la pena señalar, sin embargo, que si ejecutas Vagrant por sí solo, se te mostrará una lista con los subcomandos disponibles.
Problemas Principales que Puedes Tener al Instalar Vagrant
Aunque los errores de instalación de Vagrant son bastante infrecuentes, la probabilidad de esto aumenta significativamente si tienes múltiples hipervisores instalados en tu máquina. Después de todo, los hipervisores no suelen permitir la creación de máquinas virtuales cuando más de uno de ellos ya está en uso.
A continuación, se presentan un par de soluciones rápidas tomadas de la documentación oficial de Vagrant que pueden ayudarte a usar Vagrant y VirtualBox cuando hay otro hipervisor presente:
En Linux
Al usar otro hipervisor, puedes encontrar el siguiente error:
```bash
There was an error while executing `VBoxManage`, a CLI used by Vagrant for controlling VirtualBox. The command and stderr is shown below.
Command: ["startvm", <ID of the VM>, "--type", "headless"]
Stderr: VBoxManage: error: VT-x is being used by another hypervisor (VERR_VMX_IN_VMX_ROOT_MODE).
VBoxManage: error: VirtualBox can't operate in VMX root mode. Please disable the KVM kernel extension, recompile your kernel and reboot
(VERR_VMX_IN_VMX_ROOT_MODE)
VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component ConsoleWrap, interface IConsole
```
Para que VirtualBox funcione correctamente, cualquier hipervisor adicional deberá ser añadido a la lista de denegación de tu sistema.
Para hacerlo, primero descubre cómo se llama el hipervisor:
```bash
$> lsmod | grep kvm
kvm_intel 204800 6
kvm 593920 1 kvm_intel
irqbypass 16384 1 kvm
```
Luego, simplemente usa el comando “blacklist” para agregar el hipervisor a tu lista de denegación.
```bash
echo 'blacklist kvm-intel' >> /etc/modprobe.d/blacklist.conf
```
Finalmente, reinicia tu máquina y vuelve a usar el comando “vagrant”.
En Windows
En Windows, si intentas iniciar una máquina virtual de VirtualBox, podrías encontrarte con una pantalla azul impactante.
Para utilizar VirtualBox de manera normal, debes asegurarte de que Hyper-V esté deshabilitado. Usa el siguiente comando simple para desactivar la función en Windows 10:
```PowerShell
$> Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All
```
En Windows 11, también puedes utilizar una instancia de Powershell elevada:
```PowerShell
$> bcdedit /set hypervisorlaunchtype off
```
Alternativamente, puedes deshabilitar Hyper-V desde la configuración del sistema de Windows.
- Haz clic derecho en el botón de Windows y elige “Aplicaciones y características”
- Abre “Activar o desactivar características de Windows”
- Desmarca Hyper-V y finalmente haz clic en Aceptar
Reinicia tu máquina para aplicar estos cambios.
En MacOS
Si te encuentras con el siguiente mensaje de error al intentar ejecutar VBoxManage:
failed to open /dev/vboxnetctl: No such file or directory
Reinstala completamente VirtualBox o simplemente usa los comandos a continuación:
sudo /Library/StartupItems/VirtualBox/VirtualBox restart
o
sudo /Library/StartupItems/VirtualBox/VirtualBox start
Ten en cuenta que en versiones más recientes, el archivo /Library/StartupItems/VirtualBox/VirtualBox
no existe, por lo que tendrás que usar el siguiente comando:
sudo launchctl load /Library/LaunchDaemons/org.virtualbox.startup.pl
MacOS Catalina: Pero Funciona en Mi Máquina
Otro problema que puede ocurrir en Mac es ese clásico problema cuando escuchas que una aplicación “funciona bien en mi máquina”, y ni la cantidad de súplicas o lágrimas pueden hacer que funcione igual en otro lugar. Mi equipo de SPG también enfrentó este problema antes.
Imagina que actualmente estás desplegando y probando entornos locales con Vagrant + VirtualBox. Uno de los ingenieros de software en tu equipo utiliza una versión personalizada de VagrantBox, que hasta ahora ha funcionado bien para ellos. Serán conocidos como Desenvolupador 1. En su estación de trabajo, VirtualBox v6.1.34, Vagrant 2.2 y Ubuntu funcionan sin problemas.
Por otro lado, está claro que Desenvolupador 2 necesita actualizar su entorno local. Actualmente utilizan una mezcla de MacOS, VirtualBox v6.1.24 y Vagrant 2.1.x en su propia estación de trabajo.
Como resultado, al menos a primera vista, la estrategia del Desenvolupador 2 parece ser sencilla:
- Pas 1: Actualizar las versiones de VirtualBox y Vagrant (es crucial utilizar versiones unificadas)
- Pas 2: Instalar todos los componentes adicionales del proyecto
Ambas operaciones se completan con éxito, pero el resultado es ciertamente inesperado: por alguna razón, la página web que se instaló en VirtualBox ahora es completamente inaccesible. ¿Pero qué demonios!?
Cuando se enfrenta a tal enigma, es fundamental reflexionar sobre una solución y tomar acciones sensatas como las siguientes:
- Examinar los archivos de registro
- Verificar que todos los servicios de VirtualBox, como PHP, Nginx y MySQL, están operativos
- Utilizar curl para acceder a la página
En este caso, sin embargo, todo parece funcionar como debería, sin problemas obvios dentro de la instancia de VirtualBox en sí.
Tu equipo decide entonces cambiar de estrategia y determinar si el host de VirtualBox es alcanzable desde el exterior. Después de utilizar un simple comando ping, se sorprenden al descubrir que el 100% de los paquetes se pierden. Aunque esta noticia es algo preocupante, también podría ser la causa de todo el problema.
Siguiendo esta pista, finalmente descubren que los adaptadores HostOnly deben ahora recibir un rango diferente de direcciones IP. Esto aparentemente comenzó con la actualización de VirtualBox v6.1.30 (una actualización de parches, por todas las cosas):
192.168.55.х prior to the update
192.168.56.х. after the update.
Allí está, claro como el día, en la recientemente revisada manual de usuario de VirtualBox:
“En Linux, Mac OS X y Solaris, Oracle VM VirtualBox solo permitirá que se asignen direcciones IP en el rango 192.168.56.0/21 a los adaptadores host-only.”
Todos en tu equipo exhalan un suspiro colectivo de alivio. El problema desaparece de repente después de crear un nuevo adaptador HostOnly y cambiar el que está en la instancia de VirtualBox. El componente web crítico de la solución finalmente es accesible, y el Desenvolupador 2 está feliz por fin.
¿Vagrant o…? ¿Qué alternativas existen? ¿En qué son mejores?
Con tanta emoción, podrías ser perdonado por buscar alternativas a Vagrant. Sin embargo, si lo hicieras, probablemente encontrarías una serie de sitios web que comparan la utilidad con contenedores (más a menudo que no, Docker). ¿Pero es esta realmente una comparación válida? Resulta que sí lo es, siempre que tengas en cuenta la diferencia entre los dos.
Muchas de las ventajas que Docker tiene sobre los hipervisores también pueden considerarse desventajas; todo depende de para qué lo necesites. Entonces, comencemos con una gran ventaja: el tiempo de carga. Mientras que los contenedores pueden arrancar rápidamente porque básicamente son solo un conjunto de procesos, esto también significa que utiliza el kernel del host. Como resultado, en lugar de depender de hardware virtualizado, los contenedores utilizarán el hardware del host directamente.
Los hipervisores también pueden tener recursos dedicados en forma de memoria, tiempo de CPU, espacio en disco y otros. Por otro lado, los contenedores comparten recursos con otros procesos en la computadora host. Del mismo modo, mientras Vagrant te permite crear una máquina virtual completa, lo que requerirá más tiempo y recursos, el enfoque basado en contenedores de Docker te permite desplegar más rápido con menos recursos.
Entonces, con eso en mente, solo recuerda que esto no es una competencia. Es simplemente cuestión de las necesidades de tu empresa.
Conclusión
Si bien Vagrant es sin duda una herramienta formidable, tampoco está exento de problemas. Si tu empresa carece de la experiencia o el conocimiento, un equipo dedicado de desarrolladores de software podría ser capaz de ayudar. Después de todo, incluso cuando solo “funciona en mi máquina”, existe una solución para cada problema.
Source:
https://dzone.com/articles/vagrantvirtualbox-on-macos-catalina-but-it-works-o