virt-manager: update to 1.0.1, fix & update dependencies, gtk3 support

- Vte, add gtk3 support, enable introspection, update to 0.35.90
- Spice-gtk, add gtk3 support
- gtk-vnc, add gtk3 support
- Add libvirt-glib (thanks @bjornfor)
- Add usbredir
- qemu, enable usbredir
- spice-gtk, enable usbredir
- virt-manager, update to 1.0.1

[Bjørn:
* Set namePrefix = "" to preserve package name "virt-manager"
  (instead of "python2.7-virt-manager")
* Add dconf to GIO_EXTRA_MODULES to get persistent settings in
  virt-manager. Without it:
  GLib-GIO-Message: Using the 'memory' GSettings backend. Your settings will not be saved or shared with other applications.
* Add ${gtk3}/share to XDG_DATA_DIRS to unbreak "Take Screenshot"
  feature (fixes "Settings schema 'org.gtk.Settings.FileChooser' is not installed")
* gtk-vnc: don't pull "pkgs" attrset for optionalString, use stdenv.lib.optionalString instead.
]
This commit is contained in:
Jaka Hudoklin 2014-03-23 18:12:07 +01:00 committed by Bjørn Forsman
parent 85b1ede2bf
commit 413ebfb246
8 changed files with 151 additions and 85 deletions

View File

@ -3,7 +3,7 @@
, makeWrapper , makeWrapper
, sdlSupport ? true, SDL , sdlSupport ? true, SDL
, vncSupport ? true, libjpeg, libpng , vncSupport ? true, libjpeg, libpng
, spiceSupport ? true, spice, spice_protocol , spiceSupport ? true, spice, spice_protocol, usbredir
, x86Only ? false , x86Only ? false
}: }:
@ -23,7 +23,7 @@ stdenv.mkDerivation rec {
] ]
++ stdenv.lib.optionals sdlSupport [ SDL ] ++ stdenv.lib.optionals sdlSupport [ SDL ]
++ stdenv.lib.optionals vncSupport [ libjpeg libpng ] ++ stdenv.lib.optionals vncSupport [ libjpeg libpng ]
++ stdenv.lib.optionals spiceSupport [ spice_protocol spice ]; ++ stdenv.lib.optionals spiceSupport [ spice_protocol spice usbredir ];
enableParallelBuilding = true; enableParallelBuilding = true;

View File

