services: dnsmasq: Add pid-file, conf-file and conf-dir configuration fields.

* gnu/services/dns.scm (<dnsmasq-configuration>) [pid-file]: New field
to specify alternate path for dnsmasq PID.
[conf-file]: New field to specify one or more configuration files.
[conf-dir]: New field to read configuration files from a directory.
[extra-options]: Move to the end of the definition as a last resort option.
(dnsmasq-shepherd-service): Use new fields instead of hardcoded values.
* gnu/services/dns.scm: Export all record accessors.
* doc/guix.texi: Document new configuration options.

Change-Id: Iaec361e7d8bfd60af04f023f57d422b55b0c1eea
Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
Modified-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
This commit is contained in:
Alexey Abramov 2025-05-08 19:47:42 +02:00 committed by Maxim Cournoyer
parent 6d5f630fa5
commit 50126b39ac
No known key found for this signature in database
GPG key ID: 1260E46482E63562
2 changed files with 65 additions and 6 deletions

View file

@ -36129,6 +36129,9 @@ value if you intend to run several @command{dnsmasq} instances.
Likewise, @code{shepherd-requirement} is a list of Shepherd service names Likewise, @code{shepherd-requirement} is a list of Shepherd service names
(symbols) that this service will depend on. (symbols) that this service will depend on.
@item @code{pid-file} (default: @code{"/run/dnsmasq.pid"})
Specify an alternate path for dnsmasq to record its process-id in.
@item @code{no-hosts?} (default: @code{#f}) @item @code{no-hosts?} (default: @code{#f})
When true, don't read the hostnames in /etc/hosts. When true, don't read the hostnames in /etc/hosts.
@ -36249,6 +36252,16 @@ separated by dashes, e.g.: @samp{01-02-03-04-aa-bb}. Note that
resolving MAC addresses is only possible if the client is in the local resolving MAC addresses is only possible if the client is in the local
network or obtained a DHCP lease from dnsmasq. network or obtained a DHCP lease from dnsmasq.
@item @code{conf-file} (default: @code{'()})
File names of configuration files to use. Strings and file-like objects
are accepted.
@item @code{conf-dir} (default: @code{#f})
Read all the files in the given directory as configuration files.
Support for @command{dnsmasq} field extensions is not implemented; users
can use @code{computed-file} to build a directory of files instead. The
configuration files are loaded in alphabetical order of file name.
@item @code{extra-options} (default: @code{'()}) @item @code{extra-options} (default: @code{'()})
This option provides an ``escape hatch'' for the user to provide arbitrary This option provides an ``escape hatch'' for the user to provide arbitrary
command-line arguments to @command{dnsmasq} as a list of strings. command-line arguments to @command{dnsmasq} as a list of strings.

View file

@ -55,6 +55,38 @@
dnsmasq-service-type dnsmasq-service-type
dnsmasq-configuration dnsmasq-configuration
dnsmasq-configuration-package
dnsmasq-configuration-shepherd-provision
dnsmasq-configuration-shepherd-requirement
dnsmasq-configuration-pid-file
dnsmasq-configuration-no-hosts?
dnsmasq-configuration-port
dnsmasq-configuration-local-service?
dnsmasq-configuration-listen-address
dnsmasq-configuration-resolv-file
dnsmasq-configuration-no-resolv?
dnsmasq-configuration-forward-private-reverse-lookup?
dnsmasq-configuration-query-servers-in-order?
dnsmasq-configuration-servers
dnsmasq-configuration-servers-file
dnsmasq-configuration-addresses
dnsmasq-configuration-cache-size
dnsmasq-configuration-negative-cache?
dnsmasq-configuration-cpe-id
dnsmasq-configuration-tftp-enable?
dnsmasq-configuration-tftp-no-fail?
dnsmasq-configuration-tftp-single-port?
dnsmasq-tftp-secure?
dnsmasq-tftp-max
dnsmasq-tftp-mtu
dnsmasq-tftp-no-blocksize?
dnsmasq-tftp-lowercase?
dnsmasq-tftp-port-range
dnsmasq-tftp-root
dnsmasq-tftp-unique-root
dnsmasq-configuration-conf-file
dnsmasq-configuration-conf-dir
dnsmasq-configuration-extra-options
unbound-service-type unbound-service-type
unbound-configuration unbound-configuration
@ -752,14 +784,14 @@ cache.size = 100 * MB
(default '(user-processes networking))) (default '(user-processes networking)))
(no-hosts? dnsmasq-configuration-no-hosts? (no-hosts? dnsmasq-configuration-no-hosts?
(default #f)) ;boolean (default #f)) ;boolean
(pid-file dnsmasq-configuration-pid-file
(default "/run/dnsmasq.pid")) ;string
(port dnsmasq-configuration-port (port dnsmasq-configuration-port
(default 53)) ;integer (default 53)) ;integer
(local-service? dnsmasq-configuration-local-service? (local-service? dnsmasq-configuration-local-service?
(default #t)) ;boolean (default #t)) ;boolean
(listen-addresses dnsmasq-configuration-listen-address (listen-addresses dnsmasq-configuration-listen-address
(default '())) ;list of string (default '())) ;list of string
(extra-options dnsmasq-configuration-extra-options
(default '())) ;list of string
(resolv-file dnsmasq-configuration-resolv-file (resolv-file dnsmasq-configuration-resolv-file
(default "/etc/resolv.conf")) ;string (default "/etc/resolv.conf")) ;string
(no-resolv? dnsmasq-configuration-no-resolv? (no-resolv? dnsmasq-configuration-no-resolv?
@ -803,7 +835,13 @@ cache.size = 100 * MB
(tftp-root dnsmasq-tftp-root (tftp-root dnsmasq-tftp-root
(default "/var/empty,lo")) ;string (default "/var/empty,lo")) ;string
(tftp-unique-root dnsmasq-tftp-unique-root (tftp-unique-root dnsmasq-tftp-unique-root
(default #f))) ;"" or "ip" or "mac" (default #f)) ;"" or "ip" or "mac"
(conf-file dnsmasq-configuration-conf-file
(default '())) ;list of string|file-like
(conf-dir dnsmasq-configuration-conf-dir
(default #f)) ;string|file-like
(extra-options dnsmasq-configuration-extra-options
(default '()))) ;list of string
(define (warn-deprecated-dnsmasq-configuration-provision value) (define (warn-deprecated-dnsmasq-configuration-provision value)
(when (pair? value) (when (pair? value)
@ -818,6 +856,7 @@ cache.size = 100 * MB
provision provision
shepherd-provision shepherd-provision
shepherd-requirement shepherd-requirement
pid-file
no-hosts? no-hosts?
port local-service? listen-addresses port local-service? listen-addresses
resolv-file no-resolv? resolv-file no-resolv?
@ -829,7 +868,8 @@ cache.size = 100 * MB
tftp-single-port? tftp-secure? tftp-single-port? tftp-secure?
tftp-max tftp-mtu tftp-no-blocksize? tftp-max tftp-mtu tftp-no-blocksize?
tftp-lowercase? tftp-port-range tftp-lowercase? tftp-port-range
tftp-root tftp-unique-root extra-options) tftp-root tftp-unique-root
conf-file conf-dir extra-options)
(shepherd-service (shepherd-service
(provision (or provision shepherd-provision)) (provision (or provision shepherd-provision))
(requirement shepherd-requirement) (requirement shepherd-requirement)
@ -838,7 +878,7 @@ cache.size = 100 * MB
(list (list
#$(file-append package "/sbin/dnsmasq") #$(file-append package "/sbin/dnsmasq")
"--keep-in-foreground" "--keep-in-foreground"
"--pid-file=/run/dnsmasq.pid" (string-append "--pid-file=" #$pid-file)
#$@(if no-hosts? #$@(if no-hosts?
'("--no-hosts") '("--no-hosts")
'()) '())
@ -909,8 +949,14 @@ cache.size = 100 * MB
(format #f "--tftp-unique-root=~a" tftp-unique-root) (format #f "--tftp-unique-root=~a" tftp-unique-root)
(format #f "--tftp-unique-root"))) (format #f "--tftp-unique-root")))
'()) '())
#$@(map (lambda (conf-file)
#~(string-append "--conf-file=" #$conf-file))
conf-file)
#$@(if conf-dir
(list #~(string-append "--conf-dir=" #$conf-dir))
'())
#$@extra-options) #$@extra-options)
#:pid-file "/run/dnsmasq.pid")) #:pid-file #$pid-file))
(stop #~(make-kill-destructor))))) (stop #~(make-kill-destructor)))))
(define (dnsmasq-activation config) (define (dnsmasq-activation config)