HowTo: Virtualisierungshost mit QEMU einrichten

QEMU-Logo [1]

“QEMU ist ein allgemeiner Open Source Maschinen-Emulator und Virtualisierer.

Benutzt man ihn als Emulator, kann QEMU Betriebssysteme und Programme (z.B. ARM) verarbeiten, die jedoch auf einer anderen Plattform laufen (z.B. PC). Dadurch, dass QEMU dynamische Übersetzungsmechanismen verwendet, erzielt es eine gute Performance.

Als Virtualisierer erzielt QEMU fast die ursprüngliche Geschwindigkeit, weil es den Gast-Code direkt auf der CPU des Hosts ausführt. QEMU unterstützt die Virtualisierung dadurch, dass es den XEN-Hypervisor oder das KVM kernel-module unuter Linux verwendet. Benutzt man KVM, kann QEMU x86, server and embedded PowerPC, 64-bit POWER, S390, 32-bit and 64-bit ARM, and MIPS guests virtualisieren.” [2].

Vorüberlegungen

  • Wenn man überlegt, RAID einzusetzen, sollte dies auf dem Host umgesetzt werden. RAID macht nur Sinn, wenn man es mit physischen Geräten verbindet. Diese Beschreibung geht (vorerst) davon aus, dass man sich gegen den Einsatz von RAID entscheidet.
  • Statt dessen wird der Einsatz von LVM beschrieben. Durch LVM kann eine Erweiterung der Festplattenkapazität durch Installation einer weiteren HD oder SSD ganz einfach durchgeführt werden.

Installation von Ubuntu

Getestet wurde diese Beschreibung mit Ubuntu 24.04 (noble). Die Vorgehensweise:

  • Vorübergehend benötigen Sie Bildschirm, Tastatur und Maus, die Sie später wieder entfernen können.
  • Setzen Sie, wenn nicht schon geschehen, ein Ubuntu-Minimalsystem auf. Verwenden Sie keine Serverversion, denn Sie brauchen eine grafische Oberfläche, um die Gastsysteme bequem verwalten zu können. Damit Sie später bei bedarf die HD-Kapazität bequem erweitern können, sollten Sie LVM verwenden [6].
  • Abspecken
  • Nachinstallation der benötigten Servertools
  • Installation von QEMU
  • Netzwerk-Brücke einrichten
  • Energieabschaltung deaktivieren
  • Abschluss

Installation des Betriebssystems

Installieren Sie die neueste LTS-Version von Ubuntu als Minimalsystem (ohne Anwenderprogramme). Dies wird ab Version 23.04 als Standardinstallation bezeichnet.

Verwenden Sie für den Host die ganze zur Verfügung stehende Festplattenkapazität (evt. LVM benutzen, um mehrere Festplatten zu einen “logical volume” verbinden zu können [5]). Die Gastsysteme werden auf Container-Dateien im Datenbereich des Hostsystems installiert.

Sie erreichen dies, indem Sie unter dem Button “Erweiterte Funktionen” “LVM” auswählen [6]:

Sollten Sie jedoch RAID verwenden wollen, sollten Sie LVM nicht benutzen. Geben Sie in diesem Fall Keine ein.

System auf den neuesten Stand bringen

Nach dem Neustart führen Sie bitte ein Systemupdate durch.

Bei Bedarf: Zusätzliche Festplatten mit LVM zur Speichererweiterung einbinden

Wird mehr Festplattenspeicher benötigt, kann mit LVM der Speicherbereich auf einfache Art durch weitere HDs vergrößert werden. Soll das geschehen, kann man die zusätzliche(n) Festplatte(n) jetzt einbinden.

Zusätzliche HD(s) montieren im Rechner (sie dürfen auf keinen Fall bereits als LVM-Partition gekennzeichnet sein und müssen notfalls neu partitioniert werden !).

Überprüfen Sie, ob sie vom Betriebssystem erkannt werden. Das könnte z.B. so aussehen:

Die neue Festplatte (/dev/sdb) wird erkannt aber aktuell noch nicht verwendet.

Die neue Festplatte kann zum Logischen Volume /dev/ubuntu-vg/ubuntu-lv wie folgt hinzugefügt werden:

> sudo pvcreate /dev/sdb
> sudo vgextend ubuntu-vg /dev/sdb
> sudo lvextend --resizefs -l +90%FREE /dev/ubuntu-vg/ubuntu-lv

Dies wirkt wie eine Speichererweiterung für das gesamte Dateisystem (/). Nach dieser Operation sieht das Ganze dann so aus:

Die Partition /dev/sdb3 und die HD /dev/sdb werden vom Betriebssystem aus wie eine einzige Festplatte angesprochen.

Prüfen Sie, ob die verwendete CPU die richtigen Virtualisierungstechniken unterstützt

Voraussetzung für die Installation von QEMU ist, dass im BIOS die Hardwarevirtualisierung aktiviert ist (nachschauen und ggf. ändern).

Da im Hintergund KVM arbeiten wird, müssen entweder vmx oder svm. Dies kann man mit folgendem Befehl herausfinden:

> cat /proc/cpuinfo | grep vmx

Die Ausgabe könnt folgendermaßen aussehen:

Durchsuchen Sie die Ausgabe und stellen Sie fest, ob unter der Rubrik “flags” vmx vorkommt, wenn nein, versuchen Sie es mit diesem Befehl:

> cat /proc/cpuinfo | grep svm

Ausgabe ähnlich der obigen. Unter den “flags” sollte svm auftauchen.

Wenn beide Befehle keine Ausgabe erzeugen, ist die Hardwarevirtualisierung im BIOS möglicherweise abgeschaltet oder die CPU des – wahrscheinlich betagten – Rechners unterstützt dieses Feature noch nicht.

TIPPS:

  • Auf den meisten BIOS-Varianten findet man die Einstellungen dazu unter “SECURITY”

Abspecken

Machen Sie das Ganze noch schlanker: Die folgenden Programme brauchen Sie auf einem Host sehr wahrscheinlich nicht:

  • Ubuntu Software Center (Snap-Store)
  • Internet-Programme, wie Firefox (dies ist eine Sicherheitsfrage)[3]

Öffnen Sie ein Terminal und geben Sie dort folgende Befehle ein:

> sudo snap remove snap-store ubuntu-kylin-software-center
> sudo snap remove firefox
> sudo apt autoremove

Nachrüsten

Diese Tools sind in der Regel unverzichtbar:

  • ein SSH-Server ist für Host und Gast sinnvoll. Intern (kein Portforwarding am Router) kann auf Passphrasegesicherte keyfiles verzichtet werden. Bei einem eingerichteten Portforwarding (direkter Zugriff direkt aus dem Internet) ist die Passphrase im keyfile IMHO Pflicht. In diesem Fall müssen noch zusätzliche Sicherheitseinstellungen in der sshd-config getroffen werden (siehe auch SSH-Server härten)
> sudo apt install openssh-server

Mehr zum Thema SSH finden Sie hier (SSH – Eine Übersicht).

  • Borgbackup für die Datensicherung der virtuellen HDs installieren

> sudo apt install fuse3 python3-pyfuse3 python3-llfuse
> sudo apt install borgbackup

Das folgende Tool ist optional; es ermöglicht aber einen bequemen Zugriff (ohne eigene Bildschirm/Tastatur/Maus), so dass das Gerät auch vom Client aus bequem gewartet werden kann; es stellt aber auch ein Sicherheitsrisiko dar, das in einer überschaubaren Umgebung IMHO vernachlässigt werden kann:

  • VNC-Server

Installation von QEMU

Die eigentliche Installation erfolgt mit [4]…

> sudo apt-get install qemu-system-x86 

Dann benötigen Sie noch das Kommandozeilentool virsh und die grafische Oberfläche virt-manager

> sudo apt-get install libvirt-daemon-system virtinst  
> sudo apt-get install virt-manager

Netzwerk-Brücke einrichten

Sie müssen auf dem Virtualisierungshost eine Netzwerkbrücke einrichten, damit die Gastsysteme wie eigenständige Rechner erkannt werden. Dazu ersetzen Sie die Dateien in /etc/netplan durch eine Datei mit folgendem Inhalt (oder Sie bearbeiten die dort bei der Installation erzeugte Datei entsprechend). Der dabei verwendete Dateiname ist grundsätzlich egal; ich verwende z.B: 00-festeip_und_bridge.yaml. Bei Bedarf können Sie diese Datei als Muster für Ihre eigene Konfiguration hier herunterladen.

network:
ethernets:
enp3s0:
dhcp4: false
dhcp6: false
version: 2
bridges:
br0:
interfaces: [enp3s0]
dhcp4: false
dhcp6: false
addresses: [192.168.12.9/24]
nameservers:
addresses: [192.168.12.1, 9.9.9.9]
routes:
- to: 0.0.0.0/0
via: 192.168.12.1

Passen Sie die fett geschriebenen Teile durch Ihre Vorgaben an. Den Namen der Ethernetkarte (hier enp3s0) ermitteln Sie bitte mit

> ip addr list

Testen Sie die Eingabe mit …

> sudo netplan try

Wird eine Fehlermeldung angezeigt, sollten Sie die Einstellung nicht übernehmen und die yaml-Datei entsprechend überarbeiten.

Energieabschaltung deaktivieren

Server dürfen nicht schlafen gehen; dasselbe gilt für Virtualisierungshosts.

Um die Energieabschaltung zu deaktivieren, müssen Sie /etc/gdm3/greeter.dconf-defaults bearbeiten; setzen Sie folgende Variable auf die unten angegebenen Werte

  • sleep-inactive-ac-timeout=0
  • sleep-inactive-ac-type=’nothing’
  • sleep-inactive-battery-timeout=0
  • sleep-inactive-battery-type=’nothing’

