Wat is Vagrant?
Gestart in maart 2010 door Mitchell Hashimoto van Hashicorp en zijn medeplichtige John Bender, Vagrant is een open source command line hulpmiddel voor het beheer van het levenscyclus van virtuele machines (VM’s). Het doel van de tool is om de ontwikkelingsprestaties te verhogen door dit proces aanzienlijk eenvoudiger te maken. Hoewel Vagrant oorspronkelijk gebonden was aan Oracle VirtualBox, heeft het sinds versie 1.1 ook ondersteuning voor VMware, KVM en anderen. Toch is, hoe behulpzaam virtualisatie ook is in web ontwikkeling, het gebruik van Vagrant niet altijd een garantie voor succes.
Waarom gebruik je Vagrant? Is het het waard?
Allereerst biedt Vagrant veel grotere flexibiliteit met een hypervisor-gebaseerde onveranderlijke omgeving. Dit stelt ontwikkelaars in staat om omgevingen te bouwen die functies vereisen die alleen beschikbaar zijn op andere systemen.
Als voorbeeld, als je een applicatie moest bouwen die ondersteuning biedt voor een verscheidenheid aan besturingssystemen en kernels, zou je gemakkelijk een aantal virtuele machines kunnen maken die tests uitvoeren met behulp van Vagrant. Evenzo, als je de omgeving van je klant (OS, middelen, enz.) wilde nabootsen, zou het combineren van VM’s en Vagrant ook bijzonder behulpzaam kunnen zijn.
Het installeren van Vagrant op een werkstation
Om aan de slag te gaan met Vagrant, download de installatieprogramma of geschikte pakket van de officiële Vagrant Downloads pagina. De onderstaande instructies zijn voor Vagrant v2.3.3 (de nieuwste versie tot december 2022).
Vagrant installeren op Windows
Om Vagrant op Windows te installeren, moet je eerst het MSI-pakket downloaden. Vervolgens kun je het bestand gewoon uitvoeren en door een normale installatieprocedure gaan.
Let op: Het installatieprogramma voegt ‘vagrant’ automatisch toe aan je systeempad, dus het zal ook beschikbaar zijn in terminals. Als Vagrant echter niet wordt gevonden, probeer dan inloggen en uitloggen van het systeem, aangezien dit op Windows een veelvoorkomend verschijnsel is.
Vagrant installeren op MacOS Catalina
Stel dat je al een ‘brew’ pakketbeheerder hebt geïnstalleerd, om snel Vagrant op Mac te installeren, kun je de installatie uitvoeren met deze op één regel:
```bash
$> brew install vagrant
```
Je kunt Vagrant ook vanuit binaire bestanden installeren.
Vagrant installeren op Linux
Voor Linux-systemen laten we de installatieprocedure zien voor Vagrant op Ubuntu 20.04:
De sleutel installeren:
```bash
$> wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
```
Voeg de repository toe:
```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
```
Breng updates aan en voer de installatie uit:
```bash
$> sudo apt update && sudo apt install vagrant
```
Dat is alles! Nu hoeft u alleen maar uw terminal te openen en “vagrant” in te typen. Het is ook vermeldenswaard, echter, dat als u Vagrant op zichzelf uitvoert, u een lijst met de beschikbare subcommando’s krijgt.
Hoofdproblemen die u kunt hebben bij het installeren van Vagrant
Hoewel Vagrant installatiefoutenvrij zeldzaam zijn, neemt de kans hierop significant toe als er meerdere hypervisors op uw machine zijn geïnstalleerd. Immers, hypervisors laten meestal niet toe om virtuele machines te creëren als er meer dan één van hen al in gebruik is.
Hieronder volgen een paar snelle oplossingen die zijn ontleend aan de officiële documentatie van Vagrant die u kunnen helpen Vagrant en VirtualBox te gebruiken wanneer er een andere hypervisor aanwezig is:
Op Linux
Wanneer u een andere hypervisor gebruikt, kunt u het volgende foutbericht tegenkomen:
```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
```
Om VirtualBox correct te laten werken, moeten eventuele extra hypervisors worden toegevoegd aan de weigert lijst van uw systeem.
Om dit te doen, ontdek eerst welke naam de hypervisor heeft:
```bash
$> lsmod | grep kvm
kvm_intel 204800 6
kvm 593920 1 kvm_intel
irqbypass 16384 1 kvm
```
Gebruik vervolgens het “blacklist” commando om de hypervisor toe te voegen aan uw weigert lijst.
```bash
echo 'blacklist kvm-intel' >> /etc/modprobe.d/blacklist.conf
```
Ten slotte, start uw machine opnieuw op en gebruik het “vagrant” commando.
Op Windows
Op Windows, als je een VirtualBox VM probeert te starten, kan je misschien met een verontrustende blauwe scherm te maken krijgen.
Om VirtualBox normaal te gebruiken, moet je ervoor zorgen dat Hyper-V uitgeschakeld is. Gebruik het volgende eenvoudige commando om de functie uit te schakelen op Windows 10:
```PowerShell
$> Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All
```
Op Windows 11, kan je ook een verhoogde Powershell gebruiken:
```PowerShell
$> bcdedit /set hypervisorlaunchtype off
```
Je kan Hyper-V ook uitschakelen via de systeeminstellingen van Windows.
- Klik met de rechtermuisknop op de Windows-knop en kies “Apps en functies”
- Open “Windows-functies aan of uit”
- Schakel Hyper-V uit en klik tenslotte op OK
Herstart je machine om deze wijzigingen door te voeren.
Op MacOS
Als je de volgende foutmelding krijgt bij het uitvoeren van VBoxManage:
failed to open /dev/vboxnetctl: No such file or directory
Of volledig opnieuw installeer Virtualbox of gebruik gewoon de onderstaande commando’s:
sudo /Library/StartupItems/VirtualBox/VirtualBox restart
of
sudo /Library/StartupItems/VirtualBox/VirtualBox start
Let op dat in recentere versies, het bestand /Library/StartupItems/VirtualBox/VirtualBox
niet bestaat, dus je zult het volgende commando moeten gebruiken:
sudo launchctl load /Library/LaunchDaemons/org.virtualbox.startup.pl
MacOS Catalina: Maar Het Werkt Op Mijn Machine
Een ander probleem dat kan optreden op Mac is dat klassieke probleem waarbij je hoort dat een applicatie “precies goed werkt op mijn machine,” en geen hoeveelheid smeken of snikken kan het hetzelfde doen maken op een andere plek. Mijn team van SPG had dit probleem ook eens gehad.
Stel dat je momenteel lokale omgevingen implementeert en test met Vagrant + VirtualBox. Een van de softwareontwikkelaars in je team gebruikt een aangepaste versie van VagrantBox, die tot nu toe goed voor hen werkt. Zij worden Developer 1 genoemd. Op hun werkstation draaien VirtualBox v6.1.34, Vagrant 2.2 en Ubuntu probleemloos.
Aan de andere kant is het duidelijk dat Developer 2 hun lokale omgeving moet bijwerken. Ze gebruiken momenteel een mix van MacOS, VirtualBox v6.1.24 en Vagrant 2.1.x op hun eigen werkstation.
Als gevolg hiervan lijkt Developer 2’s strategie op het eerste gezicht eenvoudig:
- Stap 1: Update VirtualBox en Vagrant versies (het is cruciaal om eensgezinde versies te gebruiken)
- Stap 2: Installeer alle extra projectcomponenten
Beide bewerkingen worden succesvol uitgevoerd, maar het resultaat is zeker onverwacht – om de een of andere reden is de website die op VirtualBox is geïnstalleerd nu volledig onbereikbaar. Wat de heck!?
Als je zo’n raadsel tegenkomt, is het van kritiek belang om een oplossing te bedenken en verstandige acties te ondernemen zoals de volgende:
- Bekijk de logbestanden
- Controleer of alle VirtualBox-services, zoals PHP, Nginx en MySQL, operationeel zijn
- Gebruik curl om de pagina te openen
In dit geval lijkt echter alles normaal te werken, zonder duidelijke problemen binnen de VirtualBox-instantie zelf.
Je team besluit dan om van koers te veranderen en te bepalen of de VirtualBox-host bereikbaar is van buitenaf. Na het gebruik van een eenvoudige ping-opdracht, zijn ze verrast om te ontdekken dat 100% van de pakketten verloren gaan. Hoewel dit nieuws enigszins verontrustend is, kan het ook de oorzaak zijn van het hele gebeuren.
Na dit spoor te volgen, ontdekken ze uiteindelijk dat HostOnly-adapters nu een ander bereik van IP-adressen moeten ontvangen. Dit begon blijkbaar met de VirtualBox v6.1.30 update (een patch-update, zelfs):
192.168.55.х prior to the update
192.168.56.х. after the update.
Daar staat het, helder als de dag, in de recentelijk herziene VirtualBox gebruikershandleiding:
“Op Linux, Mac OS X en Solaris zal Oracle VM VirtualBox alleen IP-adressen in het bereik 192.168.56.0/21 toestaan voor host-only adapters.”
Iedereen in je team ademt een gezamenlijk zucht van opluchting. Het probleem verdwijnt plotseling nadat een nieuwe HostOnly-adapter is gemaakt en deze in de VirtualBox-instantie is gewijzigd. Het cruciale webcomponent van de oplossing is eindelijk toegankelijk en Developer 2 is eindelijk blij.
Vagrant Or…? Welke alternatieven bestaan er? Hoe zijn ze beter?
Met zoveel opwinding, zou je het kunnen worden vergeven voor het zoeken naar Vagrant alternatieven. Als je dat zou doen, zou je waarschijnlijk een aantal websites tegenkomen die de utility vergeleken met containers (meestal Docker). Maar is dit eigenlijk een geldige vergelijking? Het blijkt dat het dat wel is, zolang je maar op de hoogte bent van het verschil tussen de twee.
Veel van de voordelen die Docker heeft boven hypervisors kunnen ook als nadelen worden beschouwd – het hangt gewoon af van wat je ermee nodig hebt. Laten we beginnen met een grote: opstarttijd. Hoewel containers snel kunnen starten omdat ze in feite slechts een set processen zijn, betekent dit ook dat ze de hostkernel gebruiken. Als gevolg daarvan, in plaats van te vertrouwen op gedegradeerde hardware, zullen containers de hardware van de host rechtstreeks gebruiken.
Hypervisors kunnen ook toegewijde middelen in de vorm van geheugen, CPU-tijd, schijfruimte en anderen hebben. Containers delen daarentegen middelen met andere processen op de hostcomputer. Evenzo, terwijl Vagrant het mogelijk maakt om een hele virtuele machine te maken – wat meer tijd en middelen zal vereisen – stelt Docker’s gecontroleerde aanpak je in staat om sneller te implementeren met minder middelen.
Dus, met dat in gedachten, onthoud gewoon dat dit geen wedstrijd is. Het gaat gewoon om de behoeften van je bedrijf.
Conclusie
Hoewel Vagrant zonder twijfel een formidabel hulpmiddel is, is het ook niet immuun voor problemen. Als je bedrijf geen expertise of kennis heeft, kan een toegewijde team van softwareontwikkelaars wellicht helpen. Immers, zelfs wanneer het alleen “werkt op mijn machine”, is er een oplossing voor elk probleem.
Source:
https://dzone.com/articles/vagrantvirtualbox-on-macos-catalina-but-it-works-o