在Unix或Linux系统上搭建,使用:
$ autoreconf -fi ### (only if building from the git repository)
$ ./configure
$ make
有几个环境变量会影响编译,可以在运行 configure
之前设置它们。最重要的是:
Variable | Description |
---|---|
CC | The C compiler to use. configure tries to figure out the right one for supported systems.要使用的C编译器。 configure 试图为支持的系统找出正确的配置。 |
CFLAGS | The C compiler flags. Defaults to include -g and/or -O2 as supported by the compiler. Please include -g if CFLAGS needs to be set.C编译器标志。默认包括编译器支持的 -g 和/或 -O2 。如果需要设置CFLAGS ,请包括 -g 。 |
LDFLAGS | The linker flags. Defaults to an empty string. 链接器标记。默认为空字符串。 |
影响构建的其他环境变量列在 configure
帮助文本的末尾,可以通过运行以下命令获得:
$ ./configure --help
如果使用Emacs, make tags
命令可能会有所帮助。
要构建BIND 9,必须安装以下软件包:
libcrypto
, libssl
liburcu
libuv
perl
pkg-config
/ pkgconfig
/ pkgconf
BIND 9.20要求 libuv
1.34.0或更高;建议使用 libuv
>=1.40.0。不支持使用 libuv
1.35.0或1.36.0编译或运行,因为这可能会导致UDP接收代码中的断言(assertion)失败。在旧系统上,需要从EPEL、PPA或其他本地源安装更新的 libuv
包。另一种选择是从源代码构建并安装 libuv
。
需要OpenSSL 1.0.2e或更高版本。如果OpenSSL库安装在非标准位置,请在配置命令行上使用 --with-OpenSSL=<prefix>
指定前缀。要将PKCS#11硬件服务模块用于加密操作,必须编译并使用OpenSC项目中的 engine_pkcs11
。
用户空间RCU库 liburcu
(https://liburcu.org/) 用于无锁(lock-free)数据结构和并发安全内存回收(reclamation)。
在Linux上,使用 libcap
库在用户空间中管理进程功能 (https://git.kernel.org/pub/scm/libs/libcap/libcap.git/) ,可以通过 libcap-dev
或 libcap-devel
软件包安装在大多数Linux系统上。
要从git存储库构建BIND,还必须安装以下工具:
autoconf
(包括 autoreconf
)automake
libtool
要查看配置选项的完整列表,请运行 configure --help
。
为了提高性能,使用 jemalloc
库(https://jemalloc.net/)强烈推荐。使用时需要4.0.0或更高版本。
要支持 DNS over HTTPS(DoH),服务器必须与 libnghttp2
链接(https://nghttp2.org/)。如果库不可用,可以使用 --disable-doh
来禁用doh支持。
为了支持HTTP统计通道,服务器必须与以下库中的至少一个链接: libxml2
(https://gitlab.gnome.org/GNOME/libxml2/-/wikis/home)或 json-c
(https://github.com/json-c/json-c)。如果这些安装在非标准位置,则:
libxml2
,使用 --with-libxml2=/prefix
指定后缀json-c
,调整 PKG_CONFIG_PATH
为了支持HTTP统计通道上的压缩,服务器必须与 zlib
链接(https://zlib.net/)。如果安装在非标准位置,请使用 --with-zlib=/prefix
指定前缀。
为了支持在LMDB数据库中存储运行时添加的区域的配置数据,服务器必须与 liblmdb
链接(https://github.com/LMDB/lmdb)。 如果安装在非标准位置,请使用 --with-lmdb=/prefix
指定前缀。
要支持MaxMind GeoIP2基于位置的ACL,服务器必须与 libmaxminddb
链接(https://maxmind.github.io/libmaxminddb/)。如果找到库,默认情况下会启用此选项;如果库安装在非标准位置,请使用 --with-maxminddb=/prefix
指定前缀。GeoIP2支持可以通过 --disable-geoip
关闭。
对于DNSTAP数据包记录, libfstr
(https://github.com/farsightsec/fstrm)以及 libprotobuf-c
(https://protobuf.dev)必须安装,BIND必须配置 --enable-dnstap
。
为了在 dig
中支持国际化域名, libidn2
(https://www.gnu.org/software/libidn/#libidn2)必须安装。如果库安装在非标准位置,请使用 --with-libidn2=/prefix
指定前缀或调整 PKG_CONFIG_PATH
。
对于 nsupdate
和 nslookup
中的行编辑,可以使用 readline
(https://tiswww.case.edu/php/chet/readline/rltop.html)或 libedit
库(https://www.thrysoee.dk/editline/)必须安装。如果这些安装在非标准位置,请调整 PKG_CONFIG_PATH
。默认情况下使用 readline
,可以使用 --withreadline=libedit
显式请求 libedit
。
在某些平台上,需要明确请求大文件支持来处理大于2GB的文件。这可以通过在 configure
命令行上使用 --enable-largefile
来完成。
通过在配置命令行上指定 --enable-fixed-rrset
或 --disable-fixed-rrset
,可以启用或禁用对“fixed”RRset顺序选项的支持。默认情况下,禁用固定RRset顺序以减少内存占用。
--enable-querytrace
选项使 named
在处理每个查询时记录每个步骤。 --enable-singletrace
选项启用相同的详细跟踪,但允许通过将查询ID设置为0来单独跟踪单个查询。这些选项只应在调试时启用,因为它们对查询性能有重大的负面影响。
make install
安装 named
和各种BIND 9库。默认情况下,安装在 /usr/local 中,但在运行 configure
时可以使用 --prefix
选项进行更改。
可以指定选项 --sysconfdir
来设置默认情况下 named.conf
等配置文件所在的目录; --localstatedir
可用于设置 run/named.pid 的默认父目录。 --sysconfdir
默认为 $prefix/etc, --localstatedir
默认为 $prefix/var 。
在macOS上构建假定已安装“Xcode命令工具(Command Tools for Xcode”)”。这些可以从以下网址下载https://developer.apple.com/xcode/resources/。或者,如果已经安装了Xcode,只需运行 xcode-select -install
即可。(请注意,访问下载页面可能需要Apple ID。)