Open Source im professionellen Einsatz

© french_03, photocase.com

Perl steuert Virtualbox

Entspannt nach draußen

Das Paket Vagrant (Vagabund) verwaltet mit Virtualbox als Hypervisor virtuelle Maschinen einfach von der Kommandozeile aus. Der Entwickler kann seinen Kunden, die einfach mal in ein Produkt hineinschnuppern wollen, fertig installierte Umgebungen mitgeben.

"Also bei mir funktioniert's!" – die alte Ausrede bei defekten Produkten sollte unter Software-Entwicklern spätestens mit der Erfindung virtueller Maschinen ausgedient haben. Denn auf einer nackten, virtuellen Distribution lassen sich prima ganze Softwaresuiten reproduzierbar installieren, um vorher zu testen, ob das Gesamtsystem später beim Kunden funktioniert oder nicht.

Um diese Tests zu automatisieren, benötigt der Entwickler ein Kommandozeilentool zum Hochfahren der virtuellen Maschine, ein Einrichtungstool zum Installieren der Applikationspakete und ihrer Abhängigkeiten sowie ein Skript zum Anwerfen der Testsuite. Oft erstrecken sich Applikationen über mehrere Instanzen – wie bei einem Client, der zu einem Webserver Kontakt aufnimmt, der wiederum eine Datenbankinstanz nutzt.

Geschäftiger Vagabund

Das Tool Vagrant [2] definiert die in einem Softwareprojekt genutzten virtuellen Maschinen per Konfigurationsdatei, die das Entwicklungsteam versioniert und neben dem Sourcecode im Projekt-Repository mitführt. Vagrant nutzt als Virtualisierer das kostenlose Virtualbox [3], das auf Linux, Mac OS X und Windows läuft (Abbildung 1) und noch mehr Betriebssysteme als Gäste virtualisiert. Vagrant richtet die VMs in so genannten Boxes so her, dass in ihnen ein SSH-Daemon läuft und ein User namens »vagrant« Sudo-Rechte besitzt (Abbildung 2).

So startet die Sequenz »vagrant up« (oder »vagrant ssh« ) eine vorher von einem Distributionsserver wie Vagrantbox.es heruntergeladene Box als VM und wechselt auf der Kommandozeile in sie hinein. Um Softwarepakete automatisch einzurichten und Konfigurationsdateien anzupassen, stehen Softwareprovision-Tools wie Puppet [4], Chef [5] und Saltstack [6] bereit. Diese laden Distributionspakete vom Repositoryserver, installieren sie, lösen Abhängigkeiten auf, stellen rollenspezifische Konfigurationen ein, starten Services und halten sie am Laufen.

Abbildung 1: Vagrant und Virtualbox: Wer wollte nicht schon einmal auf einem Macbook mit einem Aufruf von der Kommandozeile in ein 64-Bit-Ubuntu wechseln?

Abbildung 1: Vagrant und Virtualbox: Wer wollte nicht schon einmal auf einem Macbook mit einem Aufruf von der Kommandozeile in ein 64-Bit-Ubuntu wechseln?

Abbildung 2: Auf Vagrantbox.es stehen alle gängigen Linux-Distributionen als Vagrant-Boxes zum Download bereit.

Puppet als Innenarchitekt

Das Kommando »vagrant init« in einem frisch angelegten Verzeichnis im Hostsystem legt eine Datei namens »VagrantFile« an, die außer einer langen Liste von auskommentierten Optionen nur den Ruby-Code

Vagrant::Config.run do |config|
  config.vm.box = "base"
end

enthält. Das anschließend abgesetzte Kommando »vagrant box add ...« ersetzt in der angegebenen Datei den Wert für »base« für die neu angelegte Box (»precise32« in Listing 1) und lädt die Box vom Webserver an der angegebenen URL. Unterstützt die heruntergeladene VM-Box ein Einrichtungstool wie Puppet, Chef oder Saltstack, darf das Vagrant-File die Konfiguration der VM diesem überlassen. Listing 1 verweist zum Beispiel auf:

Damit erwartet Vagrant in der Datei »manifests/default.pp« unter dem Vagrant-Verzeichnis eine Puppet-Konfigurationsdatei nach Art von Listing 2. Abbildung 3 zeigt das Datei-Layout im Hostsystem, das im Source-Control-Repository des Entwicklungsteams liegt.

Listing 1

VagrantFile

1 Vagrant::Config.run do |config|
2
3     # 32-bit Ubuntu Box
4   config.vm.box = "precise32"
5
6     # provision with Puppet
7   config.vm.provision :puppet
8 end
config.vm.provision :puppet

Listing 2

default.pp

01 # Basic Puppet Mojo manifest
02
03 class mojo {
04   exec { 'apt-get update':
05     command => '/usr/bin/apt-get update'
06   }
07
08   package { "libmojolicious-perl":
09     ensure => present
10   }
11
12   file { '/usr/bin/mymojo':
13     ensure => link,
14     target => "/vagrant/mymojo",
15     force  => true
16   }
17 }
18
19 include mojo
Abbildung 3: Diese Dateien in der Sourcecode-Verwaltung bestimmen Parameter und Inventar der Vagrant-VM.

Abbildung 3: Diese Dateien in der Sourcecode-Verwaltung bestimmen Parameter und Inventar der Vagrant-VM.

Abbildung 4: In wenigen Schritten ist eine virtuelle Maschine unter Ubuntu Precise (32 Bit) mit Vagrant und Virtualbox installiert.

Abbildung 4: In wenigen Schritten ist eine virtuelle Maschine unter Ubuntu Precise (32 Bit) mit Vagrant und Virtualbox installiert.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 3 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook