Vagrant+VirtualBox unter MacOS Catalina: Aber Es Funktioniert auf Meinem Rechner!

Was ist Vagrant?

Erstmals im März 2010 von Mitchell Hashimoto von Hashicorp und seinem Partner John Bender gestartet, ist Vagrant ein Open-Source-Kommandozeilenwerkzeug zur Lebenszyklusverwaltung virtueller Maschinen (VM). Das Tool zielt darauf ab, die Entwicklungsarbeitstechnik zu verbessern, indem es diesen Prozess deutlich vereinfacht. Ursprünglich an Oracle VirtualBox gebunden, unterstützt Vagrant seit Version 1.1 auch VMware, KVM und andere. Obwohl die Virtualisierung bei der Webentwicklung hilfreich ist, ist die Verwendung von Vagrant nicht immer eine fehlerfreie Option.

Warum Vagrant verwenden? Ist es es wert?

Vor allem bietet Vagrant eine viel größere Flexibilität mit einer hypervisorbasierten unveränderlichen Umgebung. Dies ermöglicht Entwicklern die Erstellung von Umgebungen, die Funktionen erfordern, die nur auf anderen Systemen verfügbar sind.

Zum Beispiel, wenn Sie eine Anwendung erstellen müssten, die eine Vielzahl von Betriebssystemen und Kernels unterstützt, könnten Sie leicht mehrere virtuelle Maschinen erstellen, die Tests mit Vagrant durchführen könnten. Ebenso könnte die Kombination von VMs und Vagrant auch besonders hilfreich sein, wenn Sie die Umgebung Ihres Kunden (Betriebssystem, Ressourcen usw.) replizieren möchten.

Die Installation von Vagrant auf einem Arbeitsplatzrechner

Um mit Vagrant zu beginnen, laden Sie das Installationsprogramm oder den geeigneten Paket von der offiziellen Vagrant Downloads Seite herunter. Die folgenden Anweisungen gelten für Vagrant v2.3.3 (die neueste Version im Dezember 2022).

Vagrant Installation unter Windows

Um Vagrant unter Windows zu installieren, müssen Sie zunächst das MSI-Paket herunterladen. Anschließend können Sie die Datei einfach ausführen und den regulären Installationsprozess durchlaufen.

Hinweis: Das Installationsprogramm fügt „vagrant“ automatisch in Ihren Systempfad ein, sodass es auch in Terminals verfügbar ist. Sollte Vagrant jedoch nicht gefunden werden, versuchen Sie, sich aus dem System auszuloggen und erneut einzuloggen, da dies unter Windows ein häufiges Phänomen ist.

Vagrant Installation unter MacOS Catalina

Angenommen, Sie haben bereits einen „brew“-Paketmanager installiert, können Sie Vagrant auf Mac schnell mit diesem Einzeiler-Befehl einrichten:

 

```bash
$> brew install vagrant
```

Alternativ können Sie Vagrant installieren von Binärdateien.

Vagrant Installation unter Linux

Für Linux-Systeme demonstrieren wir den Installationsprozess für Vagrant unter Ubuntu 20.04:

Schlüssel installieren:

 

```bash
$> wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
```

Repository hinzufügen:

 

```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
```

Updates abrufen und Installation durchführen:

 

```bash
$> sudo apt update && sudo apt install vagrant
```

Das ist alles! Jetzt musst du nur noch deinen Terminal öffnen und „vagrant“ eingeben. Es ist jedoch auch wichtig zu erwähnen, dass, wenn du Vagrant alleine ausführst, eine Liste mit den verfügbaren Unterbefehlen angezeigt wird.

Hauptprobleme, die beim Installieren von Vagrant auftreten können

Obwohl Vagrant-Installationsfehler eher selten sind, nimmt die Wahrscheinlichkeit hierfür erheblich zu, wenn mehrere Hypervisoren auf deinem Computer installiert sind. Schließlich erlauben Hypervisoren in der Regel nicht die Erstellung von virtuellen Maschinen, wenn mehr als einer von ihnen bereits verwendet wird.

Im Folgenden findest du ein paar schnelle Lösungen, die sich aus der offiziellen Dokumentation von Vagrant ergeben und dir helfen können, Vagrant und VirtualBox zu verwenden, wenn ein anderer Hypervisor vorhanden ist:

Auf Linux

Bei der Verwendung eines anderen Hypervisors könntest du folgenden Fehler erhalten:

 

```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
```

Um VirtualBox korrekt ausführen zu können, müssen alle zusätzlichen Hypervisoren in die Deny-Liste deines Systems aufgenommen werden.

Um dies zu tun, finde zuerst heraus, wie der Hypervisor heißt:

 

```bash
$> lsmod | grep kvm
kvm_intel             204800  6
kvm                   593920  1 kvm_intel
irqbypass              16384  1 kvm
```

Füge dann einfach mithilfe des „blacklist“-Befehls den Hypervisor in deine Deny-Liste ein.

 

```bash
echo 'blacklist kvm-intel' >> /etc/modprobe.d/blacklist.conf
```

Lass dein System anschließend neu starten und benutze den „vagrant“-Befehl erneut.

Auf Windows

Unter Windows könnte beim Versuch, eine VirtualBox-VM zu starten, ein schockierender Bluescreen auftreten.

Um VirtualBox normal zu verwenden, muss Hyper-V deaktiviert werden. Verwenden Sie den folgenden einfachen Befehl, um die Funktion auf Windows 10 zu deaktivieren:

 

```PowerShell
$> Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All
```

Auf Windows 11 können Sie auch eine erhöhte Powershell verwenden:

 

```PowerShell
$> bcdedit /set hypervisorlaunchtype off
```

Alternativ können Sie Hyper-V über die Systemeinstellungen Ihres Windows deaktivieren.

  • Klicken Sie mit der rechten Maustaste auf die Windows-Schaltfläche und wählen Sie „Apps und Features“
  • Öffnen Sie „Windows-Funktionen ein- oder ausschalten“
  • Deaktivieren Sie Hyper-V und klicken Sie schließlich auf OK

Starten Sie Ihr Gerät neu, um diese Änderungen anzuwenden.

Auf MacOS

Wenn Sie beim Ausführen von VBoxManage mit der folgenden Fehlermeldung konfrontiert werden:

failed to open /dev/vboxnetctl: No such file or directory

Entweder VirtualBox vollständig neu installieren oder einfach die folgenden Befehle verwenden:

 
sudo /Library/StartupItems/VirtualBox/VirtualBox restart

oder

 
sudo /Library/StartupItems/VirtualBox/VirtualBox start

Beachten Sie, dass in neueren Versionen die Datei /Library/StartupItems/VirtualBox/VirtualBox nicht existiert, also müssen Sie den folgenden Befehl verwenden:

 
sudo launchctl load /Library/LaunchDaemons/org.virtualbox.startup.pl

MacOS Catalina: Aber Es Funktioniert Auf Meinem Rechner

Ein weiteres Problem, das auf Mac auftreten kann, ist das klassische Problem, wenn Sie hören, dass eine Anwendung „fein auf meinem Rechner“ funktioniert, und keine Menge Flehen oder Weinen kann sie dazu bringen, dasselbe anderswo zu tun. Mein Team von SPG hatte dieses Problem auch schon einmal.

Stell dir vor, du setzt und testest derzeit lokale Umgebungen mit Vagrant und VirtualBox ein. Einer der Softwareentwickler in deinem Team verwendet eine angepasste Version von VagrantBox, die bisher für sie gut funktioniert. Sie werden als Entwickler 1 bezeichnet. Auf ihrem Arbeitsplatz läuft VirtualBox v6.1.34, Vagrant 2.2 und Ubuntu ohne Probleme.

Auf der anderen Seite ist es klar, dass Entwickler 2 ihre lokale Umgebung aktualisieren muss. Sie verwenden derzeit eine Mischung aus MacOS, VirtualBox v6.1.24 und Vagrant 2.1.x auf ihrem eigenen Arbeitsplatz.

Folglich scheint Entwickler 2s Strategie, zumindest auf den ersten Blick, einfach zu sein:

  • Schritt 1: Aktualisieren Sie die VirtualBox- und Vagrant-Versionen (es ist wichtig, einheitliche Versionen zu verwenden)
  • Schritt 2: Installieren Sie alle zusätzlichen Projektkomponenten

Beide Operationen werden erfolgreich abgeschlossen, aber das Ergebnis ist sicherlich unerwartet – aus irgendeinem Grund ist die auf VirtualBox installierte Website jetzt völlig nicht erreichbar. Was zum Teufel!?

