mirror of
https://codeberg.org/guix/guix.git
synced 2025-10-02 02:15:12 +00:00
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.
This commit is contained in:
parent
a35e16c00d
commit
6ec68c69b0
2 changed files with 124 additions and 0 deletions
|
@ -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.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue