summary refs log tree commit diff
path: root/gnu/system.scm
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2014-05-10 23:33:52 +0200
committerLudovic Courtès <ludo@gnu.org>2014-05-10 23:33:52 +0200
commit023f391c7860d21aee9e9b3e601d7a81bb5d128d (patch)
treee4567181f1bd1a1a14fa646501503794a68c3f8d /gnu/system.scm
parent23ed63a12d941ad836f3fc9902ba4f145db1975c (diff)
downloadguix-023f391c7860d21aee9e9b3e601d7a81bb5d128d.tar.gz
services: Add 'file-system-service'.
* gnu/services/base.scm (file-system-service): New procedure.
  (user-processes-service): Add 'requirements' parameter.
* gnu/services/dmd.scm (dmd-configuration-file): Use (guix build
  linux-initrd).
* guix/build/linux-initrd.scm (guix): Export 'check-file-system'.
* gnu/system.scm (file-union): New procedure.
  (essential-services): Use it.  Add that to the returned list.
Diffstat (limited to 'gnu/system.scm')
-rw-r--r--gnu/system.scm30
1 files changed, 25 insertions, 5 deletions
diff --git a/gnu/system.scm b/gnu/system.scm
index 491e0ed7ae..d76c3670f0 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -184,15 +184,35 @@ file."
 
   (gexp->derivation name builder))
 
+(define (other-file-system-services os)
+  "Return file system services for the file systems of OS that are not marked
+as 'needed-for-boot'."
+  (define file-systems
+    (remove (lambda (fs)
+              (or (file-system-needed-for-boot? fs)
+                  (string=? "/" (file-system-mount-point fs))))
+            (operating-system-file-systems os)))
+
+  (sequence %store-monad
+            (map (match-lambda
+                  (($ <file-system> device target type flags opts #f check?)
+                   (file-system-service device target type
+                                        #:check? check?
+                                        #:options opts)))
+                 file-systems)))
+
 (define (essential-services os)
   "Return the list of essential services for OS.  These are special services
 that implement part of what's declared in OS are responsible for low-level
 bookkeeping."
-  (mlet %store-monad ((procs     (user-processes-service))
-                      (root-fs   (root-file-system-service))
-                      (host-name (host-name-service
-                                  (operating-system-host-name os))))
-    (return (list host-name procs root-fs))))
+  (mlet* %store-monad ((root-fs   (root-file-system-service))
+                       (other-fs  (other-file-system-services os))
+                       (procs     (user-processes-service
+                                   (map (compose first service-provision)
+                                        other-fs)))
+                       (host-name (host-name-service
+                                   (operating-system-host-name os))))
+    (return (cons* host-name procs root-fs other-fs))))
 
 (define (operating-system-services os)
   "Return all the services of OS, including \"internal\" services that do not