Archiv nach Schlagworten: kqemu

QEMU / KQEMU – Virtualisierung unter ipfire

Ein wesentliches Ziel der IPFire-Installation war es von Anfang an, Webdienste zur Verfügung zu stellen ohne die Gefahr einzugehen, den IPFire Rechner allzusehr dem Internet “auszusetzen”. Die theoretische Möglichkeit, den bei IPFire “eingebauten” Webserver zweckzuentfremden kam also nie in Frage.

IPFire bietet die Möglichkeit, mittel qemu und kqemu weitere Betriebssysteme virtuell zu betreiben. Diese beiden Pakete haben wir ja mittels “pakfire” bereits im ersten Schritt installiert. (Mehr Infos zu qemu gibt es im IPFire Wiki)

Wer Virtualisierungslösungen wie Virtualbox oder VMware bereits kennt, wird zunächst etwas von der Sprödigkeit von qemu erschrocken sein. Allerdings läuft qemu bei mir sehr stabil und auch hinreichend performant und bietet keinen Grund zu Beanstandungen.

Folgende Befehle sind als Vorbereitung notwendig, um einen Gast zu virtualisieren:

# Kernel Modul laden
modprobe kqemu
# Festplattendisk für qemu erstellen
qemu-img create /mnt/raid/qemu/portal.img 30GB

Und so startet man den virtuellen Gast, um z.B. die OS-Installation durchzuführen. Das notwendige CD-Image habe ich bereits zuvor heruntergeladen:

qemu -vnc :1 -hda /mnt/raid/qemu/portal.img -m 228 -net nic -net user -boot d -redir tcp:222::22 -redir tcp:80::80 -no-acpi -k de -cdrom /mnt/raid/qemu/debian-505-i386-CD-1.iso

Den Zugriff auf die lokale Konsole bekommt man über VNC. Ist das Betriebssystem komplett installiert, sollte dieses heruntergefahren werden. Anschliessend wird mittels Strg+C der qemu Prozess beendet.

Der nächste Aufruf der Virtualisierung bedient sich der wesentlich performanteren Variante “kqemu”. Zudem wird vom Laufwerk “C” gebootet, da CD-ROM Laufwerk benötigen wir nicht mehr:

qemu-kqemu -vnc :1 -hda /mnt/raid/qemu/portal.img -m 228 -net nic -net user -boot c -daemonize -redir tcp:222::22 -redir tcp:80::80 -k de -kernel-kqemu

Die VM läuft nun beträchtlich schneller – allerdings hat kqemu (zumindest) einen Nachteil: Den Preis der Geschwindigkeit erkauft man sich durch einen massiven Speicher-Mehrverbrauch, denn die Größe von /dev/shm muss mindestens die Größe des virtuellen Speicherbedarfs besitzen (zu ändern in /etc/fstab und anschliessender reboot).

Die beiden “-redir” Parameter legen fest, welcher VM-Port auf welchen physikalischen Port umgeleitet werden sollen. Im konkreten Fall wird der virtualisierte SSH-Server vom Port 22 auf den Port 222 umgeleitet. So wäre per ssh Client auf dem Port 222 der virtuelle Rechner zu erreichen. Der Webserver selbst bleibt sowohl virtuell als auch physikalisch abgebilder auf Port 80. Wird nun auf der IPFire Firewall der externe Zugriff auf Port 80 erlaubt, steht dem Internet-Server nichts mehr im Weg!

Der Einfachheit halber habe ich (zusammenfassend einige Startoptionen, das Laden des Kernel-Moduls und den Start der VM in die Datei /etc/sysconfig/rc.local gestellt:

# ondemand-Governor auch hochtakten lassen
# wenn die Prozesse mit niedriger Prio laufen
echo 0 >/sys/devices/system/cpu/cpu0/cpufreq/ondemand/ignore_nice_load

# Bei einer Auslastung von 30 Prozent bereits hoeherschalten
echo 30 >/sys/devices/system/cpu/cpu0/cpufreq/ondemand/up_threshold

# Das Modul fuer qemu laden
modprobe kqemu

# Meine virtuelle Maschine starten
qemu-kqemu -vnc :1 -hda /mnt/raid/qemu/portal.img
 -m 228 -net nic -net user -boot c -daemonize
 -redir tcp:222::22 -redir tcp:80::80
 -no-acpi -k de -kernel-kqemu