SPICE na Ubuntu Karmic

tuxpice_sm

Contents

[hide]

Overview

SPICE is a protocol that allows for high-quality virtual machine access using VDI over a network. It could be used as a communication layer between thin clients and their associated virtualized operating systems, or it could be used as it is in the COSI lab for normal machines to have quick access to a variety of different operating systems, or in any other configuration where it is better for a virtual machine to be running remotely.

SPICE on Ubuntu

As SPICE is under development by Red Hat, binary packages are rpm-based. However, it is possible to run both the SPICE server and client on 64-bit Ubuntu machines, if they are compiled from source. There are several dependencies that must be installed before SPICE can be compiled; dependencies not already available in the standard Ubuntu repositories must also be compiled from source. Please follow the instructions below to compile the SPICE server and client.

These instructions are for installing SPICE 0.6 on 64-bit Ubuntu 10.04. It is not possible to install a SPICE server on any 32-bit system due to its reliance on 64-bit atomic operations, and the process for installing just the client on 32-bit systems no longer appears to be supported.

Please direct comments or questions about this guide to Mark Platek.

Initial set-up

Some standard tools are required:

sudo apt-get install build-essential autoconf git-core 

Also, install some dependencies from the repositories:

sudo apt-get install libtool liblog4cpp5-dev libavcodec-dev libssl-dev xlibmesa-glu-dev libasound-dev libpng12-dev libfreetype6-dev libfontconfig1-dev libogg-dev libxrandr-dev kvm libgcrypt-dev libsdl-dev 

Finally, create a directory to compile from and descend into it:

mkdir spice-sources cd spice-sources 

Installing Dependencies

Spice protocol headers

The first dependency to install is the spice protocol headers.

wget http://spice-space.org/download/releases/spice-protocol-0.6.0.tar.gz tar xvf spice-protocol-0.6.0.tar.gz cd spice-protocol-0.6.0/ ./configure make sudo make install cd .. 

qpixman and pixman

SPICE requires a special version of pixman unavailable in the Ubuntu repositories. It is available from the SPICE homepage.

wget http://spice-space.org/download/stable/qpixman-0.13.3-git20090127.tar.bz2 tar xvf qpixman-0.13.3-git20090127.tar.bz2 cd qpixman-0.13.3-git20090127/ ./autogen.sh --includedir=/usr/include --libdir=/usr/lib64 make sudo make install cd .. 

We must also install a newer version of the normal pixman library, available from the SPICE project’s git repository.

git clone git://anongit.freedesktop.org/pixman cd pixman/ ./autogen.sh --includedir=/usr/include --libdir=/usr/lib64 make sudo make install cd .. 

celt

SPICE requires a specific version of the celt audio codec (0.5.1.3). Since it is unavailable in the Ubuntu repositories, it must also be compiled.

wget http://downloads.us.xiph.org/releases/celt/celt-0.5.1.3.tar.gz tar xvf celt-0.5.1.3.tar.gz cd celt-0.5.1.3/ ./configure --includedir=/usr/include --libdir=/usr/lib64 make sudo make install cd .. 

qcairo

SPICE requires a modified version of the cairo graphics library, named qcairo. Sources are available on the spice homepage.

wget http://spice-space.org/download/stable/qcairo-1.8.7.1-git74d6b5.tar.bz2 tar xvf qcairo-1.8.7.1-git74d6b5.tar.bz2 cd qcairo-1.8.7.1-git74d6b5/ ./autogen.sh --disable-xlib --disable-ps --disable-pdf --disable-svg --includedir=/usr/include --libdir=/usr/lib64 make sudo make install cd .. 

Installing SPICE

libspice and the SPICE client

Finally, all of the dependencies are satisfied and we can install the SPICE server. It comes in two parts: one part is libspice (we will later compile a new version of qemu with spice support to use it), and the other is the spice client. They are both installed at the same time.

NOTE: This section can only be performed on a 64-bit system! Client-only installation on a 32-bit system no longer appears to be supported.

apt-get install libjpeg62-dev
wget http://spice-space.org/download/releases/spice-0.6.0.tar.gz tar xf spice-0.6.0.tar.gz cd spice-0.6.0/ ./configure --includedir=/usr/include --libdir=/usr/lib64 make sudo make install cd ..

„Spiced“ QEMU

Support for SPICE 0.6 is currently included in a late 0.13 release of QEMU, we will install that version now. We will be installing this „spiced“ QEMU alongside the system QEMU, so make sure you perform the installation in some permanent location. I chose /opt/qemu-spice, but you can do it wherever you want.

Note that we must switch to a branch of the qemu git tree – v19 is the latest branch at time of writing (2010-09-23). According to the SPICE documentation the branch number is in flux and is subject to change.

This whole subsection should be done as root, to avoid exposing /opt to ordinary users. If you don’t want to work as root, prepend each command with sudo.

cd /opt mkdir qemu-spice cd qemu-spice/ git clone git://git.freedesktop.org/git/spice/qemu cd qemu/ git checkout -b spice.v19 origin/spice.v19 

Now we have to change the configure script to not set the -Werror CFLAG. This is dangerous, but I couldn’t get qemu to compile without forcing the configure script to not set it. Open the configure script in your favorite editor and find the part that looks like:

if test "$werror" = "yes" ; then     QEMU_CFLAGS="-Werror $QEMU_CFLAGS" fi 

Change it to remove the -Werror, like so:

if test "$werror" = "yes" ; then     QEMU_CFLAGS="$QEMU_CFLAGS" fi 

Now, run the configure script and make QEMU. Please note that compiling QEMU in this way will enable it to emulate only a 64-bit host; add extra targets if you need other architectures.

./configure --target-list=x86_64-softmmu --enable-spice --enable-io-thread make 

QEMU needs certain BIOS files to be able to start SPICE VMs, so we have to copy them to a location QEMU expects to find them.

cp pc-bios/vgabios-qxl.bin /usr/share/qemu/ cp pc-bios/pxe-e1000.bin /usr/share/qemu/ 

Spiced QEMU is now available, the executable is located at /opt/qemu-spice/qemu/x86_64-softmmu/qemu-system-x86_64. Make a symlink for convenient invocation:

ln -s /opt/qemu-spice/qemu/x86_64-softmmu/qemu-system-x86_64 /usr/sbin/qemu-spice 

And that’s it! You can invoke qemu-spice with the argument „-spice“ to start a SPICE server. As soon as QEMU 0.14 is released, however, you can use the QEMU package available in the Ubuntu repositories instead, since it will include SPICE support by default.

Appendix: Ubuntu SPICE PPA

In past revisions of this page, Adam J. Lincoln’s PPA containing debian packages for qcairo, qpixman, etc. and the spice client was mentioned. It no longer appears to be actively maintained, and almost certainly carries an old, incompatible version of SPICE (0.4). If you wish to use SPICE, please compile it from source using the method described above.

SPICE on Fedora

It is considerably easier to install SPICE on a Fedora system, since rpms are available. Gerd Hoffman maintains a repository that is kept up to date with the latest in SPICE development, and the version of QEMU with spice support enabled natively will be available in Fedora 14.

To install SPICE on 64-bit Fedora 13, perform the following steps as root:

cd /etc/yum.repos.d wget http://kraxel.fedorapeople.org/spice/spice-unstable.repo yum install spice-client qemu-spice 

How To Use SPICE

Client

To invoke the spice client, use the command

spicec -h  -p  

Server

Invoking the spice server is rather more complex than the client, since you have to set the parameters of the virtualized guest. For example,

qemu-spice -spice port=5930,disable-ticketing -drive file=/path/to/image -vga qxl -device AC97 -usbdevice tablet -m 1024 -enable-kvm -net nic -net user 

will start a SPICE server VM on port 5930 from the image at the supplied path, with:

  • qxl graphics (you need this for spice to be of any use)
  • an AC97 sound device
  • a tablet input device (using a virtualized tablet generally gives better results than a virtualized mouse)
  • 1024M of memory available
  • KVM support enabled (you really want this, as the guest is quite slow otherwise)
  • a user-controllable virtualized nic

It is also possible to use virtio if your system supports it; doing so will lead to significant performance gains for the guest. Modify the -drive argument like so:

-drive file=/path/to/image,if=virtio 

And, modify the -net argument like so:

-net nic,model=virtio 

When a SPICE server is started, its virtual guest boots and at any point until the guest is shut down a client can connect to and interact with the guest.

Special instructions for using a Windows guest

SPICE aims to provide a high-quality interface between the remote client and the guest VM. To this end, a SPICE-specific Windows driver has been written to enable smooth operation of the mouse, eliminating the „choppiness“ that has before been a problem when running an XP guest. When you boot the SPICE Windows guest, follow these instructions to enable it. Note that you must start the guest with option -vga qxl in order for the mouse driver to work.

SPICE in COSI

The VDI/Spice Project is aimed at providing COSI members and students with personalizable virtual machines. The project is still in its early stages, but development is ongoing; we are looking to integrate with OSCKAR andKIOSCKAR.

External Resources

SPICE User Manual

SPICE Homepage



Další varianta —>

Making Red Hat’s SPICE on Ubuntu Karmic

From the SPICE manual:


5.2 Control hot keys
Shift + F11
Toggle full-screen / window mode
Shift + F12
Release the cursor if captured in window

 

  1. Preparatory measures

    On the default LWP running Ubuntu Karmic, we had to install a few extra packages…


    apt-get install autoconf automake libtool liblog4cpp5-dev libogg-dev libavcodec-dev libavutil-dev libasound2-dev libssl-dev libgcrypt11-dev libsdl1.2-dev

     

  2. Fetching the sources

    Browse the spice-space and fetch the sources:


    wget http://www.spice-space.org/download/qpixman-0.13.3-git20090127.tar.bz2
    wget http://www.spice-space.org/download/qcairo-1.8.7.1-git74d6b5.tar.bz2
    wget http://www.spice-space.org/download/spice_0_4.tar.bz2

    Also fetch:


    wget http://downloads.us.xiph.org/releases/celt/celt-0.5.1.3.tar.gz

    … and build/install it.

  3. Building

    Untar them all, and in each directory (in the order above) run:


    ./autogen.sh
    make
    sudo make install

     

  4. Updating ld.so.conf

     


    sudo ldconfig -v

     

  5. Editing xorg.conf

    Create a fresh xorg.conf by stopping the running X (if any), and doing


    Xorg -configure
    sudo cp xorg.conf.new /etc/X11/xorg.conf

    Then according to Configuring Red Hat Enterprise Linux 5.4 virtual machines to use SPICE (thanks for the pointer, Frank Weyns), edit xorg.conf:

     Section "InputDevice"         Identifier  "Mouse0" #       Driver      "mouse" -JB 20100319         Driver      "void" #       Option      "Protocol" "auto"  -JB 20100319 #       Option      "Device" "/dev/input/mice"  -JB 20100319 #       Option      "ZAxisMapping" "4 5 6 7"  -JB 20100319 EndSection  Section "Device"         Identifier  "Card0" #       Driver      "fbdev"   -JB 20100319         Driver      "qxl"         VendorName  "Red Hat, Inc."         BoardName   "Unknown Board"         BusID       "PCI:0:3:0" EndSection  		

     

  6. Building the qxl driver

     


    wget http://xorg.freedesktop.org/releases/individual/driver/xf86-video-qxl-0.0.12.tar.gz
    tar zxf xf86-video-qxl-0.0.12.tar.gz
    cd xf86-video-qxl-0.0.12
    sudo apt-get install -y xorg-dev
    sudo apt-get remove -s xserver-xorg-video-ati xserver-xorg-video-chips xserver-xorg-video-cirrus xserver-xorg-video-i128 xserver-xorg-video-intel xserver-xorg-video-mach64 xserver-xorg-video-mga xserver-xorg-video-neomagic xserver-xorg-video-nv xserver-xorg-video-openchrome xserver-xorg-video-r128 xserver-xorg-video-radeon xserver-xorg-video-rendition xserver-xorg-video-s3 xserver-xorg-video-s3virge xserver-xorg-video-savage xserver-xorg-video-siliconmotion xserver-xorg-video-sis xserver-xorg-video-sisusb xserver-xorg-video-tdfx xserver-xorg-video-trident xserver-xorg-video-tseng xserver-xorg-video-v4l xserver-xorg-video-vesa xserver-xorg-video-vmware xserver-xorg-video-voodoo
    sudo apt-get remove nvidia-173-modaliases nvidia-185-kernel-source nvidia-185-libvdpau nvidia-185-modaliases nvidia-96-modaliases nvidia-common nvidia-glx-185 nvidia-settings
    ./configure –libdir=/usr/lib64 –prefix=/usr
    make
    sudo make install

     

  7. Trying the driver

     


    service kdm stop
    service kdm start
    sudo tail -30 /var/log/Xorg.0.log


    (II) qxl(0): Compression level 0, log level 0
    (II) qxl(0): Currently using mode #-1, list at 0x34
    (II) qxl(0): 14357 io pages at 0x0
    (II) qxl(0): 8294400 byte draw area at 0x3815b68
    (II) qxl(0): RAM header offset: 0x3ffeb68
    (II) qxl(0): Correct RAM signature 41525851
    (II) qxl(0): Monitor0: Using hsync range of 31.50-80.00 kHz
    (II) qxl(0): Monitor0: Using vrefresh range of 50.00-70.00 Hz
    (II) qxl(0): Clock range:  10.00 to 165.00 MHz
    (II) qxl(0): Not using default mode "640x350" (no mode of this name)
    (II) qxl(0): Not using default mode "320x175" (bad mode clock/interlace/doublescan)
    (II) qxl(0): Not using default mode "640x400" (no mode of this name)
    (II) qxl(0): Not using default mode "320x200" (bad mode clock/interlace/doublescan)
    (II) qxl(0): Not using default mode "720x400" (no mode of this name)
    (II) qxl(0): Not using default mode "360x200" (bad mode clock/interlace/doublescan)

    Backtrace:
    0: /usr/bin/X(xorg_backtrace+0x26) [0x4f00c6]
    1: /usr/bin/X(xf86SigHandler+0x41) [0x4852c1]
    2: /lib/libc.so.6 [0x7fb4fbbd2530]
    3: /usr/lib/xorg/modules/drivers//qxl_drv.so [0x7fb4fa449609]
    4: /usr/bin/X(xf86InitialCheckModeForDriver+0x20f) [0x4977bf]
    5: /usr/bin/X(xf86ValidateModes+0xf38) [0x499608]
    6: /usr/lib/xorg/modules/drivers//qxl_drv.so [0x7fb4fa44a53d]
    7: /usr/bin/X(InitOutput+0x507) [0x46f017]
    8: /usr/bin/X(main+0x1fe) [0x433ece]
    9: /lib/libc.so.6(__libc_start_main+0xfd) [0x7fb4fbbbdabd]
    10: /usr/bin/X [0x433509]
    Saw signal 11.  Server aborting.
    ddxSigGiveUp: Closing log

     

If Frederic isn’t geting an asnwer, I figure won’t get one either. Fetching the X driver from Git is even more shooting at a moving target, and it depends on later m4 macros that I have to install first. Judging from the Xorg logs, it may be a matter of fixing the xorg.conf. But my no-manual-X11-config-skills are a bit rusty. I call it a day.