From patchwork Sat Jul 4 18:54:25 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Brice Waegeneire X-Patchwork-Id: 23050 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 496EA27BBE3; Sat, 4 Jul 2020 19:55:16 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-2.9 required=5.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.2 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTP id 237DB27BBE4 for ; Sat, 4 Jul 2020 19:55:11 +0100 (BST) Received: from localhost ([::1]:46830 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jrnJe-0006bJ-Gl for patchwork@mira.cbaines.net; Sat, 04 Jul 2020 14:55:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43954) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jrnJW-0006YR-QB for guix-patches@gnu.org; Sat, 04 Jul 2020 14:55:02 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:48089) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jrnJW-0006q9-GG for guix-patches@gnu.org; Sat, 04 Jul 2020 14:55:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1jrnJW-0005H6-ER for guix-patches@gnu.org; Sat, 04 Jul 2020 14:55:02 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#42193] [WIP 1/6] services: simulated-wifi: Use 'kernel-module-loader'. Resent-From: Brice Waegeneire Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Sat, 04 Jul 2020 18:55:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 42193 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: To: 42193@debbugs.gnu.org X-Debbugs-Original-To: guix-patches@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.159388888220169 (code B ref -1); Sat, 04 Jul 2020 18:55:02 +0000 Received: (at submit) by debbugs.gnu.org; 4 Jul 2020 18:54:42 +0000 Received: from localhost ([127.0.0.1]:59617 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jrnJB-0005FD-Kj for submit@debbugs.gnu.org; Sat, 04 Jul 2020 14:54:41 -0400 Received: from lists.gnu.org ([209.51.188.17]:45496) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jrnJA-0005F6-1I for submit@debbugs.gnu.org; Sat, 04 Jul 2020 14:54:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43870) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jrnJ9-0006S8-Or for guix-patches@gnu.org; Sat, 04 Jul 2020 14:54:39 -0400 Received: from relay6-d.mail.gandi.net ([217.70.183.198]:41537) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jrnJ7-0006n8-Jd for guix-patches@gnu.org; Sat, 04 Jul 2020 14:54:39 -0400 X-Originating-IP: 176.181.186.101 Received: from localhost (i15-les02-ntr-176-181-186-101.sfr.lns.abo.bbox.fr [176.181.186.101]) (Authenticated sender: brice@waegenei.re) by relay6-d.mail.gandi.net (Postfix) with ESMTPSA id 2C1CBC0003 for ; Sat, 4 Jul 2020 18:54:34 +0000 (UTC) From: Brice Waegeneire Date: Sat, 4 Jul 2020 20:54:25 +0200 Message-Id: <20200704185431.13739-1-brice@waegenei.re> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200704185234.12571-1-brice@waegenei.re> References: <20200704185234.12571-1-brice@waegenei.re> MIME-Version: 1.0 Received-SPF: pass client-ip=217.70.183.198; envelope-from=brice@waegenei.re; helo=relay6-d.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/04 14:54:35 X-ACL-Warn: Detected OS = Linux 3.11 and newer X-Spam_score_int: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: "Guix-patches" X-getmail-retrieved-from-mailbox: Patches * gnu/services/networking.scm (simulated-wifi-shepherd-services): Change 'mac-simulation-module' service to use 'kernel-module-loader'. --- gnu/services/networking.scm | 25 +++++++------------------ 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/gnu/services/networking.scm b/gnu/services/networking.scm index 348dc369d8..353fdce2bb 100644 --- a/gnu/services/networking.scm +++ b/gnu/services/networking.scm @@ -13,6 +13,7 @@ ;;; Copyright © 2019 Maxim Cournoyer ;;; Copyright © 2019 Sou Bunnbu ;;; Copyright © 2019 Alex Griffin +;;; Copyright © 2020 Brice Waegeneire ;;; ;;; This file is part of GNU Guix. ;;; @@ -33,6 +34,7 @@ #:use-module (gnu services) #:use-module (gnu services base) #:use-module (gnu services configuration) + #:use-module (gnu services linux) #:use-module (gnu services shepherd) #:use-module (gnu services dbus) #:use-module (gnu system shadow) @@ -1442,10 +1444,10 @@ simulation." (append (hostapd-shepherd-services config #:requirement '(unblocked-wifi - mac-simulation-module)) + kernel-module-loader)) (list (shepherd-service (provision '(unblocked-wifi)) - (requirement '(file-systems mac-simulation-module)) + (requirement '(file-systems kernel-module-loader)) (documentation "Unblock WiFi devices for use by mac80211_hwsim.") (start #~(lambda _ @@ -1453,21 +1455,6 @@ simulation." "unblock" "0") (invoke #$(file-append util-linux "/sbin/rfkill") "unblock" "1"))) - (one-shot? #t)) - (shepherd-service - (provision '(mac-simulation-module)) - (requirement '(file-systems)) - (modules '((guix build utils))) - (documentation - "Load the mac80211_hwsim Linux kernel module.") - (start (with-imported-modules '((guix build utils)) - #~(lambda _ - ;; XXX: We can't use 'load-linux-module*' here because it - ;; expects a flat module directory. - (setenv "LINUX_MODULE_DIRECTORY" - "/run/booted-system/kernel/lib/modules") - (invoke #$(file-append kmod "/bin/modprobe") - "mac80211_hwsim")))) (one-shot? #t))))) (define simulated-wifi-service-type @@ -1475,7 +1462,9 @@ simulation." (name 'simulated-wifi) (extensions (list (service-extension shepherd-root-service-type - simulated-wifi-shepherd-services))) + simulated-wifi-shepherd-services) + (service-extension kernel-module-loader-service-type + (const '("mac80211_hwsim"))))) (default-value (hostapd-configuration (interface "wlan1") (ssid "Test Network"))) From patchwork Sat Jul 4 18:54:27 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Brice Waegeneire X-Patchwork-Id: 23055 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 199A027BBE3; Sat, 4 Jul 2020 19:55:25 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-2.9 required=5.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.2 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTP id 1EE6027BBE1 for ; Sat, 4 Jul 2020 19:55:24 +0100 (BST) Received: from localhost ([::1]:47884 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jrnJr-00076V-MZ for patchwork@mira.cbaines.net; Sat, 04 Jul 2020 14:55:23 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43968) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jrnJY-0006b2-0K for guix-patches@gnu.org; Sat, 04 Jul 2020 14:55:04 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:48092) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jrnJX-0006qP-NW for guix-patches@gnu.org; Sat, 04 Jul 2020 14:55:03 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1jrnJX-0005HS-N9 for guix-patches@gnu.org; Sat, 04 Jul 2020 14:55:03 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#42193] [WIP 2/6] services: Add 'kernel-profile-service-type'. Resent-From: Brice Waegeneire Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Sat, 04 Jul 2020 18:55:03 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 42193 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: To: 42193@debbugs.gnu.org X-Debbugs-Original-To: guix-patches@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.159388888520231 (code B ref -1); Sat, 04 Jul 2020 18:55:03 +0000 Received: (at submit) by debbugs.gnu.org; 4 Jul 2020 18:54:45 +0000 Received: from localhost ([127.0.0.1]:59629 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jrnJE-0005G8-W5 for submit@debbugs.gnu.org; Sat, 04 Jul 2020 14:54:45 -0400 Received: from lists.gnu.org ([209.51.188.17]:45502) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jrnJC-0005FM-5d for submit@debbugs.gnu.org; Sat, 04 Jul 2020 14:54:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43916) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jrnJB-0006TM-Tq for guix-patches@gnu.org; Sat, 04 Jul 2020 14:54:41 -0400 Received: from relay7-d.mail.gandi.net ([217.70.183.200]:43355) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jrnJ9-0006nH-5b for guix-patches@gnu.org; Sat, 04 Jul 2020 14:54:41 -0400 X-Originating-IP: 176.181.186.101 Received: from localhost (i15-les02-ntr-176-181-186-101.sfr.lns.abo.bbox.fr [176.181.186.101]) (Authenticated sender: brice@waegenei.re) by relay7-d.mail.gandi.net (Postfix) with ESMTPSA id 0178A20002 for ; Sat, 4 Jul 2020 18:54:36 +0000 (UTC) From: Brice Waegeneire Date: Sat, 4 Jul 2020 20:54:27 +0200 Message-Id: <20200704185431.13739-3-brice@waegenei.re> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200704185234.12571-1-brice@waegenei.re> References: <20200704185234.12571-1-brice@waegenei.re> MIME-Version: 1.0 Received-SPF: pass client-ip=217.70.183.200; envelope-from=brice@waegenei.re; helo=relay7-d.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/04 14:54:37 X-ACL-Warn: Detected OS = Linux 3.11 and newer X-Spam_score_int: -35 X-Spam_score: -3.6 X-Spam_bar: --- X-Spam_report: (-3.6 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: "Guix-patches" X-getmail-retrieved-from-mailbox: Patches * gnu/system.scm (operating-system-default-essential-services): Use 'kernel-profile-service-type'. (operating-system-default-essential-services): Remove kernel profile. (package-for-kernel): Move it to … * gnu/services.scm (package-for-kernel): … here. (kernel-profile-configuration, kernel-profile-configuration->profile-entry, kernel-profile-service-type): New variables. * gnu/tests/linux-modules.scm (run-loadable-kernel-modules-test): Test 'kernel-profile-service-type'. --- gnu/services.scm | 66 ++++++++++++++++++++++++++++++++++++- gnu/system.scm | 14 +++----- gnu/tests/linux-modules.scm | 10 +++--- 3 files changed, 75 insertions(+), 15 deletions(-) diff --git a/gnu/services.scm b/gnu/services.scm index f6dc56d940..b5ec222207 100644 --- a/gnu/services.scm +++ b/gnu/services.scm @@ -2,6 +2,7 @@ ;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès ;;; Copyright © 2016 Chris Marusich ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen +;;; Copyright © 2020 Brice Waegeneire ;;; ;;; This file is part of GNU Guix. ;;; @@ -30,9 +31,11 @@ #:use-module (guix describe) #:use-module (guix sets) #:use-module (guix ui) - #:use-module ((guix utils) #:select (source-properties->location)) + #:use-module ((guix utils) #:select (source-properties->location + substitute-keyword-arguments)) #:autoload (guix openpgp) (openpgp-format-fingerprint) #:use-module (guix modules) + #:use-module (guix packages) #:use-module (gnu packages base) #:use-module (gnu packages bash) #:use-module (gnu packages hurd) @@ -105,6 +108,12 @@ firmware-service-type gc-root-service-type + kernel-profile-configuration + kernel-profile-configuration? + kernel-profile-configuration-kernel + kernel-profile-configuration-packages + kernel-profile-service-type + %boot-service %activation-service etc-service)) @@ -474,6 +483,61 @@ channels in use and CONFIG-FILE, if it is true." itself: the channels used when building the system, and its configuration file, when available."))) + +;;; +;;; Kernel profile. +;;; + +(define-record-type* + kernel-profile-configuration make-kernel-profile-configuration + kernel-profile-configuration? + (kernel kernel-profile-configuration-kernel) ; + (packages kernel-profile-configuration-packages ; list of + (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-profile-configuration->profile-entry config) + "Return a system entry for the kernel profile CONFIG." + (let* ((kernel (kernel-profile-configuration-kernel config)) + (packages (map (lambda (package) + (if (package? package) + (package-for-kernel kernel + package) + package)) + (kernel-profile-configuration-packages config)))) + (with-monad %store-monad + (return `(("kernel" + ,(profile + (content (packages->manifest + (cons kernel + (delete-duplicates packages eq?)))) + (hooks (list linux-module-database))))))))) + +(define kernel-profile-service-type + (service-type (name 'kernel-profile) + (description "This is the @dfn{kernel profile}, available as +@file{/run/current-system/kernel}.") + (extensions + (list (service-extension + system-service-type + kernel-profile-configuration->profile-entry))) + (compose concatenate) + (extend (lambda (config additional-packages) + (match-record config + (kernel packages) + (kernel-profile-configuration + (kernel kernel) ;the kernel package to use + (packages (append packages additional-packages)))))))) + ;;; ;;; Cleanup. diff --git a/gnu/system.scm b/gnu/system.scm index bfbcb6fbdd..ff374dddda 100644 --- a/gnu/system.scm +++ b/gnu/system.scm @@ -511,16 +511,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 @@ -574,6 +564,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) + (service kernel-profile-service-type + (kernel-profile-configuration + (kernel (operating-system-kernel os)) + (packages (operating-system-kernel-loadable-modules os)))) %boot-service ;; %SHEPHERD-ROOT-SERVICE must come last so that the gexp that diff --git a/gnu/tests/linux-modules.scm b/gnu/tests/linux-modules.scm index 953b132ef7..22e9a0c65c 100644 --- a/gnu/tests/linux-modules.scm +++ b/gnu/tests/linux-modules.scm @@ -73,10 +73,12 @@ are loaded in memory." (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)) + (services (cons* (service kernel-module-loader-service-type module-names) + (simple-service 'kernel-module-packages + kernel-profile-service-type + module-packages) + (operating-system-user-services + (simple-operating-system))))) #:imported-modules '((guix combinators)))) (define vm (virtual-machine os)) (define (test script) From patchwork Sat Jul 4 18:54:28 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Brice Waegeneire X-Patchwork-Id: 23054 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id F3AB027BBE3; Sat, 4 Jul 2020 19:55:19 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-2.9 required=5.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL autolearn=unavailable autolearn_force=no version=3.4.2 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTP id 3022527BBE1 for ; Sat, 4 Jul 2020 19:55:18 +0100 (BST) Received: from localhost ([::1]:47504 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jrnJl-0006vi-On for patchwork@mira.cbaines.net; Sat, 04 Jul 2020 14:55:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43962) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jrnJX-0006Yf-57 for guix-patches@gnu.org; Sat, 04 Jul 2020 14:55:03 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:48090) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jrnJW-0006qD-SS for guix-patches@gnu.org; Sat, 04 Jul 2020 14:55:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1jrnJW-0005HD-SM for guix-patches@gnu.org; Sat, 04 Jul 2020 14:55:02 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#42193] [WIP 3/6] services: Add 'modprobe-service-type'. Resent-From: Brice Waegeneire Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Sat, 04 Jul 2020 18:55:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 42193 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: To: 42193@debbugs.gnu.org X-Debbugs-Original-To: guix-patches@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.159388888420216 (code B ref -1); Sat, 04 Jul 2020 18:55:02 +0000 Received: (at submit) by debbugs.gnu.org; 4 Jul 2020 18:54:44 +0000 Received: from localhost ([127.0.0.1]:59625 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jrnJD-0005Ft-UX for submit@debbugs.gnu.org; Sat, 04 Jul 2020 14:54:44 -0400 Received: from lists.gnu.org ([209.51.188.17]:45500) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jrnJB-0005FG-UC for submit@debbugs.gnu.org; Sat, 04 Jul 2020 14:54:42 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43908) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jrnJB-0006Sc-KH for guix-patches@gnu.org; Sat, 04 Jul 2020 14:54:41 -0400 Received: from relay4-d.mail.gandi.net ([217.70.183.196]:34659) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jrnJ9-0006nL-1M for guix-patches@gnu.org; Sat, 04 Jul 2020 14:54:41 -0400 X-Originating-IP: 176.181.186.101 Received: from localhost (i15-les02-ntr-176-181-186-101.sfr.lns.abo.bbox.fr [176.181.186.101]) (Authenticated sender: brice@waegenei.re) by relay4-d.mail.gandi.net (Postfix) with ESMTPSA id 923BCE0004 for ; Sat, 4 Jul 2020 18:54:37 +0000 (UTC) From: Brice Waegeneire Date: Sat, 4 Jul 2020 20:54:28 +0200 Message-Id: <20200704185431.13739-4-brice@waegenei.re> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200704185234.12571-1-brice@waegenei.re> References: <20200704185234.12571-1-brice@waegenei.re> MIME-Version: 1.0 Received-SPF: pass client-ip=217.70.183.196; envelope-from=brice@waegenei.re; helo=relay4-d.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/04 14:54:36 X-ACL-Warn: Detected OS = Linux 3.11 and newer X-Spam_score_int: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: "Guix-patches" X-getmail-retrieved-from-mailbox: Patches * gnu/services.scm (%linux-kernel-activation): Remove 'activate-modprobe' from it. (%modprobe-wrapper): Move it… * gnu/services/linux.scm (%modprobe-wrapper): …here and make it a procedure taking one argument specifying the configuration directory. (modprobe-service-type, modprobe-environment, modprobe->activation-gexp): New variables. * gnu/system.scm (operating-system-default-essential-services): Add 'modprobe-service-type'. * gnu/system/linux-container.scm (container-essential-services): Add 'modprobe-service-type' to the list of services to be removed. --- gnu/services.scm | 22 +------------- gnu/services/linux.scm | 53 +++++++++++++++++++++++++++++++++- gnu/system.scm | 2 ++ gnu/system/linux-container.scm | 2 ++ 4 files changed, 57 insertions(+), 22 deletions(-) diff --git a/gnu/services.scm b/gnu/services.scm index b5ec222207..7df9bf9d46 100644 --- a/gnu/services.scm +++ b/gnu/services.scm @@ -654,31 +654,11 @@ ACTIVATION-SCRIPT-TYPE." ;; receives. (service activation-service-type #t)) -(define %modprobe-wrapper - ;; Wrapper for the 'modprobe' command that knows where modules live. - ;; - ;; This wrapper is typically invoked by the Linux kernel ('call_modprobe', - ;; in kernel/kmod.c), a situation where the 'LINUX_MODULE_DIRECTORY' - ;; environment variable is not set---hence the need for this wrapper. - (let ((modprobe "/run/current-system/profile/bin/modprobe")) - (program-file "modprobe" - #~(begin - (setenv "LINUX_MODULE_DIRECTORY" - "/run/booted-system/kernel/lib/modules") - ;; FIXME: Remove this crutch when the patch #40422, - ;; updating to kmod 27 is merged. - (setenv "MODPROBE_OPTIONS" - "-C /etc/modprobe.d") - (apply execl #$modprobe - (cons #$modprobe (cdr (command-line)))))))) - +;; TODO Maybe rename it (define %linux-kernel-activation ;; Activation of the Linux kernel running on the bare metal (as opposed to ;; running in a container.) #~(begin - ;; Tell the kernel to use our 'modprobe' command. - (activate-modprobe #$%modprobe-wrapper) - ;; Let users debug their own processes! (activate-ptrace-attach))) diff --git a/gnu/services/linux.scm b/gnu/services/linux.scm index 12934c2084..c608cc4d8d 100644 --- a/gnu/services/linux.scm +++ b/gnu/services/linux.scm @@ -23,6 +23,7 @@ #:use-module (guix modules) #:use-module (gnu services) #:use-module (gnu services shepherd) + #:use-module (gnu system pam) #:use-module (gnu packages linux) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) @@ -42,7 +43,9 @@ earlyoom-configuration-send-notification-command earlyoom-service-type - kernel-module-loader-service-type)) + kernel-module-loader-service-type + + modprobe-service-type)) ;;; @@ -177,3 +180,51 @@ representation." (compose concatenate) (extend append) (default-value '()))) + + +;;; +;;; Modprobe service. +;;; + +(define (%modprobe-wrapper directory) + "Return a wrapper for modprobe loading configuration files from CONFIG." + ;; Wrapper for the 'modprobe' command that knows where modules live. + ;; + ;; This wrapper is typically invoked by the Linux kernel ('call_modprobe', + ;; in kernel/kmod.c), a situation where the 'LINUX_MODULE_DIRECTORY' + ;; environment variable is not set---hence the need for this wrapper. + (let ((modprobe "/run/current-system/profile/bin/modprobe")) + (program-file "modprobe" + #~(begin + (setenv "LINUX_MODULE_DIRECTORY" + "/run/booted-system/kernel/lib/modules") + (setenv "MODPROBE_OPTIONS" + (string-append "--config=" #$directory)) + (apply execl #$modprobe + (cons #$modprobe (cdr (command-line)))))))) + +(define (modprobe->activation-gexp configs) + "Return a gexp to tell the kernel to use modprobe configured with CONFIGS +files." + (let ((directory (file-union "modprobe.d" configs))) + #~(activate-modprobe #$(%modprobe-wrapper directory)))) + +(define (modprobe-environment configs) + (let ((options #~(string-append + "--config=" + #$(file-union "modprobe.d" + configs)))) + `(("MODPROBE_OPTIONS" . ,options)))) + +(define modprobe-service-type + (service-type + (name 'modropbe) + (description "Tell the kernel to use Guix's 'modprobe'.") + (default-value '()) ; list of + (extensions + (list (service-extension activation-service-type + modprobe->activation-gexp) + (service-extension session-environment-service-type + modprobe-environment))) + (compose concatenate) + (extend append))) diff --git a/gnu/system.scm b/gnu/system.scm index ff374dddda..ba9eeb66b8 100644 --- a/gnu/system.scm +++ b/gnu/system.scm @@ -58,6 +58,7 @@ #:use-module (gnu services) #:use-module (gnu services shepherd) #:use-module (gnu services base) + #:use-module (gnu services linux) #:use-module (gnu bootloader) #:use-module (gnu system shadow) #:use-module (gnu system nss) @@ -594,6 +595,7 @@ bookkeeping." (service profile-service-type (operating-system-packages os)) other-fs + (service modprobe-service-type) (append mappings swaps ;; Add the firmware service. diff --git a/gnu/system/linux-container.scm b/gnu/system/linux-container.scm index c5e2e4bf9c..b8bf88e495 100644 --- a/gnu/system/linux-container.scm +++ b/gnu/system/linux-container.scm @@ -31,6 +31,7 @@ #:use-module (gnu build linux-container) #:use-module (gnu services) #:use-module (gnu services base) + #:use-module (gnu services linux) #:use-module (gnu services networking) #:use-module (gnu services shepherd) #:use-module (gnu system) @@ -48,6 +49,7 @@ from OS that are needed on the bare metal and not in a container." (remove (lambda (service) (memq (service-kind service) (list (service-kind %linux-bare-metal-service) + modprobe-service-type firmware-service-type system-service-type))) (operating-system-default-essential-services os))) From patchwork Sat Jul 4 18:54:29 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Brice Waegeneire X-Patchwork-Id: 23051 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 61EEE27BBE4; Sat, 4 Jul 2020 19:55:17 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-2.9 required=5.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL autolearn=unavailable autolearn_force=no version=3.4.2 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTP id 0D97E27BBE6 for ; Sat, 4 Jul 2020 19:55:13 +0100 (BST) Received: from localhost ([::1]:46898 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jrnJg-0006fK-GQ for patchwork@mira.cbaines.net; Sat, 04 Jul 2020 14:55:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43972) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jrnJY-0006bb-Q3 for guix-patches@gnu.org; Sat, 04 Jul 2020 14:55:04 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:48094) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jrnJY-0006qX-Gp for guix-patches@gnu.org; Sat, 04 Jul 2020 14:55:04 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1jrnJY-0005Hj-Ft for guix-patches@gnu.org; Sat, 04 Jul 2020 14:55:04 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#42193] [WIP 4/6] services: kernel-module-loader: Return a single 'shepherd-service'. Resent-From: Brice Waegeneire Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Sat, 04 Jul 2020 18:55:04 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 42193 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: To: 42193@debbugs.gnu.org X-Debbugs-Original-To: guix-patches@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.159388888620244 (code B ref -1); Sat, 04 Jul 2020 18:55:04 +0000 Received: (at submit) by debbugs.gnu.org; 4 Jul 2020 18:54:46 +0000 Received: from localhost ([127.0.0.1]:59633 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jrnJF-0005GN-SL for submit@debbugs.gnu.org; Sat, 04 Jul 2020 14:54:46 -0400 Received: from lists.gnu.org ([209.51.188.17]:45508) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jrnJD-0005Fb-3G for submit@debbugs.gnu.org; Sat, 04 Jul 2020 14:54:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43934) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jrnJC-0006TY-Qz for guix-patches@gnu.org; Sat, 04 Jul 2020 14:54:42 -0400 Received: from relay5-d.mail.gandi.net ([217.70.183.197]:53489) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jrnJA-0006nU-Jw for guix-patches@gnu.org; Sat, 04 Jul 2020 14:54:42 -0400 X-Originating-IP: 176.181.186.101 Received: from localhost (i15-les02-ntr-176-181-186-101.sfr.lns.abo.bbox.fr [176.181.186.101]) (Authenticated sender: brice@waegenei.re) by relay5-d.mail.gandi.net (Postfix) with ESMTPSA id 6B9A91C0003 for ; Sat, 4 Jul 2020 18:54:38 +0000 (UTC) From: Brice Waegeneire Date: Sat, 4 Jul 2020 20:54:29 +0200 Message-Id: <20200704185431.13739-5-brice@waegenei.re> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200704185234.12571-1-brice@waegenei.re> References: <20200704185234.12571-1-brice@waegenei.re> MIME-Version: 1.0 Received-SPF: pass client-ip=217.70.183.197; envelope-from=brice@waegenei.re; helo=relay5-d.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/04 14:54:38 X-ACL-Warn: Detected OS = Linux 3.11 and newer X-Spam_score_int: -35 X-Spam_score: -3.6 X-Spam_bar: --- X-Spam_report: (-3.6 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: "Guix-patches" X-getmail-retrieved-from-mailbox: Patches * gnu/services/linux.scm (kernel-module-loader-shepherd-service): Return a 'shepherd-service' instead of a list of it. (kernel-module-loader-service-type): Adjust it. --- gnu/services/linux.scm | 59 +++++++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 30 deletions(-) diff --git a/gnu/services/linux.scm b/gnu/services/linux.scm index c608cc4d8d..7ea30a1270 100644 --- a/gnu/services/linux.scm +++ b/gnu/services/linux.scm @@ -140,35 +140,34 @@ representation." (define kernel-module-loader-shepherd-service (match-lambda ((and (? list? kernel-modules) ((? string?) ...)) - (list - (shepherd-service - (documentation "Load kernel modules.") - (provision '(kernel-module-loader)) - (requirement '(file-systems)) - (one-shot? #t) - (modules `((srfi srfi-1) - (srfi srfi-34) - (srfi srfi-35) - (rnrs io ports) - ,@%default-modules)) - (start - #~(lambda _ - (cond - ((null? '#$kernel-modules) #t) - ((file-exists? "/proc/sys/kernel/modprobe") - (let ((modprobe (call-with-input-file - "/proc/sys/kernel/modprobe" get-line))) - (guard (c ((message-condition? c) - (format (current-error-port) "~a~%" - (condition-message c)) - #f)) - (every (lambda (module) - (invoke/quiet modprobe "--" module)) - '#$kernel-modules)))) - (else - (format (current-error-port) "error: ~a~%" - "Kernel is missing loadable module support.") - #f))))))))) + (shepherd-service + (documentation "Load kernel modules.") + (provision '(kernel-module-loader)) + (requirement '(file-systems)) + (one-shot? #t) + (modules `((srfi srfi-1) + (srfi srfi-34) + (srfi srfi-35) + (rnrs io ports) + ,@%default-modules)) + (start + #~(lambda _ + (cond + ((null? '#$kernel-modules) #t) + ((file-exists? "/proc/sys/kernel/modprobe") + (let ((modprobe (call-with-input-file + "/proc/sys/kernel/modprobe" get-line))) + (guard (c ((message-condition? c) + (format (current-error-port) "~a~%" + (condition-message c)) + #f)) + (every (lambda (module) + (invoke/quiet modprobe "--" module)) + '#$kernel-modules)))) + (else + (format (current-error-port) "error: ~a~%" + "Kernel is missing loadable module support.") + #f)))))))) (define kernel-module-loader-service-type (service-type @@ -176,7 +175,7 @@ representation." (description "Load kernel modules.") (extensions (list (service-extension shepherd-root-service-type - kernel-module-loader-shepherd-service))) + (compose list kernel-module-loader-shepherd-service)))) (compose concatenate) (extend append) (default-value '()))) From patchwork Sat Jul 4 18:54:30 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Brice Waegeneire X-Patchwork-Id: 23052 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id D6AB127BBE4; Sat, 4 Jul 2020 19:55:17 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-2.9 required=5.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.2 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTP id 0C26727BBE5 for ; Sat, 4 Jul 2020 19:55:12 +0100 (BST) Received: from localhost ([::1]:46854 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jrnJf-0006dT-H9 for patchwork@mira.cbaines.net; Sat, 04 Jul 2020 14:55:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43964) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jrnJX-0006aC-KO for guix-patches@gnu.org; Sat, 04 Jul 2020 14:55:03 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:48091) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jrnJX-0006qI-B7 for guix-patches@gnu.org; Sat, 04 Jul 2020 14:55:03 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1jrnJX-0005HL-AW for guix-patches@gnu.org; Sat, 04 Jul 2020 14:55:03 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#42193] [WIP 5/6] WIP services: Add kernel-arguments-service-type. Resent-From: Brice Waegeneire Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Sat, 04 Jul 2020 18:55:03 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 42193 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: To: 42193@debbugs.gnu.org X-Debbugs-Original-To: guix-patches@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.159388888520223 (code B ref -1); Sat, 04 Jul 2020 18:55:03 +0000 Received: (at submit) by debbugs.gnu.org; 4 Jul 2020 18:54:45 +0000 Received: from localhost ([127.0.0.1]:59627 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jrnJE-0005G1-Iw for submit@debbugs.gnu.org; Sat, 04 Jul 2020 14:54:44 -0400 Received: from lists.gnu.org ([209.51.188.17]:45504) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jrnJC-0005FP-OA for submit@debbugs.gnu.org; Sat, 04 Jul 2020 14:54:43 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43928) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jrnJC-0006TR-Fj for guix-patches@gnu.org; Sat, 04 Jul 2020 14:54:42 -0400 Received: from relay4-d.mail.gandi.net ([217.70.183.196]:50675) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jrnJA-0006nX-9R for guix-patches@gnu.org; Sat, 04 Jul 2020 14:54:42 -0400 X-Originating-IP: 176.181.186.101 Received: from localhost (i15-les02-ntr-176-181-186-101.sfr.lns.abo.bbox.fr [176.181.186.101]) (Authenticated sender: brice@waegenei.re) by relay4-d.mail.gandi.net (Postfix) with ESMTPSA id 086E7E0007 for ; Sat, 4 Jul 2020 18:54:38 +0000 (UTC) From: Brice Waegeneire Date: Sat, 4 Jul 2020 20:54:30 +0200 Message-Id: <20200704185431.13739-6-brice@waegenei.re> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200704185234.12571-1-brice@waegenei.re> References: <20200704185234.12571-1-brice@waegenei.re> MIME-Version: 1.0 Received-SPF: pass client-ip=217.70.183.196; envelope-from=brice@waegenei.re; helo=relay4-d.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/04 14:54:36 X-ACL-Warn: Detected OS = Linux 3.11 and newer X-Spam_score_int: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: "Guix-patches" X-getmail-retrieved-from-mailbox: Patches --- gnu/services.scm | 14 ++++++++++++++ gnu/system.scm | 39 +++++++++++++++++++++++++++++++++++++-- 2 files changed, 51 insertions(+), 2 deletions(-) diff --git a/gnu/services.scm b/gnu/services.scm index 7df9bf9d46..7cf71ae97a 100644 --- a/gnu/services.scm +++ b/gnu/services.scm @@ -538,6 +538,20 @@ possible (that is if there's a LINUX keyword argument in the build system)." (kernel kernel) ;the kernel package to use (packages (append packages additional-packages)))))))) + +;;; +;;; Kernel arguments. +;;; + +;; (define kernel-arguments-service-type +;; (service-type (name 'kernel-arguments) +;; (description "Set the kernel arguments.") +;; (extensions +;; (list (service-extension system-service-type +;; kernel-arguments->profile-entry))) +;; (compose concatenate) +;; (extend append))) + ;;; ;;; Cleanup. diff --git a/gnu/system.scm b/gnu/system.scm index ba9eeb66b8..805aa2ab01 100644 --- a/gnu/system.scm +++ b/gnu/system.scm @@ -56,6 +56,7 @@ #:use-module (gnu packages compression) #:use-module (gnu packages firmware) #:use-module (gnu services) + #:use-module (gnu services linux) #:use-module (gnu services shepherd) #:use-module (gnu services base) #:use-module (gnu services linux) @@ -258,11 +259,37 @@ (sudoers-file operating-system-sudoers-file ; file-like (default %sudoers-specification))) +(define (operating-system-modules-kernel-arguments os) + "Return the kernel arguments for builtin modules specified in + from OS." + (let* ((kernel-module-configuration-service + (find (lambda (service) + (eq? (service-kind service) + kernel-module-configuration-service-type)) + (operating-system-user-services os))) + (modules (if kernel-module-configuration-service + (service-value kernel-module-configuration-service) + '()))) + (display kernel-module-configuration-service) + (display (concatenate + (filter-map (lambda (module) + (if (kernel-module-is-builtin? module) + (kernel-module->kernel-arguments module) + #f)) + modules))) + (concatenate + (filter-map (lambda (module) + (if (kernel-module-is-builtin? module) + (kernel-module->kernel-arguments module) + #f)) + modules)))) + (define (operating-system-kernel-arguments os root-device) "Return all the kernel arguments, including the ones not specified directly by the user." (append (bootable-kernel-arguments os root-device) - (operating-system-user-kernel-arguments os))) + (operating-system-user-kernel-arguments os) + (operating-system-modules-kernel-arguments os))) ;;; @@ -512,6 +539,7 @@ OS." (file-append (operating-system-kernel os) "/" (system-linux-image-file-name)))) +;; TODO Migrate to KMCS (define %default-modprobe-blacklist ;; List of kernel modules to blacklist by default. '("usbmouse" ;races with bcm5974, see @@ -569,6 +597,11 @@ bookkeeping." (kernel-profile-configuration (kernel (operating-system-kernel os)) (packages (operating-system-kernel-loadable-modules os)))) + ;; (service kernel-arguments-service-type + ;; (kernel-arguments-configuration + ;; (root (operating-system-root-file-system os)) + ;; (bootloader (operating-system-bootloader os)) + ;; (parameters "TODO"))) %boot-service ;; %SHEPHERD-ROOT-SERVICE must come last so that the gexp that @@ -1232,7 +1265,9 @@ such as '--root' and '--load' to ." (kernel-arguments (if system-kernel-arguments? (operating-system-kernel-arguments os root-device) - (operating-system-user-kernel-arguments os))) + (append + (operating-system-user-kernel-arguments os) + (operating-system-modules-kernel-arguments os)))) (initrd initrd) (multiboot-modules multiboot-modules) (bootloader-name bootloader-name) From patchwork Sat Jul 4 18:54:31 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Brice Waegeneire X-Patchwork-Id: 23056 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id 14EB527BBE3; Sat, 4 Jul 2020 19:55:31 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-2.9 required=5.0 tests=BAYES_00,MAILING_LIST_MULTI, RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL autolearn=unavailable autolearn_force=no version=3.4.2 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTP id E53C427BBE1 for ; Sat, 4 Jul 2020 19:55:29 +0100 (BST) Received: from localhost ([::1]:48090 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jrnJx-0007Dd-Hd for patchwork@mira.cbaines.net; Sat, 04 Jul 2020 14:55:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43974) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jrnJZ-0006d4-9C for guix-patches@gnu.org; Sat, 04 Jul 2020 14:55:05 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:48095) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jrnJY-0006qc-V7 for guix-patches@gnu.org; Sat, 04 Jul 2020 14:55:04 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1jrnJY-0005Hq-TQ for guix-patches@gnu.org; Sat, 04 Jul 2020 14:55:04 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#42193] [WIP 6/6] WIP services: Add kernel-module-configuration service. Resent-From: Brice Waegeneire Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Sat, 04 Jul 2020 18:55:04 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 42193 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: To: 42193@debbugs.gnu.org X-Debbugs-Original-To: guix-patches@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.159388888720253 (code B ref -1); Sat, 04 Jul 2020 18:55:04 +0000 Received: (at submit) by debbugs.gnu.org; 4 Jul 2020 18:54:47 +0000 Received: from localhost ([127.0.0.1]:59635 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jrnJH-0005Ga-5t for submit@debbugs.gnu.org; Sat, 04 Jul 2020 14:54:47 -0400 Received: from lists.gnu.org ([209.51.188.17]:45510) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jrnJD-0005Fn-Jm for submit@debbugs.gnu.org; Sat, 04 Jul 2020 14:54:44 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43936) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jrnJD-0006Tg-BI for guix-patches@gnu.org; Sat, 04 Jul 2020 14:54:43 -0400 Received: from relay7-d.mail.gandi.net ([217.70.183.200]:46061) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jrnJA-0006nj-Vn for guix-patches@gnu.org; Sat, 04 Jul 2020 14:54:43 -0400 X-Originating-IP: 176.181.186.101 Received: from localhost (i15-les02-ntr-176-181-186-101.sfr.lns.abo.bbox.fr [176.181.186.101]) (Authenticated sender: brice@waegenei.re) by relay7-d.mail.gandi.net (Postfix) with ESMTPSA id 955E020004 for ; Sat, 4 Jul 2020 18:54:39 +0000 (UTC) From: Brice Waegeneire Date: Sat, 4 Jul 2020 20:54:31 +0200 Message-Id: <20200704185431.13739-7-brice@waegenei.re> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200704185234.12571-1-brice@waegenei.re> References: <20200704185234.12571-1-brice@waegenei.re> MIME-Version: 1.0 Received-SPF: pass client-ip=217.70.183.200; envelope-from=brice@waegenei.re; helo=relay7-d.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/04 14:54:37 X-ACL-Warn: Detected OS = Linux 3.11 and newer X-Spam_score_int: -35 X-Spam_score: -3.6 X-Spam_bar: --- X-Spam_report: (-3.6 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: "Guix-patches" X-getmail-retrieved-from-mailbox: Patches --- gnu/services/linux.scm | 166 +++++++++++++++++++++++++++++++++++- gnu/tests/linux-modules.scm | 67 +++++++++------ 2 files changed, 208 insertions(+), 25 deletions(-) diff --git a/gnu/services/linux.scm b/gnu/services/linux.scm index 7ea30a1270..9773dd5072 100644 --- a/gnu/services/linux.scm +++ b/gnu/services/linux.scm @@ -45,7 +45,22 @@ kernel-module-loader-service-type - modprobe-service-type)) + modprobe-service-type + + kernel-module + kernel-module? + kernel-module-name + kernel-module-package + kernel-module-aliases + kernel-module-install + kernel-module-remove + kernel-module-pre-dependencies + kernel-module-post-dependencies + kernel-module-blacklist? + kernel-module-load? + kernel-module-is-builtin? + kernel-module->kernel-arguments + kernel-module-configuration-service-type)) ;;; @@ -151,6 +166,9 @@ representation." (rnrs io ports) ,@%default-modules)) (start + ;; TODO Verify that we are loading a loadable kernel and not a builtin + ;; one looking in + ;; /run/booted-system/kernel/lib/modules/5.4.39/modules.builtin #~(lambda _ (cond ((null? '#$kernel-modules) #t) @@ -227,3 +245,149 @@ files." modprobe-environment))) (compose concatenate) (extend append))) + + +;;; +;;; Kernel module configuration. +;;; + +;; NOTE Maybe have sperate records betwwen and +;; +(define-record-type* + kernel-module make-kernel-module + kernel-module? + (name kernel-module-name) ; string + ;; For out-of-tree modules + (package kernel-module-package + (default #f)) ; #f | + ;; NOTE Maybe use an alist instead + (options kernel-module-options + (default '())) ; list of strings + (aliases kernel-module-aliases + (default '())) ; list of strings + (install kernel-module-install + (default #f)) ; #f | string + (remove kernel-module-remove + (default #f)) ; #f | string + (pre-dependencies kernel-module-pre-dependencies + (default '())) ; list of strings + (post-dependencies kernel-module-post-dependencies + (default '())) ; list of strings + (blacklist? kernel-module-blacklist? + (default #f)) ; boolean + ;; NOTE Only possible if it's not built-in + ;; TODO maybe trow an error when it's set to true on a built-in module + (load? kernel-module-load? + (default #f))) ; boolean + +;; FIXME use 'modules.builtin' instead +(define (kernel-module-is-builtin? module) + (if (kernel-module-package module) #f + #t)) + +(define (kernel-module->kernel-arguments module) + "Return a list of kernel arguments for MODULE." + (match-record module + (name options blacklist?) + (filter (lambda (s) (not (string-null? s))) + (list (if blacklist? (string-append name ".blacklist=yes") "") + (if (null? options) "" + (map (lambda (option) + (string-append name "." option)) + options)))))) + +(define (kernel-module->config module) + "Return a config string for MODULE." + (match-record module + (name options aliases install remove pre-dependencies + post-dependencies blacklist?) + (string-concatenate + (list (if (null? options) "" + (format #f "options ~a~{ ~a~}\n" name options)) + (if blacklist? (format #f "blacklist ~a\n" name) + "") + (if (null? aliases) "" + (map (lambda (alias) + (format #f "alias ~a ~a\n" alias name)) + aliases)) + (if install (format #f "install ~a ~a\n" name install) + "") + (if remove (format #f "remove ~a ~a\n" name remove) + "") + (if (null? pre-dependencies) "" + (map (lambda (dependency) + (format #f "softdep ~a :pre ~a\n" + name dependency)) + pre-dependencies)) + (if (null? post-dependencies) "" + (map (lambda (dependency) + (format #f "softdep ~a :post ~a\n" + name dependency)) + post-dependencies)))))) + +(define (string-underscorize s) + "Replace '-' characters by '_' in string S." + (string-map (lambda (c) (if (char=? c #\-) #\_ c)) s)) + +(define (kernel-modules->config-files modules) + "Return a list of pairs of file name and gexp, to be used by 'file-union', +from MODULES." + (define (kernel-module->filename-gexp module) + (let ((config (kernel-module->config module)) + (name (kernel-module-name module))) + (if (string-null? config) #f + (list (string-append name ".conf") + (plain-file (string-append name ".conf") config))))) + (filter-map + (lambda (module) + (let ((module (kernel-module + (inherit module) + ;; XXX The kernel replace '-' by '_' in module name, we do + ;; the same to make name collision visible, that would + ;; otherwise be hidden. + (name (string-underscorize (kernel-module-name module)))))) + (if (kernel-module-is-builtin? module) #f + (kernel-module->filename-gexp module)))) + modules)) + +(define (kernel-modules->packages modules) + "Return a list of packages from MODULES." + (filter-map (lambda (module) + (kernel-module-package module)) + modules)) + +(define (kernel-modules-to-load modules) + "Return a list of loadable module names, from MODULES, to be loaded." + (filter-map (lambda (module) + (if (and (not (kernel-module-is-builtin? module)) + (kernel-module-load? module)) + (kernel-module-name module) + #f)) + modules)) + +(define kernel-module-configuration-service-type + (service-type + (name 'kernel-module-configuration) + (description + "Configure kernel modules, in similar manner as @file{modprobe.d}.") + (default-value '()) + (extensions + (list (service-extension modprobe-service-type + kernel-modules->config-files) + (service-extension kernel-profile-service-type + kernel-modules->packages) + (service-extension kernel-module-loader-service-type + kernel-modules-to-load))) + (compose concatenate) + (extend append))) + +;; TODO Make a naked modprobe call use MODPROBE_OPTIONS environment or +;; /proc/sys/kernel/modprobe + +;; TODO write a helper to load a module from guile using modprobe command from +;; '/proc/sys/kernel/modprobe' or %modprobe-wrapper. See linux-module-builder +;; maybe. + +;; NOTE Throw an error when kernel-module-name isn't unique? It may already +;; do it by itself already because 2 loadable module will try to create +;; separeta config file with the same name. diff --git a/gnu/tests/linux-modules.scm b/gnu/tests/linux-modules.scm index 22e9a0c65c..296066e68f 100644 --- a/gnu/tests/linux-modules.scm +++ b/gnu/tests/linux-modules.scm @@ -32,6 +32,7 @@ #:use-module (guix monads) #:use-module (guix store) #:use-module (guix utils) + #:use-module (srfi srfi-1) #:export (%test-loadable-kernel-modules-0 %test-loadable-kernel-modules-1 %test-loadable-kernel-modules-2)) @@ -66,19 +67,18 @@ 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 modules) + "Run a test of an OS having MODULES and verify that they 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) - (simple-service 'kernel-module-packages - kernel-profile-service-type - module-packages) - (operating-system-user-services - (simple-operating-system))))) + (inherit (simple-operating-system)) + (services (cons* (service kernel-module-loader-service-type) + (service kernel-module-configuration-service-type + modules) + (operating-system-user-services + (simple-operating-system))))) #:imported-modules '((guix combinators)))) (define vm (virtual-machine os)) (define (test script) @@ -97,15 +97,20 @@ are loaded in memory." marionette)) (test-end) (exit (= (test-runner-fail-count (test-runner-current)) 0))))) - (gexp->derivation "loadable-kernel-modules" - (test (modules-loaded?-program os module-names)))) + (let ((modules (filter-map (lambda (module) + (if (kernel-module-load? module) + (kernel-module-name module) + #f)) + modules))) + (gexp->derivation "loadable-kernel-modules" + (test (modules-loaded?-program os modules))))) (define %test-loadable-kernel-modules-0 (system-test (name "loadable-kernel-modules-0") (description "Tests loadable kernel modules facility of with no extra modules.") - (value (run-loadable-kernel-modules-test '() '())))) + (value (run-loadable-kernel-modules-test '())))) (define %test-loadable-kernel-modules-1 (system-test @@ -113,8 +118,11 @@ with no extra modules.") (description "Tests loadable kernel modules facility of with one extra module.") (value (run-loadable-kernel-modules-test - (list ddcci-driver-linux) - '("ddcci"))))) + (list (kernel-module + (name "ddcci") + (package ddcci-driver-linux) + (options '("delay=606")) + (load? #t))))))) (define %test-loadable-kernel-modules-2 (system-test @@ -122,12 +130,23 @@ with one extra module.") (description "Tests loadable kernel modules facility of with two extra modules.") (value (run-loadable-kernel-modules-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"))))) + (list (kernel-module + (name "ddcci") + ;; XXX Verify that kernel modules are built with the correct + ;; kernel + (package (package + (inherit ddcci-driver-linux) + (arguments + `(#:linux #f + ,@(strip-keyword-arguments '(#:linux) + (package-arguments + ddcci-driver-linux)))))) + (load? #t)) + (kernel-module + (name "acpi_call") + (package acpi-call-linux-module) + (load? #t)) + ;; TODO Test that a module isn't loaded + (kernel-module + (name "radeon") + (blacklist? #t)))))))