diff mbox series

[bug#61956,v2] services: dns: Extend dnsmasq-configuration.

Message ID 20230304084030.32117-1-sarg@sarg.org.ru
State New
Headers show
Series [bug#61956,v2] services: dns: Extend dnsmasq-configuration. | expand

Commit Message

Sergey Trofimov March 4, 2023, 8:40 a.m. UTC
---
 doc/guix.texi        | 3 +++
 gnu/services/dns.scm | 9 +++++++--
 2 files changed, 10 insertions(+), 2 deletions(-)

Comments

Andrew Tropin March 10, 2023, 7:34 a.m. UTC | #1
On 2023-03-04 09:40, Sergey Trofimov wrote:

Hi Sergey!

Thank you for the patch, please add information to the commit message
body.  Here is an example:
https://git.savannah.gnu.org/cgit/guix.git/commit/?id=8390b47c04

> ---
>  doc/guix.texi        | 3 +++
>  gnu/services/dns.scm | 9 +++++++--
>  2 files changed, 10 insertions(+), 2 deletions(-)
>
> diff --git a/doc/guix.texi b/doc/guix.texi
> index 74658dbc86..ca66041d12 100644
> --- a/doc/guix.texi
> +++ b/doc/guix.texi
> @@ -31502,6 +31502,9 @@ in @var{servers}.
>  @item @code{servers} (default: @code{'()})
>  Specify IP address of upstream servers directly.
>  
> +@item @code{servers-file} (default: @code{#f})
> +Specify file containing upstream servers. This file is re-read when dnsmasq receives SIGHUP.
> +
>  @item @code{addresses} (default: @code{'()})
>  For each entry, specify an IP address to return for any host in the
>  given domains.  Queries in the domains are never forwarded and always
> diff --git a/gnu/services/dns.scm b/gnu/services/dns.scm
> index 50753b7ab6..3a6a005fb7 100644
> --- a/gnu/services/dns.scm
> +++ b/gnu/services/dns.scm
> @@ -754,6 +754,8 @@ (define-record-type* <dnsmasq-configuration>
>                      (default #f))       ;boolean
>    (servers          dnsmasq-configuration-servers
>                      (default '()))      ;list of string
> +  (servers-file     dnsmasq-configuration-servers-file
> +                    (default #f))       ;string

I would expect it to be a file-like rather than string, so we are sure
that the configuration file is present.  WDYT?

>    (addresses        dnsmasq-configuration-addresses
>                      (default '()))      ;list of string
>    (cache-size       dnsmasq-configuration-cache-size
> @@ -792,7 +794,7 @@ (define (dnsmasq-shepherd-service config)
>       port local-service? listen-addresses
>       resolv-file no-resolv?
>       forward-private-reverse-lookup? query-servers-in-order?
> -     servers addresses
> +     servers addresses servers-file
>       cache-size negative-cache?
>       cpe-id
>       tftp-enable? tftp-no-fail?
> @@ -827,6 +829,9 @@ (define (dnsmasq-shepherd-service config)
>                   #$@(if query-servers-in-order?
>                          '("--strict-order")
>                          '())
> +                 #$@(if servers-file
> +                        (list (format #f "--servers-file=~a" servers-file))
> +                        '())
>                   #$@(map (cut format #f "--server=~a" <>)
>                           servers)
>                   #$@(map (cut format #f "--address=~a" <>)
> @@ -848,7 +853,7 @@ (define (dnsmasq-shepherd-service config)
>                          '("--tftp-single-port")
>                          '())
>                   #$@(if tftp-secure?
> -                        '("--tftp-secure?")
> +                        '("--tftp-secure")
>                          '())
>                   #$@(if tftp-max
>                          (list (format #f "--tftp-max=~a" tftp-max))
Sergey Trofimov March 10, 2023, 8:38 a.m. UTC | #2
Andrew Tropin <andrew@trop.in> writes:

> [[PGP Signed Part:Undecided]]
> On 2023-03-04 09:40, Sergey Trofimov wrote:
>
> Hi Sergey!
>
> Thank you for the patch, please add information to the commit 
> message
> body.  Here is an example:
> https://git.savannah.gnu.org/cgit/guix.git/commit/?id=8390b47c04
>

I have pushed v3 with a proper description.

>>    (servers          dnsmasq-configuration-servers
>>                      (default '()))      ;list of string
>> +  (servers-file     dnsmasq-configuration-servers-file
>> +                    (default #f))       ;string
>
> I would expect it to be a file-like rather than string, so we 
> are sure
> that the configuration file is present.  WDYT?
>

Hmm, my use-case is to generate this file in dhclient's hook, so 
that dnsmasq knows the domain supplied with the DHCP 
configuration.

Here is how I do that:

1. Define the hook which updates dnsmasq.servers and sends HUP to 
the daemon
(define dhclient-enter-hooks "
make_resolv_conf() {
    touch /etc/dnsmasq.servers
    sed -i '/#dhcp/,+1d' /etc/dnsmasq.servers
    cat <<EOF >>/etc/dnsmasq.servers
#dhcp
server=/${new_domain_name}/${new_domain_name_servers}
EOF

    kill -HUP $(cat /run/dnsmasq.pid)
}
")

2. Register the file in operating-system -> services
(extra-special-file "/etc/dhclient-enter-hooks"
        (plain-file "dhclient-enter-hooks"
                    dhclient-enter-hooks))

3. Add dnsmasq option
(servers-file "/etc/dnsmasq.servers")

Do you think making `servers-file` either string or file-like 
would be a way to go?
diff mbox series

Patch

diff --git a/doc/guix.texi b/doc/guix.texi
index 74658dbc86..ca66041d12 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -31502,6 +31502,9 @@  in @var{servers}.
 @item @code{servers} (default: @code{'()})
 Specify IP address of upstream servers directly.
 
+@item @code{servers-file} (default: @code{#f})
+Specify file containing upstream servers. This file is re-read when dnsmasq receives SIGHUP.
+
 @item @code{addresses} (default: @code{'()})
 For each entry, specify an IP address to return for any host in the
 given domains.  Queries in the domains are never forwarded and always
diff --git a/gnu/services/dns.scm b/gnu/services/dns.scm
index 50753b7ab6..3a6a005fb7 100644
--- a/gnu/services/dns.scm
+++ b/gnu/services/dns.scm
@@ -754,6 +754,8 @@  (define-record-type* <dnsmasq-configuration>
                     (default #f))       ;boolean
   (servers          dnsmasq-configuration-servers
                     (default '()))      ;list of string
+  (servers-file     dnsmasq-configuration-servers-file
+                    (default #f))       ;string
   (addresses        dnsmasq-configuration-addresses
                     (default '()))      ;list of string
   (cache-size       dnsmasq-configuration-cache-size
@@ -792,7 +794,7 @@  (define (dnsmasq-shepherd-service config)
      port local-service? listen-addresses
      resolv-file no-resolv?
      forward-private-reverse-lookup? query-servers-in-order?
-     servers addresses
+     servers addresses servers-file
      cache-size negative-cache?
      cpe-id
      tftp-enable? tftp-no-fail?
@@ -827,6 +829,9 @@  (define (dnsmasq-shepherd-service config)
                  #$@(if query-servers-in-order?
                         '("--strict-order")
                         '())
+                 #$@(if servers-file
+                        (list (format #f "--servers-file=~a" servers-file))
+                        '())
                  #$@(map (cut format #f "--server=~a" <>)
                          servers)
                  #$@(map (cut format #f "--address=~a" <>)
@@ -848,7 +853,7 @@  (define (dnsmasq-shepherd-service config)
                         '("--tftp-single-port")
                         '())
                  #$@(if tftp-secure?
-                        '("--tftp-secure?")
+                        '("--tftp-secure")
                         '())
                  #$@(if tftp-max
                         (list (format #f "--tftp-max=~a" tftp-max))