[bug#77004] gnu: libvirt: Fix path to Linux modules
Commit Message
libvirt needs to load a file that is inside the modules folder.
Fix the path
Nix has a similar fix https://github.com/NixOS/nixpkgs/pull/286985
From f3317c91eb469ff54e31b0fafd45e2070a1bb06a Mon Sep 17 00:00:00 2001
Message-ID: <f3317c91eb469ff54e31b0fafd45e2070a1bb06a.1741914564.git.nathan_mail@nborghese.com>
From: nathan <nathan_mail@nborghese.com>
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
---
gnu/local.mk | 1 +
.../patches/libvirt-respect-modules-path.patch | 12 ++++++++++++
gnu/packages/virtualization.scm | 3 ++-
gnu/services/virtualization.scm | 10 ++++++----
4 files changed, 21 insertions(+), 5 deletions(-)
create mode 100644 gnu/packages/patches/libvirt-respect-modules-path.patch
@@ -1673,6 +1673,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 \
new file mode 100644
@@ -0,0 +1,12 @@
+use linux module path environment variable from modprobe if available
+--- 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;
@@ -1549,7 +1549,8 @@ (define-public libvirt
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
@@ -508,11 +508,13 @@ (define (libvirt-shepherd-service config)
(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
base-commit: 678b3dddfe442e643fe5cff7730d4f9690c3e2c2
--
2.48.1