~ruther/guix-local

e92b20a41a026b8af7dd2031eb61267b061617b5 — Tomas Volf 1 year, 5 months ago a64a3a1
services: mingetty: Support waiting on shepherd services.

For auto-login on systems with elogind, dbus-system needs to be started.  This
commit adds ability to express that ordering.

* gnu/services/base.scm (<mingetty-configuration>): Add shepherd-requirement
field.
(mingetty-shepherd-service): Use it.
* doc/guix.texi (Base Services)<mingetty-configuration>: Document it.

Change-Id: Iedbdc4375180740379d561aa193d7c63350d2e7b
Modified-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
2 files changed, 53 insertions(+), 28 deletions(-)

M doc/guix.texi
M gnu/services/base.scm
M doc/guix.texi => doc/guix.texi +20 -0
@@ 19457,6 19457,26 @@ login program.
When set to a string, use this directory at the process's root
directory.

@item @code{shepherd-requirement}
List of shepherd requirements.  Unless you know what you are doing, it
is recommended to extend the default list instead of overriding it.

As an example, when using auto-login on a system with elogind, it is
necessary to wait on the @code{'dbus-system} service:

@lisp
(modify-services %base-services
  (mingetty-service-type config =>
                         (mingetty-configuration
                          (inherit config)
                          ;; Automatically log in as "guest".
                          (auto-login "guest")
                          (shepherd-requirement
                           (cons 'dbus-system
                                 (mingetty-configuration-shepherd-requirement
                                  config))))))
@end lisp

@item @code{mingetty} (default: @var{mingetty})
The Mingetty package to use.


M gnu/services/base.scm => gnu/services/base.scm +33 -28
@@ 193,6 193,7 @@
            mingetty-configuration-nice
            mingetty-configuration-working-directory
            mingetty-configuration-root-directory
            mingetty-configuration-shepherd-requirement
            mingetty-configuration?
            mingetty-service  ; deprecated
            mingetty-service-type


@@ 1246,45 1247,49 @@ the tty to run, among other things."
(define-record-type* <mingetty-configuration>
  mingetty-configuration make-mingetty-configuration
  mingetty-configuration?
  (mingetty          mingetty-configuration-mingetty ;file-like
                     (default mingetty))
  (tty               mingetty-configuration-tty)       ;string
  (auto-login        mingetty-configuration-auto-login ;string | #f
                     (default #f))
  (login-program     mingetty-configuration-login-program ;gexp
                     (default #f))
  (login-pause?      mingetty-configuration-login-pause? ;boolean
                     (default #f))
  (clear-on-logout?  mingetty-configuration-clear-on-logout? ;boolean
                     (default #t))
  (delay             mingetty-configuration-delay ;integer | #f
                     (default #f))
  (print-issue       mingetty-configuration-print-issue ;boolean | symbol
                     (default #t))
  (print-hostname    mingetty-configuration-print-hostname ;boolean | symbol
                     (default #t))
  (nice              mingetty-configuration-nice ;integer | #f
                     (default #f))
  (working-directory mingetty-configuration-working-directory ;string | #f
                     (default #f))
  (root-directory    mingetty-configuration-root-directory ;string | #f
                     (default #f)))
  (mingetty             mingetty-configuration-mingetty ;file-like
                        (default mingetty))
  (tty                  mingetty-configuration-tty)       ;string
  (auto-login           mingetty-configuration-auto-login ;string | #f
                        (default #f))
  (login-program        mingetty-configuration-login-program ;gexp
                        (default #f))
  (login-pause?         mingetty-configuration-login-pause? ;boolean
                        (default #f))
  (clear-on-logout?     mingetty-configuration-clear-on-logout? ;boolean
                        (default #t))
  (delay                mingetty-configuration-delay ;integer | #f
                        (default #f))
  (print-issue          mingetty-configuration-print-issue ;boolean | Symbol
                        (default #t))
  (print-hostname       mingetty-configuration-print-hostname ;boolean | Symbol
                        (default #t))
  (nice                 mingetty-configuration-nice ;integer | #f
                        (default #f))
  (working-directory    mingetty-configuration-working-directory ;string | #f
                        (default #f))
  (root-directory       mingetty-configuration-root-directory ;string | #f
                        (default #f))
  (shepherd-requirement mingetty-configuration-shepherd-requirement
                        ;; Since the login prompt shows the host name, wait
                        ;; for the 'host-name' service to be done.  Also wait
                        ;; for udev essentially so that the tty text is not
                        ;; lost in the middle of kernel messages (XXX).
                        (default '(user-processes host-name udev
                                                  virtual-terminal))))

(define (mingetty-shepherd-service config)
  (match-record config <mingetty-configuration>
                ( mingetty tty auto-login login-program
                  login-pause? clear-on-logout? delay
                  print-issue print-hostname nice
                  working-directory root-directory)
                  working-directory root-directory shepherd-requirement)
    (list
     (shepherd-service
      (documentation "Run mingetty on an tty.")
      (provision (list (symbol-append 'term- (string->symbol tty))))

      ;; Since the login prompt shows the host name, wait for the 'host-name'
      ;; service to be done.  Also wait for udev essentially so that the tty
      ;; text is not lost in the middle of kernel messages (XXX).
      (requirement '(user-processes host-name udev virtual-terminal))
      (requirement shepherd-requirement)

      (start  #~(make-forkexec-constructor
                 (list #$(file-append mingetty "/sbin/mingetty")