mirror of
https://git.savannah.gnu.org/git/guix.git
synced 2026-05-28 20:12:11 +02:00
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:
@@ -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))
|
||||
|
||||
+16
-15
@@ -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)
|
||||
|
||||
+3
-2
@@ -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.
|
||||
|
||||
+31
-17
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user