system: Automatically add essential services.
authorLudovic Courtès <ludo@gnu.org>
Fri, 9 May 2014 20:58:46 +0000 (22:58 +0200)
committerLudovic Courtès <ludo@gnu.org>
Fri, 9 May 2014 20:59:18 +0000 (22:59 +0200)
* 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.

gnu/services/base.scm
gnu/system.scm

index ae538ea..5157349 100644 (file)
@@ -267,13 +267,6 @@ This is the GNU operating system, welcome!\n\n")))
           (mingetty-service "tty6" #:motd motd)
           (syslog-service)
           (guix-service)
-          (nscd-service)
-
-          ;; FIXME: Make this an activation-time thing instead of a service.
-          (host-name-service "gnu")
-
-          ;; The "root" services.
-          (user-processes-service)
-          (root-file-system-service))))
+          (nscd-service))))
 
 ;;; base.scm ends here
index 8a5fe47..491e0ed 100644 (file)
@@ -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
   (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))