diff options
author | Ludovic Courtès <ludo@gnu.org> | 2014-11-10 22:25:39 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2014-11-10 22:42:14 +0100 |
commit | d6e2a622c49184390d362abf97ca1c56498cfd6a (patch) | |
tree | 83543c98a446ad7d67eac35952542af4b6ab1b1f /gnu/services | |
parent | ccea821befc96a2c5e0c64b1a18eef0f31abe0a7 (diff) |
services: Add 'user-unmount-service' as an essential service.
* gnu/services/base.scm (user-unmount-service): New procedure.
* gnu/system.scm (essential-services): Use it.
* gnu/system/install.scm (cow-store-service): Mention it in comment.
Diffstat (limited to 'gnu/services')
-rw-r--r-- | gnu/services/base.scm | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/gnu/services/base.scm b/gnu/services/base.scm index abf8ae99ac..0c45d54d17 100644 --- a/gnu/services/base.scm +++ b/gnu/services/base.scm @@ -38,6 +38,7 @@ #:use-module (ice-9 format) #:export (root-file-system-service file-system-service + user-unmount-service device-mapping-service swap-service user-processes-service @@ -145,6 +146,33 @@ names such as device-mapping services." (umount #$target) #f)))))) +(define (user-unmount-service known-mount-points) + "Return a service whose sole purpose is to unmount file systems not listed +in KNOWN-MOUNT-POINTS when it is stopped." + (with-monad %store-monad + (return + (service + (documentation "Unmount manually-mounted file systems.") + (provision '(user-unmount)) + (start #~(const #t)) + (stop #~(lambda args + (define (known? mount-point) + (member mount-point + (cons* "/proc" "/sys" + '#$known-mount-points))) + + (for-each (lambda (mount-point) + (format #t "unmounting '~a'...~%" mount-point) + (catch 'system-error + (lambda () + (umount mount-point)) + (lambda args + (let ((errno (system-error-errno args))) + (format #t "failed to unmount '~a': ~a~%" + mount-point (strerror errno)))))) + (filter (negate known?) (mount-points))) + #f)))))) + (define %do-not-kill-file ;; Name of the file listing PIDs of processes that must survive when halting ;; the system. Typical example is user-space file systems. |