summary refs log tree commit diff
path: root/doc
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2015-10-14 19:17:12 +0200
committerLudovic Courtès <ludo@gnu.org>2015-10-14 21:39:06 +0200
commit6f305ea5fdb239bdac5ab9c1d7b837f3177a025a (patch)
treec501f75f264c5ec181997246247d3e18520fcd79 /doc
parent80a67734834a0981ca65cf1757a7d8408d02f1fd (diff)
downloadguix-6f305ea5fdb239bdac5ab9c1d7b837f3177a025a.tar.gz
guix system: Add 'dmd-graph' command.
* guix/scripts/system.scm (dmd-service-node-label,
  dmd-service-node-type, export-dmd-graph): New procedures.
  (show-help): Add 'dmd-graph'.
  (guix-system)[parse-sub-command]: Likewise.
  Honor it.
* doc/guix.texi (Invoking guix system): Document it.
  (dmd Services): Add an illustration and explanation.
* doc/images/dmd-graph.dot: New file.
* doc.am (DOT_FILES): Add it.
Diffstat (limited to 'doc')
-rw-r--r--doc/guix.texi27
-rw-r--r--doc/images/dmd-graph.dot75
2 files changed, 98 insertions, 4 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index 0e0e507714..fd0adfd203 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -7004,6 +7004,12 @@ $ guix system extension-graph @var{file} | dot -Tpdf > services.pdf
 
 produces a PDF file showing the extension relations among services.
 
+@anchor{system-dmd-graph}
+@item dmd-graph
+Emit in Dot/Graphviz format to standard output the @dfn{dependency
+graph} of dmd services of the operating system defined in @var{file}.
+@xref{dmd Services}, for more information and for an example graph.
+
 @end table
 
 
@@ -7332,10 +7338,23 @@ setuid-root programs on the system (@pxref{Setuid Programs}).
 The @code{(gnu services dmd)} provides a way to define services managed
 by GNU@tie{}dmd, which is GuixSD initialization system---the first
 process that is started when the system boots, aka. PID@tie{}1
-(@pxref{Introduction,,, dmd, GNU dmd Manual}).  The
-@var{%dmd-root-service} represents PID@tie{}1, of type
-@var{dmd-root-service-type}; it can be extended by passing it lists of
-@code{<dmd-service>} objects.
+(@pxref{Introduction,,, dmd, GNU dmd Manual}).
+
+Services in dmd can depend on each other.  For instance, the SSH daemon
+may need to be started after the syslog daemon has been started, which
+in turn can only happen once all the file systems have been mounted.
+The simple operating system defined earlier (@pxref{Using the
+Configuration System}) results in a service graph like this:
+
+@image{images/dmd-graph,,5in,Typical dmd service graph.}
+
+You can actually generate such a graph for any operating system
+definition using the @command{guix system dmd-graph} command
+(@pxref{system-dmd-graph, @command{guix system dmd-graph}}).
+
+The @var{%dmd-root-service} is a service object representing PID@tie{}1,
+of type @var{dmd-root-service-type}; it can be extended by passing it
+lists of @code{<dmd-service>} objects.
 
 @deftp {Data Type} dmd-service
 The data type representing a service managed by dmd.
