M doc/guix.texi => doc/guix.texi +3 -0
@@ 3054,6 3054,9 @@ instance, for the root file system.
This Boolean indicates whether the file system needs to be checked for
errors before being mounted.
+@item @code{create-mount-point?} (default: @code{#f})
+When true, the mount point is created if it does not exist yet.
+
@end table
@end deftp
M gnu/services/base.scm => gnu/services/base.scm +7 -2
@@ 96,11 96,13 @@ This service must be the root of the service dependency graph so that its
(respawn? #f)))))
(define* (file-system-service device target type
- #:key (check? #t) options (title 'any))
+ #:key (check? #t) create-mount-point?
+ options (title 'any))
"Return a service that mounts DEVICE on TARGET as a file system TYPE with
OPTIONS. TITLE is a symbol specifying what kind of name DEVICE is: 'label for
a partition label, 'device for a device file name, or 'any. When CHECK? is
-true, check the file system before mounting it."
+true, check the file system before mounting it. When CREATE-MOUNT-POINT? is
+true, create TARGET if it does not exist yet."
(with-monad %store-monad
(return
(service
@@ 109,6 111,9 @@ true, check the file system before mounting it."
(documentation "Check, mount, and unmount the given file system.")
(start #~(lambda args
(let ((device (canonicalize-device-spec #$device '#$title)))
+ #$(if create-mount-point?
+ #~(mkdir-p #$target)
+ #~#t)
#$(if check?
#~(begin
;; Make sure fsck.ext2 & co. can be found.
M gnu/system.scm => gnu/system.scm +2 -1
@@ 181,10 181,11 @@ as 'needed-for-boot'."
(sequence %store-monad
(map (match-lambda
(($ <file-system> device title target type flags opts
- #f check?)
+ #f check? create?)
(file-system-service device target type
#:title title
#:check? check?
+ #:create-mount-point? create?
#:options opts)))
file-systems)))
M gnu/system/file-systems.scm => gnu/system/file-systems.scm +5 -1
@@ 28,6 28,8 @@
file-system-needed-for-boot?
file-system-flags
file-system-options
+ file-system-check?
+ file-system-create-mount-point?
%fuse-control-file-system
%binary-format-file-system
@@ 57,7 59,9 @@
(needed-for-boot? file-system-needed-for-boot? ; Boolean
(default #f))
(check? file-system-check? ; Boolean
- (default #t)))
+ (default #t))
+ (create-mount-point? file-system-create-mount-point? ; Boolean
+ (default #f)))
(define %fuse-control-file-system
;; Control file system for Linux' file systems in user-space (FUSE).