VMs mit Vagrant erstellen
Virtuelle Maschinen haben längst Einzug in den Alltag von Administratoren gehalten. Auch Entwickler können von ihrem Einsatz profitieren. Vagrant setzt an, das Erstellen und Provisionieren von virtuellen Maschinen zu vereinfachen und zu beschleunigen.
- Golo Roden
Virtuelle Maschinen haben längst Einzug in den Alltag von Administratoren gehalten. Auch Entwickler können von ihrem Einsatz profitieren: Eine standardisierte und im Team einheitliche Entwicklungs- und Testumgebung ist Gold wert. Vagrant setzt an, das Erstellen und Provisionieren von virtuellen Maschinen zu vereinfachen und zu beschleunigen.
Das Erstellen einer virtuellen Maschine (VM) beginnt unabhängig von der gewählten Software stets mit den gleichen Schritten: Zuerst spezifiziert man die Hardware, wählt beispielsweise die Anzahl der Prozessoren aus und legt die Größe des Arbeitsspeichers sowie der angeschlossenen Datenträger fest. Danach erfolgt die Installation des gewünschten Betriebssystems.
Der Prozess benötigt in der Regel zwar kaum Eingriffe des Anwenders, nimmt allerdings jede Menge Zeit in Anspruch: Je nach Betriebssystem kann das Aufsetzen durchaus zwischen einer halben und zwei Stunden dauern. Anschließend verfügt man zwar über ein startbares Grundsystem, allerdings ist noch keinerlei zusätzliche Software vorhanden.
Sie hinzuzufügen geht in der Regel relativ rasch, da die Pakete im Vergleich zum Betriebssystem eher kompakt sind. Allerdings gilt es, auf die Versionen zu achten und zahlreiche Abhängigkeiten aufzulösen. Diese Aufgabe ist lästig und durchaus fehleranfällig. Zudem fehlt die Garantie, dass die virtuellen Maschinen der einzelnen Teammitglieder identisch konfiguriert sind.
Die Fäden im Hintergrund ziehen
Das quelloffene Projekt Vagrant will die erwähnten Probleme auf elegante Weise lösen. Im Prinzip handelt es sich bei Vagrant um ein Werkzeug, das Software zur Virtualisierung wie VirtualBox oder VMware fernsteuern kann. Auf dem Weg ermöglicht es das automatisierte Erstellen von virtuellen Maschinen an Hand einer zuvor erzeugten Konfigurationsdatei.
Da Vagrant zudem auf vorbereitete Abbilder häufig verwendeter Betriebssysteme zurückgreift, lässt sich die Installation drastisch beschleunigen: Statt sie jedes Mal von Grund auf durchzuführen, ist lediglich das passende Abbild herunterzuladen und zu kopieren.
Um das Werkzeug nutzen zu können, muss man es zunächst auf dem lokalen System installieren. Passende Binärpakete für gängige Plattformen wie OS X, Linux und Windows lassen sich von der Produktwebseite herunterladen.
Standardmäßig greift Vagrant auf die Software VirtualBox zurück, weshalb man sie zuvor gegebenenfalls gesondert installieren muss. Dabei ist zu beachten, dass nicht jede Version mit jeder Vagrant-Variante kompatibel ist. Sollten sie inkompatibel sein, erscheint beim Start jedoch ein entsprechender Hinweis und eine Liste der unterstützten Versionen.
Die einzelnen Informationen zu einer virtuellen Maschine verwaltet Vagrant in einer Konfigurationsdatei namens Vagrantfile, die in Ruby zu verfassen ist. Ruft man Vagrant mit dem Parameter init auf, erzeugt es eine Konfigurationsdatei als Vorlage:
$ vagrant init
Das Kommando kann man bedenkenlos in einem bereits bestehenden Verzeichnis aufrufen, um ein Projekt im Nachhinein mit UnterstĂĽtzung fĂĽr Vagrant auszustatten.
Da die Datei Vagrantfile die Konfigurationseinstellungen für die zugehörige virtuelle Maschine enthält, ist es sinnvoll, sie der Versionsverwaltung hinzuzufügen: So lässt sich die virtuelle Maschine stets wiederherstellen – trotzdem ist in der Versionsverwaltung nur wenig Speicherplatz belegt, da nur die Konfigurationsdatei zu verwalten ist.
Für sie gibt es allerdings zwei unterschiedliche Formate, die von der verwendeten Version von Vagrant abhängen: Format 1 wurde in Version 1.0 eingeführt, Format 2 in Version 1.1. Alle seither erschienenen Releases unterstützen prinzipiell beide Formate. Zweiteres ist allerdings noch nicht endgültig definiert, sodass es bei dessen Verwendung gegebenenfalls zu Inkompatibilitäten zwischen unterschiedlichen Versionen von Vagrant kommen kann.
Abbilder des Betriebssystems
Um nun an Hand von Vagrantfile eine neue virtuelle Maschine zu erstellen, benötigt man zunächst ein Betriebssystemabbild. Eine Auswahl steht zum direkten Download auf der Webseite von Vagrant zur Verfügung, alternativ gilt die darauf spezialisierte Webseite Vagrantbox.es als erste Anlaufstelle.
Zur lokalen Installation eines Betriebssystemabbilds dient der Parameter add, der einen Bezeichner und die Download-URL erwartet. Der Bezeichner lässt sich frei wählen. Der Übersichtlichkeit halber ist es allerdings sinnvoll, sich am Namen des Abbilds zu orientieren. Ubuntu 12.04.3 LTS "Precise Pangolin" lässt
sich beispielsweise wie folgt herunterladen und bereitstellen:
$ vagrant add precise64 http://files.vagrantup.com/precise64.box
Lädt man Betriebssystemabbilder nicht von der offiziellen Vagrant-Webseite herunter, sollte man stets überprüfen, ob die jeweilige Quelle vertrauenswürdig ist: Schließlich können vorgefertigte Abbilder prinzipiell Viren oder sonstigen Schadcode enthalten.
Um ein Abbild zu verwenden, muss man es in der Datei Vagrantfile hinterlegen:
Vagrant.configure("2") do |config|
config.vm.box = "precise64"
end
Diesen Schritt stets von Hand vornehmen zu müssen, wäre lästig. Daher ermöglicht Vagrant beim Aufruf der init-Option die Angabe eines Abbildnamens und optional sogar der Abbildadresse, was den manuellen Aufruf von add erspart:
$ vagrant init precise64 http://files.vagrantup.com/precise64.box
Besonders praktisch ist, dass Vagrant in diesem Fall auch die Download-Adresse in Vagrantfile hinterlegt, sodass es in der Lage ist, sie bei Bedarf automatisch herunterzuladen:
Vagrant.configure("2") do |config|
config.vm.box = "precise64"
config.vm.box_url = "http://files.vagrantup.com/precise64.box"
end