aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornathan <nathan_mail@nborghese.com>2025-03-13 20:36:27 -0400
committerMaxim Cournoyer <maxim.cournoyer@gmail.com>2025-03-17 20:55:38 +0900
commit614ba97d9847c2e52db9ffed9f98caf8a1e06922 (patch)
treea30b63892399e2d7e7b245423ecb5e3401d2166f
parent8e61e3baf63bf304f8714587da24015b682959d7 (diff)
downloadguix-614ba97d9847c2e52db9ffed9f98caf8a1e06922.tar.gz
guix-614ba97d9847c2e52db9ffed9f98caf8a1e06922.zip
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>
-rw-r--r--gnu/local.mk1
-rw-r--r--gnu/packages/patches/libvirt-respect-modules-path.patch15
-rw-r--r--gnu/packages/virtualization.scm3
-rw-r--r--gnu/services/virtualization.scm11
4 files changed, 25 insertions, 5 deletions
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