# Qemu - Anfängerfragen

## musv

Mahlzeit, 

gestern hab ich mal angefangen, mit Qemu rumzuspielen. Die Ziele sind:

Compilierplattform für ARM

Plattform für Windows, damit ich meine Steuererklärung machen kann

VMWare vom Rechner langsam entfernen.

Also hab ich gestern erst mal Windows 7 im Qemu installiert. Als Frontend hab ich Aqemu. Die bisherigen Probleme:

Aqemu meckert, wenn ich der VM mehr als 128mb Ram zuweisen möchte. Geb ich den generierten Startbefehl in der Kommandozeile ein, krieg ich auch meine gewünschten 12 GB in die VM rein. (Rechner hat 24GB Ram). Wie krieg ich Aqemu dazu, mehr als 128 mb Ram zu akzeptieren?

Qemu hat eine Menüleiste, die ich auch im Vollbild nicht weg krieg. Dadurch fehlt dann bei Fullscreen-Auflösung unten ein Stück der VM. Bei Ubuntu-Screenshots ist diese Menüleiste nicht vorhanden. Hab aber auch keine Option gefunden, wie ich das Teil wegkrieg. Hat da jemand 'ne Idee?

Windows startet und ist schnell, aber nach kurzer Zeit hängt die Maus. Teilweise kann ich dann eine Minute warten, bis die Maus sich überhaupt wieder bewegt. Am Hostrechner kann's nicht liegen. Das ist ein Xeon x5650 mit AVX. Entsprechend läuft Qemu auch mit KVM.

Bei VMWare konnte ich ein Verzeichnis auf dem Host angeben, was dann als Netzlaufwerk in der VMWare erschien. Bei Qemu muss ich dazu vermutlich erst einen Samba-Server aufsetzen. Geht das irgendwie einfacher?

----------

## LinuxTom

 *musv wrote:*   

> [*]Bei VMWare konnte ich ein Verzeichnis auf dem Host angeben, was dann als Netzlaufwerk in der VMWare erschien. Bei Qemu muss ich dazu vermutlich erst einen Samba-Server aufsetzen. Geht das irgendwie einfacher?[/list]

 

Zumindest das Problem konnte ich für mich schon lösen. Nur leider macht meine qemu-Version, libvirt und virt-Manager, den ich verwende, noch nicht mit, weil ihre Version alle noch unter 1 sind. Schau mal unter: http://www.linux-kvm.org/page/9p_virtio

Ich habe derzeit das Problem, dass ich keinen Athlon im Gast haben kann. Mein Host ist ein Intel Core-i7. Da kommt immer die Fehlermeldung:

```
libvirtError: Interner Fehler guest CPU is not compatible with host CPU
```

Hast Du schon bei Dir den ARM eingerichtet?

----------

## musv

Danke für den Tipp mit virtio. Ob ich das auch im Windows nutzen kann, bezweifel ich aber mal. Win7 kann weder xfs noch btrfs lesen. 

ARM hatte ich noch nicht eingerichtet, wollte erst mal das Win7 richtig zum Laufen kriegen. 

Bei ARM seh ich aber auch noch ein paar offene Fragen: 

Ziel ist, das System meines NAS in Qemu zu compilieren. Dazu müsste ich am besten das Root-Verzeichnis des NAS per NFS freigeben und als Festplattenpartition in der Qemu-Umgebung einbinden. Weiß nicht, ob das geht.

----------

## musv

Bin einen Schritt weiter:

Sound:

Funktioniert mit folgenden Parametern:

```
export QEMU_AUDIO_DRV=alsa

/usr/bin/qemu-kvm

- soundhw hda

...
```

Maus:

Egal, was ich an Parametern verwendet hab, die Mouse stockt. Auch "-usbdevice tablet" bringt nichts. Ich krieg damit nicht mal das Mausrad zum Laufen. Mit diesem Tipp hab ich's zumindest halbwegs geschafft. 

Meine Maus:

```
Bus 003 Device 002: ID 046d:c52b Logitech, Inc. Unifying Receiver
```

Entsprechend das Device:

```
crw-rw-r-- 1 root root 189, 257 27. Sep 20:47 /dev/bus/usb/003/002
```

Um mit qemu zugreifen zu können:

```
chmod 777 /dev/bus/usb/003/002
```

Und dann die Startconfig:

```
qemu-kvm

-usb

-usbdevice host:046d:c52b

-usbdevice mouse
```

Die Maus funktioniert dann wunderbar in Qemu. Es hat nur 2 "kleine" Nachteile:

Die Maus kann dann nicht mehr im X außerhalb von Qemu benutzt werden.

Ich müsste das Device immer auf 777 setzen, was ich nicht unbedingt will.

Gibt's dafür irgendwie 'ne bessere Lösung?

----------

## yuhu

 *musv wrote:*   

> Gibt's dafür irgendwie 'ne bessere Lösung?

 

libvirt in Kombination mit virt-manager bzw. virt-viewer macht das was es soll.

Gibt es einen Grund warum du das nicht verwendest?

Für das Mausrad habe ich in der VM =x11-drivers/xf86-input-evdev-2.8.0 installiert.

----------

## musv

Ähm, x11-drivers/xf86-input-evdev nützt mir herzlich wenig. Mein Gastsystem ist Windows 7. 

libvirt werd ich mir noch ansehen. Muss erst mal rausfinden, welche Komponente bei Qemu für was eigentlich zuständig ist. 

Bin aber wieder einen Schritt weiter. SDL ist scheinbar Mist. Hab jetzt spice-gtk installiert. Die Anleitung dazu. Mein neues Startkommando:

```
/usr/bin/qemu-kvm \

-smp 8 \

-cpu Nehalem \

-soundhw hda \

-k de \

-vga qxl \

-m 12828 \

-full-screen \

-no-fd-bootchk \

-hda /home/sm/Emulation/Qemu/Win7_x64 \

-boot once=c,menu=on \

-net nic,vlan=1 \

-net user,vlan=1,hostname=Win7_x64 \

-usb \

-usbdevice mouse \

-spice port=5900,addr=127.0.0.1,disable-ticketing
```

Damit funktioniert die Maus wieder wie sie soll. Auch das Vollbild läuft damit klasse. Hab dadurch auch die störende Qemu-Menüleiste wegbekommen, die scheinbar nur ich hatte. Zumindest findet man die auf keinem Screenshot.

Neues Problem:

Der Sound klingt  wie ein Echo einer Tropfsteinhöhle. Bei Youtube-Videos denkt man, die Leute hätten alle Kehlkopfkrebs.

```
snd_channel_put: sound channel freed

red_channel_client_disconnect: 0x7ffc7e703610 (channel 0x7ffc7e924a30 type 6 id 0)

snd_channel_put: sound channel freed

red_channel_client_disconnect: 0x7ff910265080 (channel 0x7ff91023f3d0 type 2 id 0)
```

Nächstes Update:

Hab jetzt die USB-Maus, die QEMU_AUDIO_DRV-Variable und den Fullscreen-Parameter rausgenommen. Der Ton geht jetzt ordentlich. 

Bei Videos meckert Win7 noch, dass die Graka keine 64mb Ram hätte.

----------

## LinuxTom

Mal meine Frage an Euch, die Ihr mir vielleicht mit ein paar Tipps auf die Sprünge helfen könnt: Ich schaffe es nicht auf meinen QEMU/KVM-Host, in dem ein Intel-Core-i7 steckt einen Athlon als Gast einzustellen. Wenn ich es mache, kommt immer der Fehler:

```
guest CPU is not compatible with host CPU
```

Hat von Euch jemand eine Idee, wie ich da ran gehen kann?

Meine Versionen:

app-emulation/qemu-kvm-0.15.1-r1

app-emulation/libvirt-0.9.8

