me
/
guix
Archived
1
0
Fork 0

services: Add knot-resolver-service-type.

* gnu/services/dns.scm (<knot-resolver-configuration>): New record type.
(knot-resolver-activation, knot-resolver-shpherd-services): New procedures.
(%knot-resolver-accounts, %kresd.conf, knot-resolver-service-type): New
variables.
* doc/guix.texi (DNS Services): Document it.
master
宋文武 2019-11-09 17:05:50 +08:00
parent a35e16c00d
commit 6ec68c69b0
No known key found for this signature in database
GPG Key ID: D415BF253B515976
2 changed files with 124 additions and 0 deletions

View File

@ -21086,6 +21086,44 @@ The list of knot-zone-configuration used by this configuration.
@end table
@end deftp
@subsubheading Knot Resolver Service
@deffn {Scheme Variable} knot-resolver-service-type
This this the type of the knot resolver service, whose value should be
an @code{knot-resolver-configuration} object as in this example:
@lisp
(service knot-resolver-service-type
(knot-resolver-configuration
(kresd-config-file (plain-file "kresd.conf" "
net.listen('192.168.0.1', 5353)
user('knot-resolver', 'knot-resolver')
modules = @{ 'hints > iterate', 'stats', 'predict' @}
cache.size = 100 * MB
"))))
@end lisp
For more information, refer its @url{https://knot-resolver.readthedocs.org/en/stable/daemon.html#configuration, manual}.
@end deffn
@deftp {Data Type} knot-resolver-configuration
Data type representing the configuration of knot-resolver.
@table @asis
@item @code{package} (default: @var{knot-resolver})
Package object of the knot DNS resolver.
@item @code{kresd-config-file} (default: %kresd.conf)
File-like object of the kresd configuration file to use, by default it
will listen on @code{127.0.0.1} and @code{::1}.
@item @code{garbage-collection-interval} (default: 1000)
Number of milliseconds for @code{kres-cache-gc} to periodically trim the cache.
@end table
@end deftp
@subsubheading Dnsmasq Service
@deffn {Scheme Variable} dnsmasq-service-type

View File

@ -45,6 +45,9 @@
zone-file
zone-entry
knot-resolver-service-type
knot-resolver-configuration
dnsmasq-service-type
dnsmasq-configuration
@ -637,6 +640,89 @@
(service-extension account-service-type
(const %knot-accounts))))))
;;;
;;; Knot Resolver.
;;;
(define-record-type* <knot-resolver-configuration>
knot-resolver-configuration
make-knot-resolver-configuration
knot-resolver-configuration?
(package knot-resolver-configuration-package
(default knot-resolver))
(kresd-config-file knot-resolver-kresd-config-file
(default %kresd.conf))
(garbage-collection-interval knot-resolver-garbage-collection-interval
(default 1000)))
(define %kresd.conf
(plain-file "kresd.conf" "-- -*- mode: lua -*-
net = { '127.0.0.1', '::1' }
user('knot-resolver', 'knot-resolver')
modules = { 'hints > iterate', 'stats', 'predict' }
cache.size = 100 * MB
"))
(define %knot-resolver-accounts
(list (user-group
(name "knot-resolver")
(system? #t))
(user-account
(name "knot-resolver")
(group "knot-resolver")
(system? #t)
(home-directory "/var/cache/knot-resolver")
(shell (file-append shadow "/sbin/nologin")))))
(define (knot-resolver-activation config)
#~(begin
(use-modules (guix build utils))
(let ((rundir "/var/cache/knot-resolver")
(owner (getpwnam "knot-resolver")))
(mkdir-p rundir)
(chown rundir (passwd:uid owner) (passwd:gid owner)))))
(define knot-resolver-shepherd-services
(match-lambda
(($ <knot-resolver-configuration> package
kresd-config-file
garbage-collection-interval)
(list
(shepherd-service
(provision '(kresd))
(requirement '(networking))
(documentation "Run the Knot Resolver daemon.")
(start #~(make-forkexec-constructor
'(#$(file-append package "/sbin/kresd")
"-c" #$kresd-config-file "-f" "1"
"/var/cache/knot-resolver")))
(stop #~(make-kill-destructor)))
(shepherd-service
(provision '(kres-cache-gc))
(requirement '(user-processes))
(documentation "Run the Knot Resolver Garbage Collector daemon.")
(start #~(make-forkexec-constructor
'(#$(file-append package "/sbin/kres-cache-gc")
"-d" #$(number->string garbage-collection-interval)
"-c" "/var/cache/knot-resolver")
#:user "knot-resolver"
#:group "knot-resolver"))
(stop #~(make-kill-destructor)))))))
(define knot-resolver-service-type
(service-type
(name 'knot-resolver)
(extensions
(list (service-extension shepherd-root-service-type
knot-resolver-shepherd-services)
(service-extension activation-service-type
knot-resolver-activation)
(service-extension account-service-type
(const %knot-resolver-accounts))))
(default-value (knot-resolver-configuration))
(description "Run the Knot DNS Resolver.")))
;;;
;;; Dnsmasq.