linux-boot: Refactor boot-system.

The --root option can now be omitted, and inferred from the root file system
declaration instead.

* gnu/build/file-systems.scm (canonicalize-device-spec): Extend to support NFS
directly, and...
* gnu/build/linux-boot.scm (boot-system): ...remove NFS special casing from
here.  Remove nested definitions for root-fs-type, root-fs-flags and
root-fs-options, and bind those inside the let* instead.  Make "--root" take
precedence over the device field string representation of the root file
system.
* doc/guix.texi (Initial RAM Disk): Document that "--root" can be left
unspecified.
This commit is contained in:
Maxim Cournoyer 2020-02-11 14:00:06 -05:00
parent 42d41d86f3
commit 281d80d8e5
No known key found for this signature in database
GPG key ID: 1260E46482E63562
3 changed files with 36 additions and 40 deletions

View file

@ -26534,9 +26534,10 @@ service activation programs and then spawns the GNU@tie{}Shepherd, the
initialization system.
@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.
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
operating system declaration is used.
@item --system=@var{system}
Have @file{/run/booted-system} and @file{/run/current-system} point to

View file

@ -661,8 +661,10 @@ (define (resolve find-partition spec fmt)
(match spec
((? string?)
;; Nothing to do, but wait until SPEC shows up.
(resolve identity spec identity))
(if (string-contains spec ":/")
spec ; do not resolve NFS devices
;; Nothing to do, but wait until SPEC shows up.
(resolve identity spec identity)))
((? file-system-label?)
;; Resolve the label.
(resolve find-partition-by-label

View file

@ -498,25 +498,13 @@ (define* (boot-system #:key
(define (root-mount-point? fs)
(string=? (file-system-mount-point fs) "/"))
(define root-fs-type
(or (any (lambda (fs)
(and (root-mount-point? fs)
(file-system-type fs)))
mounts)
"ext4"))
(define root-fs-flags
(mount-flags->bit-mask (or (any (lambda (fs)
(and (root-mount-point? fs)
(file-system-flags fs)))
mounts)
'())))
(define root-fs-options
(any (lambda (fs)
(and (root-mount-point? fs)
(file-system-options fs)))
mounts))
(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, a UUID, or a
;; label. So check for all three.
(cond ((string-prefix? "/" device-string) device-string)
((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")
@ -526,7 +514,21 @@ (define root-fs-options
(mount-essential-file-systems)
(let* ((args (linux-command-line))
(to-load (find-long-option "--load" args))
(root (find-long-option "--root" args)))
(root-fs (find root-mount-point? mounts))
(root-fs-type (or (and=> root-fs file-system-type)
"ext4"))
(root-fs-device (and=> root-fs file-system-device))
(root-fs-flags (mount-flags->bit-mask
(or (and=> root-fs file-system-flags)
'())))
(root-options (if root-fs
(file-system-options root-fs)
#f))
;; --root takes precedence over the 'device' field of the root
;; <file-system> record.
(root-device (or (and=> (find-long-option "--root" args)
device-string->file-system-device)
root-fs-device)))
(when (member "--repl" args)
(start-repl))
@ -561,21 +563,12 @@ (define root-fs-options
(setenv "EXT2FS_NO_MTAB_OK" "1")
(if root
;; The "--root=SPEC" kernel command-line option always provides a
;; string, but the string can represent a device, a UUID, or a
;; label. So check for all three.
(let ((device-spec (cond ((string-prefix? "/" root) root)
((uuid root) => identity)
((string-contains root ":/") #f) ; nfs
(else (file-system-label root)))))
(mount-root-file-system (if device-spec
(canonicalize-device-spec device-spec)
root)
root-fs-type
#:volatile-root? volatile-root?
#:flags root-fs-flags
#:options root-fs-options))
(if root-device
(mount-root-file-system (canonicalize-device-spec root-device)
root-fs-type
#:volatile-root? volatile-root?
#:flags root-fs-flags
#:options root-options)
(mount "none" "/root" "tmpfs"))
;; Mount the specified file systems.