Bei den einzelnen Benutzern ändern Sie die Einstellungen – Energie wie folgt:

Abschluss

  • Ich halte es immer für eine gute Idee, einen zweiten Systemadmin anzulegen, eine Hintertür, die es Ihnen ermöglicht, ein vergessenes Passwort wiederherzustellen.
  • Ich finde es auch wichtig, passwortlose (durch keyfiles gesicherte) ssh-Zugänge zur Verfügung zu haben. (siehe HowTo: Passwortlosen Zugang für SSH einrichten)
  • Möglicherweise wollen Sie Ihre Installationsdateien (*.iso) in einen zentralen Verzeichnis hinterlegen.
  • Laden Sie nun (mit Hilfe von scp) die benötigten Installationsdateien auf den Host .

Tipps

Speicherort der virtuellen Festplatten

Diese befinden sich üblicherweise im Verzeichnis /var/lib/libvirt/images

Neu-Anlegen einer virtuellen Maschine

virt-manager ist ein grafisches Werkzeug zum Verwaltung der virtuellen Maschinen. So sieht sein Hauptfenster aus:

virt-manager mit 3 virtuellen Maschinen.

So müssen Sie vorgehen, wenn Sie eine neue virtuelle Maschine anlegen wollen:

  • Laden Sie die ISO-Datei mit dem Betriebssystem herunter.
  • Kopieren Sie diese auf den Host (z.B. mit scp)
  • Legen Sie mit dem virt-manager eine neue Maschine an.

Wählen Sie Datei – Neue virtuelle Maschine oder klicken Sie auf das nebenstehend abgebildete Symbol.

Sie werden jetzt nach der Installationsmethode gefragt. Wählen Sie nun “Lokales Installationsmedium”, wenn Sie von einer ISO-Datei installieren wollen:

Im nächsten Bild wählen Sie nun eine ISO-Datei aus.

Beantworten Sie nun die weiteren Fragen (die Voreinstellungen passen für die meisten Anwendungen ganz gut) . Virt-manager legt nun eine virtuelle Maschine an und beginnt den Installationsprozess mit der angegebenen ISO-Datei.

Speicherplatz sparen

Virt-manager legt die virtuellen Speichermedien im Dateisystem des Hosts mit der von Ihnen angegebenen Größe an. In der Regel wird dabei allerdings nur ein Teil des Speicherplatzes verwendet. Hier helfen Sparse-Dateien. Diese belegen auf dem Host nur den wirklich benutzten Platz.

  • Fahren Sie nach dem Installationsprozess die neue virtuelle Maschine herunter.
  • Benennen Sie die entsprechenden Datei in /var/lib/libvirt/images um.
  • Erzeugen Sie aus der umbenannten Datei mit virt-sparsify eine Sparse-Datei mit dem ursprünglichen Namen.
> sudo virt-sparsify <umbenannte Datei> <neue Datei mit altem Namen>
  • Starten Sie die virtuelle Maschine neu und testen Sie deren Funktionen.
  • Ist alles OK, können Sie die alte (umbenannte) Datei löschen.

Verwendung von Templates

Sie können auch Templates erstellen; dann können Sie den Installationsprozess verkürzen. Achten sie dann nur darauf, dass beim Löschen der virtuellen Maschine die dazu gehörende *.qcow2-Datei nicht mitgelöscht wird und bewahren Sie diese auf.

Zum Wiederverwenden kopieren Sie die Datei nach /var/lib/libvirt/images und wählen Sie als Installationsmethode “Vorhandenes Festplattenabbild importieren” aus.

Als erstes sollten Sie sich auf den neuen Maschine via ssh einloggen. Ändern Sie den Hostnamen mit hostnamectl und geben Sie mit passwd dem Administrator ein anderes Passwort. Nun booten Sie das System neu.

Einzelnachweise

[1]Bildnachweis: Von Benoît Canet, CC BY 3.0, https://commons.wikimedia.org/w/index.php?curid=32230901
[2] zitiert nach https://wiki.qemu.org/Main_Page; abgerufen am 5.06.2024; übersetzt
[3]Der Virtualisierungshost ist die zentrale Stelle für diverse Server-Produkte und somit besonders zu schützen. Internetbrowser müssen heutzutage Javascript zulasse, weil prinzipiell alle modernen Webseiten Javascript nutzen. Dies ist jedoch eine Sicherheitslücke, denn Javascripte werden von der Website heruntergeladen und mit Programmrechten auf dem Rechner ausgeführt ! Da kann auch Übles dabei sein.
[4]Mehr zur QEMU-Installation finden Sie unter https://wiki.ubuntuusers.de/QEMU/
[5]LVM ermöglicht die einfache Erweiterung der Festplattenkapazität dadurch, dass man Festplatten zu einer Gruppe zusammenfassen und wie ein einzelnes Gerät ansprechen kann.
[6]Wenn Sie abweichend von dieser Beschreibung eine Software-RAID installieren wollen, sollte kein LVM eingesetzt werden.,

Schreibe einen Kommentar