~ruther/guix-local

04f71edb73205d0bb82404de28a70ae17b897429 — Alexey Abramov 2 years ago 944c1b6
services: dhcp-client-configuration: Allow provision override.

* gnu/services/networking.scm (<dhcp-client-configuration>)[shepherd-provision]:
New field.
(dhcp-client-shepherd-service): Honor it.
* doc/guix.texi (Networking Setup): Document it.

Co-authored-by: Ludovic Courtès <ludo@gnu.org>
2 files changed, 13 insertions(+), 4 deletions(-)

M doc/guix.texi
M gnu/services/networking.scm
M doc/guix.texi => doc/guix.texi +6 -0
@@ 20461,10 20461,16 @@ non-loopback interfaces that can be activated.  Otherwise the DHCP
client listens only on the specified interfaces.

@item @code{shepherd-requirement} (default: @code{'()})
@itemx @code{shepherd-provision} (default: @code{'(networking)})
This option can be used to provide a list of symbols naming Shepherd services
that this service will depend on, such as @code{'wpa-supplicant} or
@code{'iwd} if you require authenticated access for encrypted WiFi or Ethernet
networks.

Likewise, @code{shepherd-provision} is a list of Shepherd service names
(symbols) provided by this service.  You might want to change the
default value if you intend to run several DHCP clients, only one of
which provides the @code{networking} Shepherd service.
@end table
@end deftp


M gnu/services/networking.scm => gnu/services/networking.scm +7 -4
@@ 89,6 89,7 @@
            dhcp-client-configuration?
            dhcp-client-configuration-package
            dhcp-client-configuration-interfaces
            dhcp-client-configuration-shepherd-provision
            dhcp-client-configuration-shepherd-requirement

            dhcpd-service-type


@@ 303,6 304,8 @@
                (default isc-dhcp))
  (shepherd-requirement dhcp-client-configuration-shepherd-requirement
                        (default '()))
  (shepherd-provision   dhcp-client-configuration-provision
                        (default '(networking)))
  (interfaces   dhcp-client-configuration-interfaces
                (default 'all)))                  ;'all | list of strings



@@ 310,19 313,19 @@
  (match-lambda
    ((? dhcp-client-configuration? config)
     (let ((package (dhcp-client-configuration-package config))
           (shepherd-requirement (dhcp-client-configuration-shepherd-requirement config))
           (requirement (dhcp-client-configuration-shepherd-requirement config))
           (provision (dhcp-client-configuration-shepherd-provision config))
           (interfaces (dhcp-client-configuration-interfaces config))
           (pid-file "/var/run/dhclient.pid"))
       (list (shepherd-service
              (documentation "Set up networking via DHCP.")
              (requirement `(user-processes udev ,@shepherd-requirement))
              (requirement `(user-processes udev ,@requirement))
              (provision provision)

              ;; XXX: Running with '-nw' ("no wait") avoids blocking for a minute when
              ;; networking is unavailable, but also means that the interface is not up
              ;; yet when 'start' completes.  To wait for the interface to be ready, one
              ;; should instead monitor udev events.
              (provision '(networking))

              (start #~(lambda _
                         (define dhclient
                           (string-append #$package "/sbin/dhclient"))