@ -1,74 +1,67 @@
{ stdenv, fetchurl, pythonPackages, intltool, libxml2Python, curl, python { stdenv, fetchurl, pythonPackages, intltool, libxml2Python, curl, python
, makeWrapper, virtinst, pyGtkGlade, pythonDBus, gnome_python, gtkvnc, vte , makeWrapper, virtinst, pyGtkGlade, pythonDBus, gnome_python, gtkvnc, vte
, spiceSupport ? true, spice_gtk , gtk3, gobjectIntrospection, libvirt-glib, gsettings_desktop_schemas, glib
, avahi, dconf, spiceSupport ? true, spice_gtk
}: }:
with stdenv.lib; with stdenv.lib;
with pythonPackages;
let version = "0.9.5"; in buildPythonPackage rec {
stdenv.mkDerivation rec {
name = "virt-manager-${version}"; name = "virt-manager-${version}";
version = "1.0.1";
namePrefix = "";
src = fetchurl { src = fetchurl {
url = "http://virt-manager.et.redhat.com/download/sources/virt-manager/virt-manager-${version}.tar.gz"; url = "http://virt-manager.org/download/sources/virt-manager/${name}.tar.gz";
sha256 = "0gc06cdbq6c2a06l939516lvjii7lr0wng90kqgl1i5q5wlgnajx"; sha256 = "1n248kack1fni8y17ysgq5xhvffcgy4l62hnd0zvr4kjw0579qq8";
}; };
pythonPath = with pythonPackages; propagatedBuildInputs =
[ setuptools eventlet greenlet gflags netaddr sqlalchemy carrot routes [ eventlet greenlet gflags netaddr sqlalchemy carrot routes
paste_deploy m2crypto ipy boto_1_9 twisted sqlalchemy_migrate paste_deploy m2crypto ipy boto_1_9 twisted sqlalchemy_migrate
distutils_extra simplejson readline glance cheetah lockfile httplib2 distutils_extra simplejson readline glance cheetah lockfile httplib2
# !!! should libvirt be a build-time dependency? Note that urlgrabber virtinst pyGtkGlade pythonDBus gnome_python pygobject3
# libxml2Python is a dependency of libvirt.py. libvirt libxml2Python ipaddr vte
libvirt libxml2Python urlgrabber virtinst pyGtkGlade pythonDBus gnome_python
gtkvnc vte
] ++ optional spiceSupport spice_gtk; ] ++ optional spiceSupport spice_gtk;
buildInputs = buildInputs =
[ pythonPackages.python [ mox
pythonPackages.wrapPython
pythonPackages.mox
pythonPackages.urlgrabber
intltool intltool
pyGtkGlade
pythonDBus
gnome_python
gtkvnc gtkvnc
] ++ pythonPath; gtk3
libvirt-glib
avahi
glib
gobjectIntrospection
];
buildPhase = "make"; configurePhase = ''
sed -i 's/from distutils.core/from setuptools/g' setup.py
nativeBuildInputs = [ makeWrapper pythonPackages.wrapPython ]; sed -i 's/from distutils.command.install/from setuptools.command.install/g' setup.py
python setup.py configure --prefix=$out
# TODO
# virt-manager -> import gtk.glade -> No module named glade --> fixed by removing 'pygtk' and by only using pyGtkGlade
# -> import gconf -> ImportError: No module named gconf
# -> pfad um gtk-2.0 erweitern in virt-manger runner -> /nix/store/hnyxc9i4yz2mc42n44ms13mn8n486s5h-gnome-python-2.28.1/lib/python2.7/site-packages/gtk-2.0
# -> Error starting Virtual Machine Manager: Failed to contact configuration server; the most common cause is a missing or misconfigured D-Bus session bus daemon. See http://projects.gnome.org/gconf/ for information. (Details - 1: GetIOR failed: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.gnome.GConf was not provided by any .service files)
#Traceback (most recent call last):
# File "/nix/store/y9rcdiv6686sqcv4r39p575s37jzc2cz-virt-manager-0.9.1/share/virt-manager/virt-manager.py", line 383, in <module>
# main()
# File "/nix/store/y9rcdiv6686sqcv4r39p575s37jzc2cz-virt-manager-0.9.1/share/virt-manager/virt-manager.py", line 315, in main
# config = virtManager.config.vmmConfig(appname, appversion, glade_dir)
# File "/nix/store/y9rcdiv6686sqcv4r39p575s37jzc2cz-virt-manager-0.9.1/share/virt-manager/virtManager/config.py", line 98, in __init__
# self.conf.add_dir(self.conf_dir, gconf.CLIENT_PRELOAD_NONE)
#GError: Failed to contact configuration server; the most common cause is a missing or misconfigured D-Bus session bus daemon. See http://projects.gnome.org/gconf/ for information. (Details - 1: GetIOR failed: GDBus.Error:org.freedesktop.DBus.Error.ServiceUnknown: The name org.gnome.GConf was not provided by any .service files)
# -> fixed by http://nixos.org/wiki/Solve_GConf_errors_when_running_GNOME_applications & a restart
# virt-manager-tui -> ImportError: No module named newt_syrup.dialogscreen
installPhase = ''
make install
# A hack, but the most reliable method so far
echo "#!/usr/bin/env python" | cat - src/virt-manager.py > $out/bin/virt-manager
echo "#!/usr/bin/env python" | cat - src/virt-manager-tui.py > $out/bin/virt-manager-tui
wrapPythonPrograms
''; '';
meta = { buildPhase = "true";
postInstall = ''
# GI_TYPELIB_PATH is needed at runtime for GObject stuff to work
for file in "$out"/bin/*; do
wrapProgram "$file" \
--prefix GI_TYPELIB_PATH : $GI_TYPELIB_PATH \
--prefix GIO_EXTRA_MODULES : "${dconf}/lib/gio/modules" \
--prefix GSETTINGS_SCHEMA_DIR : $out/share/glib-2.0/schemas \
--prefix LD_LIBRARY_PATH : ${gtk3}/lib/:${libvirt-glib}/lib/:${vte}/lib:${gtkvnc}/lib${optionalString spiceSupport ":${spice_gtk}/lib"} \
--prefix XDG_DATA_DIRS : "$out/share:${gsettings_desktop_schemas}/share:${gtk3}/share:\$XDG_DATA_DIRS"
done
${glib}/bin/glib-compile-schemas "$out"/share/glib-2.0/schemas
'';
# Failed tests
doCheck = false;
meta = with stdenv.lib; {
homepage = http://virt-manager.org; homepage = http://virt-manager.org;
description = "Desktop user interface for managing virtual machines"; description = "Desktop user interface for managing virtual machines";
longDescription = '' longDescription = ''
@ -76,7 +69,7 @@ stdenv.mkDerivation rec {
virtual machines through libvirt. It primarily targets KVM VMs, but also virtual machines through libvirt. It primarily targets KVM VMs, but also
manages Xen and LXC (linux containers). manages Xen and LXC (linux containers).
''; '';
license = "GPLv2"; license = licenses.gpl2;
maintainers = with stdenv.lib.maintainers; [qknight]; maintainers = with maintainers; [qknight offline];
}; };
} }

View File

@ -1,32 +1,21 @@
{ stdenv, fetchurl, intltool, pkgconfig, gnome3, ncurses { stdenv, fetchurl, intltool, pkgconfig, gnome3, ncurses, gobjectIntrospection }:
, pythonSupport ? false, python, pygtk}:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
versionMajor = "0.34"; versionMajor = "0.35";
versionMinor = "9"; versionMinor = "90";
moduleName = "vte"; moduleName = "vte";
name = "${moduleName}-${versionMajor}.${versionMinor}"; name = "${moduleName}-${versionMajor}.${versionMinor}";
src = fetchurl { src = fetchurl {
url = "mirror://gnome/sources/${moduleName}/${versionMajor}/${name}.tar.xz"; url = "mirror://gnome/sources/${moduleName}/${versionMajor}/${name}.tar.xz";
sha256 = "1q93dsxg56f57mxblmh8kn4v9kyc643j2pjf1j3mn2kxypnwaf3g"; sha256 = "c47182d1724db479095b918898ce62297ec71988f24cd575506151c59f7b98cf";
}; };
buildInputs = [ intltool pkgconfig gnome3.glib gnome3.gtk ncurses ] ++ buildInputs = [ gobjectIntrospection intltool pkgconfig gnome3.glib gnome3.gtk3 ncurses ];
stdenv.lib.optionals pythonSupport [python pygtk];
configureFlags = '' configureFlags = ''--enable-introspection'';
${if pythonSupport then "--enable-python" else "--disable-python"}
'';
postInstall = stdenv.lib.optionalString pythonSupport ''
cd $(toPythonPath $out)/gtk-2.0
for n in *; do
ln -s "gtk-2.0/$n" "../$n"
done
'';
meta = { meta = {
homepage = http://www.gnome.org/; homepage = http://www.gnome.org/;

View File

@ -0,0 +1,48 @@
{ stdenv, fetchurl, pkgconfig, libvirt, glib, libxml2, intltool, libtool, yajl
, nettle, libgcrypt, python, pygobject, gobjectIntrospection, libcap_ng
}:
stdenv.mkDerivation rec {
name = "libvirt-glib-0.1.8";
src = fetchurl {
url = "http://libvirt.org/sources/glib/${name}.tar.gz";
sha256 = "0ld7g9vlpdzx8rm90i8y1gnpygkn20x5z12gvsgms7dy5nala3ns";
};
buildInputs = [
pkgconfig libvirt glib libxml2 intltool libtool yajl nettle libgcrypt
python pygobject gobjectIntrospection libcap_ng
];
# Compiler flag -fstack-protector-all fixes this build error:
#
# ./.libs/libvirt-glib-1.0.so: undefined reference to `__stack_chk_guard'
#
# And the extra include path fixes this build error:
#
# In file included from ../libvirt-gobject/libvirt-gobject-domain-device.h:30:0,
# from /tmp/nix-build-libvirt-glib-0.1.7.drv-2/libvirt-glib-0.1.7/libvirt-gobject/libvirt-gobject.h:33,
# from <stdin>:4:
# ../libvirt-gobject/libvirt-gobject-domain.h:33:29: fatal error: libvirt/libvirt.h: No such file or directory
# compilation terminated.
# make[3]: *** [LibvirtGObject-1.0.gir] Error 1
preConfigure = ''
export NIX_CFLAGS_COMPILE="-fstack-protector-all -I${libvirt}/include"
'';
meta = with stdenv.lib; {
description = "Library for working with virtual machines";
longDescription = ''
libvirt-glib wraps libvirt to provide a high-level object-oriented API better
suited for glib-based applications, via three libraries:
- libvirt-glib - GLib main loop integration & misc helper APIs
- libvirt-gconfig - GObjects for manipulating libvirt XML documents
- libvirt-gobject - GObjects for managing libvirt objects
'';
homepage = http://libvirt.org/;
license = licenses.lgpl2Plus;
platforms = platforms.linux;
};
}

View File

@ -1,6 +1,7 @@
{ stdenv, fetchurl, pkgconfig, gtk, spice_protocol, intltool, celt_0_5_1 { stdenv, fetchurl, pkgconfig, gtk, spice_protocol, intltool, celt_0_5_1
, openssl, pulseaudio, pixman, gobjectIntrospection, libjpeg_turbo, zlib , openssl, pulseaudio, pixman, gobjectIntrospection, libjpeg_turbo, zlib
, cyrus_sasl, python, pygtk, autoconf, automake, libtool }: , cyrus_sasl, python, pygtk, autoconf, automake, libtool, usbredir
, gtk3, enableGTK3 ? false }:
with stdenv.lib; with stdenv.lib;
@ -13,9 +14,9 @@ stdenv.mkDerivation rec {
}; };
buildInputs = [ buildInputs = [
gtk spice_protocol celt_0_5_1 openssl pulseaudio pixman gobjectIntrospection spice_protocol celt_0_5_1 openssl pulseaudio pixman gobjectIntrospection
libjpeg_turbo zlib cyrus_sasl python pygtk libjpeg_turbo zlib cyrus_sasl python pygtk usbredir
]; ] ++ (if enableGTK3 then [ gtk3 ] else [ gtk ]);
nativeBuildInputs = [ pkgconfig intltool libtool autoconf automake ]; nativeBuildInputs = [ pkgconfig intltool libtool autoconf automake ];
@ -31,7 +32,7 @@ stdenv.mkDerivation rec {
configureFlags = [ configureFlags = [
"--disable-maintainer-mode" "--disable-maintainer-mode"
"--with-gtk=2.0" (if enableGTK3 then "--with-gtk3" else "--with-gtk=2.0")
]; ];
dontDisableStatic = true; # Needed by the coroutine test dontDisableStatic = true; # Needed by the coroutine test

View File

@ -0,0 +1,23 @@
{ stdenv, fetchurl, pkgconfig, libusb }:
stdenv.mkDerivation rec {
name = "usbredir-${version}";
version = "0.6";
src = fetchurl {
url = "http://spice-space.org/download/usbredir/${name}.tar.bz2";
sha256 = "028184960044ea4124030000b3c55a35c3238835116e3a0fbcaff449df2c8edf";
};
buildInputs = [ pkgconfig libusb ];
propagatedBuildInputs = [ libusb ];
meta = with stdenv.lib; {
description = "USB traffic redirection protocol";
homepage = http://spice-space.org/page/UsbRedir;
license = licenses.lgpl21;
maintainers = [ maintainers.offline ];
platforms = platforms.linux;
};
}

View File

@ -1,8 +1,8 @@
{ stdenv, fetchurl { stdenv, fetchurl, gobjectIntrospection
, python, gtk, pygtk, gnutls, cairo, libtool, glib, pkgconfig, libtasn1 , python, gtk, pygtk, gnutls, cairo, libtool, glib, pkgconfig, libtasn1
, libffi, cyrus_sasl, intltool, perl, perlPackages, firefoxPkgs, pulseaudio , libffi, cyrus_sasl, intltool, perl, perlPackages, firefoxPkgs, pulseaudio
, kbproto, libX11, libXext, xextproto, pygobject, libgcrypt }: , kbproto, libX11, libXext, xextproto, pygobject, libgcrypt, gtk3, vala
, pygobject3, enableGTK3 ? false }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
name = "gtk-vnc-${version}"; name = "gtk-vnc-${version}";
@ -14,21 +14,24 @@ stdenv.mkDerivation rec {
}; };
buildInputs = [ buildInputs = [
python gtk pygtk gnutls cairo libtool pkgconfig glib libffi libgcrypt python gnutls cairo libtool pkgconfig glib libffi libgcrypt
intltool cyrus_sasl pulseaudio pygobject perl perlPackages.TextCSV intltool cyrus_sasl pulseaudio perl perlPackages.TextCSV
]; gobjectIntrospection
] ++ (if enableGTK3 then [ gtk3 vala pygobject3 ] else [ gtk pygtk pygobject ]);
NIX_CFLAGS_COMPILE = "-fstack-protector-all"; NIX_CFLAGS_COMPILE = "-fstack-protector-all";
configureFlags = [ configureFlags = [
"--with-python" "--with-python"
"--with-examples" "--with-examples"
(if enableGTK3 then "--with-gtk=3.0" else "--with-gtk=2.0")
]; ];
makeFlags = "CODEGENDIR=${pygobject}/share/pygobject/2.0/codegen/ DEFSDIR=${pygtk}/share/pygtk/2.0/defs/"; makeFlags = stdenv.lib.optionalString (!enableGTK3)
"CODEGENDIR=${pygobject}/share/pygobject/2.0/codegen/ DEFSDIR=${pygtk}/share/pygtk/2.0/defs/";
meta = with stdenv.lib; { meta = with stdenv.lib; {
description = "A GTK VNC widget"; description = "A GTK VNC widget";
maintainers = with maintainers; [ raskin ]; maintainers = with maintainers; [ raskin offline ];
platforms = platforms.linux; platforms = platforms.linux;
license = licenses.lgpl21; license = licenses.lgpl21;
}; };

View File

@ -5222,6 +5222,8 @@ let
libvirt = callPackage ../development/libraries/libvirt { }; libvirt = callPackage ../development/libraries/libvirt { };
libvirt-glib = callPackage ../development/libraries/libvirt-glib { };
libvisio = callPackage ../development/libraries/libvisio { }; libvisio = callPackage ../development/libraries/libvisio { };
libvisual = callPackage ../development/libraries/libvisual { }; libvisual = callPackage ../development/libraries/libvisual { };
@ -5910,6 +5912,10 @@ let
ustr = callPackage ../development/libraries/ustr { }; ustr = callPackage ../development/libraries/ustr { };
usbredir = callPackage ../development/libraries/usbredir {
libusb = libusb1;
};
ucommon = callPackage ../development/libraries/ucommon { }; ucommon = callPackage ../development/libraries/ucommon { };
vaapiIntel = callPackage ../development/libraries/vaapi-intel { }; vaapiIntel = callPackage ../development/libraries/vaapi-intel { };
@ -9301,7 +9307,10 @@ let
virtviewer = callPackage ../applications/virtualization/virt-viewer {}; virtviewer = callPackage ../applications/virtualization/virt-viewer {};
virtmanager = callPackage ../applications/virtualization/virt-manager { virtmanager = callPackage ../applications/virtualization/virt-manager {
inherit (gnome) gnome_python; inherit (gnome) gnome_python;
vte = gnome.vte.override { pythonSupport = true; }; vte = gnome3.vte;
dconf = gnome3.dconf;
gtkvnc = gtkvnc.override { enableGTK3 = true; };
spice_gtk = spice_gtk.override { enableGTK3 = true; };
}; };
virtinst = callPackage ../applications/virtualization/virtinst {}; virtinst = callPackage ../applications/virtualization/virtinst {};