In Teil 3 dieser Serie soll die Bibliothek Libvirt betrachtet werden.
Was ist überhaupt Libvirt
In Teil 2 habe ich über Xen gesprochen. Es dürfte deutlich geworden sein, dass Xen eine eigene Virtualisierungstechnologie ist. Dies ist bei Libvirt nicht der Fall. Libvirt ist lediglich eine Bibliothek, welche in der Lage ist, verschiedene Virtualisierer auszuführen. Libvirt unterstützt derzeit folgende Hypervisor:
In diesem Beitrag wird auf die Verwendung von KVM unter Libvirt eingegangen. Andere Technologien sollten aber unter ähnlichen Umständen administrierbar sein – genau das ist ja der Vorteil von Libvirt: man kann unterschiedliche Hypervisor in ein und derselben Oberfläche verwalten.
Für Libvirt gibt es zur Verwaltung verschiedene Frontends:
- Die Virsh-Shell: diese ist fester Bestandteil von Libvirt und wird mit den entsprechenden Paketen direkt mitgeliefert.
- Virtual Machine Manager (Virt-Manager): Ein grafisches Frontend zur Verwaltung der virtuellen Maschinen.
- Ovirt: Web-Interface zur Verwaltung kompletter virtualisierter Umgebungen.
OVirt ist für größere Umgebungen gedacht, in denen virtuelle Maschinen auf verschiedenen Clusters laufen sollen und dort auch dynamisch verschoben, aktiviert, deaktiviert, etc. werden können. Für kleinere Umgebungen ist OVirt viel zu mächtig. Leider ist das Web-Interface auch nicht sinnvoll mit ScreenReadern zu verwenden. Das grafische Programm Virt-Manager lässt sich unter Linux mit dem Desktop Gnome und dem ScreenReader Orca durchaus verwenden. Die Virsh-Shell ist jedoch am einfachsten zu benutzen, da alle Funktionen als Befehle direkt eingegeben werden können.
Konfiguration und Einrichtung der virtuellen Maschinen
Die gesamte Konfiguration von Libvirt wird in XML-Dateien unterhalb von /etc/libvirt vorgenommen. Für kleinere schnelle Änderungen bietet sich daher das Editieren dieser Dateien direkt an. Für diese Aufgabe gibt es den Befehl virsh edit:
Virsh edit VM
Wobei VM der Name der virtuellen Maschine ist, die editiert werden soll.
Auch andere Einstellungen, wie die kompletten Netzwerkeinstellungen, storage- und Teile der Firewall-Konfigurationen können in XML-Dateien direkt in Libvirt hinterlegt werden. Der Vorteil an den XML-Konfigurationen ist, dass diese auch bei einer Migration von VMs mit auf das neue System übertragen werden können, bzw. auf dem neuen System eine gleiche Konfiguration einfacher garantiert werden kann. Ein weiterer Vorteil ist, dass nach dem Editieren der Konfiguration beim Beenden des Editors eine Überprüfung durchgeführt wird, eventuelle Tippfehler werden so direkt angezeigt.
Um neue virtuelle Maschinen zu erstellen, kann man entweder eine entsprechende XML-Datei unterhalb von /etc/libvirt/qemu ablegen, oder das Programm virt-install aus dem Paket virtinst bemühen. Der Vorteil des Programms virt-install ist, dass man mit Parametern und Optionen genau angeben kann, wie die virtuelle Maschine ausgestattet werden soll. Eine Befehlszeile kann beispielsweise so aussehen:
Virt-install –serial pty –hvm –virt-type kvm –w bridge=vmbr0,mac=52:00:00:12:34:35,model=virtio –k=de –os-type=Linux –disk vol=storage/vm.img,bus=virtio –c cdimage.iso –name vm –memory 2048
Mit dieser Befehlszeile wird eine virtuelle Maschine namens vm, 2 GB RAM, in dem Volume storage mit der Image-Datei vm.img erstellt. Die Netzwerkkarte wird der Bridge br0 hinzugefügt. In der Option –w wird daneben noch die MAC-Adresse und der Typ der Netzwerkkarte angegeben (hier Virtio). Auch in der Option –disk wird Virtio als Treiber festgelegt, um möglichst performant zu sein.
Wichtig: Die Option –serial erstellt uns das passende Interface, womit wir später auf die Console zugreifen können!
Die virtuelle Maschine wird von virt-install erstellt und bootet direkt von der angegebenen CD cdimage.iso. Hat man sich hier ein Linux-Installer erstellt, der entweder direkt über die serielle Console arbeitet, oder einen SSH-Server bootet, kann die Installation über diese Wege fortgesetzt werden. In der Manpage von virt-install wird erläutert, dass virt-install auch direkt einen Installer für die jeweilige Distribution direkt aus dem Internet nachladen kann (Option –l). Mit der Option –x lassen sich Boot-Parameter an den Kernel, der mit dem Installer geladen wird, mitgeben (so kann beispielsweise die Ausgabe an eine serielle Console gesendet werden). Wer mit virt-install arbeiten möchte, sollte vorher in die Manpage schauen. Die Optionen sind sehr vielfältig und bieten unterschiedliche Möglichkeiten eine VM einzurichten.
Zur Ergänzung der virt-Shell gibt es noch einige weitere Tools, welche in dem Debian-Paket libguestfs-tools enthalten sind (auch andere Distributionen haben dieses Paket dabei). So lässt sich beispielsweise mit virt-df die Festplattenbelegung von VMs auslesen, ohne direkt in die VM eingreifen zu müssen. Virt-Rescue startet ein kleines Rescue-System, in dem sich dann die virtuelle Maschine als Datenträger mounten lässt. Es lohnt sich, nach der Installation von libguestfs-tools zu schauen, welche Befehle mit virt- existieren.
Die Virt-Shell
Wie sich unschwer erraten lässt, ist die Virt-Shell eine Shell, in der libvirt verwaltet werden kann. Es werden nicht nur virtuelle Maschinen, sondern auch physische und virtuelle Netzwerke, Speicher-Pools, Volumen und Host-Systeme verwaltet. Durch die Vielzahl von Möglichkeiten kann durchaus das Gefühl entstehen, von der Virt-Shell erschlagen zu werden. Wer jedoch eine Zeit lang mit dieser Shell gearbeitet hat, wird schnell feststellen, welche Möglichkeiten sich durch diese Shell ergeben. Auch lassen sich einfache Aufgaben schneller erledigen, für die „Mausschupser“ eine deutlich längere Zeit brauchen würden.
Um in die Shell zu gelangen, ruft man auf der Linux-Console einfach den Befehl virsh ohne weitere Optionen auf. Beenden lässt sich diese Shell, in dem man quit eingibt.
Zur Verwaltung virtueller Maschinen stehen Befehle wie start, shutdown, resume, list, etc. bereit. Eine VM wird beispielsweise mit dem Befehl start vm_name gestartet, wobei VM_name der Name der virtuellen Maschine ist. Der Befehl list zeigt an, welche virtuellen Maschinen auf dem System vorhanden sind. Die Option –all zeigt auch diejenigen Maschinen an, die aktuell nicht laufen. Darüber hinaus lassen sich mit den befehlen pool-* und vol-* virtuelle Speicherpools und Volumes verwalten. Für ausführlichere Details zu den jeweiligen Befehlen sei an dieser Stelle auf die Manpage verwiesen. Direkte Hilfe gibt es durch den Befehl help. Ohne Parameter aufzurufen wird eine Übersicht aller zur Verfügung stehenden Befehle angezeigt. Help Befehl gibt nähere Informationen zu den jeweiligen Befehlen. So werden beispielsweise die wichtigsten Optionen und Parameter sowie optionale Parameter erklärt.
Wichtig zur Verwendung unter dem Aspekt der Barrierefreiheit ist der Befehl console:
Console VM_name
Startet eine serielle Console zu der VM VM_name. Mit STRG + 9 kann man diese Console auch wieder beenden.
Fazit
Da sich Libvirt vollständig über die Virt-Shell administrieren lässt, ist libvirt sehr gut für Blinde und Sehbehinderte Administratoren geeignet. Entsprechende SSH-Clients, die auch mit anderen Hilfstechnologien kompatibel sind, gibt es für alle Betriebssysteme – sogar für IOS. Oberflächen wie beispielsweise der Virt-Manager ermöglichen eine grafische Verwaltung von virtuellen Maschinen, ohne dabei Funktionen einzusparen bzw. andere Funktionen bereitzustellen, welche sich nicht auch über die Virt-Shell erledigen lassen.
Voraussetzung ist immer, dass innerhalb der jeweiligen virtuellen Maschinen eine serielle Console konfiguriert ist, damit alle Ausgaben über die Virsh-Console genutzt werden können.
Das Projekt OVirt ist noch recht jung, bietet aber bereits eine sehr große Vielzahl an Möglichkeiten. Da dieses Projekt auf RPM-Basierten Distributionen entwickelt wird, sind erhältliche Debian-Pakete in der Regel sehr veraltet. Die Weboberfläche ist leider mit aktuellen ScreenReadern derzeit nicht zugänglich. Daher wird OVirt hier nicht weiter untersucht – eine spätere Betrachtung lohnt sich aber sicherlich!