1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
|
# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
VERIFY_SIG_OPENPGP_KEY_PATH=/usr/share/openpgp-keys/nlnetlabs.asc
inherit autotools systemd tmpfiles toolchain-funcs verify-sig
DESCRIPTION="An authoritative only, high performance, open source name server"
HOMEPAGE="https://www.nlnetlabs.nl/projects/nsd/about/"
if [[ ${PV} == *9999 ]] ; then
inherit git-r3
EGIT_REPO_URI="https://github.com/NLnetLabs/nsd.git"
else
# Version voodoo needed only for non-release tarballs: 4.0.0_rc1 => 4.0.0rc1
MY_PV="${PV/_beta/b}"
MY_PV="${MY_PV/_rc/rc}"
MY_P="${PN}-${MY_PV}"
if [[ ${PV} != *_beta* && ${PV} != *_rc* ]] ; then
SRC_URI="
https://www.nlnetlabs.nl/downloads/${PN}/${MY_P}.tar.gz
verify-sig? ( https://www.nlnetlabs.nl/downloads/nsd/${MY_P}.tar.gz.asc )
"
S="${WORKDIR}"/${MY_P}
KEYWORDS="amd64 arm64 x86"
BDEPEND="verify-sig? ( >=sec-keys/openpgp-keys-nlnetlabs-20260101 ) "
fi
fi
LICENSE="BSD"
SLOT="0"
IUSE="+bind8-stats debug +dnstap +ipv6 libevent memclean minimal-responses mmap munin"
IUSE+=" +nsec3 +radix-tree +ratelimit recvmmsg selinux +simdzone ssl systemd +tfo xdp verify-sig"
RDEPEND="
acct-group/nsd
acct-user/nsd
dnstap? (
>=dev-libs/fstrm-0.4
dev-libs/protobuf-c:=
)
libevent? ( dev-libs/libevent )
munin? ( net-analyzer/munin )
ssl? ( dev-libs/openssl:= )
systemd? ( sys-apps/systemd )
xdp? (
dev-libs/libbpf:=
net-libs/xdp-tools
sys-libs/libcap
)
"
DEPEND="${RDEPEND}"
BDEPEND+="
app-alternatives/lex
app-alternatives/yacc
systemd? ( virtual/pkgconfig )
xdp? ( llvm-core/clang:*[llvm_targets_BPF] )
"
RDEPEND+=" selinux? ( sec-policy/selinux-nsd )"
PATCHES=(
"${FILESDIR}/${PN}-munin-gentoo-paths.patch"
)
NSD_DBDIR="/var/db/nsd" # Default dir for NSD's databases.
NSD_ZNDIR="/var/lib/nsd" # Default dir for NSD's zone files.
QA_EXECSTACK="
usr/lib/nsd/xdp-*.o
"
src_prepare() {
default
if [[ ${PV} == *9999 ]] ; then
# When building from git, the configure script and simdzone sources are missing
# See README.md
git submodule update --init || die "Could't update submodules"
autoreconf -fi || die "autoreconf -fi failed"
else
# Required to get correct pkg-config macros with USE="systemd".
# See bugs #663618 & #758050.
eautoreconf
fi
}
src_configure() {
local myconf=(
--cache-file="${S}"/config.cache
$(use_enable bind8-stats)
$(use_enable bind8-stats zone-stats)
$(use_enable debug checking)
$(use_enable dnstap)
$(use_enable ipv6)
$(use_enable memclean)
$(use_enable minimal-responses)
$(use_enable mmap)
$(use_enable nsec3)
--disable-packed
$(use_enable radix-tree)
$(use_enable ratelimit)
$(use_enable recvmmsg)
$(use_enable systemd)
$(use_enable tfo tcp-fastopen)
$(use_enable xdp)
$(use_with libevent)
$(use_with ssl)
--with-cookiesecretsfile="${EPREFIX}${NSD_DBDIR}/cookiesecrets.txt"
--with-dbfile="${EPREFIX}${NSD_DBDIR}/nsd.db"
--with-dbdir="${EPREFIX}${NSD_DBDIR}"
--with-logfile="${EPREFIX}/var/log/nsd.log"
--with-pidfile="${EPREFIX}/run/nsd.pid"
# sharedfilesdir is used for xdp (bpf) objects
--with-sharedfilesdir="${EPREFIX}/usr/lib/nsd"
--with-xfrdfile="${EPREFIX}${NSD_DBDIR}/xfrd.state"
--with-xfrdir="${EPREFIX}${NSD_DBDIR}"
--with-zonelistfile="${EPREFIX}${NSD_DBDIR}/zone.list"
--with-zonesdir="${EPREFIX}${NSD_ZNDIR}"
)
# NSD 4.10.x introduced a new zone parser, "simdzone", which
# replaces the older parser that used flex & bison:
# https://github.com/NLnetLabs/simdzone
# It leverages SSE4.2 and/or AVX2 instruction sets for faster
# zone parsing on x86_64 architectures. Other CPU archs will
# use a fallback implementation.
if use amd64; then
myconf+=(
$(use_enable simdzone haswell)
$(use_enable simdzone westmere)
)
fi
# If the compiler indicates that time_t is at least 64-bits wide,
# then enable it in the package to support timestamps greater than
# the year 2038 (D_TIME_BITS=64). This configure switch only
# appears on glibc-based userlands.
if use elibc_glibc && tc-has-64bit-time_t; then
myconf+=( --enable-year2038 )
fi
econf "${myconf[@]}"
}
src_install() {
emake DESTDIR="${D}" install
dodoc doc/{ChangeLog,CREDITS,NSD-4-features,NSD-FOR-BIND-USERS,README,RELNOTES,REQUIREMENTS}
newinitd contrib/nsd.openrc nsd
newconfd contrib/nsd.openrc.conf nsd
newtmpfiles contrib/nsd-tmpfiles.conf nsd.conf
# Install munin plugin and config, if requested.
if use munin ; then
exeinto /usr/libexec/munin/plugins
doexe contrib/nsd_munin_
insinto /etc/munin/plugin-conf.d
newins "${FILESDIR}"/nsd.munin-conf nsd_munin
fi
# Use the upstream-provided systemd service file.
systemd_dounit contrib/nsd.service
# Remove the /run directory that usually resides on tmpfs and is
# being taken care of by the nsd init script anyway (checkpath).
rm -r "${ED}"/run || die "Failed to remove /run"
# BPF
dostrip -x /usr/lib/nsd
keepdir "${NSD_DBDIR}"
}
pkg_postinst() {
# See eclass/tmpfiles.eclass for info.
tmpfiles_process nsd.conf
# Database directory
# Writable by nsd:nsd for database updates and zone transfers.
install -d -m 750 -o nsd -g nsd "${EROOT}/${NSD_DBDIR}"
# Zones directory
# Writable by nsd:nsd for zone file updates (via 'nsd-control write').
install -d -m 750 -o nsd -g nsd "${EROOT}/${NSD_ZNDIR}"
}
|