SPICE in virtuellen Maschinen nutzen

Aus Bluelupo's Wiki
Wechseln zu: Navigation, Suche

Was ist SPICE

SPICE dient zur Anzeige virtualisierter Desktops auf Computern mit verbesserte Multimediafähigkeiten und eine dynamische Lastverteilung zwischen Server (Wirtsystem) und Client (Gastsystem). Das heißt also es soll die virtuellen Grafiktreiber (zB. vga oder vmware) ersetzen. Auch ein Austausch der Zwischenablage via Copy&Paste ist dann zwischen Wirt und Gast möglich.

Der Artikel beschreibt die Installation und Konfiguration am Wirt- und Gastsystem.


Installation

Die Installation beschränkt sich auf je ein Paket auf der Wirt- bzw. Gastseite. Diese sind in den Standard Debian-Repositories vorhanden.


am Wirtsystemsystem

Zuerst installiert man den Spiceclient am Wirtsystem (Host).

# apt-get install spice-client


im Gastsystem

siehe dazu nächstes Kapitel


Startoptionen im Detail

Ein erster Test soll noch ohne die Option mit einer gemeinsamen Zwischenablage erfolgen.

$ kvm -name SIDUCTION-BOX -drive file=siduction.img,if=virtio -m 1024 -vga qxl


Nun startet die VM und man kontrolliert ob der richtige Treiber (QXL) auch benutzt wird. Die Ausgaben sollten in etwa so lauten.

$ lspci | grep -i VGA
00:02.0 VGA compatible controller: Red Hat, Inc. Device 0100 (rev 03)

$ grep QXL /var/log/Xorg.0.log
[    15.878] (II) qxl: Driver for QXL virtual graphics: QXL 1


Nun installiert man gleich den spice-vdagent der später die Option einer gemeinsamen Zwischenablage zwischen Wirt und Gast ermöglicht.

# apt-get install spice-vdagent


Der Gast kann nun wieder heruntergefahren werden. Jetzt kommen noch die SPICE-Optionen hinzu um die oben angesprochene Funktionalität zu erweitern.

$ kvm -name SIDUCTIONBOX -drive file=siduction.img,if=virtio -m 1024 -vga qxl \
-spice port=5900,addr=127.0.0.1,disable-ticketing -device virtio-serial-pci   \
-device virtserialport,chardev=spicechannel0,name=com.redhat.spice.0          \
-chardev spicevmc,id=spicechannel0,name=vdagent


Nun sieht erst mal gar nichts von einem startenden Gastsystem, dazu muß man noch SPICE-Server mitteilen das er sich mit dem lokalen Client verbinden soll. Das erreicht man folgenden Kommando.

$ spicec -h 127.0.0.1 -p 5900

Jetzt wird auch das Fenster mit dem Gast sichtbar, der vermutlich schon hochgefahren ist. Ein Austausch via Copy&Paste sollte nun zwischen Gast- und Wirtsystem möglich sein.


Start eines Gastes über ein Shellscript

Um nicht jedesmal die ganze Kette von Kommando-Optionen auf der Befehlszeile eingeben zu müssen packt man das ganze in Shellscript. Das Script setzt die Konfiguration eines gemeinsamen Netzwerkes zwischen Wirt und Gast voraus wie man in dem Wikiartikel nachlesen kann. Das Script ist ggf. an eigene Gegebenheiten anzupassen. Vorsicht beim Starten von zwei virtuellen Gästen ist es zwingend nötig eine unterschiedliche MAC-Adresse und eine eindeutige IP-Adresse des Gastes zu konfigurieren, da es sonst zu Kollisionen bzgl. des TCP/IP Netzwerks kommt.


 1  #!/bin/bash
 2  USERID=`whoami`
 3  INTERFACE=`sudo /usr/sbin/tunctl -b -u $USERID -g kvm`
 4  VMNAME="SIDUCTION-BOX"
 5  VLAN="0"
 6  MACADRESSE="12:A1:00:12:01:02"
 7  MODEL="virtio"
 8  BOOT="on"
 9  MEDIA="disk"
10  SOUNDHW="es1370"
11  VGAHW="qxl"
12  RAMSIZE="3072"
13  PIDPATH="/var/tmp"
14  PIDFILE="$VMNAME.pid"
15  SPICE_PORT="5900"
16  SPICE_ADDR="127.0.0.1"
17  SPICE_SERIALPCI="virtio-serial-pci"
18  SPICE_SERIALPORT="virtserialport"
19  SPICE_CHARDEV="spicechannel0"
20  SPICE_CHANNELNAME="com.redhat.spice.0"
21  SPICE_NAME="spicevmc"
22  SPICE_CHANNELID=$SPICE_CHARDEV
23  SPICE_AGENT="vdagent"
24  
25  kvm -name $VMNAME -net nic,vlan=$VLAN,macaddr=$MACADRESSE,model=$MODEL -net tap,vlan=$VLAN,ifname=$INTERFACE      \
26  -drive if=$MODEL,boot=$BOOT,file=$IMGPATH/$IMGFILE,media=$MEDIA -soundhw $SOUNDHW -m $RAMSIZE -pidfile $PIDFILE   \
27  -vga $VGAHW -spice port=$SPICE_PORT,addr=$SPICE_ADDR,disable-ticketing -device $SPICE_SERIALPCI                   \
28  -device $SPICE_SERIALPORT,chardev=$SPICE_CHARDEV,name=$SPICE_CHANNELNAME -chardev $SPICE_NAME,id=$SPICE_CHANNELID, \
29  name=$SPICE_AGENT -daemonize
30  
31  spicec -h $SPICE_ADDR -p $SPICE_PORT


Aufräumen nach dem die VM wieder heruntergefahren ist mit folgenden Kommandos. Die Variable $INTERFACE ist durch den Namen des TAP-Devices zu ersetzen z.B. tap0.

$ sudo /sbin/ifconfig $INTERFACE down
$ sudo /usr/sbin/tunctl -d $INTERFACE
$ rm /var/tmp/SIDUCTION-BOX.pid


Weitere Infos

Artikel auf linux-kvm.org (engl.)

Homepage des Virtmanager (engl.)

Homepage von SPICE

Qemu-Buch (dt.)