knot-resolver: add new package
Signed-off-by: Jan Pavlinec <jan.pavlinec@nic.cz>
This commit is contained in:
parent
39d976ba87
commit
bb1f6174fa
7 changed files with 215 additions and 0 deletions
12
net/knot-resolver/Config.in
Normal file
12
net/knot-resolver/Config.in
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
menu "Configuration"
|
||||||
|
config PACKAGE_knot-resolver_dnstap
|
||||||
|
bool "Build with dnstap support"
|
||||||
|
default n
|
||||||
|
help
|
||||||
|
knot-resolver dnstap module supports logging DNS responses
|
||||||
|
to a unix socket in dnstap format using fstrm framing library.
|
||||||
|
This logging is useful if you need effectivelly log all
|
||||||
|
DNS traffic.
|
||||||
|
The unix socket and the socket reader must be present before
|
||||||
|
starting resolver instances.
|
||||||
|
endmenu
|
91
net/knot-resolver/Makefile
Normal file
91
net/knot-resolver/Makefile
Normal file
|
@ -0,0 +1,91 @@
|
||||||
|
#
|
||||||
|
# Copyright (C) 2015-2021 CZ.NIC, z. s. p. o. (https://www.nic.cz/)
|
||||||
|
#
|
||||||
|
# This is free software, licensed under the GNU General Public License v2.
|
||||||
|
# See /LICENSE for more information.
|
||||||
|
#
|
||||||
|
|
||||||
|
PKG_RELRO_FULL:=0
|
||||||
|
|
||||||
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
|
PKG_NAME:=knot-resolver
|
||||||
|
PKG_VERSION:=5.2.1
|
||||||
|
PKG_RELEASE:=1
|
||||||
|
|
||||||
|
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
|
||||||
|
PKG_SOURCE_URL:=https://secure.nic.cz/files/knot-resolver
|
||||||
|
PKG_HASH:=aa37b744c400f437acba7a54aebcbdbe722ece743d342cbc39f2dd8087f05826
|
||||||
|
|
||||||
|
PKG_MAINTAINER:=Jan Pavlinec <jan.pavlinec@nic.cz>
|
||||||
|
PKG_LICENSE:=GPL-3.0-later
|
||||||
|
PKG_LICENSE_FILES:=COPYING
|
||||||
|
|
||||||
|
PKG_BUILD_DEPENDS:=meson/host
|
||||||
|
PKG_INSTALL:=1
|
||||||
|
|
||||||
|
include $(INCLUDE_DIR)/package.mk
|
||||||
|
include ../../devel/meson/meson.mk
|
||||||
|
|
||||||
|
define Package/knot-resolver
|
||||||
|
SECTION:=net
|
||||||
|
CATEGORY:=Network
|
||||||
|
SUBMENU:=IP Addresses and Names
|
||||||
|
TITLE:=Knot DNS Resolver
|
||||||
|
URL:=https://www.knot-resolver.cz
|
||||||
|
DEPENDS=\
|
||||||
|
+knot-libs \
|
||||||
|
+knot-libzscanner \
|
||||||
|
+libuv \
|
||||||
|
+luajit \
|
||||||
|
+luasec \
|
||||||
|
+luasocket \
|
||||||
|
+libstdcpp \
|
||||||
|
+lmdb \
|
||||||
|
PACKAGE_knot-resolver_dnstap:libfstrm \
|
||||||
|
PACKAGE_knot-resolver_dnstap:libprotobuf-c \
|
||||||
|
@(aarch64||mips64||mips64el||powerpc64||x86_64)
|
||||||
|
USERID:=kresd=3536:kresd=3536
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/knot-resolver/description
|
||||||
|
The Knot Resolver is a caching full resolver
|
||||||
|
implementation, including both a resolver library and a daemon.
|
||||||
|
endef
|
||||||
|
|
||||||
|
define Package/knot-resolver/config
|
||||||
|
source "$(SOURCE)/Config.in"
|
||||||
|
endef
|
||||||
|
|
||||||
|
MESON_ARGS+= \
|
||||||
|
$(if $(CONFIG_PACKAGE_knot-resolver_dnstap), -Ddnstap=enabled,-Ddnstap=disabled) \
|
||||||
|
-Dcapng=disabled \
|
||||||
|
-Dclient=disabled \
|
||||||
|
-Dconfig_tests=disabled \
|
||||||
|
-Ddnstap=disabled \
|
||||||
|
-Ddoc=disabled \
|
||||||
|
-Dinstall_kresd_conf=disabled \
|
||||||
|
-Dinstall_root_keys=disabled \
|
||||||
|
-Dkeyfile_default=/etc/knot-resolver/root.keys \
|
||||||
|
-Dprefix=/usr \
|
||||||
|
-Dunit_tests=disabled \
|
||||||
|
-Dutils=disabled
|
||||||
|
|
||||||
|
define Package/knot-resolver/install
|
||||||
|
$(INSTALL_DIR) $(1)/usr/sbin
|
||||||
|
$(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/kresd $(1)/usr/sbin/
|
||||||
|
|
||||||
|
$(INSTALL_DIR) $(1)/usr/lib/knot-resolver
|
||||||
|
$(CP) $(PKG_INSTALL_DIR)/usr/lib/*.so* $(1)/usr/lib/
|
||||||
|
$(CP) $(PKG_INSTALL_DIR)/usr/lib/knot-resolver/{*.lua,*.so} $(1)/usr/lib/knot-resolver/
|
||||||
|
$(INSTALL_DIR) $(1)/usr/lib/knot-resolver/kres_modules
|
||||||
|
$(CP) $(PKG_INSTALL_DIR)/usr/lib/knot-resolver/kres_modules/{*.lua,*.so} $(1)/usr/lib/knot-resolver/kres_modules/
|
||||||
|
$(INSTALL_DIR) $(1)/etc/init.d
|
||||||
|
$(INSTALL_BIN) ./files/kresd.init $(1)/etc/init.d/kresd
|
||||||
|
|
||||||
|
$(INSTALL_DIR) $(1)/etc/knot-resolver
|
||||||
|
$(CP) $(PKG_INSTALL_DIR)/etc/knot-resolver/root.hints $(1)/etc/knot-resolver/
|
||||||
|
$(CP) ./files/root.keys $(1)/etc/knot-resolver
|
||||||
|
endef
|
||||||
|
|
||||||
|
$(eval $(call BuildPackage,knot-resolver))
|
75
net/knot-resolver/files/kresd.init
Executable file
75
net/knot-resolver/files/kresd.init
Executable file
|
@ -0,0 +1,75 @@
|
||||||
|
#!/bin/sh /etc/rc.common
|
||||||
|
|
||||||
|
START=61
|
||||||
|
STOP=00
|
||||||
|
|
||||||
|
USE_PROCD=1
|
||||||
|
PROG=/usr/sbin/kresd
|
||||||
|
CONFIGFILE=/tmp/kresd/kresd.config
|
||||||
|
ROOTKEYFILE=/etc/knot-resolver/root.keys
|
||||||
|
DEFAULT_RUNDIR=/tmp/kresd
|
||||||
|
USERNAME=kresd
|
||||||
|
GROUP=kresd
|
||||||
|
|
||||||
|
init_header() {
|
||||||
|
{
|
||||||
|
echo "--Automatically generated file; DO NOT EDIT"
|
||||||
|
echo "modules = {"
|
||||||
|
echo " 'hints > iterate'"
|
||||||
|
echo " , 'policy'"
|
||||||
|
if [ "$prefetch" \!= 0 ]; then
|
||||||
|
echo " , 'stats'"
|
||||||
|
echo " , predict = {"
|
||||||
|
echo " window = 30 -- 30 minutes sampling window"
|
||||||
|
echo " , period = 24*(60/30) -- track last 24 hours"
|
||||||
|
echo " }"
|
||||||
|
fi
|
||||||
|
echo "}"
|
||||||
|
echo "hints.use_nodata(true)"
|
||||||
|
} > $CONFIGFILE
|
||||||
|
}
|
||||||
|
|
||||||
|
init_rootkey() {
|
||||||
|
{
|
||||||
|
echo "trust_anchors.remove('.')"
|
||||||
|
echo "trust_anchors.add_file('$ROOTKEYFILE', true)"
|
||||||
|
} >> $CONFIGFILE
|
||||||
|
}
|
||||||
|
|
||||||
|
modify_rundir() {
|
||||||
|
local rundir
|
||||||
|
|
||||||
|
#create rundir
|
||||||
|
rundir="$DEFAULT_RUNDIR"
|
||||||
|
|
||||||
|
if [ ! -d "$rundir" ]; then
|
||||||
|
mkdir -p "$rundir"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if id "$1" >/dev/null 2>&1; then
|
||||||
|
chown -R $USERNAME:$GROUP "$rundir"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
start_service() {
|
||||||
|
procd_open_instance
|
||||||
|
procd_set_param file /etc/config/resolver
|
||||||
|
procd_set_param command "$PROG"
|
||||||
|
procd_append_param command --noninteractive
|
||||||
|
procd_set_param respawn
|
||||||
|
modify_rundir
|
||||||
|
init_header
|
||||||
|
init_rootkey
|
||||||
|
|
||||||
|
# knot-resolver config
|
||||||
|
procd_append_param command -c "$CONFIGFILE"
|
||||||
|
procd_append_param command -a "0.0.0.0#53"
|
||||||
|
procd_append_param command -a "::0#53"
|
||||||
|
procd_close_instance
|
||||||
|
}
|
||||||
|
|
||||||
|
reload_service()
|
||||||
|
{
|
||||||
|
stop
|
||||||
|
start
|
||||||
|
}
|
1
net/knot-resolver/files/root.keys
Normal file
1
net/knot-resolver/files/root.keys
Normal file
|
@ -0,0 +1 @@
|
||||||
|
. IN DS 20326 8 2 e06d44b80b8f1d39a95c0b0d7c65d08458e880409bbc683457104237c7f8ec8d
|
20
net/knot-resolver/patches/010-fix-lmdb.patch
Normal file
20
net/knot-resolver/patches/010-fix-lmdb.patch
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
This is just workaround. It should be removed after proper fixing in upstream.
|
||||||
|
Patch fixes problem with lmdb pkg config. It also adds workaround for get_option
|
||||||
|
which is now not propagated in OpenWrt meson host package.
|
||||||
|
--- a/meson.build
|
||||||
|
+++ b/meson.build
|
||||||
|
@@ -23,10 +23,10 @@ libknot = dependency('libknot', version:
|
||||||
|
libdnssec = dependency('libdnssec', version: knot_version)
|
||||||
|
libzscanner = dependency('libzscanner', version: knot_version)
|
||||||
|
libuv = dependency('libuv', version: '>=1.7')
|
||||||
|
-lmdb = dependency('lmdb', required: false)
|
||||||
|
-if not lmdb.found() # darwin workaround: missing pkgconfig
|
||||||
|
- lmdb = meson.get_compiler('c').find_library('lmdb')
|
||||||
|
-endif
|
||||||
|
+##lmdb = dependency('lmdb', required: false)
|
||||||
|
+##if not lmdb.found() # darwin workaround: missing pkgconfig
|
||||||
|
+lmdb = meson.get_compiler('c').find_library('lmdb')
|
||||||
|
+##endif
|
||||||
|
gnutls = dependency('gnutls')
|
||||||
|
luajit = dependency('luajit')
|
||||||
|
# NOTE avoid using link_args for luajit due to a macOS issue
|
13
net/knot-resolver/patches/030-fix-policy-hack.patch
Normal file
13
net/knot-resolver/patches/030-fix-policy-hack.patch
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
This patch fixes the problem with forwarding in knot-resolver v4.3.0.
|
||||||
|
It reintroduces a fix which enables policy related hack (knot/knot-resolver#205 (comment 94566) )
|
||||||
|
--- a/modules/policy/policy.lua
|
||||||
|
+++ b/modules/policy/policy.lua
|
||||||
|
@@ -985,7 +985,7 @@ policy.layer = {
|
||||||
|
if bit.band(state, bit.bor(kres.FAIL, kres.DONE)) ~= 0 then return state end
|
||||||
|
local qry = req:initial() -- same as :current() but more descriptive
|
||||||
|
return policy.evaluate(policy.rules, req, qry, state)
|
||||||
|
- or (special_names_optim(req, qry.sname)
|
||||||
|
+ or (true--special_names_optim(req, qry.sname)
|
||||||
|
and policy.evaluate(policy.special_names, req, qry, state))
|
||||||
|
or state
|
||||||
|
end,
|
3
net/knot-resolver/test.sh
Normal file
3
net/knot-resolver/test.sh
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
kresd --version | grep "$2"
|
Loading…
Reference in a new issue