在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, libsslliburculibuvperlpkg-config / pkgconfig / pkgconfBIND 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)automakelibtool要查看配置选项的完整列表,请运行 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。)