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

@ -55,6 +55,38 @@
dnsmasq-service-type
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-configuration
@ -752,14 +784,14 @@ cache.size = 100 * MB
(default '(user-processes networking)))
(no-hosts? dnsmasq-configuration-no-hosts?
(default #f)) ;boolean
(pid-file dnsmasq-configuration-pid-file
(default "/run/dnsmasq.pid")) ;string
(port dnsmasq-configuration-port
(default 53)) ;integer
(local-service? dnsmasq-configuration-local-service?
(default #t)) ;boolean
(listen-addresses dnsmasq-configuration-listen-address
(default '())) ;list of string
(extra-options dnsmasq-configuration-extra-options
(default '())) ;list of string
(resolv-file dnsmasq-configuration-resolv-file
(default "/etc/resolv.conf")) ;string
(no-resolv? dnsmasq-configuration-no-resolv?
@ -803,7 +835,13 @@ cache.size = 100 * MB
(tftp-root dnsmasq-tftp-root
(default "/var/empty,lo")) ;string
(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)
(when (pair? value)
@ -818,6 +856,7 @@ cache.size = 100 * MB
provision
shepherd-provision
shepherd-requirement
pid-file
no-hosts?
port local-service? listen-addresses
resolv-file no-resolv?
@ -829,7 +868,8 @@ cache.size = 100 * MB
tftp-single-port? tftp-secure?
tftp-max tftp-mtu tftp-no-blocksize?
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
(provision (or provision shepherd-provision))
(requirement shepherd-requirement)
@ -838,7 +878,7 @@ cache.size = 100 * MB
(list
#$(file-append package "/sbin/dnsmasq")
"--keep-in-foreground"
"--pid-file=/run/dnsmasq.pid"
(string-append "--pid-file=" #$pid-file)
#$@(if 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")))
'())
#$@(map (lambda (conf-file)
#~(string-append "--conf-file=" #$conf-file))
conf-file)
#$@(if conf-dir
(list #~(string-append "--conf-dir=" #$conf-dir))
'())
#$@extra-options)
#:pid-file "/run/dnsmasq.pid"))
#:pid-file #$pid-file))
(stop #~(make-kill-destructor)))))
(define (dnsmasq-activation config)