diff options
Diffstat (limited to 'distro/pkg/nix')
-rw-r--r-- | distro/pkg/nix/default.nix | 86 | ||||
-rw-r--r-- | distro/pkg/nix/dont-create-run-time-dirs.patch | 32 | ||||
-rw-r--r-- | distro/pkg/nix/runtime-deps.patch | 14 | ||||
-rw-r--r-- | distro/pkg/nix/top-level.nix | 8 |
4 files changed, 140 insertions, 0 deletions
diff --git a/distro/pkg/nix/default.nix b/distro/pkg/nix/default.nix new file mode 100644 index 0000000..eca1698 --- /dev/null +++ b/distro/pkg/nix/default.nix @@ -0,0 +1,86 @@ +{ lib, stdenv, fetchurl, pkg-config, gnutls, liburcu, lmdb, libcap_ng, libidn2, libunistring +, systemd, nettle, libedit, zlib, libiconv, libintl, libmaxminddb, libbpf, nghttp2, libmnl +, ngtcp2-gnutls, xdp-tools +, autoreconfHook +, nixosTests, knot-resolver, knot-dns, runCommandLocal +}: + +stdenv.mkDerivation rec { + pname = "knot-dns"; + version = "{{ version }}"; + + src = fetchurl { + url = "https://secure.nic.cz/files/knot-dns/knot-${version}.tar.xz"; + sha256 = "{{ src_hash }}"; + }; + + outputs = [ "bin" "out" "dev" ]; + + configureFlags = [ + "--with-configdir=/etc/knot" + "--with-rundir=/run/knot" + "--with-storage=/var/lib/knot" + ]; + + patches = [ + # Don't try to create directories like /var/lib/knot at build time. + # They are later created from NixOS itself. + ./dont-create-run-time-dirs.patch + ./runtime-deps.patch + ]; + + nativeBuildInputs = [ pkg-config autoreconfHook ]; + buildInputs = [ + gnutls liburcu libidn2 libunistring + nettle libedit + libiconv lmdb libintl + nghttp2 # DoH support in kdig + ngtcp2-gnutls # DoQ support in kdig (and elsewhere but not much use there yet) + libmaxminddb # optional for geoip module (it's tiny) + # without sphinx &al. for developer documentation + # TODO: add dnstap support? + ] ++ lib.optionals stdenv.isLinux [ + libcap_ng systemd + xdp-tools libbpf libmnl # XDP support (it's Linux kernel API) + ] ++ lib.optional stdenv.isDarwin zlib; # perhaps due to gnutls + + enableParallelBuilding = true; + + CFLAGS = [ "-O2" "-DNDEBUG" ]; + + doCheck = true; + checkFlags = [ "V=1" ]; # verbose output in case some test fails + doInstallCheck = true; + + postInstall = '' + rm -r "$out"/lib/*.la + ''; + + passthru.tests = { + inherit knot-resolver; + } // lib.optionalAttrs stdenv.isLinux { + inherit (nixosTests) knot kea; + # Some dependencies are very version-sensitive, so the might get dropped + # or embedded after some update, even if the nixPackagers didn't intend to. + # For non-linux I don't know a good replacement for `ldd`. + deps = runCommandLocal "knot-deps-test" + { nativeBuildInputs = [ (lib.getBin stdenv.cc.libc) ]; } + '' + for libname in libngtcp2 libxdp libbpf; do + echo "Checking for $libname:" + ldd '${knot-dns.bin}/bin/knotd' | grep -F "$libname" + echo "OK" + done + touch "$out" + ''; + }; + + meta = with lib; { + description = "Authoritative-only DNS server from .cz domain registry"; + homepage = "https://knot-dns.cz"; + license = licenses.gpl3Plus; + platforms = platforms.unix; + maintainers = [ maintainers.vcunat ]; + mainProgram = "knotd"; + }; +} diff --git a/distro/pkg/nix/dont-create-run-time-dirs.patch b/distro/pkg/nix/dont-create-run-time-dirs.patch new file mode 100644 index 0000000..9fe165e --- /dev/null +++ b/distro/pkg/nix/dont-create-run-time-dirs.patch @@ -0,0 +1,32 @@ +diff --git a/samples/Makefile.am b/samples/Makefile.am +index c253c91..107401d 100644 +--- a/samples/Makefile.am ++++ b/samples/Makefile.am +@@ -19,11 +19,6 @@ EXTRA_DIST = knot.sample.conf.in example.com.zone + + if HAVE_DAEMON + +-install-data-local: knot.sample.conf +- if [ \! -f $(DESTDIR)/$(config_dir)/knot.sample.conf ]; then \ +- $(INSTALL) -d $(DESTDIR)/$(config_dir); \ +- $(INSTALL_DATA) knot.sample.conf $(srcdir)/example.com.zone $(DESTDIR)/$(config_dir); \ +- fi + uninstall-local: + -rm -rf $(DESTDIR)/$(config_dir)/knot.sample.conf \ + $(DESTDIR)/$(config_dir)/example.com.zone +diff --git a/src/utils/Makefile.inc b/src/utils/Makefile.inc +index e6765d9..d859d23 100644 +--- a/src/utils/Makefile.inc ++++ b/src/utils/Makefile.inc +@@ -79,11 +79,6 @@ endif HAVE_DNSTAP + endif HAVE_UTILS + + if HAVE_DAEMON +-# Create storage and run-time directories +-install-data-hook: +- $(INSTALL) -d $(DESTDIR)/@config_dir@ +- $(INSTALL) -d $(DESTDIR)/@run_dir@ +- $(INSTALL) -d $(DESTDIR)/@storage_dir@ + + sbin_PROGRAMS = knotc knotd + diff --git a/distro/pkg/nix/runtime-deps.patch b/distro/pkg/nix/runtime-deps.patch new file mode 100644 index 0000000..19fc9cd --- /dev/null +++ b/distro/pkg/nix/runtime-deps.patch @@ -0,0 +1,14 @@ +Remove unnecessary runtime dependencies. + +`knotc status configure` shows summary from the configure script, +but that contains also references like include paths. +Filter these at least in a crude way (whole lines). +--- a/configure.ac ++++ b/configure.ac +@@ -766,5 +766,5 @@ result_msg_base=" Knot DNS $VERSION + +-result_msg_esc=$(echo -n "$result_msg_base" | sed '$!s/$/\\n/' | tr -d '\n') ++result_msg_esc=$(echo -n "$result_msg_base" | grep -Fv "$NIX_STORE" | sed '$!s/$/\\n/' | tr -d '\n') + + AC_DEFINE_UNQUOTED([CONFIGURE_SUMMARY],["$result_msg_esc"],[Configure summary]) + diff --git a/distro/pkg/nix/top-level.nix b/distro/pkg/nix/top-level.nix new file mode 100644 index 0000000..303923c --- /dev/null +++ b/distro/pkg/nix/top-level.nix @@ -0,0 +1,8 @@ + +with import <nixpkgs> {}; + +(callPackage ./. { +}).overrideAttrs (attrs: { + src = ./knot-{{ version }}.tar.xz; +}) + |