From 413ebfb2469b394a4f4d48ba3567be3c68344722 Mon Sep 17 00:00:00 2001 From: Jaka Hudoklin Date: Sun, 23 Mar 2014 18:12:07 +0100 Subject: virt-manager: update to 1.0.1, fix & update dependencies, gtk3 support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 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. ] --- pkgs/applications/virtualization/qemu/default.nix | 4 +- .../virtualization/virt-manager/default.nix | 91 ++++++++++------------ pkgs/desktops/gnome-3/core/vte/default.nix | 23 ++---- .../development/libraries/libvirt-glib/default.nix | 48 ++++++++++++ pkgs/development/libraries/spice-gtk/default.nix | 11 +-- pkgs/development/libraries/usbredir/default.nix | 23 ++++++ pkgs/tools/admin/gtk-vnc/default.nix | 19 +++-- pkgs/top-level/all-packages.nix | 11 ++- 8 files changed, 148 insertions(+), 82 deletions(-) create mode 100644 pkgs/development/libraries/libvirt-glib/default.nix create mode 100644 pkgs/development/libraries/usbredir/default.nix diff --git a/pkgs/applications/virtualization/qemu/default.nix b/pkgs/applications/virtualization/qemu/default.nix index 7f3bf8fafc8..af2e1efb59e 100644 --- a/pkgs/applications/virtualization/qemu/default.nix +++ b/pkgs/applications/virtualization/qemu/default.nix @@ -3,7 +3,7 @@ , makeWrapper , sdlSupport ? true, SDL , vncSupport ? true, libjpeg, libpng -, spiceSupport ? true, spice, spice_protocol +, spiceSupport ? true, spice, spice_protocol, usbredir , x86Only ? false }: @@ -23,7 +23,7 @@ stdenv.mkDerivation rec { ] ++ stdenv.lib.optionals sdlSupport [ SDL ] ++ stdenv.lib.optionals vncSupport [ libjpeg libpng ] - ++ stdenv.lib.optionals spiceSupport [ spice_protocol spice ]; + ++ stdenv.lib.optionals spiceSupport [ spice_protocol spice usbredir ]; enableParallelBuilding = true; diff --git a/pkgs/applications/virtualization/virt-manager/default.nix b/pkgs/applications/virtualization/virt-manager/default.nix index fb2dde66442..dba0d11b425 100644 --- a/pkgs/applications/virtualization/virt-manager/default.nix +++ b/pkgs/applications/virtualization/virt-manager/default.nix @@ -1,74 +1,67 @@ { stdenv, fetchurl, pythonPackages, intltool, libxml2Python, curl, python , 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 pythonPackages; -let version = "0.9.5"; in - -stdenv.mkDerivation rec { +buildPythonPackage rec { name = "virt-manager-${version}"; + version = "1.0.1"; + namePrefix = ""; src = fetchurl { - url = "http://virt-manager.et.redhat.com/download/sources/virt-manager/virt-manager-${version}.tar.gz"; - sha256 = "0gc06cdbq6c2a06l939516lvjii7lr0wng90kqgl1i5q5wlgnajx"; + url = "http://virt-manager.org/download/sources/virt-manager/${name}.tar.gz"; + sha256 = "1n248kack1fni8y17ysgq5xhvffcgy4l62hnd0zvr4kjw0579qq8"; }; - pythonPath = with pythonPackages; - [ setuptools eventlet greenlet gflags netaddr sqlalchemy carrot routes + propagatedBuildInputs = + [ eventlet greenlet gflags netaddr sqlalchemy carrot routes paste_deploy m2crypto ipy boto_1_9 twisted sqlalchemy_migrate distutils_extra simplejson readline glance cheetah lockfile httplib2 - # !!! should libvirt be a build-time dependency? Note that - # libxml2Python is a dependency of libvirt.py. - libvirt libxml2Python urlgrabber virtinst pyGtkGlade pythonDBus gnome_python - gtkvnc vte + urlgrabber virtinst pyGtkGlade pythonDBus gnome_python pygobject3 + libvirt libxml2Python ipaddr vte ] ++ optional spiceSupport spice_gtk; buildInputs = - [ pythonPackages.python - pythonPackages.wrapPython - pythonPackages.mox - pythonPackages.urlgrabber + [ mox intltool - pyGtkGlade - pythonDBus - gnome_python gtkvnc - ] ++ pythonPath; - - buildPhase = "make"; - - nativeBuildInputs = [ makeWrapper pythonPackages.wrapPython ]; + gtk3 + libvirt-glib + avahi + glib + gobjectIntrospection + ]; - # 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 -# 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 + configurePhase = '' + sed -i 's/from distutils.core/from setuptools/g' setup.py + sed -i 's/from distutils.command.install/from setuptools.command.install/g' setup.py + python setup.py configure --prefix=$out + ''; - installPhase = '' - make install + buildPhase = "true"; - # 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 + 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 - wrapPythonPrograms + ${glib}/bin/glib-compile-schemas "$out"/share/glib-2.0/schemas ''; - meta = { + # Failed tests + doCheck = false; + + meta = with stdenv.lib; { homepage = http://virt-manager.org; description = "Desktop user interface for managing virtual machines"; longDescription = '' @@ -76,7 +69,7 @@ stdenv.mkDerivation rec { virtual machines through libvirt. It primarily targets KVM VMs, but also manages Xen and LXC (linux containers). ''; - license = "GPLv2"; - maintainers = with stdenv.lib.maintainers; [qknight]; + license = licenses.gpl2; + maintainers = with maintainers; [qknight offline]; }; } diff --git a/pkgs/desktops/gnome-3/core/vte/default.nix b/pkgs/desktops/gnome-3/core/vte/default.nix index b0e522c0f29..d98ddc716de 100644 --- a/pkgs/desktops/gnome-3/core/vte/default.nix +++ b/pkgs/desktops/gnome-3/core/vte/default.nix @@ -1,32 +1,21 @@ -{ stdenv, fetchurl, intltool, pkgconfig, gnome3, ncurses -, pythonSupport ? false, python, pygtk}: +{ stdenv, fetchurl, intltool, pkgconfig, gnome3, ncurses, gobjectIntrospection }: stdenv.mkDerivation rec { - versionMajor = "0.34"; - versionMinor = "9"; + versionMajor = "0.35"; + versionMinor = "90"; moduleName = "vte"; name = "${moduleName}-${versionMajor}.${versionMinor}"; src = fetchurl { url = "mirror://gnome/sources/${moduleName}/${versionMajor}/${name}.tar.xz"; - sha256 = "1q93dsxg56f57mxblmh8kn4v9kyc643j2pjf1j3mn2kxypnwaf3g"; + sha256 = "c47182d1724db479095b918898ce62297ec71988f24cd575506151c59f7b98cf"; }; - buildInputs = [ intltool pkgconfig gnome3.glib gnome3.gtk ncurses ] ++ - stdenv.lib.optionals pythonSupport [python pygtk]; + buildInputs = [ gobjectIntrospection intltool pkgconfig gnome3.glib gnome3.gtk3 ncurses ]; - configureFlags = '' - ${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 - ''; + configureFlags = ''--enable-introspection''; meta = { homepage = http://www.gnome.org/; diff --git a/pkgs/development/libraries/libvirt-glib/default.nix b/pkgs/development/libraries/libvirt-glib/default.nix new file mode 100644 index 00000000000..afce119e396 --- /dev/null +++ b/pkgs/development/libraries/libvirt-glib/default.nix @@ -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 :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; + }; +} diff --git a/pkgs/development/libraries/spice-gtk/default.nix b/pkgs/development/libraries/spice-gtk/default.nix index 60bf24dfd78..adb1fe90558 100644 --- a/pkgs/development/libraries/spice-gtk/default.nix +++ b/pkgs/development/libraries/spice-gtk/default.nix @@ -1,6 +1,7 @@ { stdenv, fetchurl, pkgconfig, gtk, spice_protocol, intltool, celt_0_5_1 , 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; @@ -13,9 +14,9 @@ stdenv.mkDerivation rec { }; buildInputs = [ - gtk spice_protocol celt_0_5_1 openssl pulseaudio pixman gobjectIntrospection - libjpeg_turbo zlib cyrus_sasl python pygtk - ]; + spice_protocol celt_0_5_1 openssl pulseaudio pixman gobjectIntrospection + libjpeg_turbo zlib cyrus_sasl python pygtk usbredir + ] ++ (if enableGTK3 then [ gtk3 ] else [ gtk ]); nativeBuildInputs = [ pkgconfig intltool libtool autoconf automake ]; @@ -31,7 +32,7 @@ stdenv.mkDerivation rec { configureFlags = [ "--disable-maintainer-mode" - "--with-gtk=2.0" + (if enableGTK3 then "--with-gtk3" else "--with-gtk=2.0") ]; dontDisableStatic = true; # Needed by the coroutine test diff --git a/pkgs/development/libraries/usbredir/default.nix b/pkgs/development/libraries/usbredir/default.nix new file mode 100644 index 00000000000..7f05daab021 --- /dev/null +++ b/pkgs/development/libraries/usbredir/default.nix @@ -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; + }; +} diff --git a/pkgs/tools/admin/gtk-vnc/default.nix b/pkgs/tools/admin/gtk-vnc/default.nix index d4c45b7ba96..c3a82b2e4a2 100644 --- a/pkgs/tools/admin/gtk-vnc/default.nix +++ b/pkgs/tools/admin/gtk-vnc/default.nix @@ -1,8 +1,8 @@ -{ stdenv, fetchurl +{ stdenv, fetchurl, gobjectIntrospection , python, gtk, pygtk, gnutls, cairo, libtool, glib, pkgconfig, libtasn1 , 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 { name = "gtk-vnc-${version}"; @@ -14,21 +14,24 @@ stdenv.mkDerivation rec { }; buildInputs = [ - python gtk pygtk gnutls cairo libtool pkgconfig glib libffi libgcrypt - intltool cyrus_sasl pulseaudio pygobject perl perlPackages.TextCSV - ]; + python gnutls cairo libtool pkgconfig glib libffi libgcrypt + intltool cyrus_sasl pulseaudio perl perlPackages.TextCSV + gobjectIntrospection + ] ++ (if enableGTK3 then [ gtk3 vala pygobject3 ] else [ gtk pygtk pygobject ]); NIX_CFLAGS_COMPILE = "-fstack-protector-all"; configureFlags = [ "--with-python" "--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; { description = "A GTK VNC widget"; - maintainers = with maintainers; [ raskin ]; + maintainers = with maintainers; [ raskin offline ]; platforms = platforms.linux; license = licenses.lgpl21; }; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index f2b10785962..39434aa4bb3 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -5222,6 +5222,8 @@ let libvirt = callPackage ../development/libraries/libvirt { }; + libvirt-glib = callPackage ../development/libraries/libvirt-glib { }; + libvisio = callPackage ../development/libraries/libvisio { }; libvisual = callPackage ../development/libraries/libvisual { }; @@ -5910,6 +5912,10 @@ let ustr = callPackage ../development/libraries/ustr { }; + usbredir = callPackage ../development/libraries/usbredir { + libusb = libusb1; + }; + ucommon = callPackage ../development/libraries/ucommon { }; vaapiIntel = callPackage ../development/libraries/vaapi-intel { }; @@ -9301,7 +9307,10 @@ let virtviewer = callPackage ../applications/virtualization/virt-viewer {}; virtmanager = callPackage ../applications/virtualization/virt-manager { 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 {}; -- cgit 1.4.1