guix-epistemia

Personal Guix channel
Log | Files | Refs

zfs.scm (1216B)


      1 (define-module (epistemia services zfs)
      2   #:use-module (gnu services shepherd)
      3   #:use-module (guix gexp)
      4   #:use-module (epistemia packages zfs)
      5   #:export (zfs-shepherd-services))
      6 
      7 ;; from raid5atemyhomework's valiant efforts
      8 (define zfs-shepherd-services
      9   (let ((zpool (file-append zfs-linux "/sbin/zpool"))
     10 	(zfs (file-append zfs-linux "/sbin/zfs"))
     11 	(scheme-modules `((srfi srfi-1)
     12 			  (srfi srfi-34)
     13 			  (srfi srfi-35)
     14 			  (rnrs io ports)
     15 			  ,@%default-modules)))
     16     (define zfs-scan
     17       (shepherd-service
     18 	(provision '(zfs-scan))
     19 	(documentation "Scans for ZFS pools.")
     20 	(requirement '(kernel-module-loader udev))
     21 	(modules scheme-modules)
     22 	(start #~(lambda _
     23 		   (invoke/quiet #$zpool "import" "-a" "-N" "-d" "/dev/disk/by-id")))
     24 	(stop #~(const #f))))
     25     (define zfs-automount
     26       (shepherd-service
     27 	(provision '(zfs-automount))
     28 	(documentation "Automounts ZFS data sets.")
     29 	(requirement '(zfs-scan))
     30 	(modules scheme-modules)
     31 	(start #~(lambda _
     32 		   (with-output-to-port
     33 		       (current-error-port)
     34 		     (lambda ()
     35 		       (invoke #$zfs "mount" "-a" "-l")))))
     36 	(stop #~(lambda _
     37 		  (chdir "/")
     38 		  (invoke/quiet #$zfs "unmount" "-a" "-f")
     39 		  #f))))
     40     (list zfs-scan zfs-automount)))