!!! QEmu 

QEmu ist ein PC-Emulator [http://qemu.org], der einen kompletten
Rechner in einem Fenster nachbildet. Seine
Ausführungsgeschwindigkeit ist für einen reinen Emulator
sensationell hoch. Man kann in QEmu ohne grosse Probleme z.B. eine
Windows-Installation ausführen und so das Problem umgehen, daß es
immer noch das eine oder andere Programm gibt, dass es noch nicht
in einer Linux-Version gibt.

Bei mir läuft Windows 98se geschätzt ca. 2-3 mal langsamer als
direkt auf dem Original-Rechner. Zusätzlich gibt es noch einen
Accellerator, der, falls das Wirts-System auch ein i386-System ist,
den Gast-Rechner nicht nur emuliert, sondern virtualisiert. Dadurch
soll die Geschwindigkeit dann so gut wie gleich der
Original-Geschwindigkeit sein.

Auf dieser Seite sammle ich Tips und Tricks zu QEmu.

!! Installation 

In Debian Sarge ist ein Paket __qemu__ enthalten. Dieses habe ich
einfach installiert. Dann kann man mit
{{{
  qemu-img create harddisk.img 500M
}}}
ein leeres Festplatten-Image erzeugen. Ich habe ein Image meiner
Windows98-CD in das Verzeichnis kopiert (Ja - ich habe eine
Original-CD und damit eine Linzenz! :-) ) und dann den Emulator mit
folgendem Befehl gestartet:
{{{
  qemu -cdrom win98cd.iso harddisk.img -boot d
}}}
Das System bootet von cd CD und man kann Windows installieren. Der
Rest geht wie bei jeder normalen Installation. Übrigens kann man
mit obigem Befehl auch z.B. ein Knoppix-Image booten.


!! Einrichten des Netzwerks für qemu 

Ich möchte gerne, daß die qemu-Instanzen direkt auf die
Netzwerkkarte zugreifen können. Hierzu richte ich eine Bridge ein.
Diese muss man sich wie einen Hub vorstellen, der das externe
Interface (eth0) und die Netzwerkkarten der qemu-Instanzen
miteinander verbindet.

Der Benutzer, unter dem qemu laufen soll, muss die Rechte haben, um
komplett auf die Netzwerkschnittstelle und damit auf den gesamten
Netzwerkverkehr zugreifen zu können, 
weil der von qemu emulierte Rechner ja genau das können soll. Dies
ist eine immanente Sicherheitslücke, über die man sich im klaren
sein sollte.

Will man dieses Problem vermeiden, so darf man keine Bridge
einrichten, sondern muss auf dem Hostsystem ein Routing mit einer
geeigneten Firewall aufsetzen.

__Tip:__ Da die Einrichtung des Netzwerkes bei allen
Virtualisierungslösungen ähnlich ist, lohnt ggf. ein Blick auf
UserModeLinux.

! Debian Sarge

''Das Netzwerk ist mit der in Debian Sarge verfügbaren Version Qemu
0.6.1 nicht stabil zu betreiben. Ich empfehle wie unten angegeben
eine eigene Kompilierung, die auch den Vorteil hat, daß man das
Kernel-Modul kqemu dazubekommt.''

Als erstes erlauben wir dem Benutzer (im Beispiel qemu) also ein
paar Dinge:
{{{
  export VISUAL=/usr/bin/joe
  visudo
}}}
jetzt in die sudoers-Datei anfügen:
{{{
  qemu  ALL=(root) NOPASSWD: /usr/sbin/brctl addif bridge tun?
  qemu  ALL=(root) NOPASSWD: /sbin/ifconfig tun? 0.0.0.0 up
}}}
Nach Verlassen des Editors (mit Ctrl-K X) ist eine Datei
__/etc/udev/rules.d/021_tun_for_qemu.rules__ neu anzulegen:
{{{
  # tun-Device zugaenglich fuer User, damit qemu Netzwerken kann
  KERNEL="tun",   MODE="0660", GROUP="qemu"
}}}
Nun darf der Benutzer qemu ein TUN-Device einrichten und dieses
dann in eine vorhandene Bridge konfigurieren. Damit dies auch
automatisch geschieht, schreiben wir folgendes in
die Datei __/etc/qemu-ifup__:
{{{
  #!/bin/sh
  sudo brctl addif bridge $1
  sudo ifconfig $1 0.0.0.0 up
}}}

! Debian etch

Folgende Pakete installieren:

  aptitude install uml-utilities bridge-utils

Dann in der Datei ''/etc/network/interfaces'' folgendes eintragen und dafür den Eintrag '''auto eth0''' entfernen:

  auto bridge
  iface bridge inet static
        address 192.168.201.144
        gateway 192.168.201.1
        netmask 255.255.255.0
        pre-up tunctl -t tap0 -u tbayen
        post-down tunctl -d tap0
        bridge_ports eth0 tap0

Nun sollte man in der Datei ''/etc/qemu-ifup'' die sudo-Zeile auskommentieren (Dies ist wohl nur als Beispiel gedacht und bei obiger Vorbereitung gar nicht nötig). Ich starte qemu jetzt mit folgenden Optionen:

  qemu ...  -net nic -net tap,ifname=tap0

Das sollte reichen! Die Gast-Instanz ist nun direkt mit der Netzwerkkarte verbunden.

! Windows 98 als Gast

Win98 benötigt (wie im übrigen auch MS-DOS) den sog. real-mode des Prozessors. Ausgerechnet damit haben alle ernsthaften Virtualisierungslösungen Probleme. QEMU ist die einzige Lösung, die nach meiner Erfahrung wirklich geht. Ggf. sollte man auf die kqemu-Beschleunigung verzichten (obwohl das seit neueren Versionen gehen soll). Ausserdem habe ich gelesen, daß das allerneueste [Xen] auch behauptet, real-mode virtualisieren zu können. Bei Qemu gefällt mir allerdings, daß man keine Kernelmodule benötigt. Die Geschwindigkeit ist im Vergleich zu den Rechnern, für die das System ursprünglich geschrieben wurde, immer noch mega-schnell... :-)

Zur Installation von Windows 98 sollte man laut http://qemu-forum.ipi.fi/viewtopic.php?f=9&t=3072 am besten acpi aussschalten bzw. den Bios-Treiber im Windows anders einstellen. Dennoch musste ich wohl bei jeder Installation immer mehrfach nachbessern nach Abstürzen und reboots etc. Aber nur Mut - am Ende ging es dann doch immer. -- ThomasBayen

! Novell Netware als Gast

Geht leider nicht mit Qemu. Allerdings konnte ich mit VirtualBox ein Novell 4.x und mit [Bochs|http://bochs.sourceforge.net] ein Novell 5.x installieren. Beides habe ich allerdings (noch) nicht zuende getestet, sondern nur die Installation probiert, bis der Lizenzkey verlangt wird. Tips hierzu auch auf der Seite NovellServerZugriff.


!! Compilieren von qemu 

Da ich bei der Installation des Netzwerks einige Schwierigkeiten
hatte, habe ich mir von der Webseite die aktuellen Sourcen geholt
und diese neu übersetzt. Danach funktionierte DHCP über die Bridge
auch bei einem Windows98. Ein weiterer Grund, dies zu tun, ist, daß
man dann das __kemu__-Kernelmodul dazu übersetzen kann. Man
benötigt vor dem übersetzen noch folgende Debian-Pakete (Version
der Kernel-Headers ggf. dem laufenden Kernel anpassen):
{{{
  aptitude install libsdl1.2-dev make
}}}
Dann die Sourcen herunterladen, auspacken und
{{{ 
  ./configure
  make
  make install
}}}
(Man kann auch auf ''make install'' verzichten und qemu direkt aus
dem Verzeichnis ''i386-softmmu/qemu'' starten, wenn man einen
Softlink auf das Verzeichnis mit der qemu-Firmware setzt.)

!! Der Turbo: Compilieren von KQEMU 

KQEmu ist ein Kernelmodul, das dafür sorgt, daß i368-Gäste auf
einem i386-Host nicht mehr emuliert, sondern virtualisiert werden.
Das bedeutet einen zusätzlichen, grossen Geschwindigkeitwachs.
Gefühlsmäßig würde ich sagen, daß die Geschwindigkeit mit kqemu
über der Hälfte des Hostsystems liegt und damit bei heutigen
Rechnern auf jeden Fall im angenehm benutzbaren Bereich. Aufgrund
der nicht-freien Lizenz muss man das Modul auf jeden Fall selbst
kompilieren, was aber kein Problem ist, wenn man soweit ist, daß
man QEmu schon kompiliert hat.

Die  beste Anleitung zur Installation ist auf der Homepage des
Projektes: http://fabrice.bellard.free.fr/qemu/kqemu-doc.html - im
Prinzip muss man folgendes zusätzlich zu obigem Ablauf machen:
{{{
  aptitude install kernel-headers-2.6.8-2-686
}}}
und das kqemu-Archiv innerhalb des qemu-Source-Verzeichnis
entpacken,bevor man ''configure'' aufruft. Dann lädt man das Modul
(wenn man udev benutzt) mit 
{{{
  modprobe kqemu major=0
}}}
und legt eine Datei ''/etc/udev/rules.d/qemu.rules'' an, in der
steht:
{{{
  KERNEL="kqemu",      MODE="0660", GROUP="kqemu"
}}}
und erzeugt mit __addgroup kqemu__ eine neue Gruppe. Alle
Benutzer, die mit __adduser username kqemu__ in diese Gruppe
aufgenommen wurden, können nun auf das Kernelmodul zugreifen.
''(natürlich kann man das auch unsichererweise für alle Benutzer
freigeben, wenn man den Mode ändert und die Group weglässt...)''.

!! Links 

* [http://wiki.ubuntuusers.de/QEMU] eine Installationsbeschreibung für Ubuntu
* [http://debaday.debian.net/2007/07/08/qemu-easy-and-fast-processor-emulator] QEmu als "Debian Package of the Day"

[{Tag Virtualisierung Windows}]