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

2023-03-15 Thread Jelle Licht
Robby Zambito  writes:

> Liliana Marie Prikler  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







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

2023-03-14 Thread Robby Zambito


Liliana Marie Prikler  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.





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

2023-03-14 Thread Liliana Marie Prikler
Am Montag, dem 13.03.2023 um 23:27 -0400 schrieb Robby Zambito:
> Hi,
> 
> I use an inferior to pin my kernel version, but it seems like I
> cannot
> use modules with it. The following works fine:
> 
> ```
> (use-package-modules linux)
> (operating-system
>   ...
>   (kernel linux-libre)
>   (kernel-loadable-modules (list v4l2loopback-linux-module))
>   ...)
> ```
> 
> As does the following:
> 
> ```
> (define rz/linux
>   (let* ((channels
>   (list (channel
>  (name 'guix)
>  (url "https://git.savannah.gnu.org/git/guix.git;)
>  (commit
> "c81d2d448cbd051800867fe3f4b82ef3f4380ebf"
>  (inferior (inferior-for-channels channels))
>  (kernel-version "6.1.15"))
>     (first (lookup-inferior-packages inferior "linux-libre" kernel-
> version
> 
> (operating-system
>   ...
>   (kernel rz/linux)
>   ...)
> ```
> 
> However when I combine the two (using the inferior for the kernel +
> specify modules)...
> 
> ```
> (operating-system
>   ...
>   (kernel rz/linux)
>   (kernel-loadable-modules (list v4l2loopback-linux-module))
>   ...)
> ```
> 
> I get the following error:
> 
> ```
> Backtrace:
> In guix/store.scm:
>    659:37 19 (thunk)
>    1298:8 18 (call-with-build-handler #
> …)
>   2168:25 17 (run-with-store #
> …)
> In guix/scripts/system.scm:
>     843:2 16 (_ _)
>     717:8 15 (_ #)
> In gnu/system.scm:
>   1307:19 14 (operating-system-derivation _)
> In gnu/services.scm:
>   1140:36 13 (_ _)
> In srfi/srfi-1.scm:
>    586:29 12 (map1 (#< type: #
> …))
>    586:29 11 (map1 (#< type: #
> …))
>    586:29 10 (map1 (#< type: #
> …))
>    586:29  9 (map1 (#< type: #
> …))
>    586:17  8 (map1 (#< type: # …>))
> In gnu/services.scm:
>    951:29  7 (linux-builder-configuration->system-entry _)
> In guix/profiles.scm:
>     438:4  6 (packages->manifest _)
> In srfi/srfi-1.scm:
>    586:17  5 (map1 ((#)
> …))
> In guix/inferior.scm:
>     549:2  4 (loop (#)
> …)
>     529:4  3 (inferior-package-input-field (#)
> …)
>    473:18  2 (inferior-package-field (#)
> …)
> In ice-9/boot-9.scm:
>   1685:16  1 (raise-exception _ #:continuable? _)
>   1685:16  0 (raise-exception _ #:continuable? _)
> 
> ice-9/boot-9.scm:1685:16: In procedure raise-exception:
> In procedure struct-vtable: Wrong type argument in position 1
> (expecting struct): (# linux-libre@6.1.15 7ff5261088a0>)
> ```
> 
> It seems to me like this is a bug. If I am mistaken, some guidance
> would be appreciated.
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





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

2023-03-13 Thread Robby Zambito
Hi,

I use an inferior to pin my kernel version, but it seems like I cannot
use modules with it. The following works fine:

```
(use-package-modules linux)
(operating-system
  ...
  (kernel linux-libre)
  (kernel-loadable-modules (list v4l2loopback-linux-module))
  ...)
```

As does the following:

```
(define rz/linux
  (let* ((channels
  (list (channel
 (name 'guix)
 (url "https://git.savannah.gnu.org/git/guix.git;)
 (commit "c81d2d448cbd051800867fe3f4b82ef3f4380ebf"
 (inferior (inferior-for-channels channels))
 (kernel-version "6.1.15"))
(first (lookup-inferior-packages inferior "linux-libre" kernel-version

(operating-system
  ...
  (kernel rz/linux)
  ...)
```

However when I combine the two (using the inferior for the kernel +
specify modules)...

```
(operating-system
  ...
  (kernel rz/linux)
  (kernel-loadable-modules (list v4l2loopback-linux-module))
  ...)
```

I get the following error:

```
Backtrace:
In guix/store.scm:
   659:37 19 (thunk)
   1298:8 18 (call-with-build-handler # …)
  2168:25 17 (run-with-store # …)
In guix/scripts/system.scm:
843:2 16 (_ _)
717:8 15 (_ #)
In gnu/system.scm:
  1307:19 14 (operating-system-derivation _)
In gnu/services.scm:
  1140:36 13 (_ _)
In srfi/srfi-1.scm:
   586:29 12 (map1 (#< type: # …))
   586:29 11 (map1 (#< type: # …))
   586:29 10 (map1 (#< type: # …))
   586:29  9 (map1 (#< type: # …))
   586:17  8 (map1 (#< type: #))
In gnu/services.scm:
   951:29  7 (linux-builder-configuration->system-entry _)
In guix/profiles.scm:
438:4  6 (packages->manifest _)
In srfi/srfi-1.scm:
   586:17  5 (map1 ((#) …))
In guix/inferior.scm:
549:2  4 (loop (#) …)
529:4  3 (inferior-package-input-field (#) …)
   473:18  2 (inferior-package-field (#) …)
In ice-9/boot-9.scm:
  1685:16  1 (raise-exception _ #:continuable? _)
  1685:16  0 (raise-exception _ #:continuable? _)

ice-9/boot-9.scm:1685:16: In procedure raise-exception:
In procedure struct-vtable: Wrong type argument in position 1 (expecting 
struct): (#)
```

It seems to me like this is a bug. If I am mistaken, some guidance would
be appreciated.

Thanks,
Robby