summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--gnu/local.mk2
-rw-r--r--gnu/packages/patches/libvirt-create-machine-cgroup.patch48
-rw-r--r--gnu/packages/patches/libvirt-do-not-create-var-dirs.patch30
-rw-r--r--gnu/packages/virtualization.scm78
4 files changed, 94 insertions, 64 deletions
diff --git a/gnu/local.mk b/gnu/local.mk
index b037b397c3..f2d595f2cc 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -1263,7 +1263,7 @@ dist_patch_DATA =						\
   %D%/packages/patches/kdbusaddons-kinit-file-name.patch	\
   %D%/packages/patches/libffi-3.3-powerpc-fixes.patch		\
   %D%/packages/patches/libffi-float128-powerpc64le.patch	\
-  %D%/packages/patches/libvirt-do-not-create-var-dirs.patch	\
+  %D%/packages/patches/libvirt-create-machine-cgroup.patch	\
   %D%/packages/patches/libziparchive-add-includes.patch		\
   %D%/packages/patches/localed-xorg-keyboard.patch		\
   %D%/packages/patches/kdiagram-Fix-missing-link-libraries.patch \
diff --git a/gnu/packages/patches/libvirt-create-machine-cgroup.patch b/gnu/packages/patches/libvirt-create-machine-cgroup.patch
new file mode 100644
index 0000000000..585ac237e1
--- /dev/null
+++ b/gnu/packages/patches/libvirt-create-machine-cgroup.patch
@@ -0,0 +1,48 @@
+From 9ca0b2955edea162b255b428e493cd8ffac52167 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Miguel=20=C3=81ngel=20Arruga=20Vivas?=
+ <rosen644835@gmail.com>
+Date: Fri, 1 Nov 2019 17:29:00 +0100
+Subject: [PATCH] vircgroup: Ensure /machine group is associated with its
+ parent.
+
+Call first virCgroupNew on the parent group virCgroupNewPartition if
+it is available on before the creation of the child group.  This
+ensures that the creation of a first level group on the unified
+architecture, as the check at virCgroupV2ParseControllersFile as the
+parent file is there.
+
+Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1760233
+---
+ src/util/vircgroup.c | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c
+index b46f20abfd..33c61f2d45 100644
+--- a/src/util/vircgroup.c
++++ b/src/util/vircgroup.c
+@@ -855,9 +855,6 @@ virCgroupNewPartition(const char *path,
+     if (virCgroupSetPartitionSuffix(path, &newPath) < 0)
+         goto cleanup;
+ 
+-    if (virCgroupNew(-1, newPath, NULL, controllers, group) < 0)
+-        goto cleanup;
+-
+     if (STRNEQ(newPath, "/")) {
+         char *tmp;
+         parentPath = g_strdup(newPath);
+@@ -868,7 +865,12 @@ virCgroupNewPartition(const char *path,
+ 
+         if (virCgroupNew(-1, parentPath, NULL, controllers, &parent) < 0)
+             goto cleanup;
++    }
+ 
++    if (virCgroupNew(-1, newPath, parent, controllers, group) < 0)
++        goto cleanup;
++
++    if (parent) {
+         if (virCgroupMakeGroup(parent, *group, create, VIR_CGROUP_NONE) < 0)
+             goto cleanup;
+     }
+-- 
+2.23.0
+
diff --git a/gnu/packages/patches/libvirt-do-not-create-var-dirs.patch b/gnu/packages/patches/libvirt-do-not-create-var-dirs.patch
deleted file mode 100644
index 6b89d49fd4..0000000000
--- a/gnu/packages/patches/libvirt-do-not-create-var-dirs.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-We define localstatedir as /var, and so we shouldn't be installing empty
-directories there.
-
-diff --git a/src/meson.build b/src/meson.build
-index f13b85b74e..58040f2c5d 100644
---- a/src/meson.build
-+++ b/src/meson.build
-@@ -893,22 +893,6 @@ if conf.has('WITH_DTRACE_PROBES')
-   )
- endif
-
--
--# Install empty directories
--
--virt_install_dirs += [
--  localstatedir / 'cache' / 'libvirt',
--  localstatedir / 'lib' / 'libvirt' / 'images',
--  localstatedir / 'lib' / 'libvirt' / 'filesystems',
--  localstatedir / 'lib' / 'libvirt' / 'boot',
--]
--
--meson.add_install_script(
--  meson_python_prog.path(), python3_prog.path(), meson_install_dirs_prog.path(),
--  virt_install_dirs,
--)
--
--
- # Check driver files
-
- if host_machine.system() == 'linux'
diff --git a/gnu/packages/virtualization.scm b/gnu/packages/virtualization.scm
index 7a34f8db1f..c6929b9f1a 100644
--- a/gnu/packages/virtualization.scm
+++ b/gnu/packages/virtualization.scm
@@ -18,7 +18,6 @@
 ;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2020 Brett Gilio <brettg@gnu.org>
 ;;; Copyright © 2021 Leo Famulari <leo@famulari.name>
-;;; Copyright © 2021 Pierre Langlois <pierre.langlois@gmx.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -1066,49 +1065,64 @@ manage system or application containers.")
 (define-public libvirt
   (package
     (name "libvirt")
-    (version "7.1.0")
+    (version "5.8.0")
     (source
      (origin
        (method url-fetch)
        (uri (string-append "https://libvirt.org/sources/libvirt-"
                            version ".tar.xz"))
        (sha256
-        (base32 "0v50ckf56h6jd9bmqwp0lh2cmb7qqjmcb6y3mz2i2r15h06ih3w7"))
+        (base32 "0m8cqaqflvys5kaqpvb0qr4k365j09jc5xk6x70yvg8qkcl2hcz2"))
        (patches
-        (search-patches "libvirt-do-not-create-var-dirs.patch"))))
-    (build-system meson-build-system)
+        (search-patches "libvirt-create-machine-cgroup.patch"))))
+    (build-system gnu-build-system)
     (arguments
-     `(#:meson ,meson-0.55  ;; libvirt requires meson 0.54 or higher.
-       #:configure-flags
-       (list "-Ddriver_qemu=enabled"
-             "-Dqemu_user=nobody"
-             "-Dqemu_group=kvm"
-             "-Dpolkit=enabled")
+     `(#:configure-flags
+       (list "--with-qemu"
+             "--with-qemu-user=nobody"
+             "--with-qemu-group=kvm"
+             "--with-polkit"
+             (string-append "--docdir=" (assoc-ref %outputs "out") "/share/doc/"
+                            ,name "-" ,version)
+             "--sysconfdir=/etc"
+             "--localstatedir=/var")
        #:phases
        (modify-phases %standard-phases
-         (add-after 'unpack 'fix-sysconfdir-and-localstatedir
+         (add-before 'configure 'fix-BOURNE_SHELL-definition
+           ;; BOURNE_SHELL is hard-#defined to ‘/bin/sh’, causing test failures.
            (lambda _
-             (substitute* "meson.build"
-               ;; We set the prefix to be the package output, but we need
-               ;; localstatedir to be /var.  Sadly the build system doesn't
-               ;; seem to allow that easily.
-               (("localstatedir = prefix / get_option\\('localstatedir'\\)")
-                "localstatedir = get_option('localstatedir')")
-               ;; On the other hand, we keep sysconfdir using the prefix so
-               ;; that we install configuration files in the package output.
-               ;; However, we need to make sure the C code refers to /etc via
-               ;; SYSCONFDIR, and not the read-only configuration in the
-               ;; package output.
-               (("set_quoted\\('SYSCONFDIR', sysconfdir\\)")
-                "set_quoted('SYSCONFDIR', '/etc')"))
+             (substitute* "config.h.in"
+               (("/bin/sh") (which "sh")))
+             #t))
+         (add-before 'configure 'patch-libtirpc-file-names
+           (lambda* (#:key inputs #:allow-other-keys)
+             ;; libvirt uses an m4 macro instead of pkg-config to determine where
+             ;; the RPC headers are located.  Tell it to look in the right place.
+             (substitute* "configure"
+               (("/usr/include/tirpc")  ;defined in m4/virt-xdr.m4
+                (string-append (assoc-ref inputs "libtirpc")
+                               "/include/tirpc")))
              #t))
          (add-before 'configure 'disable-broken-tests
            (lambda _
-             (substitute* "tests/meson.build"
-               (("\\{ 'name': 'commandtest'.*") "")        ; hangs idly
-               (("\\{ 'name': 'qemuxml2argvtest'.*") "")   ; fails
-               (("\\{ 'name': 'virnetsockettest'.*") ""))  ; tries to network
-             #t)))))
+             (let ((tests (list "commandtest"      ; hangs idly
+                                "qemuxml2argvtest" ; fails
+                                "qemuhotplugtest"  ; fails
+                                "virnetsockettest" ; tries to network
+                                "virshtest")))     ; fails
+               (substitute* "tests/Makefile.in"
+                 (((format #f "(~a)\\$\\(EXEEXT\\)" (string-join tests "|")))
+                  ""))
+               #t)))
+         (replace 'install
+           ;; Since the sysconfdir and localstatedir should be /etc and /var
+           ;; at runtime, we must prevent writing to them at installation
+           ;; time.
+           (lambda* (#:key make-flags #:allow-other-keys)
+             (apply invoke "make" "install"
+                    "sysconfdir=/tmp/etc"
+                    "localstatedir=/tmp/var"
+                    make-flags))))))
     (inputs
      `(("libxml2" ,libxml2)
        ("eudev" ,eudev)
@@ -1135,9 +1149,7 @@ manage system or application containers.")
        ("perl" ,perl)
        ("pkg-config" ,pkg-config)
        ("polkit" ,polkit)
-       ("python" ,python-wrapper)
-       ("python-docutils" ,python-docutils) ;for rst2html
-       ("rpcsvc-proto" ,rpcsvc-proto)))     ;for 'rpcgen'
+       ("python" ,python-wrapper)))
     (home-page "https://libvirt.org")
     (synopsis "Simple API for virtualization")
     (description "Libvirt is a C toolkit to interact with the virtualization