Subject: bug#62174: Cannot use modules with an inferior kernel.

From: Robby Zambito <[email-masked]>
Date: Tue, 14 Mar 2023 17:48:04 -0400

Liliana Marie Prikler <[email-masked]> 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 "[email-masked]"))
  (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.