Ich kann noch kein Update einspielen, weil auf dem Server auch noch mein VDR läuft. Erst wenn ich den erfolgreich in eine KVM-VM migriert habe, kann ich die o.g. Versionen aktualisieren.

----------

## musv

 *yuhu wrote:*   

> libvirt in Kombination mit virt-manager bzw. virt-viewer macht das was es soll.

 

Muss noch mal darauf zurückkommen. 

Ich hatte jetzt virt-manager installiert, krieg das Teil aber nicht zum Laufen. Soweit ich das festgestellt hab, läuft das Ding als Daemon auf dem Host, und ich brauch die Treiber im Windows-Gast, richtig?

Was bringt mir libvirt konkret? Ich mein, Netzwerk und Maus hab ich bisher schon hinbekommen. 

 *LinuxTom wrote:*   

> Ich schaffe es nicht auf meinen QEMU/KVM-Host, in dem ein Intel-Core-i7 steckt einen Athlon als Gast einzustellen.

 

Mit welchen Targets hast du qemu-kvm compiliert? Steht in der make.conf bei QEMU_USER_TARGETS und QEMU_SOFTMMU_TARGETS i386 mit dabei?

Ansonsten hab ich zur Anfangskonfiguration Aqemu genutzt (siehe oben). Damit kann man sich die nötigen Optionen zusammenbasteln lassen. Aqemu hat bei mir nur den Bug, dass es halt maximal 128mb Ram dem Gastsystem zur Verfügung stellen will.

----------

## musv

Ok, hab mir das mal reingezogen:

http://wiki.libvirt.org/page/FAQ

Also wenn ich das richtig versteh, macht libvirt folgendes:

Verwaltung aller möglichen VM-Systeme (VMWare, Qemu, Xen, ...)

Start, Stop, Pause usw. der VMs

Konfiguration der Netzwerke (VLan)

Konfiguration der Storage-Devices (Festplatten)

Hmm, bei meinen beiden o.g. Anwendungszwecken (ARM-Umgebung, Win7 für die Steuererklärung) brauch ich das eigentlich noch nicht. Mal sehen, ob ich das trotzdem noch mal versuch zum Laufen zu kriegen.

----------

## LinuxTom

Und dadurch, dass ich nur qemu und kvm nutze, schaue ich mir mal aqemu an. Das kenne ich noch nicht.

Edit:

aqemu schaltet auf einen pentium-m. Es sollte aber mind. ein k8 werden. Also: Die Suche geht weiter.  :Sad: 

----------

## LinuxTom

 *musv wrote:*   

> Also wenn ich das richtig versteh, macht libvirt folgendes:

 

Und das alles per ssh und GUI. Das ist das, was ich so stark begrüße.

----------

## musv

Ok, Stand ist momentan:

Ich hab's tatsächlich hinbekommen:

Die WinXP-flat.vmdk in ein qcow2-Image zu konvertieren und über Libvirt-Qemu booten zu können. Anfangs bekam ich noch einen Bluescreen, aber dank dieses Beitrags und der M$-Prosa hat's geklappt. 

Hab dann die virtio Guest Driver installiert. Der virtio-Netzwerktreiber wollte nicht, obwohl ich eigentlich SP3 installiert haben sollte. Hab dann den RTL8139 erst mal genommen. Der geht wunderbar und reicht mir auch erst mal. 

Jetzt fehlen noch die Treiber für Qxl und das Spice-Zeug (Spice-space.org)

An der Stelle bin ich auf ein neues Problem gestoßen: Virtuelles Netzwerk:

Im Qemu-KVM (ohne Libvirt) hatte ich ohne Angabe eines Netzwerkes Zugriff auf den Samba-Server des Hostrechners. Die IP des Sambaservers war 10.0.2.2. In Libvirt geht das scheinbar nicht mehr so einfach. Ohne Einbindung einer Netzwerkkarte hab ich überhaupt keinen Netzzugang. Und leg ich eine an, krieg ich nur gebridgten Zugang und kann dummerweise die IP des Hostrechners nicht mehr erreichen. 

