From 614ba97d9847c2e52db9ffed9f98caf8a1e06922 Mon Sep 17 00:00:00 2001 From: nathan Date: Thu, 13 Mar 2025 20:36:27 -0400 Subject: [PATCH] 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 --- gnu/local.mk | 1 + .../patches/libvirt-respect-modules-path.patch | 15 +++++++++++++++ gnu/packages/virtualization.scm | 3 ++- gnu/services/virtualization.scm | 11 +++++++---- 4 files changed, 25 insertions(+), 5 deletions(-) create mode 100644 gnu/packages/patches/libvirt-respect-modules-path.patch diff --git a/gnu/local.mk b/gnu/local.mk index 415f3fdd66..01d13a11ae 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -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 \ diff --git a/gnu/packages/patches/libvirt-respect-modules-path.patch b/gnu/packages/patches/libvirt-respect-modules-path.patch new file mode 100644 index 0000000000..faf40af018 --- /dev/null +++ b/gnu/packages/patches/libvirt-respect-modules-path.patch @@ -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; diff --git a/gnu/packages/virtualization.scm b/gnu/packages/virtualization.scm index 79e4346e60..330c790978 100644 --- a/gnu/packages/virtualization.scm +++ b/gnu/packages/virtualization.scm @@ -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 diff --git a/gnu/services/virtualization.scm b/gnu/services/virtualization.scm index 796b9bf86f..2a0f9bef27 100644 --- a/gnu/services/virtualization.scm +++ b/gnu/services/virtualization.scm @@ -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