Robby Zambito <cont...@robbyzambito.me> writes: > Liliana Marie Prikler <liliana.prik...@gmail.com> writes: >> I think you should try to pin the kernel modules as well. If that >> still doesn't work as intended (it very well might), we have a proper >> case of something that should work but doesn't. >> >> Cheers > > Thanks for the suggestion. I tested with the following: > > ``` > (define-values (rz/linux rz/linux-kernel-modules) > (let* ((channels > (list (channel > (name 'guix) > (url "https://git.savannah.gnu.org/git/guix.git") > (commit "d37b467631d5b0e965ea933b8bda8448993580e9")))) > (inferior (inferior-for-channels channels)) > (kernel-version "6.1.15")) > (values (first (lookup-inferior-packages inferior "linux-libre" > kernel-version)) > (list (first (lookup-inferior-packages inferior > "v4l2loopback-linux-module")))))) > > (operating-system > ... > (kernel rz/linux) > (kernel-loadable-modules rz/linux-kernel-modules) > ...) > ``` > > But I receive a different error now: > > ``` > running profile hook of type 'linux-module-database'... > Backtrace: > 1 (primitive-load "/gnu/store/7ha0kn8fz8yfi26m3m8997wlc8m?") > In ice-9/boot-9.scm: > 2007:7 0 (error _ . _) > > ice-9/boot-9.scm:2007:7: In procedure error: > Specified Linux kernel and Linux kernel modules are not all of the same > version > ``` > > However, if I use the most recent kernel version available in the > inferior... > > ``` > (define-values (rz/linux rz/linux-kernel-modules) > (let* ((channels > (list (channel > (name 'guix) > (url "https://git.savannah.gnu.org/git/guix.git") > (commit "d37b467631d5b0e965ea933b8bda8448993580e9")))) > (inferior (inferior-for-channels channels)) > (kernel-version "6.2.2")) > (values (first (lookup-inferior-packages inferior "linux-libre")) > (list (first (lookup-inferior-packages inferior > "v4l2loopback-linux-module")))))) > ``` > > It actually works! So it seems that the problem is specifically with > using kernel modules with a kernel version other than the latest > linux-libre kernel from an inferior. I also tried using a specific > kernel version without an inferior like so: > > ``` > (operating-system > ... > (kernel (specification->package "linux-libre@6.1.15")) > (kernel-loadable-modules (list > (specification->package"v4l2loopback-linux-module"))) > ...) > ``` > > And that works as well. > > TL;DR: The issue has been narrowed down to using kernel modules with a > kernel from an inferior besides the latest kernel from that inferior.
I believe our kernel-loadable-modules is backed by a service with type linux-builder-service-type. It seems that the linux-builder-configuration->system-entry only deals gracefully with modules that are filtered by "(package? mod)" in order to rewrite the package with "package-for-kernel". So there are some things we'd need to do to ensure your use case works: - Get linux-builder-configuration->system-entry to support packages from an inferior. Can you try to wrap your kernel module package like such [untested], with rz/linux being the kernel inferior package you actually want: --8<---------------cut here---------------start------------->8--- (kernel rz/linux) (kernel-loadable-modules (map (lambda (mod) (package-for-kernel lz/linux mod)) rz/linux-kernel-modules)) --8<---------------cut here---------------end--------------->8--- If this doesn't work, we also need to make package-for-kernel support packages from an inferior for both the kernel and module argument, or create an alternative implementation that deals `linux-builder-configuration->system-entry' can dispatch to for this specific case. Good luck! - Jelle