initrd: Use non-hyphenated kernel command-line parameter names.
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.
This commit is contained in:
parent
91755fe6b2
commit
0dc019e19a
@ -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{<keyboard-layout>} record denoting
|
||||
|
@ -389,8 +389,8 @@ improvement."
|
||||
"/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))))
|
||||
|
||||
|
@ -254,7 +254,7 @@ set."
|
||||
"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 @@ XXX TODO: use Linux xattr/setxattr to remove (settrans in) /libexec/RUNSYSTEM
|
||||
"
|
||||
|
||||
(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 @@ XXX TODO: use Linux xattr/setxattr to remove (settrans in) /libexec/RUNSYSTEM
|
||||
(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 @@ XXX TODO: use Linux xattr/setxattr to remove (settrans in) /libexec/RUNSYSTEM
|
||||
(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))
|
||||
|
@ -3,6 +3,7 @@
|
||||
;;; Copyright © 2016, 2017, 2019–2021 Tobias Geerinckx-Rice <me@tobias.gr>
|
||||
;;; Copyright © 2017 Mathieu Othacehe <m.othacehe@gmail.com>
|
||||
;;; Copyright © 2019 Guillaume Le Vaillant <glv@posteo.net>
|
||||
;;; Copyright © 2020, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
|
||||
;;;
|
||||
;;; This file is part of GNU Guix.
|
||||
;;;
|
||||
@ -93,7 +94,7 @@
|
||||
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 @@ LINUX-MODULE-DIRECTORY, then installing KEYMAP-FILE with 'loadkeys' (if
|
||||
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 <file-system> objects.
|
||||
|
||||
@ -517,25 +518,25 @@ upon error."
|
||||
(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 <file-system> 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 @@ upon error."
|
||||
(_ '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 @@ the root file system...\n" root-delay)
|
||||
(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))
|
||||
|
@ -348,7 +348,7 @@ fail. See rereadpt function in wipefs.c of util-linux for an explanation."
|
||||
(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)
|
||||
|
@ -422,7 +422,8 @@ of MACHINE's system profile, ordered from most recent to oldest."
|
||||
(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 @@ of MACHINE's system profile, ordered from most recent to oldest."
|
||||
"~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))))
|
||||
|
||||
|
@ -3740,10 +3740,10 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%"
|
||||
(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.
|
||||
|
@ -187,16 +187,23 @@
|
||||
;;;
|
||||
;;; 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 @@
|
||||
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 <boot-parameter> record
|
||||
object that will contain the kernel parameters."
|
||||
(append (bootable-kernel-arguments os root-device version)
|
||||
(operating-system-user-kernel-arguments os)))
|
||||
|
||||
|
||||
@ -297,8 +306,12 @@ directly by the user."
|
||||
;;; Boot parameters
|
||||
;;;
|
||||
|
||||
;;; 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'.
|
||||
;;;
|
||||
;;; When bumping the boot-parameters version, increment it by one (1).
|
||||
(define %boot-parameters-version 0)
|
||||
(define %boot-parameters-version 1)
|
||||
|
||||
(define-record-type* <boot-parameters>
|
||||
boot-parameters make-boot-parameters boot-parameters?
|
||||
@ -479,10 +492,11 @@ format is unrecognized.
|
||||
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)
|
||||
@ -1453,10 +1467,10 @@ a list of <menu-entry>, to populate the \"old entries\" menu."
|
||||
(define* (operating-system-boot-parameters os root-device
|
||||
#:key system-kernel-arguments?)
|
||||
"Return a monadic <boot-parameters> record that describes the boot
|
||||
parameters of OS. When SYSTEM-KERNEL-ARGUMENTS? is true, add kernel arguments
|
||||
such as '--root' and '--load' to <boot-parameters>. 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 <boot-parameters>. 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)))
|
||||
|
@ -181,7 +181,7 @@ MODULES and taken from LINUX."
|
||||
"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 @@ 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 <keyboard-layout> record denoting the desired
|
||||
|
Loading…
Reference in New Issue
Block a user