24.04.2013

Linux KVM: Ubuntu als virtuelle Maschine installieren

Heute mal ein ganz anderes Thema, in das ich mich gerade einarbeite: virtuelle Maschinen unter Linux. Ich mag Linux, seit ich es an der Uni vor über 20 Jahren kennengelernt habe (damals bestand die Welt noch aus richtig großen Unix-Systemen wie dem von Sun, IBM, DEC, und lief nur auf der sündhaft teuren Hardware dieser Hersteller). Linux begann als experimenteller Multitasker für die intel 80386-CPU, und hat sich mittlerweile zu einem Betriebssystem entwickelt, das von winzigkleinen Systemen zur Hardwaresteuerung reicht (Arduino) bis hin zu gigantisch großen Systemen wie bei Facebook, Google, Amazon uvm. Alle diese Firmen gäbe es ohne Linux (und Apache ...) nicht. Achja: ohne Linux gäbe es auch kein Android.

Ich kannte zwar schon eine ganze Zeit länger VMware als "Betriebssystem" für virtuelle Maschinen (z.B. den kostenlosen VMware Player) und hab auch schon einige davon selbst gebaut, um z.B. WebSphere-Versionen zu testen, aber mit KVM hatte ich bislang noch nicht gearbeitet.

Seit mein Arbeitgeber mir aber Linux als Arbeitsplatz vorgibt (juhu ...), kenne ich zwangsweise auch KVM ;). Es gibt nämlich einige Anwendungen, die zwingend mit dem Internet Explorer aufgerufen werden müssen, und dafür gibt es ein vorgefertigtes simuliertes Windows auf meinem Laptop. Aber darüber wollte ich eigentlich nicht reden.

Wo so ein Windows funktioniert, müsste aber doch auch Linux möglich sein, dachte ich mir so, und wirklich: es geht, und ist ganz einfach! Sagte ich schon, dass ich Linux mag? ;)

Man braucht eine bootfähige CD/DVD mit Linux oder ein ISO-Abbild eines solchen Datenträgers. Auf der Festplatte sollte genügend Speicherplatz frei sein (für ein kleines Testsystem reichen 16-20 GB). Mit dem Befehl
virt-install \
--connect qemu:///system \
--force \
--name ubuntu \
--ram 1024 \
--disk path=/var/lib/libvirt/images/Ubuntu-12.04LTS/linux.raw,size=16 \
--graphics spice \
--prompt \
--os-type=linux \
--boot cdrom \
--cdrom /var/lib/libvirt/images/ubuntu-12.04-dvd-amd64.iso
erzeugt man ein Ubuntu mit 1 GB Arbeitsspeicher und 16 GB Festplatte aus einer ISO-Datei. Dass es gerade Ubuntu geworden ist, war Zufall, ich hatte grade eine DVD zur Hand aus einer letztjährigen c't ;).

Mein erster Versuch war, den Pfad zur ISO-Datei auf der DVD anzugeben, aber das ist schrecklich langsam. Es ist wesentlich sinnvoller, die ISO-Datei auf die Festplatte zu kopieren und dann zu installieren. Die Image-Datei auf der Festplatte (d.h. die simulierte Festplatte für die virtuelle Maschine) kann man in verschiedenen Formaten angeben; das sinnvollste lt. Dokumentation ist "qcow2", damit belegt die Image-Datei als "sparse file" (löchrige Datei) erst mal nur wenig Speicherplatz und wird bei Bedarf vergrößert. Wenn man aber Wert auf eine besonders schnelle VM legt, kann man die Datei gleich in der "richtigen" Größe vollständig anlegen lassen.

Danach kann man dann den "virt-manager" starten und ein Fenster öffnen, in dem man diesem Linux beim Arbeiten zusehen und natürlich auch selbst damit arbeiten kann. Es ist auch nicht schlecht, wenn man hier die Installation komplettiert, also z.B. Benutzer, Passwort usw. anlegt. Danach legt Ubuntu nochmal ein bißchen an Updates nach, falls es eine Internet-Verbindung erkennt.

Kleiner Trick, den ich lernen musste: Ubuntu enthält im Normalzustand keinen ssh-Server, um sich von außerhalb (d.h. mit einem anderen Computer) anzumelden; das ist aber ganz nützlich, wenn man einen virtuellen Server betreiben will und keinen grafischen Arbeitsplatz. So einen Server kann man mit der Kommandozeile wesentlich einfacher verwalten als über GUI. Finde ich zumindest.

Also installiert man mit dem Paketmanager den Server. Und das geht so
sudo apt-get install openssh-server
Danach kann man seinen public-key entweder beim eigenen Benutzer oder beim root-User in der Datei authorized_keys ablegen (Unterverzeichnis $HOME/.ssh) und schon sollte der Login mit ssh klappen. Das kann man auch innerhalb der VM testen, sofern man den private Key auch mitgebraucht hat (üblicherweise in der Datei identity, chmod 400 nicht vergessen, sonst lehnt ssh die Verwendung dieser Datei ab).
ssh -i ~/.ssh/identity $USER@127.0.0.1
Ob man $USER (seinen eigenen Usernamen) oder root verwendet, hängt davon ab, wo man den public-key abgelegt hat. Klar, oder? ;)
Die Keys kann man recht bequem über die Zwischenablage des Hostsystems in die virtuelle Maschine bringen. scp geht ja noch nicht ;)