guixsd-config

GuixSD configs for my systems
Log | Files | Refs

zfs.scm (1140B)


      1 (define-module (epistemia systems zfs)
      2   #:use-module (gnu system mapped-devices)
      3   #:use-module (guix gexp)
      4   #:use-module (epistemia packages zfs)
      5   #:export (zfs-device-mapping))
      6 
      7 (define* (open-zfs-device source targets #:key (root-dataset #f))
      8   "Import ZFS pool SOURCE and optionally mount ROOT-DATASET."
      9   (with-imported-modules '((guix build utils))
     10     #~(let ((zpool #$(file-append zfs-linux "/sbin/zpool"))
     11             (zfs #$(file-append zfs-linux "/sbin/zfs")))
     12         (format #t "Importing ZFS pool ~a...~%" #$source)
     13         (system* zpool "import" "-N" "-f" "-d" "/dev/disk/by-id" #$source)
     14         
     15         #$@(if root-dataset
     16                (list #~(begin
     17                          (format #t "Mounting ~a...~%" #$root-dataset)
     18                          (system* zfs "mount" #$root-dataset)))
     19                '())
     20         #t)))
     21 
     22 (define (close-zfs-device source targets)
     23   "Export ZFS pool SOURCE."
     24   #~(zero? (system* #$(file-append zfs-linux "/sbin/zpool") "export" #$source)))
     25 
     26 (define zfs-device-mapping
     27   (mapped-device-kind
     28     (open open-zfs-device)
     29     (close close-zfs-device)
     30     (modules '((guix build utils)))))