summary refs log tree commit diff
path: root/gnu/system.scm
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2014-05-09 22:58:46 +0200
committerLudovic Courtès <ludo@gnu.org>2014-05-09 22:59:18 +0200
commit217a5b852e02775123a30131f63684c09bd6ac77 (patch)
tree89563dcc30851ee21da7f07ce04fc22b069dbea9 /gnu/system.scm
parente5c66f8c7bfb1f8c4162d19b3d01526164cfe2a4 (diff)
downloadguix-217a5b852e02775123a30131f63684c09bd6ac77.tar.gz
system: Automatically add essential services.
* gnu/services/base.scm (%base-services): Remove calls to
  'host-name-service', 'user-processes-service', and
  'root-file-system-service'.
* gnu/system.scm (<operating-system>)[operating-system-services]: Rename
  to...
  [operating-system-user-services]: ... this.
  (essential-services, operating-system-services): New procedures.
  (operating-system-accounts, operating-system-etc-directory,
  operating-system-boot-script, operating-system-derivation): Adjust to
  new 'operating-system-services' return type.
Diffstat (limited to 'gnu/system.scm')
-rw-r--r--gnu/system.scm31
1 files changed, 24 insertions, 7 deletions
diff --git a/gnu/system.scm b/gnu/system.scm
index 8a5fe47b30..491e0ed7ae 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -40,6 +40,7 @@
   #:export (operating-system
             operating-system?
             operating-system-services
+            operating-system-user-services
             operating-system-packages
             operating-system-bootloader-entries
             operating-system-host-name
@@ -50,7 +51,6 @@
             operating-system-packages
             operating-system-timezone
             operating-system-locale
-            operating-system-services
             operating-system-file-systems
 
             operating-system-derivation
@@ -112,7 +112,7 @@
   (timezone operating-system-timezone)            ; string
   (locale   operating-system-locale)              ; string
 
-  (services operating-system-services             ; list of monadic services
+  (services operating-system-user-services        ; list of monadic services
             (default %base-services))
 
   (pam-services operating-system-pam-services     ; list of PAM services
@@ -184,6 +184,24 @@ file."
 
   (gexp->derivation name builder))
 
+(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))))
+
+(define (operating-system-services os)
+  "Return all the services of OS, including \"internal\" services that do not
+explicitly appear in OS."
+  (mlet %store-monad
+      ((user      (sequence %store-monad (operating-system-user-services os)))
+       (essential (essential-services os)))
+    (return (append essential user))))
+
 (define* (etc-directory #:key
                         (locale "C") (timezone "Europe/Paris")
                         (accounts '())
@@ -254,8 +272,7 @@ alias ll='ls -l'
 
 (define (operating-system-accounts os)
   "Return the user accounts for OS, including an obligatory 'root' account."
-  (mlet %store-monad ((services (sequence %store-monad
-                                          (operating-system-services os))))
+  (mlet %store-monad ((services (operating-system-services os)))
     (return (cons (user-account
                    (name "root")
                    (password "")
@@ -269,7 +286,7 @@ alias ll='ls -l'
 (define (operating-system-etc-directory os)
   "Return that static part of the /etc directory of OS."
   (mlet* %store-monad
-      ((services     (sequence %store-monad (operating-system-services os)))
+      ((services     (operating-system-services os))
        (pam-services ->
                      ;; Services known to PAM.
                      (delete-duplicates
@@ -310,7 +327,7 @@ we're running in the final root."
       (guix build utils)))
 
   (mlet* %store-monad
-      ((services (sequence %store-monad (operating-system-services os)))
+      ((services (operating-system-services os))
        (etc      (operating-system-etc-directory os))
        (modules  (imported-modules %modules))
        (compiled (compiled-modules %modules))
@@ -367,7 +384,7 @@ we're running in the final root."
   (mlet* %store-monad
       ((profile     (operating-system-profile os))
        (etc         (operating-system-etc-directory os))
-       (services    (sequence %store-monad (operating-system-services os)))
+       (services    (operating-system-services os))
        (boot        (operating-system-boot-script os))
        (kernel  ->  (operating-system-kernel os))
        (initrd      ((operating-system-initrd os) boot-file-systems))