From: raid5atemyhomework via Guix-patches via <guix-patches@gnu.org>
To: "45692@debbugs.gnu.org" <45692@debbugs.gnu.org>
Subject: [bug#45692] [PATCH 1/4] gnu: Allow services to install kernel-loadable modules.
Date: Wed, 06 Jan 2021 15:54:33 +0000 [thread overview]
Message-ID: <2yOs7mxigs8_Vx_yi858pxAkoyXmU8IidizK5grcmX4M92O5QK-_Ywo9nrHMHvzLGj4U7B9ysl26eNbiPmzmeOQsuFvp5VjouVptRfwxKng=@protonmail.com> (raw)
In-Reply-To: <f9YNSdmHSIAVHWwDRwnh8QVeNjUG4M6YMJMntulZ3s8cYPVCBHrVIirwkuGxpYIduWVNAyi13dFVlqUKs7_QXPDBvbDe_JNNEC_SoNBTprk=@protonmail.com>
From 4beb73c62995cf236b402dad8e1c36016027c781 Mon Sep 17 00:00:00 2001
From: raid5atemyhomework <raid5atemyhomework@protonmail.com>
Date: Tue, 5 Jan 2021 22:27:56 +0800
Subject: [PATCH 1/4] gnu: Allow services to install kernel-loadable modules.
* gnu/system.scm (operating-system-directory-base-entries): Remove code
to handle generation of "kernel" and "hurd".
(operating-system-default-essential-services): Instantiate
kernel-loadable-module-service.
(hurd-default-essential-services): Instantiate
kernel-loadable-module-service.
(package-for-kernel): Move ...
* gnu/services.scm: ... to here.
(kernel-loadable-module-service-type): New variable.
(kernel-loadable-module-service): New procedure.
* gnu/tests/linux-modules.scm (run-loadable-kernel-modules-test): Move
code to ...
(run-loadable-kernel-modules-test-base): ... new procedure here.
(run-loadable-kernel-modules-service-test): New procedure.
(%test-loadable-kernel-modules-service-0): New variable.
(%test-loadable-kernel-modules-service-1): New variable.
(%test-loadable-kernel-modules-service-2): New variable.
* doc/guix.texi: Document kernel-loadable-module-service-type.
---
doc/guix.texi | 6 +++
gnu/services.scm | 70 ++++++++++++++++++++++++++++++++
gnu/system.scm | 37 +++++------------
gnu/tests/linux-modules.scm | 81 ++++++++++++++++++++++++++++++++-----
4 files changed, 157 insertions(+), 37 deletions(-)
diff --git a/doc/guix.texi b/doc/guix.texi
index 0f6e95a65a..78770151e3 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -32409,6 +32409,12 @@ configuration when you use @command{guix system reconfigure},
@command{guix system init}, or @command{guix deploy}.
@end defvr
+@defvr {Scheme Variable} kernel-loadable-module-service-type
+Type of the service that collects lists of packages containing
+kernel-loadable modules, and adds them to the set of kernel-loadable
+modules.
+@end defvr
+
@node Shepherd Services
@subsection Shepherd Services
diff --git a/gnu/services.scm b/gnu/services.scm
index 13259dfaee..d7332a46b2 100644
--- a/gnu/services.scm
+++ b/gnu/services.scm
@@ -2,6 +2,7 @@
;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2016 Chris Marusich <cmmarusich@gmail.com>
;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
+;;; Copyright © 2021 raid5atemyhomework <raid5atemyhomework@protonmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -33,6 +34,8 @@
#:use-module (guix diagnostics)
#:autoload (guix openpgp) (openpgp-format-fingerprint)
#:use-module (guix modules)
+ #:use-module (guix packages)
+ #:use-module (guix utils)
#:use-module (gnu packages base)
#:use-module (gnu packages bash)
#:use-module (gnu packages hurd)
@@ -75,6 +78,7 @@
service-back-edges
instantiate-missing-services
fold-services
+ kernel-loadable-module-service
service-error?
missing-value-service-error?
@@ -106,6 +110,7 @@
profile-service-type
firmware-service-type
gc-root-service-type
+ kernel-loadable-module-service-type
%boot-service
%activation-service
@@ -864,6 +869,71 @@ as Wifi cards.")))
will not be reclaimed by the garbage collector.")
(default-value '())))
+;; Configuration for the kernel builder.
+(define-record-type* <kernel-builder-configuration> kernel-builder-configuration
+ make-kernel-builder-configuration
+ kernel-builder-configuration?
+ this-kernel-builder-configuration
+
+ (kernel kernel-builder-configuration-kernel (default #f))
+ (hurd kernel-builder-configuration-hurd (default #f))
+ (modules kernel-builder-configuration-modules (default '())))
+
+(define (package-for-kernel target-kernel module-package)
+ "Return a package like MODULE-PACKAGE, adapted for TARGET-KERNEL, if
+possible (that is if there's a LINUX keyword argument in the build system)."
+ (package
+ (inherit module-package)
+ (arguments
+ (substitute-keyword-arguments (package-arguments module-package)
+ ((#:linux kernel #f)
+ target-kernel)))))
+
+(define (kernel-builder-configuration->system-entry config)
+ "Return the kernel and hurd entries of the 'system' directory."
+ (mbegin %store-monad
+ (let* ((kernel (kernel-builder-configuration-kernel config))
+ (hurd (kernel-builder-configuration-hurd config))
+ (modules (kernel-builder-configuration-modules config))
+ (kernel (if hurd
+ kernel
+ (profile
+ (content (packages->manifest
+ (cons kernel
+ (map (lambda (module)
+ (if (package? module)
+ (package-for-kernel kernel module)
+ module))
+ modules))))
+ (hooks (list linux-module-database))))))
+ (return `(("kernel" ,kernel)
+ ,@(if hurd `(("hurd" ,hurd)) '()))))))
+
+(define (kernel-builder-configuration-add-modules config modules)
+ "Constructs a kernel builder configuration that has its modules extended."
+ (kernel-builder-configuration
+ (inherit config)
+ (modules (append (kernel-builder-configuration-modules config) modules))))
+
+(define kernel-loadable-module-service-type
+ (service-type (name 'kernel-loadable-modules)
+ (extensions
+ (list (service-extension system-service-type
+ kernel-builder-configuration->system-entry)))
+ (compose concatenate)
+ (extend kernel-builder-configuration-add-modules)
+ (description
+ "Register packages containing kernel-loadable modules and adds them
+to the system.")))
+
+(define (kernel-loadable-module-service kernel hurd modules)
+ "Constructs the service that sets up kernel loadable modules."
+ (service kernel-loadable-module-service-type
+ (kernel-builder-configuration
+ (kernel kernel)
+ (hurd hurd)
+ (modules modules))))
+
\f
;;;
;;; Service folding.
diff --git a/gnu/system.scm b/gnu/system.scm
index c284a18379..5c530f176e 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -12,6 +12,7 @@
;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <jannek@gnu.org>
;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2021 raid5atemyhomework <raid5atemyhomework@protonmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -600,16 +601,6 @@ OS."
(file-append (operating-system-kernel os)
"/" (system-linux-image-file-name))))
-(define (package-for-kernel target-kernel module-package)
- "Return a package like MODULE-PACKAGE, adapted for TARGET-KERNEL, if
-possible (that is if there's a LINUX keyword argument in the build system)."
- (package
- (inherit module-package)
- (arguments
- (substitute-keyword-arguments (package-arguments module-package)
- ((#:linux kernel #f)
- target-kernel)))))
-
(define %default-modprobe-blacklist
;; List of kernel modules to blacklist by default.
'("usbmouse" ;races with bcm5974, see <https://bugs.gnu.org/35574>
@@ -625,26 +616,10 @@ possible (that is if there's a LINUX keyword argument in the build system)."
"Return the basic entries of the 'system' directory of OS for use as the
value of the SYSTEM-SERVICE-TYPE service."
(let* ((locale (operating-system-locale-directory os))
- (kernel (operating-system-kernel os))
(hurd (operating-system-hurd os))
- (modules (operating-system-kernel-loadable-modules os))
- (kernel (if hurd
- kernel
- (profile
- (content (packages->manifest
- (cons kernel
- (map (lambda (module)
- (if (package? module)
- (package-for-kernel kernel
- module)
- module))
- modules))))
- (hooks (list linux-module-database)))))
(initrd (and (not hurd) (operating-system-initrd-file os)))
(params (operating-system-boot-parameters-file os)))
- `(("kernel" ,kernel)
- ,@(if hurd `(("hurd" ,hurd)) '())
- ("parameters" ,params)
+ `(("parameters" ,params)
,@(if initrd `(("initrd" ,initrd)) '())
("locale" ,locale)))) ;used by libc
@@ -663,6 +638,10 @@ bookkeeping."
(host-name (host-name-service (operating-system-host-name os)))
(entries (operating-system-directory-base-entries os)))
(cons* (service system-service-type entries)
+ (kernel-loadable-module-service
+ (operating-system-kernel os)
+ (operating-system-hurd os)
+ (operating-system-kernel-loadable-modules os))
%boot-service
;; %SHEPHERD-ROOT-SERVICE must come last so that the gexp that
@@ -699,6 +678,10 @@ bookkeeping."
(define (hurd-default-essential-services os)
(let ((entries (operating-system-directory-base-entries os)))
(list (service system-service-type entries)
+ (kernel-loadable-module-service
+ (operating-system-kernel os)
+ (operating-system-hurd os)
+ (operating-system-kernel-loadable-modules os))
%boot-service
%hurd-startup-service
%activation-service
diff --git a/gnu/tests/linux-modules.scm b/gnu/tests/linux-modules.scm
index 953b132ef7..9739e4124d 100644
--- a/gnu/tests/linux-modules.scm
+++ b/gnu/tests/linux-modules.scm
@@ -2,6 +2,7 @@
;;; Copyright © 2019 Jakob L. Kreuze <zerodaysfordays@sdf.org>
;;; Copyright © 2020 Danny Milosavljevic <dannym@scratchpost.org>
;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
+;;; Copyright © 2021 raid5atemyhomework <raid5atemyhomework@protonmail.com>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -34,7 +35,10 @@
#:use-module (guix utils)
#:export (%test-loadable-kernel-modules-0
%test-loadable-kernel-modules-1
- %test-loadable-kernel-modules-2))
+ %test-loadable-kernel-modules-2
+ %test-loadable-kernel-modules-service-0
+ %test-loadable-kernel-modules-service-1
+ %test-loadable-kernel-modules-service-2))
;;; Commentary:
;;;
@@ -66,17 +70,11 @@ that MODULES are actually loaded."
(member module modules string=?))
'#$modules))))))
-(define* (run-loadable-kernel-modules-test module-packages module-names)
- "Run a test of an OS having MODULE-PACKAGES, and verify that MODULE-NAMES
-are loaded in memory."
+(define* (run-loadable-kernel-modules-test-base base-os module-names)
+ "Run a test of BASE-OS, verifying that MODULE-NAMES are loaded in memory."
(define os
(marionette-operating-system
- (operating-system
- (inherit (simple-operating-system))
- (services (cons (service kernel-module-loader-service-type module-names)
- (operating-system-user-services
- (simple-operating-system))))
- (kernel-loadable-modules module-packages))
+ base-os
#:imported-modules '((guix combinators))))
(define vm (virtual-machine os))
(define (test script)
@@ -98,6 +96,37 @@ are loaded in memory."
(gexp->derivation "loadable-kernel-modules"
(test (modules-loaded?-program os module-names))))
+(define* (run-loadable-kernel-modules-test module-packages module-names)
+ "Run a test of an OS having MODULE-PACKAGES, and verify that MODULE-NAMES
+are loaded in memory."
+ (run-loadable-kernel-modules-test-base
+ (operating-system
+ (inherit (simple-operating-system))
+ (services (cons (service kernel-module-loader-service-type module-names)
+ (operating-system-user-services
+ (simple-operating-system))))
+ (kernel-loadable-modules module-packages))
+ module-names))
+
+(define* (run-loadable-kernel-modules-service-test module-packages module-names)
+ "Run a test of an OS having MODULE-PACKAGES, which are loaded by creating a
+service that extends KERNEL-LOADABLE-MODULE-SERVICE-TYPE. Then verify that
+MODULE-NAMES are loaded in memory."
+ (define module-installing-service-type
+ (service-type
+ (name 'module-installing-service)
+ (extensions (list (service-extension kernel-loadable-module-service-type
+ (const module-packages))))
+ (default-value #f)))
+ (run-loadable-kernel-modules-test-base
+ (operating-system
+ (inherit (simple-operating-system))
+ (services (cons* (service kernel-module-loader-service-type module-names)
+ (service module-installing-service-type)
+ (operating-system-user-services
+ (simple-operating-system)))))
+ module-names))
+
(define %test-loadable-kernel-modules-0
(system-test
(name "loadable-kernel-modules-0")
@@ -129,3 +158,35 @@ with two extra modules.")
(package-arguments
ddcci-driver-linux))))))
'("acpi_call" "ddcci")))))
+
+(define %test-loadable-kernel-modules-service-0
+ (system-test
+ (name "loadable-kernel-modules-service-0")
+ (description "Tests loadable kernel modules extensible service with no
+extra modules.")
+ (value (run-loadable-kernel-modules-service-test '() '()))))
+
+(define %test-loadable-kernel-modules-service-1
+ (system-test
+ (name "loadable-kernel-modules-service-1")
+ (description "Tests loadable kernel modules extensible service with one
+extra module.")
+ (value (run-loadable-kernel-modules-service-test
+ (list ddcci-driver-linux)
+ '("ddcci")))))
+
+(define %test-loadable-kernel-modules-service-2
+ (system-test
+ (name "loadable-kernel-modules-service-2")
+ (description "Tests loadable kernel modules extensible service with two
+extra modules.")
+ (value (run-loadable-kernel-modules-service-test
+ (list acpi-call-linux-module
+ (package
+ (inherit ddcci-driver-linux)
+ (arguments
+ `(#:linux #f
+ ,@(strip-keyword-arguments '(#:linux)
+ (package-arguments
+ ddcci-driver-linux))))))
+ '("acpi_call" "ddcci")))))
--
2.29.2
next prev parent reply other threads:[~2021-01-06 15:55 UTC|newest]
Thread overview: 81+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-06 15:52 [bug#45692] [PATCH 0/4] Even Better ZFS Support on Guix raid5atemyhomework via Guix-patches via
2021-01-06 15:54 ` raid5atemyhomework via Guix-patches via [this message]
2021-01-08 16:16 ` [bug#45692] [PATCH 1/4] gnu: Allow services to install kernel-loadable modules raid5atemyhomework via Guix-patches via
2021-02-10 14:13 ` [bug#45692] [PATCH 0/4] Even Better ZFS Support on Guix Ludovic Courtès
2021-02-10 15:44 ` Ludovic Courtès
2021-02-10 16:49 ` raid5atemyhomework via Guix-patches via
2021-01-06 15:55 ` [bug#45692] [PATCH 2/4] gnu: Make file-systems target extensible by services raid5atemyhomework via Guix-patches via
2021-01-23 13:05 ` 宋文武
2021-01-25 0:18 ` guix-patches--- via
2021-02-10 14:17 ` [bug#45692] [PATCH 0/4] Even Better ZFS Support on Guix Ludovic Courtès
2021-02-10 14:46 ` raid5atemyhomework via Guix-patches via
2021-01-06 15:56 ` [bug#45692] [PATCH 3/4] gnu: Fix ZFS package raid5atemyhomework via Guix-patches via
2021-01-07 8:23 ` Danny Milosavljevic
2021-01-06 15:57 ` [bug#45692] [PATCH 4/4] gnu: Add ZFS service raid5atemyhomework via Guix-patches via
2021-01-06 19:41 ` [bug#45703] kernel-module-configuration-service for configuring kernel parameters Danny Milosavljevic
2021-01-07 0:04 ` raid5atemyhomework via Guix-patches via
2021-01-07 5:38 ` [bug#45692] " raid5atemyhomework via Guix-patches via
2021-01-07 9:16 ` [bug#42193] " raid5atemyhomework via Guix-patches via
2021-01-08 15:02 ` [bug#45692] [PATCH 4/4] gnu: Add ZFS service raid5atemyhomework via Guix-patches via
2021-01-09 8:31 ` raid5atemyhomework via Guix-patches via
2021-02-08 3:31 ` Danny Milosavljevic
2021-02-08 6:25 ` raid5atemyhomework via Guix-patches via
2021-02-10 14:27 ` [bug#45692] [PATCH 0/4] Even Better ZFS Support on Guix Ludovic Courtès
2021-02-10 14:32 ` raid5atemyhomework via Guix-patches via
2021-02-13 1:49 ` raid5atemyhomework via Guix-patches via
2021-03-22 14:33 ` [bug#45692] [PATCH v3 0/3] New patch series for " raid5atemyhomework via Guix-patches via
2021-03-28 12:55 ` Léo Le Bouter via Guix-patches via
2021-03-29 4:39 ` raid5atemyhomework via Guix-patches via
2021-07-23 15:11 ` raid5atemyhomework via Guix-patches via
2021-03-22 14:33 ` [bug#45692] [PATCH v3 1/3] gnu: Allow services to install kernel-loadable modules raid5atemyhomework via Guix-patches via
2021-05-11 14:17 ` Danny Milosavljevic
2021-03-22 14:34 ` [bug#45692] [PATCH v3 2/3] gnu: Add zfs-auto-snapshot raid5atemyhomework via Guix-patches via
2021-05-11 14:05 ` Danny Milosavljevic
2021-05-13 1:21 ` raid5atemyhomework via Guix-patches via
2021-05-13 13:08 ` Danny Milosavljevic
2021-03-22 14:35 ` [bug#45692] [PATCH v3 3/3] gnu: Add ZFS service type raid5atemyhomework via Guix-patches via
2021-07-25 14:03 ` raid5atemyhomework via Guix-patches via
2021-07-25 14:31 ` [bug#45692] [PATCH v4 " raid5atemyhomework via Guix-patches via
2021-08-01 9:41 ` raid5atemyhomework via Guix-patches via
2021-08-10 11:43 ` raid5atemyhomework via Guix-patches via
2021-08-31 0:48 ` raid5atemyhomework via Guix-patches via
2021-09-02 20:57 ` Maxime Devos
2021-09-02 22:22 ` Maxime Devos
2021-09-03 12:41 ` raid5atemyhomework via Guix-patches via
2021-09-04 18:58 ` raid5atemyhomework via Guix-patches via
2021-09-06 8:08 ` zimoun
2021-09-06 10:40 ` Maxime Devos
2021-09-06 11:08 ` raid5atemyhomework via Guix-patches via
2021-09-06 17:17 ` zimoun
2021-09-07 9:54 ` Maxime Devos
2021-09-08 1:23 ` raid5atemyhomework via Guix-patches via
2021-09-15 14:04 ` raid5atemyhomework via Guix-patches via
2021-09-21 9:42 ` zimoun
2021-09-04 21:19 ` Xinglu Chen
2021-09-06 10:52 ` raid5atemyhomework via Guix-patches via
2021-09-06 14:22 ` Xinglu Chen
2021-09-02 21:24 ` [bug#45692] Gaslighting Mason Loring Bliss
2021-09-03 12:22 ` Maxime Devos
2021-09-06 7:59 ` [bug#45692] zimoun
2021-09-30 14:56 ` [bug#45692] [PATCH v5 3/3] gnu: Add ZFS service type raid5atemyhomework via Guix-patches via
2021-10-19 13:18 ` raid5atemyhomework via Guix-patches via
2021-10-27 7:30 ` raid5atemyhomework via Guix-patches via
2021-10-27 16:38 ` pelzflorian (Florian Pelz)
2021-11-30 15:26 ` raid5atemyhomework via Guix-patches via
2021-12-12 13:32 ` raid5atemyhomework via Guix-patches via
2021-12-21 21:15 ` [bug#45643] [PATCH 0/3] Better Support for ZFS on Guix Brice Waegeneire
2022-01-01 11:59 ` [bug#45692] bug#45643: " raid5atemyhomework via Guix-patches via
2022-01-19 14:24 ` raid5atemyhomework via Guix-patches via
2022-01-07 4:21 ` [bug#45692] " raid5atemyhomework via Guix-patches via
2022-02-14 14:10 ` raid5atemyhomework via Guix-patches via
2022-02-18 7:13 ` raid5atemyhomework via Guix-patches via
2022-03-16 23:44 ` raid5atemyhomework via Guix-patches via
2022-03-17 8:24 ` Liliana Marie Prikler
2022-03-17 17:22 ` Maxime Devos
2022-03-17 18:38 ` zimoun
2022-03-17 19:10 ` Maxime Devos
2022-03-19 14:24 ` raid5atemyhomework via Guix-patches via
2022-03-20 4:42 ` Maxim Cournoyer
2022-03-19 14:09 ` raid5atemyhomework via Guix-patches via
2022-03-19 16:22 ` Leo Famulari
2022-03-19 14:25 ` [bug#45692] (No Subject) raid5atemyhomework via Guix-patches via
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='2yOs7mxigs8_Vx_yi858pxAkoyXmU8IidizK5grcmX4M92O5QK-_Ywo9nrHMHvzLGj4U7B9ysl26eNbiPmzmeOQsuFvp5VjouVptRfwxKng=@protonmail.com' \
--to=guix-patches@gnu.org \
--cc=45692@debbugs.gnu.org \
--cc=raid5atemyhomework@protonmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/guix.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.