~ruther/guix-local

adce91a3ec0cb2912daa6eefe9324c15ff3126f7 — Josselin Poiret 4 years ago 9f371f2
gnu: system: Add LUKS2 support for the root file system.

* gnu/bootloader/grub.scm (grub-configuration-file): Add 'insmod
luks2'.
* gnu/system/mapped-devices.scm (open-luks-device): Create
'/run/cryptsetup/' directory.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2 files changed, 9 insertions(+), 4 deletions(-)

M gnu/bootloader/grub.scm
M gnu/system/mapped-devices.scm
M gnu/bootloader/grub.scm => gnu/bootloader/grub.scm +1 -2
@@ 415,8 415,7 @@ menuentry ~s {
          ;; Other type of devices aren't implemented.
          #~()))
    (let ((devices (map crypto-device->cryptomount store-crypto-devices))
          ;; XXX: Add luks2 when grub 2.06 is packaged.
          (modules #~(format port "insmod luks~%")))
          (modules #~(format port "insmod luks~%insmod luks2~%")))
      (if (null? devices)
          devices
          (cons modules devices))))

M gnu/system/mapped-devices.scm => gnu/system/mapped-devices.scm +8 -2
@@ 192,7 192,8 @@ option of @command{guix system}.\n")
  "Return a gexp that maps SOURCE to TARGET as a LUKS device, using
'cryptsetup'."
  (with-imported-modules (source-module-closure
                          '((gnu build file-systems)))
                          '((gnu build file-systems)
                            (guix build utils))) ;; For mkdir-p
    (match targets
      ((target)
       #~(let ((source #$(if (uuid? source)


@@ 201,7 202,12 @@ option of @command{guix system}.\n")
           ;; XXX: 'use-modules' should be at the top level.
           (use-modules (rnrs bytevectors) ;bytevector?
                        ((gnu build file-systems)
                         #:select (find-partition-by-luks-uuid)))
                         #:select (find-partition-by-luks-uuid))
                        ((guix build utils) #:select (mkdir-p)))

           ;; Create '/run/cryptsetup/' if it does not exist, as device locking
           ;; is mandatory for LUKS2.
           (mkdir-p "/run/cryptsetup/")

           ;; Use 'cryptsetup-static', not 'cryptsetup', to avoid pulling the
           ;; whole world inside the initrd (for when we're in an initrd).