aboutsummaryrefslogtreecommitdiff
path: root/gnu/system
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/system')
-rw-r--r--gnu/system/mapped-devices.scm29
1 files changed, 28 insertions, 1 deletions
diff --git a/gnu/system/mapped-devices.scm b/gnu/system/mapped-devices.scm
index 81afb91f86..dd8e432688 100644
--- a/gnu/system/mapped-devices.scm
+++ b/gnu/system/mapped-devices.scm
@@ -17,7 +17,9 @@
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (gnu system mapped-devices)
+ #:use-module (guix gexp)
#:use-module (guix records)
+ #:autoload (gnu packages cryptsetup) (cryptsetup)
#:export (mapped-device
mapped-device?
mapped-device-source
@@ -27,7 +29,9 @@
mapped-device-kind
mapped-device-kind?
mapped-device-kind-open
- mapped-device-kind-close))
+ mapped-device-kind-close
+
+ luks-device-mapping))
;;; Commentary:
;;;
@@ -50,4 +54,27 @@
(close mapped-device-kind-close ;source target -> gexp
(default (const #~(const #f)))))
+
+;;;
+;;; Common device mappings.
+;;;
+
+(define (open-luks-device source target)
+ "Return a gexp that maps SOURCE to TARGET as a LUKS device, using
+'cryptsetup'."
+ #~(zero? (system* (string-append #$cryptsetup "/sbin/cryptsetup")
+ "open" "--type" "luks"
+ #$source #$target)))
+
+(define (close-luks-device source target)
+ "Return a gexp that closes TARGET, a LUKS device."
+ #~(zero? (system* (string-append #$cryptsetup "/sbin/cryptsetup")
+ "close" #$target)))
+
+(define luks-device-mapping
+ ;; The type of LUKS mapped devices.
+ (mapped-device-kind
+ (open open-luks-device)
+ (close close-luks-device)))
+
;;; mapped-devices.scm ends here