summary refs log tree commit diff
path: root/gnu/services/base.scm
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2014-09-18 19:18:39 +0200
committerLudovic Courtès <ludo@gnu.org>2014-09-18 19:18:39 +0200
commit722554a306be645026d75893b77863769dcd861d (patch)
tree4b2e16ebb8524103708c48681f10dc976080e250 /gnu/services/base.scm
parentcb823dd279b77566f2974b210fbd58a7c53a2b0a (diff)
downloadguix-722554a306be645026d75893b77863769dcd861d.tar.gz
system: Define 'device-mapping-kind', and add a 'close' procedure.
* gnu/system/file-systems.scm (<mapped-device-type>): New record type.
  (<mapped-device>)[command]: Remove field.
  [type]: New field.
* gnu/services/base.scm (device-mapping-service): Rename 'command'
  parameter to 'open'.  Add 'close' parameter and honor it.
* gnu/system.scm (luks-device-mapping): Rename to...
  (open-luks-device): ... this.
  (close-luks-device): New procedure.
  (luks-device-mapping): New variable.
  (device-mapping-services): Get the type of MD, and pass its 'open' and
  'close' fields to 'device-mapping-service'.
Diffstat (limited to 'gnu/services/base.scm')
-rw-r--r--gnu/services/base.scm11
1 files changed, 5 insertions, 6 deletions
diff --git a/gnu/services/base.scm b/gnu/services/base.scm
index bfe5f52af4..f2de85f410 100644
--- a/gnu/services/base.scm
+++ b/gnu/services/base.scm
@@ -600,19 +600,18 @@ extra rules from the packages listed in @var{rules}."
              ;; called.  Thus, make sure it is not respawned.
              (respawn? #f)))))
 
-(define (device-mapping-service target command)
+(define (device-mapping-service target open close)
   "Return a service that maps device @var{target}, a string such as
-@code{\"home\"} (meaning @code{/dev/mapper/home}), by executing @var{command},
-a gexp."
+@code{\"home\"} (meaning @code{/dev/mapper/home}).  Evaluate @var{open}, a
+gexp, to open it, and evaluate @var{close} to close it."
   (with-monad %store-monad
     (return (service
              (provision (list (symbol-append 'device-mapping-
                                              (string->symbol target))))
              (requirement '(udev))
              (documentation "Map a device node using Linux's device mapper.")
-             (start #~(lambda ()
-                        #$command))
-             (stop #~(const #f))
+             (start #~(lambda () #$open))
+             (stop #~(lambda _ (not #$close)))
              (respawn? #f)))))
 
 (define %base-services