© Excellent backgrounds/Shutterstock.com
Ein Einstieg und ein praktisches Beispiel an Targenio

„Bei mir hat es funktioniert“


Hashicorp, der Hersteller von Vagrant, macht es sich zur Aufgabe, pragmatische Lösungen für Entwickler bereitzustellen, um deren Agilität und Flexibilität zu ­maximieren. Und tatsächlich macht Vagrant in dieser Hinsicht eine sehr gute Figur.

„Bei mir hat es funktioniert“ – dieser Satz ist wahrscheinlich jedem Entwickler oder Projektverantwortlichen schon einmal über den Weg gelaufen. Sicher gibt es Situationen, in denen das tatsächlich zutrifft. Aber vielleicht benutzt der ein oder andere Entwickler diesen Satz auch gerne mal als Ausrede. Vagrant macht hier den Spielverderber: „Say goodbye to ‘works on my machine’ bugs.“ [1].

Bei Vagrant handelt es sich um eine Software, mit deren Hilfe auf der einen Seite virtuelle Maschinen einfach erstellt und verwaltet werden können. Auf der anderen Seite bietet es die Möglichkeit, beliebige Software mittels SCM (Software-Configuration-Management) einfach zu konfigurieren und auf dem virtuellen System zu verteilen. Damit lassen sich z. B. die Rüstzeiten für das Aufsetzen von Entwicklungsumgebungen minimieren. In einem einfachen Satz wird das Tool auf der eigenen Homepage so beschrieben: „Vagrant is a tool for build­ing complete development environments.“ [2].

Die Konfiguration wird in einer Skriptdatei hinterlegt, dem Vagrantfile. In ihr wird die komplette Zielumgebung beschrieben. In minimaler Ausführung umfasst sie nur wenige Zeilen (Listing 1).

Listing 1

Vagrant.configure(2) do |config| config.vm.box = "hashicorp/precise64" end

Damit sind wir schon mittendrin: Sehen wir uns an, wie diese Datei erstellt wird und was die einzelnen Zeilen bedeuten.

Das erste Vagrantfile

Um Vagrant zu verwenden, muss es zunächst auf dem Hostsystem – der Rechner, auf dem die virtuelle Maschine laufen soll – installiert werden. Beim ersten Test konnte ich bei diesem Schritt gleich einen Stolperstein entdecken: Im späteren Verlauf erwies es sich als fehleranfällig, wenn das Installationsverzeichnis von Vagrant ein Leerzeichen im Dateipfad hat. Dummerweise ist das aber beim Programmordner unter Windows intern der Fall (Program files), sodass eine Installation in diesem Ordner nicht ratsam ist. Besser ist es, ein eigenes Verzeichnis ohne Leerzeichen oder die Voreinstellung C:\HashiCorp\Vagrant zu verwenden.

Wie schon gesagt, ist Vagrant eine Software, um virtuelle Maschinen zu verwalten. Das bedeutet natürlich auch, dass eine Virtualisierungssoftware notwendig ist. Ich verwende für dieses Beispiel VirtualBox in der Version 5.0.

Zum Aufsetzen eines Vagrant-Projekts sind nicht viele Schritte notwendig. Es reicht aus, wenn eine Datei mit dem Namen Vagrantfile (ohne Dateiendung) angelegt wird, die z. B. den Inhalt von Listing 1 aufweist. Alternativ dazu kann man sich dieses File generieren lassen. Dazu setzt man den Befehl vagrant init hashicorp/precise64 –minimal ab.

Die Syntax des Vagrantfiles ist Ruby, große Kenntnisse davon sind für die Erstellung der Konfiguration aber nicht notwendig. Die erste Zeile von Listing 1 besagt zunächst, dass die Vagrant-Konfiguration in der Version 2 verwendet werden soll. Diese wurde bereits in der Vagrant-Version 1.1 eingeführt (aktuell ist die Version 1.7), die Einstellung bleibt aber aus Gründen der Rückwärtskompatibilität erhalten [3]. Der wesentliche Inhalt dieser Vagrant-Konfiguration findet sich in der zweiten Zeile. Dort wird festgelegt, welche Umgebung innerhalb der virtuellen Maschine verwendet werden soll. Damit sind wir bei einem Kernelement von Vagrant: Für den Aufbau des Zielsystems muss nicht bei null begonnen werden. Stattdessen werden vorkonfigurierte Pakete angeboten, die in diesem Zusammenhang „Boxes“ genannt werden. Diese werden frei verfügbar im Internet bereitgestellt [4]. Findet man nichts Passendes, kann dort auch eine selbst erstellte Box publiziert werden (z. B. gibt es unter dem Namen kungfuice/ubuntu64-java ein mit Java 7 und MySQL bestücktes Ubuntu).

Vagrant up!

Der Start der virtuellen Maschine in der festgelegten Konfiguration ist denkbar einfach: vagrant up. Mit diesem Befehl startet Vagrant die virtuelle Maschine und installiert die in der Konfiguration festgelegte Box. Der erste Start dauert etwas länger, da in diesem Fall die Box erst aus dem Internet geladen werden muss. Ist die Installation erfolgreich, läuft die VM auf dem Rechner und kann z. B. mit dem VirtualBox Manager untersucht werden (Abb. 1).

herrmann_vagrant_1.tif_fmt1.jpgAbb. 1: Die virtuelle Maschine im Oracle VM VirtualBox Manager

Die Konsolenausgabe nach dem Start der VM weist außerdem diesen Eintrag auf:

==> default: Forwarding ports... default: 22 => 2222 (adapter 1)

Dieses System, das „Port Forwarding“ genannt wird, bewirkt, dass bestimmte Ports des Hostsystems auf beliebige Ports des Gastsystems (der virtuellen Maschine) umgeleitet werden. Dadurch ist es möglich, eine SSH-Verbindung zur VM herzustellen – etwa mit WinSCP. Beim Festlegen des Standardbenutzers waren die Macher kreativ: Benutzername „vagrant“, Passwort „vagrant“ (Abb. 2).

herrmann_vagrant_2.tif_fmt1.jpgAbb. 2: SSH-Verbindung auf die virtuelle Maschine

Neben diesem Standardport, der immer eingerichtet wird, ist es möglich, beliebige Ports auf das virtuelle System umzuleiten, siehe weiter unten und in der Dokumentation unter [5].

Mit nur ein paar Zeilen Konfiguration haben wir es geschafft, eine voll funktionsfähige und mit einem Betriebssystem ausgestattete virtuelle Maschine zu erstellen. Als Nächstes sehen wir uns an, wie wir Daten automatisiert vom Host auf die VM bringen können.

Inhalte in verschiedene Systeme mappen mit Synced Folders

Um die virtuelle Maschine sinnvoll nutzen zu können, ist es notwendig, Daten automatisiert in das Filesystem kopieren zu können. Im nachfolgenden Anwendungsfall möchte ich sowohl den Applikationsserver als auch die Anwendung in der virtuellen Maschine installieren ...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang