[PATCH] services: networking: Allow dhcp-client to use a config file

  • Done
  • quality assurance status badge
Details
2 participants
  • Maxim Cournoyer
  • Richard Sent
Owner
unassigned
Submitted by
Richard Sent
Severity
normal
R
R
Richard Sent wrote on 14 Jun 19:52 +0200
(address . guix-patches@gnu.org)(name . Richard Sent)(address . richard@freakingpenguin.com)
0888b6afe4003512c452fad2bc88370b007fc0ca.1718387578.git.richard@freakingpenguin.com
* gnu/services/networking (dhcp-client-configuration): Create
dhcp-client-configuration-config-file.
(dhcp-client-shepherd-service): Use the config file when invoking
dhclient if supplied.
* doc/guix.texi: Document it.

Change-Id: I286de4ddf59c5e606bf1fe0a7510570869e62b1a
---
Hi all.

This patch adds support for providing dhcp-client a configuration
file, which is a file of the form
used to resolve
although I haven't confirmed that. Either way, adding more flexibility
to the service is a good thing in my eyes.

doc/guix.texi | 3 +++
gnu/services/networking.scm | 15 +++++++++++++--
2 files changed, 16 insertions(+), 2 deletions(-)

Toggle diff (72 lines)
diff --git a/doc/guix.texi b/doc/guix.texi
index 0102fd0fad..ad67a436ea 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -21035,6 +21035,9 @@ Networking Setup
non-loopback interfaces that can be activated. Otherwise the DHCP
client listens only on the specified interfaces.
+@item @code{config-file} (default: @code{#f})
+The configuration file for the DHCP client.
+
@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
diff --git a/gnu/services/networking.scm b/gnu/services/networking.scm
index 378e117a86..12d8934e43 100644
--- a/gnu/services/networking.scm
+++ b/gnu/services/networking.scm
@@ -91,6 +91,7 @@ (define-module (gnu services networking)
dhcp-client-configuration?
dhcp-client-configuration-package
dhcp-client-configuration-interfaces
+ dhcp-client-configuration-config-file
dhcp-client-configuration-shepherd-provision
dhcp-client-configuration-shepherd-requirement
@@ -319,6 +320,8 @@ (define-record-type* <dhcp-client-configuration>
(default '()))
(shepherd-provision dhcp-client-configuration-shepherd-provision
(default '(networking)))
+ (config-file dhcp-client-configuration-config-file
+ (default #f))
(interfaces dhcp-client-configuration-interfaces
(default 'all))) ;'all | list of strings
@@ -329,6 +332,7 @@ (define dhcp-client-shepherd-service
(requirement (dhcp-client-configuration-shepherd-requirement config))
(provision (dhcp-client-configuration-shepherd-provision config))
(interfaces (dhcp-client-configuration-interfaces config))
+ (config-file (dhcp-client-configuration-config-file config))
(pid-file "/var/run/dhclient.pid"))
(list (shepherd-service
(documentation "Set up networking via DHCP.")
@@ -364,6 +368,11 @@ (define dhcp-client-shepherd-service
(_
#~'#$interfaces))))
+ (define config-file-args
+ (if #$config-file
+ (list "-cf" #$config-file)
+ '()))
+
(false-if-exception (delete-file #$pid-file))
(let ((pid (fork+exec-command
;; By default dhclient uses a
@@ -371,8 +380,10 @@ (define dhcp-client-shepherd-service
;; DDNS, which is incompatable with
;; non-ISC DHCP servers; thus, pass '-I'.
;; <https://kb.isc.org/docs/aa-01091>.
- (cons* dhclient "-nw" "-I"
- "-pf" #$pid-file ifaces))))
+ `(,dhclient "-nw" "-I"
+ "-pf" ,#$pid-file
+ ,@config-file-args
+ ,@ifaces))))
(and (zero? (cdr (waitpid pid)))
(read-pid-file #$pid-file)))))
(stop #~(make-kill-destructor))))))

base-commit: 7770e4140cddd5dc9c9879cb2bfcbd6cd4de59a0
--
2.45.1
M
M
Maxim Cournoyer wrote on 17 Jun 23:01 +0200
(name . Richard Sent)(address . richard@freakingpenguin.com)
87o77zfflt.fsf@gmail.com
Hi Richard,

Richard Sent <richard@freakingpenguin.com> writes:

Toggle quote (2 lines)
> * gnu/services/networking (dhcp-client-configuration): Create

Nitpick: The file name should be complete, including the extension.
Pressing 'C' on the diff's hunk while authoring a commit message in
Magit (Emacs) creates a ChangeLog entry automatically, if that helps.

Toggle quote (2 lines)
> dhcp-client-configuration-config-file.

I'd perhaps reword this to:

(dhcp-client-configuration) [config-file]: New field.
(dhcp-client-configuration-config-file): New accessor.

Toggle quote (17 lines)
> (dhcp-client-shepherd-service): Use the config file when invoking
> dhclient if supplied.
> * doc/guix.texi: Document it.
>
> Change-Id: I286de4ddf59c5e606bf1fe0a7510570869e62b1a
> ---
> Hi all.
>
> This patch adds support for providing dhcp-client a configuration
> file, which is a file of the form
> https://man.archlinux.org/man/dhclient.conf.5. I believe this can be
> used to resolve
> https://lists.gnu.org/archive/html/help-guix/2024-06/msg00071.html
> using the instructions at https://unix.stackexchange.com/a/399694,
> although I haven't confirmed that. Either way, adding more flexibility
> to the service is a good thing in my eyes.

I think it's a good thing to have the 'escape hatch' implemented by many
services!

Toggle quote (73 lines)
> doc/guix.texi | 3 +++
> gnu/services/networking.scm | 15 +++++++++++++--
> 2 files changed, 16 insertions(+), 2 deletions(-)
>
> diff --git a/doc/guix.texi b/doc/guix.texi
> index 0102fd0fad..ad67a436ea 100644
> --- a/doc/guix.texi
> +++ b/doc/guix.texi
> @@ -21035,6 +21035,9 @@ Networking Setup
> non-loopback interfaces that can be activated. Otherwise the DHCP
> client listens only on the specified interfaces.
>
> +@item @code{config-file} (default: @code{#f})
> +The configuration file for the DHCP client.
> +
> @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
> diff --git a/gnu/services/networking.scm b/gnu/services/networking.scm
> index 378e117a86..12d8934e43 100644
> --- a/gnu/services/networking.scm
> +++ b/gnu/services/networking.scm
> @@ -91,6 +91,7 @@ (define-module (gnu services networking)
> dhcp-client-configuration?
> dhcp-client-configuration-package
> dhcp-client-configuration-interfaces
> + dhcp-client-configuration-config-file
> dhcp-client-configuration-shepherd-provision
> dhcp-client-configuration-shepherd-requirement
>
> @@ -319,6 +320,8 @@ (define-record-type* <dhcp-client-configuration>
> (default '()))
> (shepherd-provision dhcp-client-configuration-shepherd-provision
> (default '(networking)))
> + (config-file dhcp-client-configuration-config-file
> + (default #f))
> (interfaces dhcp-client-configuration-interfaces
> (default 'all))) ;'all | list of strings
>
> @@ -329,6 +332,7 @@ (define dhcp-client-shepherd-service
> (requirement (dhcp-client-configuration-shepherd-requirement config))
> (provision (dhcp-client-configuration-shepherd-provision config))
> (interfaces (dhcp-client-configuration-interfaces config))
> + (config-file (dhcp-client-configuration-config-file config))
> (pid-file "/var/run/dhclient.pid"))
> (list (shepherd-service
> (documentation "Set up networking via DHCP.")
> @@ -364,6 +368,11 @@ (define dhcp-client-shepherd-service
> (_
> #~'#$interfaces))))
>
> + (define config-file-args
> + (if #$config-file
> + (list "-cf" #$config-file)
> + '()))
> +
> (false-if-exception (delete-file #$pid-file))
> (let ((pid (fork+exec-command
> ;; By default dhclient uses a
> @@ -371,8 +380,10 @@ (define dhcp-client-shepherd-service
> ;; DDNS, which is incompatable with
> ;; non-ISC DHCP servers; thus, pass '-I'.
> ;; <https://kb.isc.org/docs/aa-01091>.
> - (cons* dhclient "-nw" "-I"
> - "-pf" #$pid-file ifaces))))
> + `(,dhclient "-nw" "-I"
> + "-pf" ,#$pid-file
> + ,@config-file-args
> + ,@ifaces))))
> (and (zero? (cdr (waitpid pid)))
> (read-pid-file #$pid-file)))))
> (stop #~(make-kill-destructor))))))

Reviewed-by: Maxim Cournoyer <maxim.cournoyer@gmail>

Thanks,
Maxim
R
R
Richard Sent wrote on 18 Jun 02:49 +0200
[PATCH 2/2] doc: Prepend ISC to DHCP client references.
(address . 71561@debbugs.gnu.org)(name . Richard Sent)(address . richard@freakingpenguin.com)
c9f08fa3cea88d60bb4ef270eaeac4cd44c77826.1718671753.git.richard@freakingpenguin.com
This makes it clearer that this service uses the ISC's dhclient implementation
and does not support DHCP clients that have different command line interfaces.

* doc/guix.texi (Networking Setup): Prepend ISC to all DHCP client references.

Change-Id: I750ef2ffb4b23445c4a2b97aaa44eba56458f430
---
doc/guix.texi | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)

Toggle diff (53 lines)
diff --git a/doc/guix.texi b/doc/guix.texi
index ad67a436ea..8dd3bee5ca 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -21016,27 +21016,27 @@ Networking Setup
@cindex DHCP, networking service
@defvar dhcp-client-service-type
-This is the type of services that run @var{dhcp}, a Dynamic Host Configuration
-Protocol (DHCP) client.
+This is the type of services that run @var{dhclient}, the ISC Dynamic
+Host Configuration Protocol (DHCP) client.
@end defvar
@deftp {Data Type} dhcp-client-configuration
-Data type representing the configuration of the DHCP client service.
+Data type representing the configuration of the ISC DHCP client service.
@table @asis
@item @code{package} (default: @code{isc-dhcp})
-DHCP client package to use.
+The ISC DHCP client package to use.
@item @code{interfaces} (default: @code{'all})
-Either @code{'all} or the list of interface names that the DHCP client
-should listen on---e.g., @code{'("eno1")}.
+Either @code{'all} or the list of interface names that the ISC DHCP
+client should listen on---e.g., @code{'("eno1")}.
-When set to @code{'all}, the DHCP client listens on all the available
-non-loopback interfaces that can be activated. Otherwise the DHCP
-client listens only on the specified interfaces.
+When set to @code{'all}, the ISC DHCP client listens on all the
+available non-loopback interfaces that can be activated. Otherwise the
+ISC DHCP client listens only on the specified interfaces.
@item @code{config-file} (default: @code{#f})
-The configuration file for the DHCP client.
+The configuration file for the ISC DHCP client.
@item @code{shepherd-requirement} (default: @code{'()})
@itemx @code{shepherd-provision} (default: @code{'(networking)})
@@ -21047,7 +21047,7 @@ Networking Setup
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
+default value if you intend to run several ISC DHCP clients, only one of
which provides the @code{networking} Shepherd service.
@end table
@end deftp
--
2.45.1
R
R
Richard Sent wrote on 18 Jun 02:49 +0200
[PATCH 1/2] services: networking: Allow dhcp-client to use a config file
(address . 71561@debbugs.gnu.org)(name . Richard Sent)(address . richard@freakingpenguin.com)
b15c77d654ccdf788dd68a8d92cc3bc4e67cb1e7.1718671753.git.richard@freakingpenguin.com
* gnu/services/networking.scm (dhcp-client-configuration) [config-file]: New
field.
(dhcp-client-configuration-config-file): New accessor.
(dhcp-client-shepherd-service): Use the config file when invoking
dhclient if supplied.
* doc/guix.texi: Document it.

Change-Id: I286de4ddf59c5e606bf1fe0a7510570869e62b1a
---
doc/guix.texi | 3 +++
gnu/services/networking.scm | 15 +++++++++++++--
2 files changed, 16 insertions(+), 2 deletions(-)

Toggle diff (72 lines)
diff --git a/doc/guix.texi b/doc/guix.texi
index 0102fd0fad..ad67a436ea 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -21035,6 +21035,9 @@ Networking Setup
non-loopback interfaces that can be activated. Otherwise the DHCP
client listens only on the specified interfaces.
+@item @code{config-file} (default: @code{#f})
+The configuration file for the DHCP client.
+
@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
diff --git a/gnu/services/networking.scm b/gnu/services/networking.scm
index 378e117a86..12d8934e43 100644
--- a/gnu/services/networking.scm
+++ b/gnu/services/networking.scm
@@ -91,6 +91,7 @@ (define-module (gnu services networking)
dhcp-client-configuration?
dhcp-client-configuration-package
dhcp-client-configuration-interfaces
+ dhcp-client-configuration-config-file
dhcp-client-configuration-shepherd-provision
dhcp-client-configuration-shepherd-requirement
@@ -319,6 +320,8 @@ (define-record-type* <dhcp-client-configuration>
(default '()))
(shepherd-provision dhcp-client-configuration-shepherd-provision
(default '(networking)))
+ (config-file dhcp-client-configuration-config-file
+ (default #f))
(interfaces dhcp-client-configuration-interfaces
(default 'all))) ;'all | list of strings
@@ -329,6 +332,7 @@ (define dhcp-client-shepherd-service
(requirement (dhcp-client-configuration-shepherd-requirement config))
(provision (dhcp-client-configuration-shepherd-provision config))
(interfaces (dhcp-client-configuration-interfaces config))
+ (config-file (dhcp-client-configuration-config-file config))
(pid-file "/var/run/dhclient.pid"))
(list (shepherd-service
(documentation "Set up networking via DHCP.")
@@ -364,6 +368,11 @@ (define dhcp-client-shepherd-service
(_
#~'#$interfaces))))
+ (define config-file-args
+ (if #$config-file
+ (list "-cf" #$config-file)
+ '()))
+
(false-if-exception (delete-file #$pid-file))
(let ((pid (fork+exec-command
;; By default dhclient uses a
@@ -371,8 +380,10 @@ (define dhcp-client-shepherd-service
;; DDNS, which is incompatable with
;; non-ISC DHCP servers; thus, pass '-I'.
;; <https://kb.isc.org/docs/aa-01091>.
- (cons* dhclient "-nw" "-I"
- "-pf" #$pid-file ifaces))))
+ `(,dhclient "-nw" "-I"
+ "-pf" ,#$pid-file
+ ,@config-file-args
+ ,@ifaces))))
(and (zero? (cdr (waitpid pid)))
(read-pid-file #$pid-file)))))
(stop #~(make-kill-destructor))))))

base-commit: b993f4735d41e690dbafb8ee2e17fce996a8cf20
--
2.45.1
R
R
Richard Sent wrote on 18 Jun 02:53 +0200
Re: [bug#71561] [PATCH] services: networking: Allow dhcp-client to use a config file
(name . Maxim Cournoyer)(address . maxim.cournoyer@gmail.com)
87ed8vgjgp.fsf@freakingpenguin.com
Hi Maxim,

Toggle quote (4 lines)
> Nitpick: The file name should be complete, including the extension.
> Pressing 'C' on the diff's hunk while authoring a commit message in
> Magit (Emacs) creates a ChangeLog entry automatically, if that helps.

Huh, I didn't know that. Good to know, thanks.

Toggle quote (5 lines)
> I'd perhaps reword this to:
>
> (dhcp-client-configuration) [config-file]: New field.
> (dhcp-client-configuration-config-file): New accessor.

I believe these comments have been addressed in v2. I also added another
commit to prepend "ISC" in references to DHCP client. This way it should
be clearer this service is specific to the ISC's implementation.

--
Take it easy,
Richard Sent
Making my computer weirder one commit at a time.
M
M
Maxim Cournoyer wrote on 18 Jun 14:12 +0200
Re: [bug#71561] [PATCH 1/2] services: networking: Allow dhcp-client to use a config file
(name . Richard Sent)(address . richard@freakingpenguin.com)
87plsee9gq.fsf@gmail.com
Richard Sent <richard@freakingpenguin.com> writes:

Toggle quote (9 lines)
> * gnu/services/networking.scm (dhcp-client-configuration) [config-file]: New
> field.
> (dhcp-client-configuration-config-file): New accessor.
> (dhcp-client-shepherd-service): Use the config file when invoking
> dhclient if supplied.
> * doc/guix.texi: Document it.
>
> Change-Id: I286de4ddf59c5e606bf1fe0a7510570869e62b1a

Reviewed-by: Maxim Cournoyer <maxim.cournoyer@gmail>

--
Thanks,
Maxim
M
M
Maxim Cournoyer wrote on 18 Jun 14:12 +0200
Re: [bug#71561] [PATCH 2/2] doc: Prepend ISC to DHCP client references.
(name . Richard Sent)(address . richard@freakingpenguin.com)
87le32e9gk.fsf@gmail.com
Richard Sent <richard@freakingpenguin.com> writes:

Toggle quote (7 lines)
> This makes it clearer that this service uses the ISC's dhclient implementation
> and does not support DHCP clients that have different command line interfaces.
>
> * doc/guix.texi (Networking Setup): Prepend ISC to all DHCP client references.
>
> Change-Id: I750ef2ffb4b23445c4a2b97aaa44eba56458f430

Reviewed-by: Maxim Cournoyer <maxim.cournoyer@gmail>

--
Thanks,
Maxim
M
M
Maxim Cournoyer wrote on 24 Jun 04:15 +0200
Re: [bug#71561] [PATCH] services: networking: Allow dhcp-client to use a config file
(name . Richard Sent)(address . richard@freakingpenguin.com)
87jzif84s0.fsf@gmail.com
Hi,

Richard Sent <richard@freakingpenguin.com> writes:

Toggle quote (8 lines)
> * gnu/services/networking (dhcp-client-configuration): Create
> dhcp-client-configuration-config-file.
> (dhcp-client-shepherd-service): Use the config file when invoking
> dhclient if supplied.
> * doc/guix.texi: Document it.
>
> Change-Id: I286de4ddf59c5e606bf1fe0a7510570869e62b1a

Applied, thanks.

--
Maxim
Closed
?
Your comment

Commenting via the web interface is currently disabled.

To comment on this conversation send an email to 71561@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 71561
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch