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 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...).

Add new attachment

Only authorized users are allowed to upload new attachments.
« This page (revision-14) was last changed on 16-Oct-2008 13:55 by ThomasBayen