Qemu

Aus Linupedia.org
Wechseln zu: Navigation, Suche

Virtuelle Maschinen und Emulatoren

Höhe=24px
Achtung dieser Artikel ist noch in Arbeit und dient vorläufig nur als Vorlage. Dieser Beitrag zu Linux oder der Abschnitt ist in Bearbeitung. Weitere Informationen findest du hier. Der Ersteller arbeitet an dem Beitrag oder Abschnitt und entsorgt den Wartungsbaustein spätestens 3 Tage nach der letzten Bearbeitung. Änderungen außer Rechtschreibkorrekturen ohne Absprache mit dem Urspungsautor sind möglichst zu vermeiden, solange dieser Baustein noch innerhalb der genannten Frist aktiviert ist.

Qemu - open source processor emulator

Installation und Bedienung von Qemu (mit Kernelmodul kqemu).

Allgemeines

Qemu ist ein von Fabrice Bellard entwickelter Emulator, mit dem es möglich ist andere Betriebssysteme in einer Virtuellen Umgebung zu installieren.
Dies ist z.B. interessant für Software Entwickler um Programme in einer abgeschotteten Umgebung gefahrlos (für das eigene Produktivsystem) zu testen.
Im Gegensatz zu den kommerziellen Emulatoren wie z.B. VMWare oder VirtualPC steht Qemu jedoch unter der GPL (GNU General Public License).
Lediglich KQemu - das Kernelmodul zur Hardwarebeschleunigung - wird nicht unter der GPL veröffentlicht.
Laut Angaben des Entwicklers zum Schutz gegen die kommerziellen Anbieter von Emulatoren.

Installation

Einige Distributionen liefern bereits fertige Pakete von Qemu mit.
Allerdings ist - aufgrund der schnell fortschreitenden Entwicklung von Qemu - zu empfehlen, wenigstens die aktuelle stabile Version von Qemu oder einen aktuellen CVS-Snapshot zu verwenden.

Ein großes Problem ist, dass Qemu zur Zeit noch einen 3.x C-Compiler zum übersetzen benötigt, die meisten modernen Distributionen aber mittlerweile den einen gcc >= 4.x einsetzen.
Für Benutzner von Debianbasierten Distributionen lässt sich dieses Problem recht einfach lösen, da mehrere verschiedene gcc-Versionen parallel installiert werden können.
Ein einfaches

apt-get install gcc-3.4

reicht also aus.

Für Fedora Core Benutzer gibt es entsprechende compat-* Pakete um Programme mit einer anderen Version des C-Compilers zu übersetzen.

Schwierig gestaltet sich die Installation auf SuSE Linux Systemen.
Da sich mit rpm keine unterschiedlichen Versionen des gcc installieren lassen und es keine compat-Pakete wie bei Fedora Core gibt, bleibt nichts anderes übrig, als den benötigten gcc selbst aus den Sourcen zu kompilieren.

gcc

Dazu läd man sich als erstes das Paket mit dem gcc-Quellcode herunter.

cd /usr/local/src/
wget -c ftp://ftp.gwdg.de/pub/misc/gcc/releases/gcc-3.4.6/gcc-3.4.6.tar.bz2

und entpackt dieses anschließend

tar -xjf gcc-3.4.6.tar.bz2

Dann wechselt man in das entpackte gcc-Verzeichnis und ruft configure auf:
Wichtig!
An dieser Stelle unbedingt die Optionen prefix und program-suffix beachten, da ansonsten der bereits installierte C-Compiler überschrieben wird, was wiederum fatale Folgen für das System hat!

cd ./gcc-3.4.6
./configure --prefix=/opt/gcc-3.4 --program-suffix=-3.4

Anschließend - nach dem fehlerfreien Durchlauf von configure - den Kompiliervorgang starten:

make bootstrap

Wenn das Übersetzen erfolgreich war den neuen alten gcc installieren:

make install

Danach die Installation abschließen (aufräumen):

make clean
make distclean


qemu

Um Qemu installieren zu können, benötigt man zusätzlich zu dem gcc-3.x noch die SDL-devel Pakete:
Bei Debian heißt das entsprechende Pakez z.B. libsdl-dev.

Wenn alle Vorausetzungen erfüllt sind kann Qemu installiert werden:
Dazu läd man sich als erstes den Quellcode herunter.
Für die aktuelle stabile Version: http://fabrice.bellard.free.fr/qemu/download.html

cd /usr/locals/src/
wget -c <Hier den Link zum aktuellen tar.gz-Archiv einfügen>
tar -xzf <Archiv>
cd ./qemu

Für die Installation aus dem CVS-Repositiory:

cd /usr/locals/src/
cvs -z3 -d:pserver:anonymous@cvs.savannah.nongnu.org:/sources/qemu co qemu
cd ./qemu

Anschließend kann Qemu installiert werden:
Wichtig dabei ist die Option cc, die auf den entsprechenden Kompiler zeigen muss (die Pfadangabe ist nur Notwendig, wenn der Kompiler zuvor manuell installiert wurde).
Die Option enable-alsa aktiviert die Soundunterstützung für die Virtuelle Maschine.

./configure --prefix=/usr/local --cc=/opt/gcc-3.4/gcc-3.4 --enable-alsa

Alternativ kann eine andere gcc-Version auch mit dem Setzen der entsprechenden Umgebungsvariable (export CC) verwendet werden:

export CC=/opt/gcc-3.4/gcc-3.4; ./configure --prefix=/usr/local --enable-alsa

Danach (wenn configure keinen Fehler meldet) kann Qemu installiert werden.
Dabei ist die Verwendung von checkinstall zu empfehlen um ein Distributionsspezifisches Paket zu erzeugen.

make
checkinstall

Unter Debian wird dass so erzeugte *.deb automatisch installiert, unter SuSE Linux muss das *.rpm noch manuell installiert werden:

rpm -Uhv /usr/src/packages/RPMS/`arch`/qemu*.rpm

Danach noch die Installation abschließen (aufräumen):

make clean
make distclean


kqemu

Dazu das Source-Paket für das Kernelmodul KQemu herunterladen und entpacken: http://fabrice.bellard.free.fr/qemu/download.html

wget -c <Hier den Link zum aktuellen tar.gz-Archiv einfügen>
tar -xzf <Archiv>

und installieren:
Wichtig!
Dabei ist unbedingt darauf zu achten, dass die gleiche gcc-Version verwendet, wird, mit der auch der aktuelle Kernel übersetzt wurde.
(Falls zuvor die CC-Umgebungsvariable verändert wurde, sollte diese nun wieder so gesetzt werden, dass sie wieder auf den aktuellen C-Kompiler zeigt).

./configure
make
make install

Und auch wieder die Installation abschließen (aufräumen):

make clean
make distclean


Bedienung

Kernelmodul kqemu laden

Um Qemu schließlich zu verwenden muss zuerst das Kernelmodul KQemu geladen werden:

modprobe kqemu major=0

Da modprobe als root ausgeführt werden muss, empfiehlt es sich an dieser Stelle sudo zu verwenden:
Dazu muss mit visudo die /etc/sudoers um den Eintrag

Cmnd_Alias      KQEMU = /sbin/modprobe kqemu major=0, \
                        /sbin/rmmod kqemu, \
                        /bin/chmod a+rw /dev/kqemu
username	rechnername = NOPASSWD: KQEMU

erweitert werden.
Anschließend kann das Modul mit

sudo /sbin/modprobe kqemu major=0
sudo /sbin/rmmod kqemu

als User geladen bzw. entladen werden.
Mit dem Befehl

sudo /bin/chmod a+rw /dev/kqemu

wird sichergestellt, dass alle User Lese-und Schreibzugriff auf das Gerät haben.

Alternativ können die Rechte auch über eine entsprechende udev-Regel gesetzt werden.
Der entprechende Eintrag in der /etc/udev/permissions.rules sieht dann wie folgt aus:

KERNEL=="kqemu",		MODE="0660",	GROUP="qemu"

Dazu muss natürlich sichergestellt sein, dass es eine Gruppe qemu gibt und der jeweilige User die Gruppe angehört.
Andernfalls eine Gruppe anlegen und den User dieser zuordnen:

addgroup --system qemu
adduser username qemu


Image für das Gastsystem anlegen


Qemu starten

Wenn das Kernelmodul geladen wurde (und der User Zugriff darauf hat), kann Qemu gestartet werden:
Achtung!
Der Aufruf von Qemu auf einem 64bit System lautet qemu-system-x86_64.
Wer also eine x86_64 Architektur verwendet sollte im nachfolgen alle Startbefehle ersetzen (qemu <-> qemu-system-x86_64).

qemu -kernel-kqemu -hda /pfad/zum/image.img -sound-hw all -k de -localtime -m 256

-kernel-kqemu - aktiviert die Unterstützung für kqemu
-k de - gibt das zu verwendende Tastaturlayout an - In diesem Fall Deutsch
-localtime - Setzt die Systemzeit des Gastes auf die des Hostsystems
-m 256 - weist der Virtuelle Maschine den zu verwendenden Arbeitsspeicher zu

Tun/Tap Netzwerkdevice

Pakete:

bridge-utils
iproute
sudo /bin/chmod a+rwx /dev/net/tun

/etc/udev/udev.rules
/etc/udev/devfs.rules

KERNEL=="tun",                  NAME="net/%k", GROUP="qemu", MODE="0660"
#!/bin/sh

export BRCTL=`which brctl`
export BR0=br0
export PT0=eth1

echo "Bringing up bridging...";
ip link set $PT0 down;
ip link set $PT0 up;
ip link set $PT0 promisc on;
$BRCTL addbr $BR0;
$BRCTL stp $BR0 off;
$BRCTL setbridgeprio $BR0 0;
$BRCTL setfd $BR0 1;
$BRCTL sethello $BR0 1;
$BRCTL addif $BR0 $PT0;
$BRCTL setportprio $BR0 $PT0 0;
sudo /sbin/ifup br0
#!/bin/sh 
sudo /sbin/ip link set $1 up 
sudo /usr/sbin/brctl addif br0 $1



Quellen und weiterführende Links


Zurück zu Virtuelle Maschinen und Emulatoren