~ruther/guix-local

2ec1469104cf52ad0e91ad164a9f5a3a80fb9743 — Sergey Trofimov 11 months ago 38756ac
services: networking: Add shepherd-requirement for dhcpcd.

* gnu/services/networking.scm (dhcpcd-configuration): Add
shepherd-requirement field.
(dhcpcd-shepherd-service): Use it.
* doc/guix.texi (Networking Setup): Regenerate dhcpcd-configuration
documentation.
(File Systems): Fix typo.

Change-Id: Id347e2bed2569237685a47be82dbf686640db25b
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2 files changed, 30 insertions(+), 18 deletions(-)

M doc/guix.texi
M gnu/services/networking.scm
M doc/guix.texi => doc/guix.texi +11 -6
@@ 18332,7 18332,7 @@ As an example, an NFS file system would typically have a requirement for
might not be sufficient as @code{networking} being marked as started
does @emph{not} imply the network has already been configured and in
working order (for example, when using
@code{dhcpcd-client-service-type}).  For such cases, adding a
@code{dhcp-client-service-type}).  For such cases, adding a
requirement on a custom @code{network-online} service may be necessary.
A sample @code{network-online} one-shot Shepherd service implementation
is provided below:


@@ 21980,12 21980,13 @@ Host name to send via DHCP, defaults to the current system host name.
@item @code{duid} (default: @code{""}) (type: maybe-string)
DHCPv4 clients require a unique client identifier, this option uses the
DHCPv6 Unique Identifier as a DHCPv4 client identifier as well.  For
more information, refer to @uref{https://www.rfc-editor.org/rfc/rfc4361, RFC 4361}
and @code{dhcpcd.conf(5)}.
more information, refer to
@uref{https://www.rfc-editor.org/rfc/rfc4361,RFC 4361} and
@code{dhcpcd.conf(5)}.

@item @code{persistent?} (default: @code{#t}) (type: boolean)
When true, automatically de-configure the interface when @command{dhcpcd}
exits.
When true, automatically de-configure the interface when
@command{dhcpcd} exits.

@item @code{option} (default: @code{("rapid_commit" "domain_name_servers" "domain_name" "domain_search" "host_name" "classless_static_routes" "interface_mtu")}) (type: list-of-strings)
List of options to request from the server.


@@ 22019,9 22020,13 @@ identifier, this is matually exclusive with the @code{duid} option.
@item @code{extra-content} (type: maybe-string)
Extra content to append to the configuration as-is.

@item @code{shepherd-requirement} (default: @code{()}) (type: list-of-symbols)
This is a list of symbols naming Shepherd services that this service
will depend on.

@end table
@end deftp

@end deftp

@cindex NetworkManager


M gnu/services/networking.scm => gnu/services/networking.scm +19 -12
@@ 127,6 127,7 @@
            dhcpcd-configuration-vendor-class-id
            dhcpcd-configuration-client-id
            dhcpcd-configuration-extra-content
            dhcpcd-configuration-shepherd-requirement

            ntp-configuration
            ntp-configuration?


@@ 611,6 612,12 @@ this is matually exclusive with the @code{duid} option.")
    maybe-string
    "Extra content to append to the configuration as-is.")

  (shepherd-requirement
   (list-of-symbols '())
   "This is a list of symbols naming Shepherd services that this service
will depend on."
   empty-serializer)

  (prefix dhcpcd-))

(define (dhcpcd-config-file config)


@@ 630,19 637,19 @@ this is matually exclusive with the @code{duid} option.")
          (shell (file-append shadow "/sbin/nologin")))))

(define (dhcpcd-shepherd-service config)
  (let* ((config-file (dhcpcd-config-file config))
         (command-args (dhcpcd-configuration-command-arguments config))
         (ifaces (dhcpcd-configuration-interfaces config)))
    (list (shepherd-service
            (documentation "dhcpcd daemon.")
            (provision '(networking))
            (requirement '(user-processes udev))
            (actions (list (shepherd-configuration-action config-file)))
            (start
  (match-record config <dhcpcd-configuration>
                (command-arguments interfaces shepherd-requirement)
    (let ((config-file (dhcpcd-config-file config)))
      (list (shepherd-service
             (documentation "dhcpcd daemon.")
             (provision '(networking))
             (requirement `(user-processes udev ,@shepherd-requirement))
             (actions (list (shepherd-configuration-action config-file)))
             (start
              #~(make-forkexec-constructor
                    (list (string-append #$dhcpcd "/sbin/dhcpcd")
                          #$@command-args "-B" "-f" #$config-file #$@ifaces)))
            (stop #~(make-kill-destructor))))))
                 (list (string-append #$dhcpcd "/sbin/dhcpcd")
                       #$@command-arguments "-B" "-f" #$config-file #$@interfaces)))
             (stop #~(make-kill-destructor)))))))

(define dhcpcd-service-type
  (service-type (name 'dhcpcd)