10. Building BIND 9
To build on a Unix or Linux system, use:
$ meson setup build-dir
$ meson compile -C build-dir
Several environment variables affect compilation, and they can be set
before running meson setup
. The most significant ones are:
Variable |
Description |
---|---|
|
The C compiler to use. |
|
The C linker to use. |
|
The C compiler flags. Defaults to an empty string. |
|
The linker flags. Defaults to an empty string. |
10.1. Required Libraries
To build BIND 9, the following packages must be installed:
a C11-compliant compiler
meson
libcrypto
,libssl
liburcu
libuv
perl
pkg-config
/pkgconfig
/pkgconf
BIND 9 requires meson
0.61 or higher to configure and ninja
/samurai
to build from source.
BIND 9.20 requires libuv
1.37.0 or higher; using libuv
>= 1.40.0 is
recommended. On older systems an updated libuv
package needs to be
installed from sources, such as EPEL, PPA, or other native sources. The other
option is to build and install libuv
from source.
OpenSSL 1.1.1 or newer is required. If the OpenSSL library is installed
in a nonstandard location adjust PKG_CONFIG_PATH
or use the option
--pkg-config-path
.
To use a PKCS#11 hardware service module for cryptographic operations, PKCS#11 Provider (https://github.com/latchset/pkcs11-provider/tree/main) must be compiled, configured and used directly in the OpenSSL 3.x.
The Userspace RCU library liburcu
(https://liburcu.org/) is used
for lock-free data structures and concurrent safe memory reclamation.
On Linux, process capabilities are managed in user space using the
libcap
library
(https://git.kernel.org/pub/scm/libs/libcap/libcap.git/), which can be
installed on most Linux systems via the libcap-dev
or
libcap-devel
package.
10.2. Optional Features
To see a full list of configuration options, run meson configure
.
To improve performance, use of the jemalloc
library
(https://jemalloc.net/) is strongly recommended. Version 4.0.0 or newer is
required when in use.
To support DNS over HTTPS (DoH), the server must be linked
with libnghttp2
(https://nghttp2.org/). If the library is
unavailable, -Ddoh=disabled
can be used to disable DoH support.
To support the HTTP statistics channel, the server must be linked with
at least one of the following libraries: libxml2
(https://gitlab.gnome.org/GNOME/libxml2/-/wikis/home) or json-c
(https://github.com/json-c/json-c). If these are installed at a nonstandard
location, adjust PKG_CONFIG_PATH
or use the option --pkg-config-path
.
To support compression on the HTTP statistics channel, the server must
be linked against zlib
(https://zlib.net/). If this is installed in
a nonstandard location, adjust PKG_CONFIG_PATH
or use the option
--pkg-config-path
. Compression can be switched off with
-Dzlib=disabled
.
To support storing configuration data for runtime-added zones in an LMDB
database, the server must be linked with liblmdb
(https://github.com/LMDB/lmdb). If this is installed in a nonstandard
location, adjust PKG_CONFIG_PATH
or use the option --pkg-config-path
.
To support MaxMind GeoIP2 location-based ACLs, the server must be linked
with libmaxminddb
(https://maxmind.github.io/libmaxminddb/). This is
turned on by default if the library is found; if the library is installed in
a nonstandard location, adjust PKG_CONFIG_PATH
or use the option
--pkg-config-path
. GeoIP2 support can be switched off with
-Dgeoip=disabled
.
For DNSTAP packet logging, libfstrm
(https://github.com/farsightsec/fstrm) and libprotobuf-c
(https://protobuf.dev) must be installed, and
BIND must be configured with -Ddnstap=enabled
.
To support internationalized domain names in dig
, libidn2
(https://www.gnu.org/software/libidn/#libidn2) must be installed. If the
library is installed in a nonstandard location, adjust PKG_CONFIG_PATH
or
use the option --pkg-config-path
. IDN support can be switched off with
-Didn=disabled
.
For line editing in nsupdate
and nslookup
,
the libedit
library (https://www.thrysoee.dk/editline/) must be
installed. If these are installed at a nonstandard location, adjust
PKG_CONFIG_PATH
or use the option --pkg-config-path
.
The -Dtrace-logging=query
option causes named
to log every step
while processing every query. The -Dtrace-logging=query,single
option turns
on the same verbose tracing, but allows an individual query to be
separately traced by setting its query ID to 0. These options should
only be enabled when debugging, because they have a significant negative
impact on query performance.
meson install
installs named
and the various BIND 9 libraries. By
default, installation is into /usr/local, but this can be changed with
the --prefix
option when running meson setup
.
The option --sysconfdir
can be specified to set the directory where
configuration files such as named.conf
go by default;
--localstatedir
can be used to set the default parent directory of
run/named.pid
. --sysconfdir
defaults to $prefix/etc
and
--localstatedir
defaults to $prefix/var
.
10.3. macOS
Building on macOS assumes that the “Command Tools for Xcode” are
installed. These can be downloaded from
https://developer.apple.com/xcode/resources/ or, if Xcode is already
installed, simply run xcode-select --install
. (Note that an Apple ID
may be required to access the download page.)
10.4. Packager Builds
Packagers are recommended to use the plain
optimization level or the
plain
build type when setting up the build directory. This will also
disable the default hardening flags and any such flag must be set with
CFLAGS
. The top meson.build
file in the source tree can be
inspected for recommended flags.