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