~ruther/guix-local

f453f637d5410f4d1e0b3787caa8d34b9b72d7d8 — Ludovic Courtès 10 years ago f8865db
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.
2 files changed, 15 insertions(+), 6 deletions(-)

M gnu/build/file-systems.scm
M gnu/system.scm
M gnu/build/file-systems.scm => gnu/build/file-systems.scm +11 -4
@@ 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))))


M gnu/system.scm => gnu/system.scm +4 -2
@@ 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")