Hab dann diese Anleitung gefunden. 

Fragen dazu:

Muss ich wirklich eine Bridge anlegen? Oder gibt's auch einen beschränkten Defaultzugang wie bei Qemu (ohne libvirt)?

Wenn ja, wie mach ich das? Welches virtuellen Devices sind wofür da? Mein System läuft auf systemd. Zur Konfiguration nutz ich ip.

Update:

Scheinbar sollte libvirt beim Start das Bridgedevice virbr0 erzeugen, was es bei mir offensichtlich nicht macht.

Update2:

Die Fehlermeldungen beim libvirtd-Start:

```
Okt 08 21:46:02 hexe libvirtd[17465]: libvirt version: 1.1.2

Okt 08 21:46:02 hexe libvirtd[17465]: Fehler beim Abrufen der udev Einheit für syspath '/sys/devices/virtual/dmi/id' oder '/sys/class/dmi/id'

Okt 08 21:46:02 hexe libvirtd[17465]: Could not find 'ip6tables' executable

Okt 08 21:46:02 hexe libvirtd[17465]: Interner Fehler: Untergeordneter Prozess (/bin/sh -c 'EBT="/sbin/ebtables"

                                      cmd='\''$EBT -t nat -L'\''

                                      eval res=\$\("${cmd} 2>&1"\)

                                      if [ $? -ne 0 ]; then  echo "Failure to execute command '\''${cmd}'\'' : '\''${res}'\''.";  exit 1;fi

                                      ') unerwartet Ende Status 1

Okt 08 21:46:02 hexe libvirtd[17465]: Testen des ebtables Befehls schlug fehl: Failure to execute command '$EBT -t nat -L' : 'modprobe: FATAL: Module ebtables not found.

                                      The kernel doesn't support the ebtables 'nat' table.'.

Okt 08 21:46:02 hexe kernel: ip_tables: (C) 2000-2006 Netfilter Core Team

Okt 08 21:50:04 hexe libvirtd[17465]: Diese Funktion wird vom Verbindungstreiber nicht unterstützt: virConnectNumOfNetworks

Okt 08 21:51:23 hexe libvirtd[17465]: Diese Funktion wird vom Verbindungstreiber nicht unterstützt: virNetworkDefineXML
```

sys/devices/virtual/dmi/ bzw. /sys/class/dmi/id sollte wohl nur bei Laptops vorhanden sein, obwohl mein Netbook diesen Pfad ebenfalls nicht kennt.

Ok, hab bei ebtables gerade entdeckt, dass das ein Service ist. Werd erst mal das Startscript auf systemd umschreiben  :Sad: 

Update3:

Hab jetzt sämtliche Kernelmodule gebaut, die was mit ebtables zu tun haben. Das muss man erst mal rausfinden. Libvirtd startet jetzt:

```
Okt 08 23:41:12 hexe systemd[1]: Starting Virtualization daemon...

Okt 08 23:41:12 hexe systemd[1]: Started Virtualization daemon.

Okt 08 23:41:13 hexe libvirtd[2454]: libvirt version: 1.1.2

Okt 08 23:41:13 hexe libvirtd[2454]: Fehler beim Abrufen der udev Einheit für syspath '/sys/devices/virtual/dmi/id' oder '/sys/class/dmi/id'

Okt 08 23:41:13 hexe libvirtd[2454]: Could not find 'ip6tables' executable

Okt 08 23:41:13 hexe kernel: Ebtables v2.0 registered

Okt 08 23:41:14 hexe kernel: ip_tables: (C) 2000-2006 Netfilter Core Team

Okt 08 23:41:24 hexe libvirtd[2454]: Diese Funktion wird vom Verbindungstreiber nicht unterstützt: virConnectNumOfNetworks
```

Ruf ich den virt-manager auf, krieg ich:

