summaryrefslogtreecommitdiff
blob: da8e10d8e3ac5fe85742bb29aa3a0a9c19db9e1b (plain)
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
# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI="8"

inherit autotools systemd tmpfiles

DESCRIPTION="An authoritative only, high performance, open source name server"
HOMEPAGE="https://www.nlnetlabs.nl/projects/nsd"

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"
		S="${WORKDIR}"/${MY_P}

		KEYWORDS="~amd64 ~x86"
	fi
fi

LICENSE="BSD"
SLOT="0"
IUSE="bind8-stats debug +default-znow dnstap +ipv6 +largefile libevent +lto memclean minimal-responses mmap munin +nsec3 packed +pie +radix-tree ratelimit recvmmsg +simdzone ssl systemd +tfo year2038"

RDEPEND="
	acct-group/nsd
	acct-user/nsd
	dnstap? (
		dev-libs/fstrm
		dev-libs/protobuf-c
	)
	libevent? ( dev-libs/libevent )
	munin? ( net-analyzer/munin )
	ssl? ( dev-libs/openssl:0= )
	systemd? ( sys-apps/systemd )
"
DEPEND="${RDEPEND}"
BDEPEND="
	app-alternatives/lex
	app-alternatives/yacc
	systemd? ( virtual/pkgconfig )
"

PATCHES=(
	"${FILESDIR}/${PN}-munin-gentoo-paths.patch"
)

NSD_CONFD_VER="1"		# Cur version of NSD's OpenRC conf.d file.
NSD_INITD_VER="2"		# Cur version of NSD's OpenRC init.d script.
NSD_TMPFILESD_VER="1"		# Cur version of NSD's tmpfiles.d config.

NSD_DBDIR="/var/db/nsd"		# Default dir for NSD's databases.
NSD_ZNDIR="/var/lib/nsd"	# Default dir for NSD's zone files.

src_prepare() {
	default

	# Required to get correct pkg-config macros with USE="systemd".
	# See bugs #663618 & #758050.
	eautoreconf
}

src_configure() {
	local myconf=(
		$(use_enable bind8-stats)
		$(use_enable bind8-stats zone-stats)
		$(use_enable debug checking)
		$(use_enable default-znow relro-now)
		$(use_enable dnstap)
		$(use_enable ipv6)
		$(use_enable largefile)
		$(use_enable lto flto)
		$(use_enable memclean)
		$(use_enable minimal-responses)
		$(use_enable mmap)
		$(use_enable nsec3)
		$(use_enable packed)
		$(use_enable pie)
		$(use_enable radix-tree)
		$(use_enable ratelimit)
		$(use_enable recvmmsg)
		$(use_enable systemd)
		$(use_enable tfo tcp-fastopen)
		$(use_with libevent)
		$(use_with ssl)

		--with-dbfile="${EPREFIX}${NSD_DBDIR}/nsd.db"
		--with-logfile="${EPREFIX}/var/log/nsd.log"
		--with-pidfile="${EPREFIX}/run/nsd.pid"
		--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

	# This configure switch is only available on a glibc-based system.
	if use elibc_glibc; then
		myconf+=( $(use_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 "${FILESDIR}/nsd.initd-r${NSD_INITD_VER}" nsd
	newconfd "${FILESDIR}/nsd.confd-r${NSD_CONFD_VER}" nsd
	newtmpfiles "${FILESDIR}/nsd.tmpfilesd-r${NSD_TMPFILESD_VER}" 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"

	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}"
}