guix-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 06/11] Rename (gnu services dmd) to (gnu services shepherd).


From: Alex Kost
Subject: [PATCH 06/11] Rename (gnu services dmd) to (gnu services shepherd).
Date: Thu, 28 Jan 2016 00:10:31 +0300

* gnu/services/dmd.scm: Rename to...
* gnu/services/shepherd.scm: ... this.
* gnu/system.scm: Use it.
* gnu/system/install.scm: Likewise.
* gnu/services/xorg.scm: Likewise.
* gnu/services/web.scm: Likewise.
* gnu/services/ssh.scm: Likewise.
* gnu/services/networking.scm: Likewise.
* gnu/services/mail.scm: Likewise.
* gnu/services/lirc.scm: Likewise.
* gnu/services/desktop.scm: Likewise.
* gnu/services/dbus.scm: Likewise.
* gnu/services/databases.scm: Likewise.
* gnu/services/base.scm: Likewise.
* gnu/services/avahi.scm: Likewise.
* guix/scripts/system.scm: Likewise.
* tests/services.scm: Likewise.
* tests/guix-system.sh: Likewise.
* doc/guix.texi (Shepherd Services): Adjust accordingly.
* gnu-system.am (GNU_SYSTEM_MODULES): Likewise.
* po/guix/POTFILES.in: Likewise.
---
 doc/guix.texi               |   8 +-
 gnu-system.am               |   2 +-
 gnu/services/avahi.scm      |   2 +-
 gnu/services/base.scm       |   2 +-
 gnu/services/databases.scm  |   2 +-
 gnu/services/dbus.scm       |   2 +-
 gnu/services/desktop.scm    |   2 +-
 gnu/services/dmd.scm        | 275 --------------------------------------------
 gnu/services/lirc.scm       |   2 +-
 gnu/services/mail.scm       |   2 +-
 gnu/services/networking.scm |   2 +-
 gnu/services/shepherd.scm   | 275 ++++++++++++++++++++++++++++++++++++++++++++
 gnu/services/ssh.scm        |   2 +-
 gnu/services/web.scm        |   2 +-
 gnu/services/xorg.scm       |   2 +-
 gnu/system.scm              |   2 +-
 gnu/system/install.scm      |   2 +-
 guix/scripts/system.scm     |   2 +-
 po/guix/POTFILES.in         |   2 +-
 tests/guix-system.sh        |   4 +-
 tests/services.scm          |   2 +-
 21 files changed, 298 insertions(+), 298 deletions(-)
 delete mode 100644 gnu/services/dmd.scm
 create mode 100644 gnu/services/shepherd.scm

diff --git a/doc/guix.texi b/doc/guix.texi
index 55e2c67..6c6d170 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -9764,10 +9764,10 @@ extend it by passing it lists of packages to add to the 
system profile.
 
 @cindex PID 1
 @cindex init system
-The @code{(gnu services dmd)} provides a way to define services managed
-by address@hidden, which is GuixSD initialization system---the first
-process that is started when the system boots, aka. address@hidden
-(@pxref{Introduction,,, shepherd, GNU Shepherd Manual}).
+The @code{(gnu services shepherd)} provides a way to define services
+managed by address@hidden, which is GuixSD initialization
+system---the first process that is started when the system boots,
+aka. address@hidden (@pxref{Introduction,,, shepherd, GNU Shepherd Manual}).
 
 Services in Shepherd can depend on each other.  For instance, the SSH
 daemon may need to be started after the syslog daemon has been started,
diff --git a/gnu-system.am b/gnu-system.am
index ad59241..75ab91f 100644
--- a/gnu-system.am
+++ b/gnu-system.am
@@ -361,10 +361,10 @@ GNU_SYSTEM_MODULES =                              \
   gnu/services/databases.scm                   \
   gnu/services/dbus.scm                                \
   gnu/services/desktop.scm                     \
-  gnu/services/dmd.scm                         \
   gnu/services/lirc.scm                                \
   gnu/services/mail.scm                                \
   gnu/services/networking.scm                  \
