~ruther/guix-local

614ba97d9847c2e52db9ffed9f98caf8a1e06922 — nathan 1 year, 3 months ago 8e61e3b
gnu: libvirt: Fix path to Linux modules.

* gnu/packages/virtualization.scm (libvirt): Use LINUX_MODULE_DIRECTORY to
find modules.
[source]: Add libvirt-respect-modules-path.patch.
* gnu/packages/patches/libvirt-respect-modules-path.patch: New file.
* gnu/local.mk: Register new file.
* gnu/services/virtualization.scm (libvirt-shepherd-service)
<#:environment-variables>: Pass LINUX_MODULE_DIRECTORY.

Change-Id: Idde5b59df3c1641fcbab376e6c694730769294d3
Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
M gnu/local.mk => gnu/local.mk +1 -0
@@ 1674,6 1674,7 @@ dist_patch_DATA =						\
  %D%/packages/patches/librewolf-neuter-locale-download.patch	\
  %D%/packages/patches/librewolf-use-system-wide-dir.patch	\
  %D%/packages/patches/libvirt-add-install-prefix.patch	\
  %D%/packages/patches/libvirt-respect-modules-path.patch	\
  %D%/packages/patches/libziparchive-add-includes.patch		\
  %D%/packages/patches/lightdm-arguments-ordering.patch		\
  %D%/packages/patches/lightdm-vnc-ipv6.patch			\

A gnu/packages/patches/libvirt-respect-modules-path.patch => gnu/packages/patches/libvirt-respect-modules-path.patch +15 -0
@@ 0,0 1,15 @@
Honor the LINUX_MODULE_DIRECTORY environment variable.

Upstream-status: N/A

--- a/src/util/virpci.c
+++ b/src/util/virpci.c
@@ -1459,6 +1459,7 @@ virPCIDeviceFindBestVFIOVariant(virPCIDevice *dev,
     }
 
     uname(&unameInfo);
-    modulesAliasPath = g_strdup_printf("/lib/modules/%s/modules.alias", unameInfo.release);
+    char* modulepath = getenv("LINUX_MODULE_DIRECTORY");
+    modulesAliasPath = g_strdup_printf("%s/%s/modules.alias", modulepath ? modulepath : "/lib/modules", unameInfo.release);
     if (virFileReadAll(modulesAliasPath, 8 * 1024 * 1024, &modulesAliasContent) < 0)
         return -1;

M gnu/packages/virtualization.scm => gnu/packages/virtualization.scm +2 -1
@@ 1562,7 1562,8 @@ pretty simple, REST API.")
                           version ".tar.xz"))
       (sha256
        (base32 "15jpfrn3d2zyhbm5ip7bmpjb6ch2bfxm1h6yfgh0l3bw3g9ppgg1"))
       (patches (search-patches "libvirt-add-install-prefix.patch"))))
       (patches (search-patches "libvirt-add-install-prefix.patch"
                                "libvirt-respect-modules-path.patch"))))
    (build-system meson-build-system)
    (arguments
     (list

M gnu/services/virtualization.scm => gnu/services/virtualization.scm +7 -4
@@ 508,11 508,14 @@ potential infinite waits blocking libvirt."))
                     (list (string-append #$libvirt "/sbin/libvirtd")
                           "-f" #$config-file
                           #$@(if listen-tcp? '("--listen") '()))
                     ;; For finding qemu and ip binaries.
                     ;; For finding qemu, ip binaries and kernel modules.
                     #:environment-variables
                     (list (string-append
                            "PATH=/run/current-system/profile/bin:"
                            "/run/current-system/profile/sbin"))))
                     (list
                      (string-append
                       "PATH=/run/current-system/profile/bin:"
                       "/run/current-system/profile/sbin")
                      "LINUX_MODULE_DIRECTORY="
                      "/run/booted-system/kernel/lib/modules")))
           (stop #~(make-kill-destructor))))))

(define libvirt-service-type