diff options
author | Ludovic Courtès <ludo@gnu.org> | 2016-01-01 22:45:58 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2016-01-01 22:50:26 +0100 |
commit | f453f637d5410f4d1e0b3787caa8d34b9b72d7d8 (patch) | |
tree | 20d946f09635783e3683dcb75a1c8c5b0e56e393 | |
parent | f8865db6a002c9b968d39d0d91524edf55e0d873 (diff) | |
download | patches-f453f637d5410f4d1e0b3787caa8d34b9b72d7d8.tar patches-f453f637d5410f4d1e0b3787caa8d34b9b72d7d8.tar.gz |
system: Allow the root file system to be named by UUID.
* gnu/build/file-systems.scm (canonicalize-device-spec)[canonical-title]:
Use 'string->uuid' to check whether SPEC is a UUID.
When SPEC is a string and CANONICAL-TITLE is 'uuid, call 'string->uuid'.
* gnu/system.scm (operating-system-grub.cfg): Add 'root-device'
variable and use it for the "--root=" argument.
-rw-r--r-- | gnu/build/file-systems.scm | 15 | ||||
-rw-r--r-- | gnu/system.scm | 6 |
2 files changed, 15 insertions, 6 deletions
diff --git a/gnu/build/file-systems.scm b/gnu/build/file-systems.scm index d83a4f6015..f8b8697b46 100644 --- a/gnu/build/file-systems.scm +++ b/gnu/build/file-systems.scm @@ -295,9 +295,12 @@ the following: ;; The realm of canonicalization. (if (eq? title 'any) (if (string? spec) - (if (string-prefix? "/" spec) - 'device - 'label) + ;; 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? "/" spec) 'device) + ((string->uuid spec) 'uuid) + (else 'label)) 'uuid) title)) @@ -323,7 +326,11 @@ the following: ;; Resolve the label. (resolve find-partition-by-label spec identity)) ((uuid) - (resolve find-partition-by-uuid spec uuid->string)) + (resolve find-partition-by-uuid + (if (string? spec) + (string->uuid spec) + spec) + uuid->string)) (else (error "unknown device title" title)))) diff --git a/gnu/system.scm b/gnu/system.scm index acb7f15e4e..6dfcc0fe3a 100644 --- a/gnu/system.scm +++ b/gnu/system.scm @@ -673,12 +673,14 @@ listed in OS. The C library expects to find it under ((system (operating-system-derivation os)) (root-fs -> (operating-system-root-file-system os)) (kernel -> (operating-system-kernel os)) + (root-device -> (if (eq? 'uuid (file-system-title root-fs)) + (uuid->string (file-system-device root-fs)) + (file-system-device root-fs))) (entries -> (list (menu-entry (label (kernel->grub-label kernel)) (linux kernel) (linux-arguments - (cons* (string-append "--root=" - (file-system-device root-fs)) + (cons* (string-append "--root=" root-device) #~(string-append "--system=" #$system) #~(string-append "--load=" #$system "/boot") |