From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp12.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms0.migadu.com with LMTPS id SO6OElxSHWIpdgEAgWs5BA (envelope-from ) for ; Mon, 28 Feb 2022 23:53:16 +0100 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp12.migadu.com with LMTPS id yA+RD1xSHWKmfgAAauVa8A (envelope-from ) for ; Mon, 28 Feb 2022 23:53:16 +0100 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id BF1662B455 for ; Mon, 28 Feb 2022 23:53:15 +0100 (CET) Received: from localhost ([::1]:46436 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nOotH-0006YL-0z for larch@yhetil.org; Mon, 28 Feb 2022 17:53:15 -0500 Received: from eggs.gnu.org ([209.51.188.92]:53392) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nOot4-0006Y6-FS for bug-guix@gnu.org; Mon, 28 Feb 2022 17:53:02 -0500 Received: from debbugs.gnu.org ([209.51.188.43]:41055) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nOot4-0000lm-6x for bug-guix@gnu.org; Mon, 28 Feb 2022 17:53:02 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1nOot4-0008El-5Y for bug-guix@gnu.org; Mon, 28 Feb 2022 17:53:02 -0500 X-Loop: help-debbugs@gnu.org Subject: bug#40998: [PATCH 3/4] initrd: Use non-hyphenated kernel command-line parameter names. Resent-From: Maxim Cournoyer Original-Sender: "Debbugs-submit" Resent-CC: bug-guix@gnu.org Resent-Date: Mon, 28 Feb 2022 22:53:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 40998 X-GNU-PR-Package: guix X-GNU-PR-Keywords: patch To: 40998@debbugs.gnu.org Received: via spool by 40998-submit@debbugs.gnu.org id=B40998.164608872431579 (code B ref 40998); Mon, 28 Feb 2022 22:53:02 +0000 Received: (at 40998) by debbugs.gnu.org; 28 Feb 2022 22:52:04 +0000 Received: from localhost ([127.0.0.1]:34949 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nOos7-0008D7-2H for submit@debbugs.gnu.org; Mon, 28 Feb 2022 17:52:04 -0500 Received: from mail-qk1-f181.google.com ([209.85.222.181]:43910) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1nOos4-0008CX-NN for 40998@debbugs.gnu.org; Mon, 28 Feb 2022 17:52:01 -0500 Received: by mail-qk1-f181.google.com with SMTP id z66so11620047qke.10 for <40998@debbugs.gnu.org>; Mon, 28 Feb 2022 14:52:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=zdp2njO2feEE5z2pRwi5YnVwFDdnp2G8LogpdbsN6v4=; b=VDjtrQzlqeQ6OmwW3BR9A3ii3WdmgSswUbjN4QGkAOP3akYsO9SVRQhPE9t3Y7m05Y qo7JJtdK0z7R/F0NUktIW1pabQx7hD7AlTd9fusj422E39o7qstXoN3b1kmnn8Noub16 sJJdEq9MXbc12YLuU/wkXMo+2sAsyTBk1qv+FlAsYMV+E4JbopWpQHkPPn9hQ8dI1G0t H3Bkg7dLmK94hnpEyvBni5vbiMzrU3hjCLdaHHsK40pA0phUEuvNPB7muI0vQ/peO5h5 opED0be3WboEzY2TOTTQ4dYQ64JUsaXBz6yYKP3h9hbemjqYECv0vUbEmQXwIV6f/vVt AdzA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=zdp2njO2feEE5z2pRwi5YnVwFDdnp2G8LogpdbsN6v4=; b=fXJBzv6sxzZbP6LUffiwF/v1E10m58yhFSH9VjISBszn3QBQluNfY9mWvz32n7VnJg iurHhXVhZ8wZwhuz5nPEwl0J2K6KWKWCcqvWi8o2JVJWBRGxjUxLEsgJhPjuZ2jPeJVT ZfkqdjJBxObV+IErMzq4n+b38gr6pJIvgGnMy+FteW8baJLwP+GXYwaEkETUnDqAwfDn nbWZufnRZyg71tGkvegTbqu0dlq5jtSeEWgkEWfiJKWopQV3XHUuXwG4UEkhl36LoeLF MnUtyw6OfjyBAZOWbpRYcIFH+80xufyMFAd8o19akGyz08OqBd84XQcNzGH3cUBVP0Ya FCng== X-Gm-Message-State: AOAM532P/QJzjz82fBPZ3v/yvDVvy4WlkZHnQoIX40lojT3pUZ1l5El6 r3sUvidlCEV30tt2q3QOurFmixH9gAWpIg== X-Google-Smtp-Source: ABdhPJx221KLxpByyHKfOD75kCx6kbmK1vfIp43OP3gIQ7wW00g4W7Vg0izAfoN0/3pY9RArJlAeQA== X-Received: by 2002:a37:747:0:b0:60d:d709:2e20 with SMTP id 68-20020a370747000000b0060dd7092e20mr12246914qkh.579.1646088714704; Mon, 28 Feb 2022 14:51:54 -0800 (PST) Received: from localhost.localdomain (dsl-141-227.b2b2c.ca. [66.158.141.227]) by smtp.gmail.com with ESMTPSA id b17-20020ae9eb11000000b0064917bda713sm5562714qkg.85.2022.02.28.14.51.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 28 Feb 2022 14:51:54 -0800 (PST) From: Maxim Cournoyer Date: Mon, 28 Feb 2022 17:50:45 -0500 Message-Id: <20220228225047.11105-3-maxim.cournoyer@gmail.com> X-Mailer: git-send-email 2.34.0 In-Reply-To: <20220228225047.11105-1-maxim.cournoyer@gmail.com> References: <20220228225047.11105-1-maxim.cournoyer@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-guix@gnu.org List-Id: Bug reports for GNU Guix List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Maxim Cournoyer Errors-To: bug-guix-bounces+larch=yhetil.org@gnu.org Sender: "bug-Guix" X-Migadu-Flow: FLOW_IN X-Migadu-Country: US ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1646088795; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding:resent-cc: resent-from:resent-sender:resent-message-id:in-reply-to:in-reply-to: references:references:list-id:list-help:list-unsubscribe: list-subscribe:list-post:dkim-signature; bh=KahdHi8BLy9DzK1hOiI6TdDRtYS/eMlGJlSwmaF8MCk=; b=HuS83D3nDVLWe+1BPTy0GKs9c7JAvbDbqRNf4MumDaXyE2fcbK0Wjkfosc0vlDkvK65J9H Eb7LrU9HCwGC2injyma/WtpOkpQ3zxvPyncid4MBYtD2P8Jfc4Vf9WirzxgciO4g7T5BWE L/GUirEgc+YQih5JvEOf+yWKXlBwde/fiBY1wjegtK6S9aTLSIMZOwb4BIIkPXZOgTANVC rReT+fUBycEKpZCDlIdQzA9fFTozjpO23fRrCWVS831eT49srN7PIvCjEwviXgB0VSh60l rSdj/bSDHj+WmumJ8D3DrrXPkMY9sBmKKKIkjpx8HYdohWS/BKQfUO2wx7srzg== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1646088795; a=rsa-sha256; cv=none; b=B98i+usB4yChZhdekXEliVf2ax0Jgn1kdIEm1VupbS6MyT2aqEhthdj5C1Rkfw+n56zEso r7oTcxtO6m35mXakSHFYFOOa9o2ErYREAGsQkDc6HnCx64DhTh5mW1KMUiN5rw5LzLWa8p gmo99WiIobE+yRR6WPzv0cuvZVhOTDF+eHI4N9dNP7tfh/3ekaGInNCHJ57CUPyLEJrBUb +cjSjEAogusl6cra2YKthDSntjCq7lQ3prLwyguu+GTHva4Mh5kPZm26EvDri2rkipo2n3 jJM6TbZUhDV1pyJJBtUNdQ1P8RgvDWurzJAIsTP0yPNBXSvWhs0osPDh3HXI4Q== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=fail ("body hash did not verify") header.d=gmail.com header.s=20210112 header.b=VDjtrQzl; dmarc=fail reason="SPF not aligned (relaxed)" header.from=gmail.com (policy=none); spf=pass (aspmx1.migadu.com: domain of "bug-guix-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="bug-guix-bounces+larch=yhetil.org@gnu.org" X-Migadu-Spam-Score: 5.51 Authentication-Results: aspmx1.migadu.com; dkim=fail ("body hash did not verify") header.d=gmail.com header.s=20210112 header.b=VDjtrQzl; dmarc=fail reason="SPF not aligned (relaxed)" header.from=gmail.com (policy=none); spf=pass (aspmx1.migadu.com: domain of "bug-guix-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="bug-guix-bounces+larch=yhetil.org@gnu.org" X-Migadu-Queue-Id: BF1662B455 X-Spam-Score: 5.51 X-Migadu-Scanner: scn0.migadu.com X-TUID: 1BDpKbMpTyDe This is to make it less surprising, given the common convention sets forth by the kernel Linux command-line parameters. * gnu/build/linux-boot.scm (boot-system): Rename '--load', '--repl', '--root' and '--system' to 'gnu.load', 'gnu.repl', 'root' and 'gnu.system', respectively. Adjust doc. (find-long-option): Adjust doc. * gnu/installer/parted.scm (installer-root-partition-path): Adjust accordingly. * gnu/system.scm (bootable-kernel-arguments): Add a VERSION argument and update doc. Use VERSION to conditionally return old style vs new style initrd arguments. (%boot-parameters-version): Increment to 1. (operating-system-boot-parameters): Adjust doc. (operating-system-boot-parameters-file): Likewise. * gnu/system/linux-initrd.scm (raw-initrd, base-initrd): Likewise. * doc/guix.texi: Adjust doc. * gnu/build/activation.scm (boot-time-system): Adjust accordingly. * gnu/build/hurd-boot.scm (boot-hurd-system): Likewise. * gnu/packages/commencement.scm (%final-inputs-riscv64): Adjust comment. --- doc/guix.texi | 12 ++++----- gnu/build/activation.scm | 4 +-- gnu/build/hurd-boot.scm | 12 ++++----- gnu/build/linux-boot.scm | 31 ++++++++++++----------- gnu/installer/parted.scm | 2 +- gnu/machine/ssh.scm | 5 ++-- gnu/packages/commencement.scm | 4 +-- gnu/system.scm | 47 ++++++++++++++++++++++------------- gnu/system/linux-initrd.scm | 4 +-- 9 files changed, 68 insertions(+), 53 deletions(-) diff --git a/doc/guix.texi b/doc/guix.texi index 1e8b23ad7e..ce44eb3b47 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -34959,7 +34959,7 @@ honors several options passed on the Linux kernel command line @code{-append} option of QEMU), notably: @table @code -@item --load=@var{boot} +@item gnu.load=@var{boot} Tell the initial RAM disk to load @var{boot}, a file containing a Scheme program, once it has mounted the root file system. @@ -34967,7 +34967,7 @@ Guix uses this option to yield control to a boot program that runs the service activation programs and then spawns the GNU@tie{}Shepherd, the initialization system. -@item --root=@var{root} +@item root=@var{root} Mount @var{root} as the root file system. @var{root} can be a device name like @code{/dev/sda1}, a file system label, or a file system UUID. When unspecified, the device name from the root file system of the @@ -34992,7 +34992,7 @@ or @code{preen} to repair problems considered safe to repair automatically. @code{preen} is the default if this option is not present or if @var{level} is not one of the above. -@item --system=@var{system} +@item gnu.system=@var{system} Have @file{/run/booted-system} and @file{/run/current-system} point to @var{system}. @@ -35004,7 +35004,7 @@ Instruct the initial RAM disk as well as the @command{modprobe} command must be a comma-separated list of module names---e.g., @code{usbkbd,9pnet}. -@item --repl +@item gnu.repl Start a read-eval-print loop (REPL) from the initial RAM disk before it tries to load kernel modules and to mount the root file system. Our marketing team calls it @dfn{boot-to-Guile}. The Schemer in you will @@ -35025,7 +35025,7 @@ here is how to use it and customize it further. [#:helper-packages '()] [#:qemu-networking? #f] [#:volatile-root? #f] Return a derivation that builds a raw initrd. @var{file-systems} is a list of file systems to be mounted by the initrd, possibly in addition to -the root file system specified on the kernel command line via @option{--root}. +the root file system specified on the kernel command line via @option{root}. @var{linux-modules} is a list of kernel modules to be loaded at boot time. @var{mapped-devices} is a list of device mappings to realize before @var{file-systems} are mounted (@pxref{Mapped Devices}). @@ -35055,7 +35055,7 @@ to it are lost. Return as a file-like object a generic initrd, with kernel modules taken from @var{linux}. @var{file-systems} is a list of file-systems to be mounted by the initrd, possibly in addition to the root file system specified -on the kernel command line via @option{--root}. @var{mapped-devices} is a list of device +on the kernel command line via @option{root}. @var{mapped-devices} is a list of device mappings to realize before @var{file-systems} are mounted. When true, @var{keyboard-layout} is a @code{} record denoting diff --git a/gnu/build/activation.scm b/gnu/build/activation.scm index 9f6126023c..10c9045740 100644 --- a/gnu/build/activation.scm +++ b/gnu/build/activation.scm @@ -389,8 +389,8 @@ (define %current-system "/run/current-system") (define (boot-time-system) - "Return the '--system' argument passed on the kernel command line." - (find-long-option "--system" (if (string-contains %host-type "linux-gnu") + "Return the 'gnu.system' argument passed on the kernel command line." + (find-long-option "gnu.system" (if (string-contains %host-type "linux-gnu") (linux-command-line) (command-line)))) diff --git a/gnu/build/hurd-boot.scm b/gnu/build/hurd-boot.scm index ac36bd17d4..ad3c50d61e 100644 --- a/gnu/build/hurd-boot.scm +++ b/gnu/build/hurd-boot.scm @@ -254,7 +254,7 @@ (define* (boot-hurd-system #:key (on-error 'debug)) "This procedure is meant to be called from an early RC script. Install the relevant passive translators on the first boot. Then, run system -activation by using the kernel command-line options '--system' and '--load'; +activation by using the kernel command-line options 'gnu.system' and 'gnu.load'; starting the Shepherd. XXX TODO: see linux-boot.scm:boot-system. @@ -265,14 +265,14 @@ (define* (boot-hurd-system #:key (on-error 'debug)) " (display "Welcome, this is GNU's early boot Guile.\n") - (display "Use '--repl' for an initrd REPL.\n\n") + (display "Use 'gnu.repl' for an initrd REPL.\n\n") (call-with-error-handling (lambda () (let* ((args (command-line)) - (system (find-long-option "--system" args)) - (to-load (find-long-option "--load" args))) + (system (find-long-option "gnu.system" args)) + (to-load (find-long-option "gnu.load" args))) (format #t "Setting-up essential translators...\n") (setenv "PATH" (string-append system "/profile/bin")) @@ -286,7 +286,7 @@ (define* (boot-hurd-system #:key (on-error 'debug)) (unless (zero? (system* "/hurd/mach-defpager")) (format #t "FAILED...Good luck!\n")) - (cond ((member "--repl" args) + (cond ((member "gnu.repl" args) (format #t "Starting repl...\n") (start-repl)) (to-load @@ -298,7 +298,7 @@ (define* (boot-hurd-system #:key (on-error 'debug)) (sleep 2) (reboot)) (else - (display "no boot file passed via '--load'\n") + (display "no boot file passed via 'gnu.load'\n") (display "entering a warm and cozy REPL\n") (start-repl))))) #:on-error on-error)) diff --git a/gnu/build/linux-boot.scm b/gnu/build/linux-boot.scm index 0ae316849e..cfa1ab2fcb 100644 --- a/gnu/build/linux-boot.scm +++ b/gnu/build/linux-boot.scm @@ -3,6 +3,7 @@ ;;; Copyright © 2016, 2017, 2019–2021 Tobias Geerinckx-Rice ;;; Copyright © 2017 Mathieu Othacehe ;;; Copyright © 2019 Guillaume Le Vaillant +;;; Copyright © 2020, 2022 Maxim Cournoyer ;;; ;;; This file is part of GNU Guix. ;;; @@ -93,7 +94,7 @@ (define (linux-command-line) get-string-all))) (define (find-long-option option arguments) - "Find OPTION among ARGUMENTS, where OPTION is something like \"--load\". + "Find OPTION among ARGUMENTS, where OPTION is something like \"gnu.load\". Return the value associated with OPTION, or #f on failure." (let ((opt (string-append option "="))) (and=> (find (cut string-prefix? opt <>) @@ -499,12 +500,12 @@ (define* (boot-system #:key KEYMAP-FILE is true), then setting up QEMU guest networking if QEMU-GUEST-NETWORKING? is true, calling PRE-MOUNT, mounting the file systems specified in MOUNTS, and finally booting into the new root if any. The initrd -supports kernel command-line options '--load', '--root', and '--repl'. It -also honors a subset of the documented Linux kernel command-line parameters -such as 'fsck.mode', 'resume' and 'rootdelay'. +supports kernel command-line parameters 'gnu.load' and 'gnu.repl'. It also +honors a subset of the Linux kernel command-line parameters such as +'fsck.mode', 'resume', 'root' and 'rootdelay'. -Mount the root file system, specified by the '--root' command-line argument, -if any. +Mount the root file system, specified by the 'root' command-line argument, if +any. MOUNTS must be a list of objects. @@ -517,25 +518,25 @@ (define (root-mount-point? fs) (string=? (file-system-mount-point fs) "/")) (define (device-string->file-system-device device-string) - ;; The "--root=SPEC" kernel command-line option always provides a - ;; string, but the string can represent a device, an nfs-root, a UUID, or a - ;; label. So check for all four. + ;; The "root=SPEC" kernel command-line option always provides a string, + ;; but the string can represent a device, an nfs-root, a UUID, or a label. + ;; So check for all four. (cond ((string-prefix? "/" device-string) device-string) ((string-contains device-string ":/") device-string) ; nfs-root ((uuid device-string) => identity) (else (file-system-label device-string)))) (display "Welcome, this is GNU's early boot Guile.\n") - (display "Use '--repl' for an initrd REPL.\n\n") + (display "Use 'gnu.repl' for an initrd REPL.\n\n") (call-with-error-handling (lambda () (mount-essential-file-systems) (let* ((args (linux-command-line)) - (to-load (find-long-option "--load" args)) - ;; If present, ‘--root’ on the kernel command line takes precedence + (to-load (find-long-option "gnu.load" args)) + ;; If present, ‘root’ on the kernel command line takes precedence ;; over the ‘device’ field of the root record. - (root-device (and=> (find-long-option "--root" args) + (root-device (and=> (find-long-option "root" args) device-string->file-system-device)) (root-fs (or (find root-mount-point? mounts) ;; Fall back to fictitious defaults. @@ -564,7 +565,7 @@ (define (repair fs) (_ 'preen)) (file-system-repair fs)))) - (when (member "--repl" args) + (when (member "gnu.repl" args) (start-repl)) (display "loading kernel modules...\n") @@ -652,7 +653,7 @@ (define (repair fs) (sleep 2) (reboot)) (begin - (display "no boot file passed via '--load'\n") + (display "no boot file passed via 'gnu.load'\n") (display "entering a warm and cozy REPL\n") (start-repl))))) #:on-error on-error)) diff --git a/gnu/installer/parted.scm b/gnu/installer/parted.scm index e33ef5f8fd..94ef9b42bc 100644 --- a/gnu/installer/parted.scm +++ b/gnu/installer/parted.scm @@ -348,7 +348,7 @@ (define (remove-logical-devices) (define (installer-root-partition-path) "Return the root partition path, or #f if it could not be detected." (let* ((cmdline (linux-command-line)) - (root (find-long-option "--root" cmdline))) + (root (find-long-option "root" cmdline))) (and root (or (and (access? root F_OK) root) (find-partition-by-label root) diff --git a/gnu/machine/ssh.scm b/gnu/machine/ssh.scm index 0dc8933c82..550c989c34 100644 --- a/gnu/machine/ssh.scm +++ b/gnu/machine/ssh.scm @@ -422,7 +422,8 @@ (define (read-file path) (let* ((params (call-with-input-string serialized-params read-boot-parameters)) (root (boot-parameters-root-device params)) - (label (boot-parameters-label params))) + (label (boot-parameters-label params)) + (version (boot-parameters-version params))) (boot-parameters (inherit params) (label @@ -433,7 +434,7 @@ (define (read-file path) "~Y-~m-~d ~H:~M")) ")")) (kernel-arguments - (append (bootable-kernel-arguments system-path root) + (append (bootable-kernel-arguments system-path root version) (boot-parameters-kernel-arguments params)))))))) generations)))) diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm index cdc9c1d621..9b495d8d84 100644 --- a/gnu/packages/commencement.scm +++ b/gnu/packages/commencement.scm @@ -3740,10 +3740,10 @@ (define-public %final-inputs (define-public %final-inputs-riscv64 ;; This is similar to the added (list gcc "lib") elsewhere in this file, but ;; due to how (%current-system) is re-defined when performing builds with the - ;; '--system' flag, %final-inputs is too early in the evaulation pipeline to + ;; 'gnu.system' flag, %final-inputs is too early in the evaulation pipeline to ;; correctly identify the system for which a derivation will be built. Thus, ;; since (%current-system) is re-determined by (guix build-system gnu) after - ;; loading %final-inputs but before taking into account the '--system' flag, + ;; loading %final-inputs but before taking into account the 'gnu.system' flag, ;; the test for (target-riscv64?) needs to be in (guix build-system gnu), ;; with %final-inputs-riscv64 already available at the same time that ;; %final-inputs is available. diff --git a/gnu/system.scm b/gnu/system.scm index c6c46343cc..91d7e48452 100644 --- a/gnu/system.scm +++ b/gnu/system.scm @@ -187,16 +187,23 @@ (define-module (gnu system) ;;; ;;; Code: -(define (bootable-kernel-arguments system root-device) - "Return a list of kernel arguments (gexps) to boot SYSTEM from ROOT-DEVICE." - (list (string-append "--root=" +(define* (bootable-kernel-arguments system root-device version) + "Return a list of kernel arguments (gexps) to boot SYSTEM from ROOT-DEVICE. +VERSION is the target version of the boot-parameters record." + ;; If the version is newer than 0, we use the new style initrd parameter + ;; names, otherwise we use the legacy ones. This is to maintain backward + ;; compatibility when producing bootloader configurations for older + ;; generations. + (define version>0? (> version 0)) + (list (string-append (if version>0? "root=" "--root=") ;; Note: Always use the DCE format because that's what - ;; (gnu build linux-boot) expects for the '--root' + ;; (gnu build linux-boot) expects for the 'root' ;; kernel command-line option. (file-system-device->string root-device #:uuid-type 'dce)) - #~(string-append "--system=" #$system) - #~(string-append "--load=" #$system "/boot"))) + #~(string-append (if #$version>0? "gnu.system=" "--system=") #$system) + #~(string-append (if #$version>0? "gnu.load=" "--load=") + #$system "/boot"))) ;; System-wide configuration. ;; TODO: Add per-field docstrings/stexi. @@ -286,10 +293,12 @@ (define-record-type* operating-system source-properties->location)) (innate))) -(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) +(define* (operating-system-kernel-arguments + os root-device #:key (version %boot-parameters-version)) + "Return all the kernel arguments, including the ones not specified directly +by the user. VERSION should match that of the target record +object that will contain the kernel parameters." + (append (bootable-kernel-arguments os root-device version) (operating-system-user-kernel-arguments os))) @@ -297,7 +306,10 @@ (define (operating-system-kernel-arguments os root-device) ;;; Boot parameters ;;; -(define %boot-parameters-version 0) +;;; Version 1 was introduced early 2022 to mark the departure from long option +;;; names such as '--load' to the more conventional initrd option names like +;;; 'gnu.load'. +(define %boot-parameters-version 1) (define-record-type* boot-parameters make-boot-parameters boot-parameters? @@ -478,10 +490,11 @@ (define (read-boot-parameters-file system) The object has its kernel-arguments extended in order to make it bootable." (let* ((file (string-append system "/parameters")) (params (call-with-input-file file read-boot-parameters)) - (root (boot-parameters-root-device params))) + (root (boot-parameters-root-device params)) + (version (boot-parameters-version params))) (boot-parameters (inherit params) - (kernel-arguments (append (bootable-kernel-arguments system root) + (kernel-arguments (append (bootable-kernel-arguments system root version) (boot-parameters-kernel-arguments params)))))) (define (boot-parameters->menu-entry conf) @@ -1452,10 +1465,10 @@ (define (hurd-multiboot-modules os) (define* (operating-system-boot-parameters os root-device #:key system-kernel-arguments?) "Return a monadic record that describes the boot -parameters of OS. When SYSTEM-KERNEL-ARGUMENTS? is true, add kernel arguments -such as '--root' and '--load' to . The -SYSTEM-KERNEL-ARGUMENTS? should only be used in necessity, as the '--load' and -'--system' values are self-referential (they refer to the system), thus +parameters of OS. When SYSTEM-KERNEL-ARGUMENTS? is true, add the kernel +arguments 'root', 'gnu.load' and 'gnu.system' to . The +SYSTEM-KERNEL-ARGUMENTS? should only be used in necessity, as the 'gnu.load' +and 'gnu.system' values are self-referential (they refer to the system), thus susceptible to introduce a cyclic dependency." (let* ((initrd (and (not (operating-system-hurd os)) (operating-system-initrd-file os))) diff --git a/gnu/system/linux-initrd.scm b/gnu/system/linux-initrd.scm index 329cd38cd6..4c4c78e444 100644 --- a/gnu/system/linux-initrd.scm +++ b/gnu/system/linux-initrd.scm @@ -181,7 +181,7 @@ (define* (raw-initrd file-systems "Return as a file-like object a raw initrd, with kernel modules taken from LINUX. FILE-SYSTEMS is a list of file-systems to be mounted by the initrd, possibly in addition to the root file system specified -on the kernel command line via '--root'. LINUX-MODULES is a list of kernel +on the kernel command line via 'root'. LINUX-MODULES is a list of kernel modules to be loaded at boot time. MAPPED-DEVICES is a list of device mappings to realize before FILE-SYSTEMS are mounted. HELPER-PACKAGES is a list of packages to be copied in the initrd. It may include @@ -375,7 +375,7 @@ (define* (base-initrd file-systems "Return as a file-like object a generic initrd, with kernel modules taken from LINUX. FILE-SYSTEMS is a list of file-systems to be mounted by the initrd, possibly in addition to the root file system specified -on the kernel command line via '--root'. MAPPED-DEVICES is a list of device +on the kernel command line via 'root'. MAPPED-DEVICES is a list of device mappings to realize before FILE-SYSTEMS are mounted. When true, KEYBOARD-LAYOUT is a record denoting the desired -- 2.34.0