```
Okt 08 23:42:33 hexe libvirtd[2454]: Diese Funktion wird vom Verbindungstreiber nicht unterstützt: virNetworkDefineXML

Okt 08 23:44:08 hexe libvirtd[2454]: Diese Funktion wird vom Verbindungstreiber nicht unterstützt: virConnectListAllNetworks

Okt 08 23:44:08 hexe libvirtd[2454]: Diese Funktion wird vom Verbindungstreiber nicht unterstützt: virConnectNumOfNetworks
```

Irgendwie deprimierend.

yuhu

Wie hast du das gelöst?

----------

## musv

Mühsam ernährt sich das Eichhörnchen. 

Ich hab jetzt virbr0 bekommen. Der Trick war das Use-Flag virt-network für libvirt.

Da ich noch pdnsd laufen hab, musste ich den Port für dnsmasq ändern (53 -> 5353). Jetzt hab ich NAT-Netzwerk, d.h. interne IP im Windows und externe im Host. 

Letztes Problem ist der Samba-Server. Über die Default-IP 192.168.122.1 findet das WinXP-Gastsystem irgendwie gar nichts, obwohl der Ping auf diese IP erfolgreich ist.

----------

## musv

Ok, Samba-Problem auch gelöst. Ich musste in der /etc/samba/smb.conf die Bindung an 127.0.0.1 durch mein lokales Netzwerk ersetzen. Im Windows hab ich zwar trotzdem nichts gefunden, wenn ich im Netzwerk gesucht hab. Aber über die IP kam ich problemlos ans Shared-Verzeichnis ran. 

Ich glaub, nach etwas Testen kann ich dann VMWare vom Rechner entfernen.

Hab mir auch gleich noch den Systemd-Service umgeschrieben, dass dnsmasq und Samba mit Libvirt gestartet und beendet werden. Nach gewisser Quälerei gefällt mir Qemu immer besser. Das "Q" steht vermutlich für Qual.

----------

## poinck

Ich habe bei mir das Problem, dass zwar "virbr0" existiert und NAT im virt-manager eingestellt ist, aber mein Gast "Gnome-continous" (fast wie Fedora) keine IP bekommt. Auch DHCP ist eingeschaltet. dnsmasq und samba sind auf meinem Gentoo nicht installiert und können daher nicht die Problemursache sein.

Leider weiß ich nicht, wo ich nach Fehlermeldungen und/oder Logs suchen kann, um das Problem weiter zu unetrsuchen. Unter einem Debian lief es einfach so. Dort ist als Netzwerkstelle im virt-manager nur "lo" zu finden; unter Gentoo gleich drei "enp3s0", "sit0" und "virbr0", aber "lo" fehlt dort. Beim Versuch "lo" dort hinzufügen, kommt die Meldung, dass ein Gerät mit dem Namen bereits existiert. Das ist derzerit der einzig erkennbare Unterschied zwischen libvirt unter Debian und Gentoo. Irgendwo da steckt wahrscheinlich auch das Problem.

Würd mich freuen, wenn mir hier jemand weiterhelfen kann.

----------

## l3u

Evtl. hier von Interesse: ich hatte auch Probleme mit der Maus in einem Windows-Gast.

Die Standard-PS/2-Maus war unbenutzbar. Ist rumgesprungen, stehengeblieben etc.

Mit -usbdevice tablet funktioniert die Maus zwar nahtlos, nicht aber das Mausrad.

Wenn ich allerdings zusätzlich noch die Option -sdl mitschicke, dann gibt’s keine Probleme mit der Maus mehr, und Scrollen per Mausrad läuft auch wunderbar. Netter Nebeneffekt: die Menüleiste des qemu-Fensters, die ich eh nicht benutzen will und die nur Platz wegnimmt, ist mit -sdl auch nicht mehr da. Und Full-Screen funktioniert.

Was genau die Option macht, hab ich noch nicht rausgefunden … auf jeden Fall löst sie meine Mausprobleme.

----------