Wenn man mit einem solchen Rätsel konfrontiert wird, ist es entscheidend, eine Lösung zu überdenken und sinnvolle Schritte zu unternehmen, wie die folgenden:

  • Überprüfe die Log-Dateien
  • Stelle sicher, dass alle VirtualBox-Dienste wie PHP, Nginx und MySQL funktionsfähig sind
  • Verwende curl, um die Seite aufzurufen

In diesem Fall scheint jedoch alles korrekt zu funktionieren, ohne offensichtliche Probleme innerhalb der VirtualBox-Instanz selbst.

Ihre Gruppe beschließt daraufhin, die Strategie zu ändern und zu bestimmen, ob der VirtualBox-Host von außen erreichbar ist. Nachdem sie einen einfachen Ping-Befehl verwendet haben, sind sie überrascht zu entdecken, dass 100 % der Pakete verloren gehen. Obwohl diese Nachricht etwas beunruhigend ist, könnte sie auch der Grund für das ganze Durcheinander sein.

Auf diese Spur folgend finden sie schließlich heraus, dass HostOnly-Adapter jetzt einen anderen Bereich von IP-Adressen erhalten müssen. Dies begann angeblich mit dem VirtualBox v6.1.30 Update (einem Patch-Update, wie es überhaupt kommt):

 

192.168.55.х prior to the update

192.168.56.х. after the update.

Da steht es, klar wie Tag, in der kürzlich überarbeiteten VirtualBox Benutzerhandbuch

Auf Linux, Mac OS X und Solaris erlaubt Oracle VM VirtualBox nur noch IP-Adressen im Bereich 192.168.56.0/21 für Host-Only-Adapter.”

Alle in Ihrer Gruppe atmen gemeinsam auf. Das Problem verschwindet plötzlich, nachdem eine neue HostOnly-Adapter erstellt und der in der VirtualBox-Instanz geändert wurde. Das entscheidende Web-Komponente der Lösung ist endlich zugänglich, und Entwickler 2 ist endlich zufrieden.

Vagrant Oder…? Welche Alternativen gibt es? Wie sind sie besser?

Mit so viel Aufregung könntest du verzeihlich sein, wenn du nach Alternativen zu Vagrant suchst. Wenn du das tust, wirst du wahrscheinlich auf verschiedene Websites stoßen, die die Funktionalität mit Containern (meistens Docker) vergleichen. Aber ist dies tatsächlich ein gültiger Vergleich? Es stellt sich heraus, dass dies der Fall ist, solange du dich der Unterschiede bewusst bist.

Viele der Vorteile, die Docker gegenüber Hypervisoren hat, können auch als Nachteile betrachtet werden – es kommt einfach darauf an, wofür du es brauchst. Fangen wir also mit einem großen Punkt an: Startzeit. Während Container schnell starten können, weil sie im Grunde nur ein Satz von Prozessen sind, bedeutet dies auch, dass sie den Host-Kernel nutzen. Daher stützen sich Container statt auf virtualisierte Hardware direkt auf die Hardware des Hosts.

Hypervisors können auch dedizierte Ressourcen in Form von Speicher, CPU-Zeit, Festplattenspeicher und anderen haben. Container hingegen teilen sich Ressourcen mit anderen Prozessen auf dem Host-Computer. Ebenso ermöglicht Vagrant dir, eine ganze virtuelle Maschine zu erstellen – was mehr Zeit und Ressourcen erfordert – während Docker’s containerisierter Ansatz es dir erlaubt, schneller mit weniger Ressourcen bereitzustellen.

Denk also daran, dass dies kein Wettbewerb ist. Es geht einfach um die Bedürfnisse deines Unternehmens.

Zusammenfassung

Obwohl Vagrant zweifellos ein eindrucksvolles Werkzeug ist, ist es auch nicht vor Problemen gefeit. Wenn dein Unternehmen die Expertise oder das Wissen fehlt, könnte ein dediziertes Team von Softwareentwicklern helfen. Schließlich gibt es für jedes Problem eine Lösung, auch wenn es nur „auf meinem Rechner funktioniert“.

Source:
https://dzone.com/articles/vagrantvirtualbox-on-macos-catalina-but-it-works-o