add kresd service with basic options
Still celebrating today's 1.2.0 release!
This commit is contained in:
parent
cb30150bd5
commit
278bbe3b33
@ -285,6 +285,7 @@
|
|||||||
couchpotato = 267;
|
couchpotato = 267;
|
||||||
gogs = 268;
|
gogs = 268;
|
||||||
pdns-recursor = 269;
|
pdns-recursor = 269;
|
||||||
|
kresd = 270;
|
||||||
|
|
||||||
# When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399!
|
# When adding a uid, make sure it doesn't match an existing gid. And don't use uids above 399!
|
||||||
|
|
||||||
@ -539,6 +540,7 @@
|
|||||||
glance = 266;
|
glance = 266;
|
||||||
couchpotato = 267;
|
couchpotato = 267;
|
||||||
gogs = 268;
|
gogs = 268;
|
||||||
|
kresd = 270;
|
||||||
|
|
||||||
# When adding a gid, make sure it doesn't match an existing
|
# When adding a gid, make sure it doesn't match an existing
|
||||||
# uid. Users and groups with the same name should have equal
|
# uid. Users and groups with the same name should have equal
|
||||||
|
@ -399,6 +399,7 @@
|
|||||||
./services/networking/iodine.nix
|
./services/networking/iodine.nix
|
||||||
./services/networking/ircd-hybrid/default.nix
|
./services/networking/ircd-hybrid/default.nix
|
||||||
./services/networking/kippo.nix
|
./services/networking/kippo.nix
|
||||||
|
./services/networking/kresd.nix
|
||||||
./services/networking/lambdabot.nix
|
./services/networking/lambdabot.nix
|
||||||
./services/networking/libreswan.nix
|
./services/networking/libreswan.nix
|
||||||
./services/networking/logmein-hamachi.nix
|
./services/networking/logmein-hamachi.nix
|
||||||
|
119
nixos/modules/services/networking/kresd.nix
Normal file
119
nixos/modules/services/networking/kresd.nix
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
{ config, lib, pkgs, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
|
||||||
|
cfg = config.services.kresd;
|
||||||
|
package = pkgs.knot-resolver;
|
||||||
|
|
||||||
|
configFile = pkgs.writeText "kresd.conf" cfg.extraConfig;
|
||||||
|
in
|
||||||
|
|
||||||
|
{
|
||||||
|
meta.maintainers = [ maintainers.vcunat /* upstream developer */ ];
|
||||||
|
|
||||||
|
###### interface
|
||||||
|
options.services.kresd = {
|
||||||
|
enable = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = ''
|
||||||
|
Whether to enable knot-resolver domain name server.
|
||||||
|
DNSSEC validation is turned on by default.
|
||||||
|
You can run <literal>sudo nc -U /run/kresd/control</literal>
|
||||||
|
and give commands interactively to kresd.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
extraConfig = mkOption {
|
||||||
|
type = types.lines;
|
||||||
|
default = "";
|
||||||
|
description = ''
|
||||||
|
Extra lines to be added verbatim to the generated configuration file.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
cacheDir = mkOption {
|
||||||
|
type = types.path;
|
||||||
|
default = "/var/cache/kresd";
|
||||||
|
description = ''
|
||||||
|
Directory for caches. They are intended to survive reboots.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
interfaces = mkOption {
|
||||||
|
type = with types; listOf str;
|
||||||
|
default = [ "::1" "127.0.0.1" ];
|
||||||
|
description = ''
|
||||||
|
What addresses the server should listen on.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
# TODO: perhaps options for more common stuff like cache size or forwarding
|
||||||
|
};
|
||||||
|
|
||||||
|
###### implementation
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
environment.etc."kresd.conf".source = configFile; # not required
|
||||||
|
|
||||||
|
users.extraUsers = singleton
|
||||||
|
{ name = "kresd";
|
||||||
|
uid = config.ids.uids.kresd;
|
||||||
|
group = "kresd";
|
||||||
|
description = "Knot-resolver daemon user";
|
||||||
|
};
|
||||||
|
users.extraGroups = singleton
|
||||||
|
{ name = "kresd";
|
||||||
|
gid = config.ids.gids.kresd;
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.sockets.kresd = rec {
|
||||||
|
wantedBy = [ "sockets.target" ];
|
||||||
|
before = wantedBy;
|
||||||
|
listenStreams = map
|
||||||
|
# Syntax depends on being IPv6 or IPv4.
|
||||||
|
(iface: if elem ":" (stringToCharacters iface) then "[${iface}]:53" else "${iface}:53")
|
||||||
|
cfg.interfaces;
|
||||||
|
socketConfig.ListenDatagram = listenStreams;
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.sockets.kresd-control = rec {
|
||||||
|
wantedBy = [ "sockets.target" ];
|
||||||
|
before = wantedBy;
|
||||||
|
partOf = [ "kresd.socket" ];
|
||||||
|
listenStreams = [ "/run/kresd/control" ];
|
||||||
|
socketConfig = {
|
||||||
|
FileDescriptorName = "control";
|
||||||
|
Service = "kresd.service";
|
||||||
|
SocketMode = "0660"; # only root user/group may connect
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Create the cacheDir; tmpfiles don't work on nixos-rebuild switch.
|
||||||
|
systemd.services.kresd-cachedir = {
|
||||||
|
serviceConfig.Type = "oneshot";
|
||||||
|
script = ''
|
||||||
|
if [ ! -d '${cfg.cacheDir}' ]; then
|
||||||
|
mkdir -p '${cfg.cacheDir}'
|
||||||
|
chown kresd:kresd '${cfg.cacheDir}'
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.services.kresd = {
|
||||||
|
description = "Knot-resolver daemon";
|
||||||
|
|
||||||
|
serviceConfig = {
|
||||||
|
User = "kresd";
|
||||||
|
Type = "notify";
|
||||||
|
WorkingDirectory = cfg.cacheDir;
|
||||||
|
};
|
||||||
|
|
||||||
|
script = ''
|
||||||
|
exec '${package}/bin/kresd' --config '${configFile}' \
|
||||||
|
-k '${cfg.cacheDir}/root.key'
|
||||||
|
'';
|
||||||
|
|
||||||
|
after = [ "kresd-cachedir.service" ];
|
||||||
|
requires = [ "kresd.socket" "kresd-cachedir.service" ];
|
||||||
|
wantedBy = [ "sockets.target" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
@ -1,8 +1,7 @@
|
|||||||
{ stdenv, fetchurl, pkgconfig, utillinux, which, knot-dns, luajit, libuv, lmdb
|
{ stdenv, fetchurl, pkgconfig, utillinux, which, knot-dns, luajit, libuv, lmdb
|
||||||
, cmocka, systemd, hiredis, libmemcached
|
, cmocka, systemd, hiredis, libmemcached
|
||||||
, gnutls, nettle
|
, gnutls, nettle
|
||||||
, luajitPackages, makeWrapper # TODO: on master there's luajitPackages
|
, luajitPackages, makeWrapper
|
||||||
, fetchzip
|
|
||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
@ -59,7 +58,7 @@ stdenv.mkDerivation rec {
|
|||||||
'';
|
'';
|
||||||
|
|
||||||
meta = with stdenv.lib; {
|
meta = with stdenv.lib; {
|
||||||
description = "Caching DNS resolver, from .cz domain registry";
|
description = "Caching validating DNS resolver, from .cz domain registry";
|
||||||
homepage = https://knot-resolver.cz;
|
homepage = https://knot-resolver.cz;
|
||||||
license = licenses.gpl3Plus;
|
license = licenses.gpl3Plus;
|
||||||
platforms = platforms.unix;
|
platforms = platforms.unix;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user