diff options
author | Alexey Abramov <levenson@mmer.org> | 2025-05-08 19:47:42 +0200 |
---|---|---|
committer | Maxim Cournoyer <maxim.cournoyer@gmail.com> | 2025-05-16 17:01:11 +0900 |
commit | 50126b39aceb203c16596a433141dd71218c94fb (patch) | |
tree | 2cb88caeb1531939adca33888cdd33aaa82faff8 | |
parent | 6d5f630fa55923f9c7d9725e47c1eb7a63c29f41 (diff) | |
download | guix-50126b39aceb203c16596a433141dd71218c94fb.tar.gz guix-50126b39aceb203c16596a433141dd71218c94fb.zip |
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>
-rw-r--r-- | doc/guix.texi | 13 | ||||
-rw-r--r-- | gnu/services/dns.scm | 58 |
2 files changed, 65 insertions, 6 deletions
diff --git a/doc/guix.texi b/doc/guix.texi index ef5aa94d3c..b3c5c74faf 100644 --- a/doc/guix.texi +++ b/doc/guix.texi @@ -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 (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}) 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 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{'()}) This option provides an ``escape hatch'' for the user to provide arbitrary command-line arguments to @command{dnsmasq} as a list of strings. diff --git a/gnu/services/dns.scm b/gnu/services/dns.scm index fd849d08e8..d55ee3e4fc 100644 --- a/gnu/services/dns.scm +++ b/gnu/services/dns.scm @@ -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) |