diff --git a/doc/images/dmd-graph.dot b/doc/images/dmd-graph.dot
new file mode 100644
index 0000000000..220a2afca1
--- /dev/null
+++ b/doc/images/dmd-graph.dot
@@ -0,0 +1,75 @@
+digraph "Guix dmd-service" {
+  "user-file-systems" [label = "user-file-systems", shape = box, fontname = Helvetica];
+  "user-processes" -> "user-file-systems" [color = red];
+  "user-processes" [label = "user-processes", shape = box, fontname = Helvetica];
+  "nscd" -> "user-processes" [color = red];
+  "guix-daemon" -> "user-processes" [color = red];
+  "syslogd" -> "user-processes" [color = red];
+  "term-tty6" -> "user-processes" [color = red];
+  "term-tty5" -> "user-processes" [color = red];
+  "term-tty4" -> "user-processes" [color = red];
+  "term-tty3" -> "user-processes" [color = red];
+  "term-tty2" -> "user-processes" [color = red];
+  "term-tty1" -> "user-processes" [color = red];
+  "networking" -> "user-processes" [color = red];
+  "nscd" [label = "nscd", shape = box, fontname = Helvetica];
+  "guix-daemon" [label = "guix-daemon", shape = box, fontname = Helvetica];
+  "syslogd" [label = "syslogd", shape = box, fontname = Helvetica];
+  "ssh-daemon" -> "syslogd" [color = red];
+  "ssh-daemon" [label = "ssh-daemon", shape = box, fontname = Helvetica];
+  "term-tty6" [label = "term-tty6", shape = box, fontname = Helvetica];
+  "console-font-tty6" -> "term-tty6" [color = red];
+  "console-font-tty6" [label = "console-font-tty6", shape = box, fontname = Helvetica];
+  "term-tty5" [label = "term-tty5", shape = box, fontname = Helvetica];
+  "console-font-tty5" -> "term-tty5" [color = red];
+  "console-font-tty5" [label = "console-font-tty5", shape = box, fontname = Helvetica];
+  "term-tty4" [label = "term-tty4", shape = box, fontname = Helvetica];
+  "console-font-tty4" -> "term-tty4" [color = red];
+  "console-font-tty4" [label = "console-font-tty4", shape = box, fontname = Helvetica];
+  "term-tty3" [label = "term-tty3", shape = box, fontname = Helvetica];
+  "console-font-tty3" -> "term-tty3" [color = red];
+  "console-font-tty3" [label = "console-font-tty3", shape = box, fontname = Helvetica];
+  "term-tty2" [label = "term-tty2", shape = box, fontname = Helvetica];
+  "console-font-tty2" -> "term-tty2" [color = red];
+  "console-font-tty2" [label = "console-font-tty2", shape = box, fontname = Helvetica];
+  "term-tty1" [label = "term-tty1", shape = box, fontname = Helvetica];
+  "console-font-tty1" -> "term-tty1" [color = red];
+  "console-font-tty1" [label = "console-font-tty1", shape = box, fontname = Helvetica];
+  "networking" [label = "networking", shape = box, fontname = Helvetica];
+  "ssh-daemon" -> "networking" [color = red];
+  "root-file-system" [label = "root-file-system", shape = box, fontname = Helvetica];
+  "file-system-/run/user" -> "root-file-system" [color = red];
+  "file-system-/run/systemd" -> "root-file-system" [color = red];
+  "file-system-/gnu/store" -> "root-file-system" [color = red];
+  "file-system-/dev/shm" -> "root-file-system" [color = red];
+  "file-system-/dev/pts" -> "root-file-system" [color = red];
+  "user-processes" -> "root-file-system" [color = red];
+  "udev" -> "root-file-system" [color = red];
+  "file-system-/run/user" [label = "file-system-/run/user", shape = box, fontname = Helvetica];
+  "user-processes" -> "file-system-/run/user" [color = red];
+  "file-system-/run/systemd" [label = "file-system-/run/systemd", shape = box, fontname = Helvetica];
+  "user-processes" -> "file-system-/run/systemd" [color = red];
+  "file-system-/gnu/store" [label = "file-system-/gnu/store", shape = box, fontname = Helvetica];
+  "user-processes" -> "file-system-/gnu/store" [color = red];
+  "file-system-/dev/shm" [label = "file-system-/dev/shm", shape = box, fontname = Helvetica];
+  "user-processes" -> "file-system-/dev/shm" [color = red];
+  "file-system-/dev/pts" [label = "file-system-/dev/pts", shape = box, fontname = Helvetica];
+  "user-processes" -> "file-system-/dev/pts" [color = red];
+  "udev" [label = "udev", shape = box, fontname = Helvetica];
+  "term-tty6" -> "udev" [color = red];
+  "term-tty5" -> "udev" [color = red];
+  "term-tty4" -> "udev" [color = red];
+  "term-tty3" -> "udev" [color = red];
+  "term-tty2" -> "udev" [color = red];
+  "term-tty1" -> "udev" [color = red];
+  "networking" -> "udev" [color = red];
+  "host-name" [label = "host-name", shape = box, fontname = Helvetica];
+  "term-tty6" -> "host-name" [color = red];
+  "term-tty5" -> "host-name" [color = red];
+  "term-tty4" -> "host-name" [color = red];
+  "term-tty3" -> "host-name" [color = red];
+  "term-tty2" -> "host-name" [color = red];
+  "term-tty1" -> "host-name" [color = red];
+  "loopback" [label = "loopback", shape = box, fontname = Helvetica];
+
+}