+  gnu/services/shepherd.scm                    \
   gnu/services/ssh.scm                         \
   gnu/services/web.scm                         \
   gnu/services/xorg.scm                                \
diff --git a/gnu/services/avahi.scm b/gnu/services/avahi.scm
index 909abef..d458042 100644
--- a/gnu/services/avahi.scm
+++ b/gnu/services/avahi.scm
@@ -19,7 +19,7 @@
 (define-module (gnu services avahi)
   #:use-module (gnu services)
   #:use-module (gnu services base)
-  #:use-module (gnu services dmd)
+  #:use-module (gnu services shepherd)
   #:use-module (gnu services dbus)
   #:use-module (gnu system shadow)
   #:use-module (gnu packages avahi)
diff --git a/gnu/services/base.scm b/gnu/services/base.scm
index 6483a66..10df927 100644
--- a/gnu/services/base.scm
+++ b/gnu/services/base.scm
@@ -22,7 +22,7 @@
 (define-module (gnu services base)
   #:use-module (guix store)
   #:use-module (gnu services)
-  #:use-module (gnu services dmd)
+  #:use-module (gnu services shepherd)
   #:use-module (gnu services networking)
   #:use-module (gnu system pam)
   #:use-module (gnu system shadow)                ; 'user-account', etc.
diff --git a/gnu/services/databases.scm b/gnu/services/databases.scm
index 8fdd222..c85606e 100644
--- a/gnu/services/databases.scm
+++ b/gnu/services/databases.scm
@@ -19,7 +19,7 @@
 
 (define-module (gnu services databases)
   #:use-module (gnu services)
-  #:use-module (gnu services dmd)
+  #:use-module (gnu services shepherd)
   #:use-module (gnu system shadow)
   #:use-module (gnu packages admin)
   #:use-module (gnu packages databases)
diff --git a/gnu/services/dbus.scm b/gnu/services/dbus.scm
index 9b0d198..3e5fa14 100644
--- a/gnu/services/dbus.scm
+++ b/gnu/services/dbus.scm
@@ -19,7 +19,7 @@
 
 (define-module (gnu services dbus)
   #:use-module (gnu services)
-  #:use-module (gnu services dmd)
+  #:use-module (gnu services shepherd)
   #:use-module (gnu system shadow)
   #:use-module ((gnu packages glib) #:select (dbus/activation))
   #:use-module (gnu packages admin)
diff --git a/gnu/services/desktop.scm b/gnu/services/desktop.scm
index 694a8ed..e6d3232 100644
--- a/gnu/services/desktop.scm
+++ b/gnu/services/desktop.scm
@@ -20,7 +20,7 @@
 
 (define-module (gnu services desktop)
   #:use-module (gnu services)
-  #:use-module (gnu services dmd)
+  #:use-module (gnu services shepherd)
   #:use-module (gnu services base)
   #:use-module (gnu services dbus)
   #:use-module (gnu services avahi)
diff --git a/gnu/services/dmd.scm b/gnu/services/dmd.scm
deleted file mode 100644
index 828d781..0000000
--- a/gnu/services/dmd.scm
+++ /dev/null
@@ -1,275 +0,0 @@
-;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013, 2014, 2015, 2016 Ludovic Courtès <address@hidden>
-;;;
-;;; This file is part of GNU Guix.
-;;;
-;;; GNU Guix is free software; you can redistribute it and/or modify it
-;;; under the terms of the GNU General Public License as published by
-;;; the Free Software Foundation; either version 3 of the License, or (at
-;;; your option) any later version.
-;;;
-;;; GNU Guix is distributed in the hope that it will be useful, but
-;;; WITHOUT ANY WARRANTY; without even the implied warranty of
-;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;;; GNU General Public License for more details.
-;;;
-;;; You should have received a copy of the GNU General Public License
-;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
-
-(define-module (gnu services dmd)
-  #:use-module (guix ui)
-  #:use-module (guix sets)
-  #:use-module (guix gexp)
-  #:use-module (guix store)
-  #:use-module (guix monads)
-  #:use-module (guix records)
-  #:use-module (guix derivations)                 ;imported-modules, etc.
-  #:use-module (gnu services)
-  #:use-module (gnu packages admin)
-  #:use-module (ice-9 match)
-  #:use-module (ice-9 vlist)
-  #:use-module (srfi srfi-1)
-  #:use-module (srfi srfi-26)
-  #:use-module (srfi srfi-34)
-  #:use-module (srfi srfi-35)
-  #:export (dmd-root-service-type
-            %dmd-root-service
-            dmd-service-type
-
-            dmd-service
-            dmd-service?
-            dmd-service-documentation
-            dmd-service-provision
-            dmd-service-requirement
-            dmd-service-respawn?
-            dmd-service-start
-            dmd-service-stop
-            dmd-service-auto-start?
-            dmd-service-modules
-            dmd-service-imported-modules
-
-            %default-imported-modules
-            %default-modules
-
-            dmd-service-back-edges))
-
-;;; Commentary:
-;;;
-;;; Instantiating system services as a dmd configuration file.
-;;;
-;;; Code:
-
-
-(define (dmd-boot-gexp services)
-  (mlet %store-monad ((dmd-conf (dmd-configuration-file services)))
-    (return #~(begin
-                ;; Keep track of the booted system.
-                (false-if-exception (delete-file "/run/booted-system"))
-                (symlink (readlink "/run/current-system")
-                         "/run/booted-system")
-
-                ;; Close any remaining open file descriptors to be on the safe
-                ;; side.  This must be the very last thing we do, because
-                ;; Guile has internal FDs such as 'sleep_pipe' that need to be
-                ;; alive.
-                (let loop ((fd 3))
-                  (when (< fd 1024)
-                    (false-if-exception (close-fdes fd))
-                    (loop (+ 1 fd))))
-
-                ;; Start shepherd.
-                (execl (string-append #$shepherd "/bin/shepherd")
-                       "shepherd" "--config" #$dmd-conf)))))
-
-(define dmd-root-service-type
-  (service-type
-   (name 'dmd-root)
-   ;; Extending the root dmd service (aka. PID 1) happens by concatenating the
-   ;; list of services provided by the extensions.
-   (compose concatenate)
-   (extend append)
-   (extensions (list (service-extension boot-service-type dmd-boot-gexp)
-                     (service-extension profile-service-type
-                                        (const (list shepherd)))))))
-
-(define %dmd-root-service
-  ;; The root dmd service, aka. PID 1.  Its parameter is a list of
-  ;; <dmd-service> objects.
-  (service dmd-root-service-type '()))
-
-(define-syntax-rule (dmd-service-type service-name proc)
-  "Return a <service-type> denoting a simple dmd service--i.e., the type for a
-service that extends DMD-ROOT-SERVICE-TYPE and nothing else."
-  (service-type
-   (name service-name)
-   (extensions
-    (list (service-extension dmd-root-service-type
-                             (compose list proc))))))
-
-(define %default-imported-modules
-  ;; Default set of modules imported for a service's consumption.
-  '((guix build utils)
-    (guix build syscalls)))
-
-(define %default-modules
-  ;; Default set of modules visible in a service's file.
-  `((shepherd service)
-    (oop goops)
-    (guix build utils)
-    (guix build syscalls)))
-
-(define-record-type* <dmd-service>
-  dmd-service make-dmd-service
-  dmd-service?
-  (documentation dmd-service-documentation        ;string
-                 (default "[No documentation.]"))
-  (provision     dmd-service-provision)           ;list of symbols
-  (requirement   dmd-service-requirement          ;list of symbols
-                 (default '()))
-  (respawn?      dmd-service-respawn?             ;Boolean
-                 (default #t))
-  (start         dmd-service-start)               ;g-expression (procedure)
-  (stop          dmd-service-stop                 ;g-expression (procedure)
-                 (default #~(const #f)))
-  (auto-start?   dmd-service-auto-start?          ;Boolean
-                 (default #t))
-  (modules       dmd-service-modules              ;list of module names
-                 (default %default-modules))
-  (imported-modules dmd-service-imported-modules  ;list of module names
-                    (default %default-imported-modules)))
-
-
-(define (assert-valid-graph services)
-  "Raise an error if SERVICES does not define a valid dmd service graph, for
-instance if a service requires a nonexistent service, or if more than one
-service uses a given name.
-
-These are constraints that dmd's 'register-service' verifies but we'd better
-verify them here statically than wait until PID 1 halts with an assertion
-failure."
-  (define provisions
-    ;; The set of provisions (symbols).  Bail out if a symbol is given more
-    ;; than once.
-    (fold (lambda (service set)
-            (define (assert-unique symbol)
-              (when (set-contains? set symbol)
-                (raise (condition
-                        (&message
-                         (message
-                          (format #f (_ "service '~a' provided more than once")
-                                  symbol)))))))
-
-            (for-each assert-unique (dmd-service-provision service))
-            (fold set-insert set (dmd-service-provision service)))
-          (setq 'dmd)
-          services))
-
-  (define (assert-satisfied-requirements service)
-    ;; Bail out if the requirements of SERVICE aren't satisfied.
-    (for-each (lambda (requirement)
-                (unless (set-contains? provisions requirement)
-                  (raise (condition
-                          (&message
-                           (message
-                            (format #f (_ "service '~a' requires '~a', \
-which is undefined")
-                                    (match (dmd-service-provision service)
-                                      ((head . _) head)
-                                      (_          service))
-                                    requirement)))))))
-              (dmd-service-requirement service)))
-
-  (for-each assert-satisfied-requirements services))
-
-(define (dmd-service-file-name service)
-  "Return the file name where the initialization code for SERVICE is to be
-stored."
-  (let ((provisions (string-join (map symbol->string
-                                      (dmd-service-provision service)))))
-    (string-append "dmd-"
-                   (string-map (match-lambda
-                                 (#\/ #\-)
-                                 (chr chr))
-                               provisions)
-                   ".scm")))
-
-(define (dmd-service-file service)
-  "Return a file defining SERVICE."
-  (gexp->file (dmd-service-file-name service)
-              #~(begin
-                  (use-modules #$@(dmd-service-modules service))
-
-                  (make <service>
-                    #:docstring '#$(dmd-service-documentation service)
-                    #:provides '#$(dmd-service-provision service)
-                    #:requires '#$(dmd-service-requirement service)
-                    #:respawn? '#$(dmd-service-respawn? service)
-                    #:start #$(dmd-service-start service)
-                    #:stop #$(dmd-service-stop service)))))
-
-(define (dmd-configuration-file services)
-  "Return the dmd configuration file for SERVICES."
-  (define modules
-    (delete-duplicates
-     (append-map dmd-service-imported-modules services)))
-
-  (assert-valid-graph services)
-
-  (mlet %store-monad ((modules  (imported-modules modules))
-                      (compiled (compiled-modules modules))
-                      (files    (mapm %store-monad dmd-service-file services)))
-    (define config
-      #~(begin
-          (eval-when (expand load eval)
-            (set! %load-path (cons #$modules %load-path))
-            (set! %load-compiled-path
-              (cons #$compiled %load-compiled-path)))
-
-          (use-modules (system repl error-handling))
-
-          ;; Arrange to spawn a REPL if loading one of FILES fails.  This is
-          ;; better than a kernel panic.
-          (call-with-error-handling
-            (lambda ()
-              (apply register-services (map primitive-load '#$files))))
-
-          ;; guix-daemon 0.6 aborts if 'PATH' is undefined, so work around it.
-          (setenv "PATH" "/run/current-system/profile/bin")
-
-          (format #t "starting services...~%")
-          (for-each start
-                    '#$(append-map dmd-service-provision
-                                   (filter dmd-service-auto-start?
-                                           services)))))
-
-    (gexp->file "dmd.conf" config)))
-
-(define (dmd-service-back-edges services)
-  "Return a procedure that, when given a <dmd-service> from SERVICES, returns
-the list of <dmd-service> that depend on it."
-  (define provision->service
-    (let ((services (fold (lambda (service result)
-                            (fold (cut vhash-consq <> service <>)
-                                  result
-                                  (dmd-service-provision service)))
-                          vlist-null
-                          services)))
-      (lambda (name)
-        (match (vhash-assq name services)
-          ((_ . service) service)
-          (#f            #f)))))
-
-  (define edges
-    (fold (lambda (service edges)
-            (fold (lambda (requirement edges)
-                    (vhash-consq (provision->service requirement) service
-                                 edges))
-                  edges
-                  (dmd-service-requirement service)))
-          vlist-null
-          services))
-
-  (lambda (service)
-    (vhash-foldq* cons '() service edges)))
-
-;;; dmd.scm ends here
diff --git a/gnu/services/lirc.scm b/gnu/services/lirc.scm
index 6ae6225..bfaca9b 100644
--- a/gnu/services/lirc.scm
+++ b/gnu/services/lirc.scm
@@ -19,7 +19,7 @@
 
 (define-module (gnu services lirc)
   #:use-module (gnu services)
-  #:use-module (gnu services dmd)
+  #:use-module (gnu services shepherd)
   #:use-module (gnu packages lirc)
   #:use-module (guix gexp)
   #:use-module (guix records)
diff --git a/gnu/services/mail.scm b/gnu/services/mail.scm
index f49a4a4..181693a 100644
--- a/gnu/services/mail.scm
+++ b/gnu/services/mail.scm
@@ -21,7 +21,7 @@
 (define-module (gnu services mail)
   #:use-module (gnu services)
   #:use-module (gnu services base)
-  #:use-module (gnu services dmd)
+  #:use-module (gnu services shepherd)
   #:use-module (gnu system pam)
   #:use-module (gnu system shadow)
   #:use-module (gnu packages mail)
diff --git a/gnu/services/networking.scm b/gnu/services/networking.scm
index ce21b1d..bce1778 100644
--- a/gnu/services/networking.scm
+++ b/gnu/services/networking.scm
@@ -19,7 +19,7 @@
 
 (define-module (gnu services networking)
   #:use-module (gnu services)
-  #:use-module (gnu services dmd)
+  #:use-module (gnu services shepherd)
   #:use-module (gnu services dbus)
   #:use-module (gnu system shadow)
   #:use-module (gnu system pam)
diff --git a/gnu/services/shepherd.scm b/gnu/services/shepherd.scm
new file mode 100644
index 0000000..a33985e
--- /dev/null
+++ b/gnu/services/shepherd.scm
@@ -0,0 +1,275 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2013, 2014, 2015, 2016 Ludovic Courtès <address@hidden>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu services shepherd)
+  #:use-module (guix ui)
+  #:use-module (guix sets)
+  #:use-module (guix gexp)
+  #:use-module (guix store)
+  #:use-module (guix monads)
+  #:use-module (guix records)
+  #:use-module (guix derivations)                 ;imported-modules, etc.
+  #:use-module (gnu services)
+  #:use-module (gnu packages admin)
+  #:use-module (ice-9 match)
+  #:use-module (ice-9 vlist)
+  #:use-module (srfi srfi-1)
+  #:use-module (srfi srfi-26)
+  #:use-module (srfi srfi-34)
+  #:use-module (srfi srfi-35)
+  #:export (dmd-root-service-type
+            %dmd-root-service
+            dmd-service-type
+
+            dmd-service
+            dmd-service?
+            dmd-service-documentation
+            dmd-service-provision
+            dmd-service-requirement
+            dmd-service-respawn?
+            dmd-service-start
+            dmd-service-stop
+            dmd-service-auto-start?
+            dmd-service-modules
+            dmd-service-imported-modules
+
+            %default-imported-modules
+            %default-modules
+
+            dmd-service-back-edges))
+
+;;; Commentary:
+;;;
+;;; Instantiating system services as a dmd configuration file.
+;;;
+;;; Code:
+
+
+(define (dmd-boot-gexp services)
+  (mlet %store-monad ((dmd-conf (dmd-configuration-file services)))
+    (return #~(begin
+                ;; Keep track of the booted system.
+                (false-if-exception (delete-file "/run/booted-system"))
+                (symlink (readlink "/run/current-system")
+                         "/run/booted-system")
+
+                ;; Close any remaining open file descriptors to be on the safe
+                ;; side.  This must be the very last thing we do, because
+                ;; Guile has internal FDs such as 'sleep_pipe' that need to be
+                ;; alive.
+                (let loop ((fd 3))
+                  (when (< fd 1024)
+                    (false-if-exception (close-fdes fd))
+                    (loop (+ 1 fd))))
+
+                ;; Start shepherd.
+                (execl (string-append #$shepherd "/bin/shepherd")
+                       "shepherd" "--config" #$dmd-conf)))))
+
+(define dmd-root-service-type
+  (service-type
+   (name 'dmd-root)
+   ;; Extending the root dmd service (aka. PID 1) happens by concatenating the
+   ;; list of services provided by the extensions.
+   (compose concatenate)
+   (extend append)
+   (extensions (list (service-extension boot-service-type dmd-boot-gexp)
+                     (service-extension profile-service-type
+                                        (const (list shepherd)))))))
+
+(define %dmd-root-service
+  ;; The root dmd service, aka. PID 1.  Its parameter is a list of
+  ;; <dmd-service> objects.
+  (service dmd-root-service-type '()))
+
+(define-syntax-rule (dmd-service-type service-name proc)
+  "Return a <service-type> denoting a simple dmd service--i.e., the type for a
+service that extends DMD-ROOT-SERVICE-TYPE and nothing else."
+  (service-type
+   (name service-name)
+   (extensions
+    (list (service-extension dmd-root-service-type
+                             (compose list proc))))))
+
+(define %default-imported-modules
+  ;; Default set of modules imported for a service's consumption.
+  '((guix build utils)
+    (guix build syscalls)))
+
+(define %default-modules
+  ;; Default set of modules visible in a service's file.
+  `((shepherd service)
+    (oop goops)
+    (guix build utils)
+    (guix build syscalls)))
+
+(define-record-type* <dmd-service>
+  dmd-service make-dmd-service
+  dmd-service?
+  (documentation dmd-service-documentation        ;string
+                 (default "[No documentation.]"))
+  (provision     dmd-service-provision)           ;list of symbols
+  (requirement   dmd-service-requirement          ;list of symbols
+                 (default '()))
+  (respawn?      dmd-service-respawn?             ;Boolean
+                 (default #t))
+  (start         dmd-service-start)               ;g-expression (procedure)
+  (stop          dmd-service-stop                 ;g-expression (procedure)
+                 (default #~(const #f)))
+  (auto-start?   dmd-service-auto-start?          ;Boolean
+                 (default #t))
+  (modules       dmd-service-modules              ;list of module names
+                 (default %default-modules))
+  (imported-modules dmd-service-imported-modules  ;list of module names
+                    (default %default-imported-modules)))
+
+
+(define (assert-valid-graph services)
+  "Raise an error if SERVICES does not define a valid dmd service graph, for
+instance if a service requires a nonexistent service, or if more than one
+service uses a given name.
+
+These are constraints that dmd's 'register-service' verifies but we'd better
+verify them here statically than wait until PID 1 halts with an assertion
+failure."
+  (define provisions
+    ;; The set of provisions (symbols).  Bail out if a symbol is given more
+    ;; than once.
+    (fold (lambda (service set)
+            (define (assert-unique symbol)
+              (when (set-contains? set symbol)
+                (raise (condition
+                        (&message
+                         (message
+                          (format #f (_ "service '~a' provided more than once")
+                                  symbol)))))))
+
+            (for-each assert-unique (dmd-service-provision service))
+            (fold set-insert set (dmd-service-provision service)))
+          (setq 'dmd)
+          services))
+
+  (define (assert-satisfied-requirements service)
+    ;; Bail out if the requirements of SERVICE aren't satisfied.
+    (for-each (lambda (requirement)
+                (unless (set-contains? provisions requirement)
+                  (raise (condition
+                          (&message
+                           (message
+                            (format #f (_ "service '~a' requires '~a', \
+which is undefined")
+                                    (match (dmd-service-provision service)
+                                      ((head . _) head)
+                                      (_          service))
+                                    requirement)))))))
+              (dmd-service-requirement service)))
+
+  (for-each assert-satisfied-requirements services))
+
+(define (dmd-service-file-name service)
+  "Return the file name where the initialization code for SERVICE is to be
+stored."
+  (let ((provisions (string-join (map symbol->string
+                                      (dmd-service-provision service)))))
+    (string-append "dmd-"
+                   (string-map (match-lambda
+                                 (#\/ #\-)
+                                 (chr chr))
+                               provisions)
+                   ".scm")))
+
+(define (dmd-service-file service)
+  "Return a file defining SERVICE."
+  (gexp->file (dmd-service-file-name service)
+              #~(begin
+                  (use-modules #$@(dmd-service-modules service))
+
+                  (make <service>
+                    #:docstring '#$(dmd-service-documentation service)
+                    #:provides '#$(dmd-service-provision service)
+                    #:requires '#$(dmd-service-requirement service)
+                    #:respawn? '#$(dmd-service-respawn? service)
+                    #:start #$(dmd-service-start service)
+                    #:stop #$(dmd-service-stop service)))))
+
+(define (dmd-configuration-file services)
+  "Return the dmd configuration file for SERVICES."
+  (define modules
+    (delete-duplicates
+     (append-map dmd-service-imported-modules services)))
+
+  (assert-valid-graph services)
+
+  (mlet %store-monad ((modules  (imported-modules modules))
+                      (compiled (compiled-modules modules))
+                      (files    (mapm %store-monad dmd-service-file services)))
+    (define config
+      #~(begin
+          (eval-when (expand load eval)
+            (set! %load-path (cons #$modules %load-path))
+            (set! %load-compiled-path
+              (cons #$compiled %load-compiled-path)))
+
+          (use-modules (system repl error-handling))
+
+          ;; Arrange to spawn a REPL if loading one of FILES fails.  This is
+          ;; better than a kernel panic.
+          (call-with-error-handling
+            (lambda ()
+              (apply register-services (map primitive-load '#$files))))
+
+          ;; guix-daemon 0.6 aborts if 'PATH' is undefined, so work around it.
+          (setenv "PATH" "/run/current-system/profile/bin")
+
+          (format #t "starting services...~%")
+          (for-each start
+                    '#$(append-map dmd-service-provision
+                                   (filter dmd-service-auto-start?
+                                           services)))))
+
+    (gexp->file "dmd.conf" config)))
+
+(define (dmd-service-back-edges services)
+  "Return a procedure that, when given a <dmd-service> from SERVICES, returns
+the list of <dmd-service> that depend on it."
+  (define provision->service
+    (let ((services (fold (lambda (service result)
+                            (fold (cut vhash-consq <> service <>)
+                                  result
+                                  (dmd-service-provision service)))
+                          vlist-null
+                          services)))
+      (lambda (name)
+        (match (vhash-assq name services)
+          ((_ . service) service)
+          (#f            #f)))))
+
+  (define edges
+    (fold (lambda (service edges)
+            (fold (lambda (requirement edges)
+                    (vhash-consq (provision->service requirement) service
+                                 edges))
+                  edges
+                  (dmd-service-requirement service)))
+          vlist-null
+          services))
+
+  (lambda (service)
+    (vhash-foldq* cons '() service edges)))
+
+;;; shepherd.scm ends here
diff --git a/gnu/services/ssh.scm b/gnu/services/ssh.scm
index 4b0380e..d636502 100644
--- a/gnu/services/ssh.scm
+++ b/gnu/services/ssh.scm
@@ -20,7 +20,7 @@
   #:use-module (guix gexp)
   #:use-module (guix records)
   #:use-module (gnu services)
-  #:use-module (gnu services dmd)
+  #:use-module (gnu services shepherd)
   #:use-module (gnu system pam)
   #:use-module (gnu packages lsh)
   #:use-module (srfi srfi-26)
diff --git a/gnu/services/web.scm b/gnu/services/web.scm
index 84bb30d..bc0aa62 100644
--- a/gnu/services/web.scm
+++ b/gnu/services/web.scm
@@ -19,7 +19,7 @@
 
 (define-module (gnu services web)
   #:use-module (gnu services)
-  #:use-module (gnu services dmd)
+  #:use-module (gnu services shepherd)
   #:use-module (gnu system shadow)
   #:use-module (gnu packages admin)
   #:use-module (gnu packages web)
diff --git a/gnu/services/xorg.scm b/gnu/services/xorg.scm
index 7fea682..4b81bd9 100644
--- a/gnu/services/xorg.scm
+++ b/gnu/services/xorg.scm
@@ -20,7 +20,7 @@
 (define-module (gnu services xorg)
   #:use-module (gnu artwork)
   #:use-module (gnu services)
-  #:use-module (gnu services dmd)
+  #:use-module (gnu services shepherd)
   #:use-module (gnu system pam)
   #:use-module ((gnu packages base) #:select (canonical-package))
   #:use-module (gnu packages guile)
diff --git a/gnu/system.scm b/gnu/system.scm
index 0245184..97103a9 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -44,7 +44,7 @@
   #:use-module (gnu packages firmware)
   #:autoload   (gnu packages cryptsetup) (cryptsetup)
   #:use-module (gnu services)
-  #:use-module (gnu services dmd)
+  #:use-module (gnu services shepherd)
   #:use-module (gnu services base)
   #:use-module (gnu system grub)
   #:use-module (gnu system shadow)
diff --git a/gnu/system/install.scm b/gnu/system/install.scm
index 887bceb..fcbb630 100644
--- a/gnu/system/install.scm
+++ b/gnu/system/install.scm
@@ -24,7 +24,7 @@
   #:use-module (guix monads)
   #:use-module ((guix store) #:select (%store-prefix))
   #:use-module (guix profiles)
-  #:use-module (gnu services dmd)
+  #:use-module (gnu services shepherd)
   #:use-module (gnu packages admin)
   #:use-module (gnu packages bash)
   #:use-module (gnu packages linux)
diff --git a/guix/scripts/system.scm b/guix/scripts/system.scm
index 564ed02..3f368ca 100644
--- a/guix/scripts/system.scm
+++ b/guix/scripts/system.scm
@@ -40,7 +40,7 @@
   #:use-module (gnu system vm)
   #:use-module (gnu system grub)
   #:use-module (gnu services)
-  #:use-module (gnu services dmd)
+  #:use-module (gnu services shepherd)
   #:use-module (gnu packages grub)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-19)
diff --git a/po/guix/POTFILES.in b/po/guix/POTFILES.in
index bf65416..27cc649 100644
--- a/po/guix/POTFILES.in
+++ b/po/guix/POTFILES.in
@@ -3,7 +3,7 @@
 gnu/packages.scm
 gnu/services.scm
 gnu/system.scm
-gnu/services/dmd.scm
+gnu/services/shepherd.scm
 gnu/system/shadow.scm
 guix/scripts.scm
 guix/scripts/build.scm
diff --git a/tests/guix-system.sh b/tests/guix-system.sh
index 02e2524..cd135b9 100644
--- a/tests/guix-system.sh
+++ b/tests/guix-system.sh
@@ -114,10 +114,10 @@ else
     grep "service 'networking'.*more than once" "$errorfile"
 fi
 
-# Reporting unmet dmd requirements.
+# Reporting unmet shepherd requirements.
 
 cat > "$tmpfile" <<EOF
-(use-modules (gnu) (gnu services dmd))
+(use-modules (gnu) (gnu services shepherd))
 (use-service-modules networking)
 
 (define buggy-service-type
diff --git a/tests/services.scm b/tests/services.scm
index 7d2e31b..ab8f293 100644
--- a/tests/services.scm
+++ b/tests/services.scm
@@ -18,7 +18,7 @@
 
 (define-module (test-services)
   #:use-module (gnu services)
-  #:use-module (gnu services dmd)
+  #:use-module (gnu services shepherd)
   #:use-module (srfi srfi-1)
   #:use-module (srfi srfi-26)
   #:use-module (srfi srfi-34)
-- 
2.6.3




reply via email to

[Prev in Thread] Current Thread [Next in Thread]