• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..03-May-2022-

.gitlab/issue_templates/H03-Jul-2020-12581

bin/H03-May-2022-266,979219,095

cocci/H03-Jul-2020-579442

contrib/H03-Jul-2020-26,37517,549

doc/H03-Jul-2020-26,73622,616

docutil/H03-Jul-2020-137114

fuzz/H03-Jul-2020-492330

lib/H03-Jul-2020-385,346260,654

m4/H03-Jul-2020-10,0009,029

make/H03-Jul-2020-634457

unit/H03-Jul-2020-11879

util/H03-Jul-2020-165106

win32utils/H03-May-2022-4,1233,641

.clang-formatH A D03-Jul-20202 KiB7473

.clang-format.headersH A D03-Jul-20201.7 KiB6261

.dir-locals.elH A D03-Jul-20203.7 KiB11591

.gitattributesH A D03-Jul-2020288 1210

.gitlab-ci.ymlH A D03-Jul-202034.9 KiB1,4061,216

.pylintrcH A D03-Jul-2020187 87

.uncrustify.cfgH A D03-Jul-202062.7 KiB1,4351,011

CHANGESH A D03-Jul-2020603.4 KiB18,18312,590

CODE_OF_CONDUCTH A D03-Jul-20204.2 KiB8071

CODE_OF_CONDUCT.mdH A D03-Jul-20204.2 KiB7264

CONTRIBUTINGH A D03-Jul-20207.8 KiB197144

CONTRIBUTING.mdH A D03-Jul-20208.6 KiB204145

COPYRIGHTH A D03-Jul-202018.1 KiB370290

HISTORYH A D03-Jul-202031.7 KiB601565

HISTORY.mdH A D03-Jul-202031.4 KiB618573

KyuafileH A D03-Jul-202055 53

LICENSEH A D03-Jul-202015.5 KiB363265

Makefile.inH A D03-May-20223.5 KiB11377

OPTIONSH A D03-Jul-20201.5 KiB2925

OPTIONS.mdH A D03-Jul-20201.7 KiB2815

PLATFORMSH A D03-Jul-20203.5 KiB10078

PLATFORMS.mdH A D03-Jul-20203.9 KiB10675

READMEH A D03-Jul-202016.4 KiB384300

README.mdH A D03-Jul-202018.4 KiB396305

aclocal.m4H A D03-Jul-202014.2 KiB388344

autogen.shH A D03-Jul-2020472 141

bind.keysH A D03-Jul-20201.9 KiB3937

bind.keys.hH A D03-Jul-20202.2 KiB4544

config.guessH A D03-Jul-202044.7 KiB1,5691,356

config.h.inH A D03-Jul-202017.9 KiB660454

config.h.win32H A D03-Jul-20209.4 KiB379299

config.subH A D03-Jul-202034.8 KiB1,7941,656

config.threads.inH A D03-Jul-20202.8 KiB126119

configureH A D03-Jul-2020719.1 KiB26,30021,403

configure.acH A D03-May-202283.2 KiB2,9662,651

dangerfile.pyH A D03-Jul-20208.9 KiB20084

install-shH A D03-Jul-20205.4 KiB251152

ltmain.shH A D03-Jul-2020316.5 KiB11,1487,979

mkinstalldirsH A D03-Jul-2020668 3923

srcidH A D03-Jul-202014 21

versionH A D03-Jul-2020198 1211

README

1README
2
3BIND 9
4
5Contents
6
7 1. Introduction
8 2. Reporting bugs and getting help
9 3. Contributing to BIND
10 4. BIND 9.16 features
11 5. Building BIND
12 6. macOS
13 7. Dependencies
14 8. Compile-time options
15 9. Automated testing
1610. Documentation
1711. Change log
1812. Acknowledgments
19
20Introduction
21
22BIND (Berkeley Internet Name Domain) is a complete, highly portable
23implementation of the DNS (Domain Name System) protocol.
24
25The BIND name server, named, is able to serve as an authoritative name
26server, recursive resolver, DNS forwarder, or all three simultaneously. It
27implements views for split-horizon DNS, automatic DNSSEC zone signing and
28key management, catalog zones to facilitate provisioning of zone data
29throughout a name server constellation, response policy zones (RPZ) to
30protect clients from malicious data, response rate limiting (RRL) and
31recursive query limits to reduce distributed denial of service attacks,
32and many other advanced DNS features. BIND also includes a suite of
33administrative tools, including the dig and delv DNS lookup tools,
34nsupdate for dynamic DNS zone updates, rndc for remote name server
35administration, and more.
36
37BIND 9 began as a complete re-write of the BIND architecture that was used
38in versions 4 and 8. Internet Systems Consortium (https://www.isc.org), a
39501(c)(3) public benefit corporation dedicated to providing software and
40services in support of the Internet infrastructure, developed BIND 9 and
41is responsible for its ongoing maintenance and improvement. BIND is open
42source software licensed under the terms of the Mozilla Public License,
43version 2.0.
44
45For a summary of features introduced in past major releases of BIND, see
46the file HISTORY.
47
48For a detailed list of changes made throughout the history of BIND 9, see
49the file CHANGES. See below for details on the CHANGES file format.
50
51For up-to-date versions and release notes, see https://www.isc.org/
52download/.
53
54For information about supported platforms, see PLATFORMS.
55
56Reporting bugs and getting help
57
58To report non-security-sensitive bugs or request new features, you may
59open an Issue in the BIND 9 project on the ISC GitLab server at https://
60gitlab.isc.org/isc-projects/bind9.
61
62Please note that, unless you explicitly mark the newly created Issue as
63"confidential", it will be publicly readable. Please do not include any
64information in bug reports that you consider to be confidential unless the
65issue has been marked as such. In particular, if submitting the contents
66of your configuration file in a non-confidential Issue, it is advisable to
67obscure key secrets: this can be done automatically by using
68named-checkconf -px.
69
70If the bug you are reporting is a potential security issue, such as an
71assertion failure or other crash in named, please do NOT use GitLab to
72report it. Instead, send mail to security-officer@isc.org using our
73OpenPGP key to secure your message. (Information about OpenPGP and links
74to our key can be found at https://www.isc.org/pgpkey.) Please do not
75discuss the bug on any public mailing list.
76
77For a general overview of ISC security policies, read the Knowledge Base
78article at https://kb.isc.org/docs/aa-00861.
79
80Professional support and training for BIND are available from ISC at
81https://www.isc.org/support.
82
83To join the BIND Users mailing list, or view the archives, visit https://
84lists.isc.org/mailman/listinfo/bind-users.
85
86If you're planning on making changes to the BIND 9 source code, you may
87also want to join the BIND Workers mailing list, at https://lists.isc.org/
88mailman/listinfo/bind-workers.
89
90Contributing to BIND
91
92ISC maintains a public git repository for BIND; details can be found at
93http://www.isc.org/git/.
94
95Information for BIND contributors can be found in the following files: -
96General information: CONTRIBUTING.md - Code of Conduct: CODE_OF_CONDUCT.md
97- BIND 9 code style: doc/dev/style.md - BIND architecture and developer
98guide: doc/dev/dev.md
99
100Patches for BIND may be submitted as merge requests in the ISC GitLab
101server at at https://gitlab.isc.org/isc-projects/bind9/merge_requests.
102
103By default, external contributors don't have ability to fork BIND in the
104GitLab server, but if you wish to contribute code to BIND, you may request
105permission to do so. Thereafter, you can create git branches and directly
106submit requests that they be reviewed and merged.
107
108If you prefer, you may also submit code by opening a GitLab Issue and
109including your patch as an attachment, preferably generated by git
110format-patch.
111
112BIND 9.16 features
113
114BIND 9.16 is the current stable branch of BIND 9. It includes all changes
115from the 9.15 development branch, updating the previous stable branch,
1169.14. New features include:
117
118  * New dnssec-policy statement to configure a key and signing policy for
119    zones, enabling automatic key regeneration and rollover.
120  * New network manager based on libuv.
121  * Added support for the new GeoIP2 geolocation API, libmaxminddb.
122  * Improved DNSSEC trust anchor configuration using the trust-anchors
123    statement, permitting configuration of trust anchors in DS as well as
124    DNSKEY format.
125  * YAML output for dig, mdig, and delv.
126
127Building BIND
128
129Minimally, BIND requires a UNIX or Linux system with an ANSI C compiler,
130basic POSIX support, and a 64-bit integer type. BIND also requires the
131libuv asynchronous I/O library, and a cryptography provider library such
132as OpenSSL or a hardware service module supporting PKCS#11. On Linux, BIND
133requires the libcap library to set process privileges, though this
134requirement can be overridden by disabling capability support at compile
135time. See Compile-time options below for details on other libraries that
136may be required to support optional features.
137
138Successful builds have been observed on many versions of Linux and UNIX,
139including RHEL/CentOS, Fedora, Debian, Ubuntu, SLES, openSUSE, Slackware,
140Alpine, FreeBSD, NetBSD, OpenBSD, macOS, Solaris, OpenIndiana, OmniOS CE,
141HP-UX, and OpenWRT.
142
143BIND is also available for Windows Server 2012 R2 and higher. See
144win32utils/build.txt for details on building for Windows systems.
145
146To build on a UNIX or Linux system, use:
147
148    $ ./configure
149    $ make
150
151If you're planning on making changes to the BIND 9 source, you should run
152make depend. If you're using Emacs, you might find make tags helpful.
153
154Several environment variables that can be set before running configure
155will affect compilation. Significant ones are:
156
157   Variable                            Description
158CC             The C compiler to use. configure tries to figure out the
159               right one for supported systems.
160               C compiler flags. Defaults to include -g and/or -O2 as
161CFLAGS         supported by the compiler. Please include '-g' if you need
162               to set CFLAGS.
163               System header file directories. Can be used to specify
164STD_CINCLUDES  where add-on thread or IPv6 support is, for example.
165               Defaults to empty string.
166               Any additional preprocessor symbols you want defined.
167STD_CDEFINES   Defaults to empty string. For a list of possible settings,
168               see the file OPTIONS.
169LDFLAGS        Linker flags. Defaults to empty string.
170BUILD_CC       Needed when cross-compiling: the native C compiler to use
171               when building for the target system.
172BUILD_CFLAGS   CFLAGS for the target system during cross-compiling.
173BUILD_CPPFLAGS CPPFLAGS for the target system during cross-compiling.
174BUILD_LDFLAGS  LDFLAGS for the target system during cross-compiling.
175BUILD_LIBS     LIBS for the target system during cross-compiling.
176
177Additional environment variables affecting the build are listed at the end
178of the configure help text, which can be obtained by running the command:
179
180$ ./configure --help
181
182macOS
183
184Building on macOS assumes that the "Command Tools for Xcode" is installed.
185This can be downloaded from https://developer.apple.com/download/more/ or,
186if you have Xcode already installed, you can run xcode-select --install.
187(Note that an Apple ID may be required to access the download page.)
188
189Dependencies
190
191Portions of BIND that are written in Python, including dnssec-keymgr,
192dnssec-coverage, dnssec-checkds, and some of the system tests, require the
193argparse, ply and distutils.core modules to be available. argparse is a
194standard module as of Python 2.7 and Python 3.2. ply is available from
195https://pypi.python.org/pypi/ply. distutils.core is required for
196installation.
197
198Compile-time options
199
200To see a full list of configuration options, run configure --help.
201
202To build shared libraries, specify --with-libtool on the configure command
203line.
204
205For the server to support DNSSEC, you need to build it with crypto
206support. To use OpenSSL, you should have OpenSSL 1.0.2e or newer
207installed. If the OpenSSL library is installed in a nonstandard location,
208specify the prefix using --with-openssl=<PREFIX> on the configure command
209line. To use a PKCS#11 hardware service module for cryptographic
210operations, specify the path to the PKCS#11 provider library using
211--with-pkcs11=<PREFIX>, and configure BIND with --enable-native-pkcs11.
212
213To support the HTTP statistics channel, the server must be linked with at
214least one of the following libraries: libxml2 http://xmlsoft.org or json-c
215https://github.com/json-c/json-c. If these are installed at a nonstandard
216location, then:
217
218  * for libxml2, specify the prefix using --with-libxml2=/prefix,
219  * for json-c, adjust PKG_CONFIG_PATH.
220
221To support compression on the HTTP statistics channel, the server must be
222linked against libzlib. If this is installed in a nonstandard location,
223specify the prefix using --with-zlib=/prefix.
224
225To support storing configuration data for runtime-added zones in an LMDB
226database, the server must be linked with liblmdb. If this is installed in
227a nonstandard location, specify the prefix using with-lmdb=/prefix.
228
229To support MaxMind GeoIP2 location-based ACLs, the server must be linked
230with libmaxminddb. This is turned on by default if the library is found;
231if the library is installed in a nonstandard location, specify the prefix
232using --with-maxminddb=/prefix. GeoIP2 support can be switched off with
233--disable-geoip.
234
235For DNSTAP packet logging, you must have installed libfstrm https://
236github.com/farsightsec/fstrm and libprotobuf-c https://
237developers.google.com/protocol-buffers, and BIND must be configured with
238--enable-dnstap.
239
240Certain compiled-in constants and default settings can be decreased to
241values better suited to small machines, e.g. OpenWRT boxes, by specifying
242--with-tuning=small on the configure command line. This will decrease
243memory usage by using smaller structures, but will degrade performance.
244
245On Linux, process capabilities are managed in user space using the libcap
246library, which can be installed on most Linux systems via the libcap-dev
247or libcap-devel package. Process capability support can also be disabled
248by configuring with --disable-linux-caps.
249
250On some platforms it is necessary to explicitly request large file support
251to handle files bigger than 2GB. This can be done by using
252--enable-largefile on the configure command line.
253
254Support for the "fixed" rrset-order option can be enabled or disabled by
255specifying --enable-fixed-rrset or --disable-fixed-rrset on the configure
256command line. By default, fixed rrset-order is disabled to reduce memory
257footprint.
258
259The --enable-querytrace option causes named to log every step of
260processing every query. This should only be enabled when debugging,
261because it has a significant negative impact on query performance.
262
263make install will install named and the various BIND 9 libraries. By
264default, installation is into /usr/local, but this can be changed with the
265--prefix option when running configure.
266
267You may specify the option --sysconfdir to set the directory where
268configuration files like named.conf go by default, and --localstatedir to
269set the default parent directory of run/named.pid. --sysconfdir defaults
270to $prefix/etc and --localstatedir defaults to $prefix/var.
271
272Automated testing
273
274A system test suite can be run with make test. The system tests require
275you to configure a set of virtual IP addresses on your system (this allows
276multiple servers to run locally and communicate with one another). These
277IP addresses can be configured by running the command bin/tests/system/
278ifconfig.sh up as root.
279
280Some tests require Perl and the Net::DNS and/or IO::Socket::INET6 modules,
281and will be skipped if these are not available. Some tests require Python
282and the dnspython module and will be skipped if these are not available.
283See bin/tests/system/README for further details.
284
285Unit tests are implemented using the CMocka unit testing framework. To
286build them, use configure --with-cmocka. Execution of tests is done by the
287Kyua test execution engine; if the kyua command is available, then unit
288tests can be run via make test or make unit.
289
290Documentation
291
292The BIND 9 Administrator Reference Manual is included with the source
293distribution, in DocBook XML, HTML, and PDF format, in the doc/arm
294directory.
295
296Some of the programs in the BIND 9 distribution have man pages in their
297directories. In particular, the command line options of named are
298documented in bin/named/named.8.
299
300Frequently (and not-so-frequently) asked questions and their answers can
301be found in the ISC Knowledge Base at https://kb.isc.org.
302
303Additional information on various subjects can be found in other README
304files throughout the source tree.
305
306Change log
307
308A detailed list of all changes that have been made throughout the
309development BIND 9 is included in the file CHANGES, with the most recent
310changes listed first. Change notes include tags indicating the category of
311the change that was made; these categories are:
312
313   Category                            Description
314[func]         New feature
315[bug]          General bug fix
316[security]     Fix for a significant security flaw
317[experimental] Used for new features when the syntax or other aspects of
318               the design are still in flux and may change
319[port]         Portability enhancement
320[maint]        Updates to built-in data such as root server addresses and
321               keys
322[tuning]       Changes to built-in configuration defaults and constants to
323               improve performance
324[performance]  Other changes to improve server performance
325[protocol]     Updates to the DNS protocol such as new RR types
326[test]         Changes to the automatic tests, not affecting server
327               functionality
328[cleanup]      Minor corrections and refactoring
329[doc]          Documentation
330[contrib]      Changes to the contributed tools and libraries in the
331               'contrib' subdirectory
332               Used in the master development branch to reserve change
333[placeholder]  numbers for use in other branches, e.g. when fixing a bug
334               that only exists in older releases
335
336In general, [func] and [experimental] tags will only appear in new-feature
337releases (i.e., those with version numbers ending in zero). Some new
338functionality may be backported to older releases on a case-by-case basis.
339All other change types may be applied to all currently-supported releases.
340
341Bug report identifiers
342
343Most notes in the CHANGES file include a reference to a bug report or
344issue number. Prior to 2018, these were usually of the form [RT #NNN] and
345referred to entries in the "bind9-bugs" RT database, which was not open to
346the public. More recent entries use the form [GL #NNN] or, less often, [GL
347!NNN], which, respectively, refer to issues or merge requests in the
348GitLab database. Most of these are publicly readable, unless they include
349information which is confidential or security sensitive.
350
351To look up a GitLab issue by its number, use the URL https://
352gitlab.isc.org/isc-projects/bind9/issues/NNN. To look up a merge request,
353use https://gitlab.isc.org/isc-projects/bind9/merge_requests/NNN.
354
355In rare cases, an issue or merge request number may be followed with the
356letter "P". This indicates that the information is in the private ISC
357GitLab instance, which is not visible to the public.
358
359Acknowledgments
360
361  * The original development of BIND 9 was underwritten by the following
362    organizations:
363
364      Sun Microsystems, Inc.
365      Hewlett Packard
366      Compaq Computer Corporation
367      IBM
368      Process Software Corporation
369      Silicon Graphics, Inc.
370      Network Associates, Inc.
371      U.S. Defense Information Systems Agency
372      USENIX Association
373      Stichting NLnet - NLnet Foundation
374      Nominum, Inc.
375
376  * This product includes software developed by the OpenSSL Project for
377    use in the OpenSSL Toolkit. http://www.OpenSSL.org/
378
379  * This product includes cryptographic software written by Eric Young
380    (eay@cryptsoft.com)
381
382  * This product includes software written by Tim Hudson
383    (tjh@cryptsoft.com)
384

README.md

1<!--
2 - Copyright (C) Internet Systems Consortium, Inc. ("ISC")
3 -
4 - This Source Code Form is subject to the terms of the Mozilla Public
5 - License, v. 2.0. If a copy of the MPL was not distributed with this
6 - file, You can obtain one at http://mozilla.org/MPL/2.0/.
7 -
8 - See the COPYRIGHT file distributed with this work for additional
9 - information regarding copyright ownership.
10-->
11# BIND 9
12
13### Contents
14
151. [Introduction](#intro)
161. [Reporting bugs and getting help](#help)
171. [Contributing to BIND](#contrib)
181. [BIND 9.16 features](#features)
191. [Building BIND](#build)
201. [macOS](#macos)
211. [Dependencies](#dependencies)
221. [Compile-time options](#opts)
231. [Automated testing](#testing)
241. [Documentation](#doc)
251. [Change log](#changes)
261. [Acknowledgments](#ack)
27
28### <a name="intro"/> Introduction
29
30BIND (Berkeley Internet Name Domain) is a complete, highly portable
31implementation of the DNS (Domain Name System) protocol.
32
33The BIND name server, `named`, is able to serve as an authoritative name
34server, recursive resolver, DNS forwarder, or all three simultaneously.  It
35implements views for split-horizon DNS, automatic DNSSEC zone signing and
36key management, catalog zones to facilitate provisioning of zone data
37throughout a name server constellation, response policy zones (RPZ) to
38protect clients from malicious data, response rate limiting (RRL) and
39recursive query limits to reduce distributed denial of service attacks,
40and many other advanced DNS features.  BIND also includes a suite of
41administrative tools, including the `dig` and `delv` DNS lookup tools,
42`nsupdate` for dynamic DNS zone updates, `rndc` for remote name server
43administration, and more.
44
45BIND 9 began as a complete re-write of the BIND architecture that was
46used in versions 4 and 8.  Internet Systems Consortium
47([https://www.isc.org](https://www.isc.org)), a 501(c)(3) public benefit
48corporation dedicated to providing software and services in support of the
49Internet infrastructure, developed BIND 9 and is responsible for its
50ongoing maintenance and improvement.  BIND is open source software
51licensed under the terms of the Mozilla Public License, version 2.0.
52
53For a summary of features introduced in past major releases of BIND,
54see the file [HISTORY](HISTORY.md).
55
56For a detailed list of changes made throughout the history of BIND 9, see
57the file [CHANGES](CHANGES). See [below](#changes) for details on the
58CHANGES file format.
59
60For up-to-date versions and release notes, see
61[https://www.isc.org/download/](https://www.isc.org/download/).
62
63For information about supported platforms, see [PLATFORMS](PLATFORMS.md).
64
65### <a name="help"/> Reporting bugs and getting help
66
67To report non-security-sensitive bugs or request new features, you may
68open an Issue in the BIND 9 project on the
69[ISC GitLab server](https://gitlab.isc.org) at
70[https://gitlab.isc.org/isc-projects/bind9](https://gitlab.isc.org/isc-projects/bind9).
71
72Please note that, unless you explicitly mark the newly created Issue as
73"confidential", it will be publicly readable.  Please do not include any
74information in bug reports that you consider to be confidential unless
75the issue has been marked as such.  In particular, if submitting the
76contents of your configuration file in a non-confidential Issue, it is
77advisable to obscure key secrets: this can be done automatically by
78using `named-checkconf -px`.
79
80If the bug you are reporting is a potential security issue, such as an
81assertion failure or other crash in `named`, please do *NOT* use GitLab to
82report it. Instead, send mail to
83[security-officer@isc.org](mailto:security-officer@isc.org) using our
84OpenPGP key to secure your message. (Information about OpenPGP and links
85to our key can be found at
86[https://www.isc.org/pgpkey](https://www.isc.org/pgpkey).) Please do not
87discuss the bug on any public mailing list.
88
89For a general overview of ISC security policies, read the Knowledge Base
90article at [https://kb.isc.org/docs/aa-00861](https://kb.isc.org/docs/aa-00861).
91
92Professional support and training for BIND are available from
93ISC at [https://www.isc.org/support](https://www.isc.org/support).
94
95To join the __BIND Users__ mailing list, or view the archives, visit
96[https://lists.isc.org/mailman/listinfo/bind-users](https://lists.isc.org/mailman/listinfo/bind-users).
97
98If you're planning on making changes to the BIND 9 source code, you
99may also want to join the __BIND Workers__ mailing list, at
100[https://lists.isc.org/mailman/listinfo/bind-workers](https://lists.isc.org/mailman/listinfo/bind-workers).
101
102### <a name="contrib"/> Contributing to BIND
103
104ISC maintains a public git repository for BIND; details can be found
105at [http://www.isc.org/git/](http://www.isc.org/git/).
106
107Information for BIND contributors can be found in the following files:
108- General information: [CONTRIBUTING.md](CONTRIBUTING.md)
109- Code of Conduct: [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)
110- BIND 9 code style: [doc/dev/style.md](doc/dev/style.md)
111- BIND architecture and developer guide: [doc/dev/dev.md](doc/dev/dev.md)
112
113Patches for BIND may be submitted as
114[merge requests](https://gitlab.isc.org/isc-projects/bind9/merge_requests)
115in the [ISC GitLab server](https://gitlab.isc.org) at
116at [https://gitlab.isc.org/isc-projects/bind9/merge_requests](https://gitlab.isc.org/isc-projects/bind9/merge_requests).
117
118By default, external contributors don't have ability to fork BIND in the
119GitLab server, but if you wish to contribute code to BIND, you may request
120permission to do so. Thereafter, you can create git branches and directly
121submit requests that they be reviewed and merged.
122
123If you prefer, you may also submit code by opening a
124[GitLab Issue](https://gitlab.isc.org/isc-projects/bind9/issues) and
125including your patch as an attachment, preferably generated by
126`git format-patch`.
127
128### <a name="features"/> BIND 9.16 features
129
130BIND 9.16 is the current stable branch of BIND 9. It includes all
131changes from the 9.15 development branch, updating the previous stable
132branch, 9.14. New features include:
133
134* New `dnssec-policy` statement to configure a key and signing policy
135  for zones, enabling automatic key regeneration and rollover.
136* New network manager based on `libuv`.
137* Added support for the new GeoIP2 geolocation API, `libmaxminddb`.
138* Improved DNSSEC trust anchor configuration using the `trust-anchors`
139  statement, permitting configuration of trust anchors in DS as well as
140  DNSKEY format.
141* YAML output for `dig`, `mdig`, and `delv`.
142
143### <a name="build"/> Building BIND
144
145Minimally, BIND requires a UNIX or Linux system with an ANSI C compiler,
146basic POSIX support, and a 64-bit integer type.  BIND also requires the
147`libuv` asynchronous I/O library, and a cryptography provider library
148such as OpenSSL or a hardware service module supporting PKCS#11. On
149Linux, BIND requires the `libcap` library to set process privileges,
150though this requirement can be overridden by disabling capability
151support at compile time. See [Compile-time options](#opts) below
152for details on other libraries that may be required to support
153optional features.
154
155Successful builds have been observed on many versions of Linux and
156UNIX, including RHEL/CentOS, Fedora, Debian, Ubuntu, SLES, openSUSE,
157Slackware, Alpine, FreeBSD, NetBSD, OpenBSD, macOS, Solaris,
158OpenIndiana, OmniOS CE, HP-UX, and OpenWRT.
159
160BIND is also available for Windows Server 2012 R2 and higher.  See
161`win32utils/build.txt` for details on building for Windows
162systems.
163
164To build on a UNIX or Linux system, use:
165
166		$ ./configure
167		$ make
168
169If you're planning on making changes to the BIND 9 source, you should run
170`make depend`.  If you're using Emacs, you might find `make tags` helpful.
171
172Several environment variables that can be set before running `configure` will
173affect compilation.  Significant ones are:
174
175|Variable|Description |
176|--------------------|-----------------------------------------------|
177|`CC`|The C compiler to use.  `configure` tries to figure out the right one for supported systems.|
178|`CFLAGS`|C compiler flags.  Defaults to include -g and/or -O2 as supported by the compiler.  Please include '-g' if you need to set `CFLAGS`. |
179|`STD_CINCLUDES`|System header file directories.  Can be used to specify where add-on thread or IPv6 support is, for example.  Defaults to empty string.|
180|`STD_CDEFINES`|Any additional preprocessor symbols you want defined.  Defaults to empty string. For a list of possible settings, see the file [OPTIONS](OPTIONS.md).|
181|`LDFLAGS`|Linker flags. Defaults to empty string.|
182|`BUILD_CC`|Needed when cross-compiling: the native C compiler to use when building for the target system.|
183|`BUILD_CFLAGS`|`CFLAGS` for the target system during cross-compiling.|
184|`BUILD_CPPFLAGS`|`CPPFLAGS` for the target system during cross-compiling.|
185|`BUILD_LDFLAGS`|`LDFLAGS` for the target system during cross-compiling.|
186|`BUILD_LIBS`|`LIBS` for the target system during cross-compiling.|
187
188Additional environment variables affecting the build are listed at the
189end of the `configure` help text, which can be obtained by running the
190command:
191
192    $ ./configure --help
193
194#### <a name="macos"> macOS
195
196Building on macOS assumes that the "Command Tools for Xcode" is installed.
197This can be downloaded from
198[https://developer.apple.com/download/more/](https://developer.apple.com/download/more/)
199or, if you have Xcode already installed, you can run `xcode-select
200--install`.  (Note that an Apple ID may be required to access the download
201page.)
202
203### <a name="dependencies"/> Dependencies
204
205Portions of BIND that are written in Python, including
206`dnssec-keymgr`, `dnssec-coverage`, `dnssec-checkds`, and some of the
207system tests, require the `argparse`, `ply` and `distutils.core` modules
208to be available.
209`argparse` is a standard module as of Python 2.7 and Python 3.2.
210`ply` is available from [https://pypi.python.org/pypi/ply](https://pypi.python.org/pypi/ply).
211`distutils.core` is required for installation.
212
213#### <a name="opts"/> Compile-time options
214
215To see a full list of configuration options, run `configure --help`.
216
217To build shared libraries, specify `--with-libtool` on the `configure`
218command line.
219
220For the server to support DNSSEC, you need to build it with crypto support.
221To use OpenSSL, you should have OpenSSL 1.0.2e or newer installed.  If the
222OpenSSL library is installed in a nonstandard location, specify the prefix
223using `--with-openssl=<PREFIX>` on the configure command line. To use a
224PKCS#11 hardware service module for cryptographic operations, specify the
225path to the PKCS#11 provider library using `--with-pkcs11=<PREFIX>`, and
226configure BIND with `--enable-native-pkcs11`.
227
228To support the HTTP statistics channel, the server must be linked with at
229least one of the following libraries: `libxml2`
230[http://xmlsoft.org](http://xmlsoft.org) or `json-c`
231[https://github.com/json-c/json-c](https://github.com/json-c/json-c).
232If these are installed at a nonstandard location, then:
233
234* for `libxml2`, specify the prefix using `--with-libxml2=/prefix`,
235* for `json-c`, adjust `PKG_CONFIG_PATH`.
236
237To support compression on the HTTP statistics channel, the server must be
238linked against `libzlib`.  If this is installed in a nonstandard location,
239specify the prefix using `--with-zlib=/prefix`.
240
241To support storing configuration data for runtime-added zones in an LMDB
242database, the server must be linked with liblmdb. If this is installed in a
243nonstandard location, specify the prefix using `with-lmdb=/prefix`.
244
245To support MaxMind GeoIP2 location-based ACLs, the server must be linked
246with `libmaxminddb`. This is turned on by default if the library is
247found; if the library is installed in a nonstandard location,
248specify the prefix using `--with-maxminddb=/prefix`. GeoIP2 support
249can be switched off with `--disable-geoip`.
250
251For DNSTAP packet logging, you must have installed `libfstrm`
252[https://github.com/farsightsec/fstrm](https://github.com/farsightsec/fstrm)
253and `libprotobuf-c`
254[https://developers.google.com/protocol-buffers](https://developers.google.com/protocol-buffers),
255and BIND must be configured with `--enable-dnstap`.
256
257Certain compiled-in constants and default settings can be decreased to
258values better suited to small machines, e.g. OpenWRT boxes, by specifying
259`--with-tuning=small` on the `configure` command line. This will decrease
260memory usage by using smaller structures, but will degrade performance.
261
262On Linux, process capabilities are managed in user space using
263the `libcap` library, which can be installed on most Linux systems via
264the `libcap-dev` or `libcap-devel` package. Process capability support can
265also be disabled by configuring with `--disable-linux-caps`.
266
267On some platforms it is necessary to explicitly request large file support
268to handle files bigger than 2GB.  This can be done by using
269`--enable-largefile` on the `configure` command line.
270
271Support for the "fixed" rrset-order option can be enabled or disabled by
272specifying `--enable-fixed-rrset` or `--disable-fixed-rrset` on the
273configure command line.  By default, fixed rrset-order is disabled to
274reduce memory footprint.
275
276The `--enable-querytrace` option causes `named` to log every step of
277processing every query. This should only be enabled when debugging, because
278it has a significant negative impact on query performance.
279
280`make install` will install `named` and the various BIND 9 libraries.  By
281default, installation is into /usr/local, but this can be changed with the
282`--prefix` option when running `configure`.
283
284You may specify the option `--sysconfdir` to set the directory where
285configuration files like `named.conf` go by default, and `--localstatedir`
286to set the default parent directory of `run/named.pid`.   `--sysconfdir`
287defaults to `$prefix/etc` and `--localstatedir` defaults to `$prefix/var`.
288
289### <a name="testing"/> Automated testing
290
291A system test suite can be run with `make test`.  The system tests require
292you to configure a set of virtual IP addresses on your system (this allows
293multiple servers to run locally and communicate with one another).  These
294IP addresses can be configured by running the command
295`bin/tests/system/ifconfig.sh up` as root.
296
297Some tests require Perl and the `Net::DNS` and/or `IO::Socket::INET6` modules,
298and will be skipped if these are not available. Some tests require Python
299and the `dnspython` module and will be skipped if these are not available.
300See bin/tests/system/README for further details.
301
302Unit tests are implemented using the [CMocka unit testing framework](https://cmocka.org/).
303To build them, use `configure --with-cmocka`. Execution of tests is done
304by the [Kyua test execution engine](https://github.com/jmmv/kyua); if the
305`kyua` command is available, then unit tests can be run via `make test`
306or `make unit`.
307
308### <a name="doc"/> Documentation
309
310The *BIND 9 Administrator Reference Manual* is included with the source
311distribution, in DocBook XML, HTML, and PDF format, in the `doc/arm`
312directory.
313
314Some of the programs in the BIND 9 distribution have man pages in their
315directories.  In particular, the command line options of `named` are
316documented in `bin/named/named.8`.
317
318Frequently (and not-so-frequently) asked questions and their answers
319can be found in the ISC Knowledge Base at
320[https://kb.isc.org](https://kb.isc.org).
321
322Additional information on various subjects can be found in other
323`README` files throughout the source tree.
324
325### <a name="changes"/> Change log
326
327A detailed list of all changes that have been made throughout the
328development BIND 9 is included in the file CHANGES, with the most recent
329changes listed first.  Change notes include tags indicating the category of
330the change that was made; these categories are:
331
332|Category	|Description	        			|
333|--------------	|-----------------------------------------------|
334| [func] | New feature |
335| [bug] | General bug fix |
336| [security] | Fix for a significant security flaw |
337| [experimental] | Used for new features when the syntax or other aspects of the design are still in flux and may change |
338| [port] | Portability enhancement |
339| [maint] | Updates to built-in data such as root server addresses and keys |
340| [tuning] | Changes to built-in configuration defaults and constants to improve performance |
341| [performance] | Other changes to improve server performance |
342| [protocol] | Updates to the DNS protocol such as new RR types |
343| [test] | Changes to the automatic tests, not affecting server functionality |
344| [cleanup] | Minor corrections and refactoring |
345| [doc] | Documentation |
346| [contrib] | Changes to the contributed tools and libraries in the 'contrib' subdirectory |
347| [placeholder] | Used in the master development branch to reserve change numbers for use in other branches, e.g. when fixing a bug that only exists in older releases |
348
349In general, [func] and [experimental] tags will only appear in new-feature
350releases (i.e., those with version numbers ending in zero).  Some new
351functionality may be backported to older releases on a case-by-case basis.
352All other change types may be applied to all currently-supported releases.
353
354#### Bug report identifiers
355
356Most notes in the CHANGES file include a reference to a bug report or
357issue number. Prior to 2018, these were usually of the form `[RT #NNN]`
358and referred to entries in the "bind9-bugs" RT database, which was not open
359to the public. More recent entries use the form `[GL #NNN]` or, less often,
360`[GL !NNN]`, which, respectively, refer to issues or merge requests in the
361GitLab database. Most of these are publicly readable, unless they include
362information which is confidential or security sensitive.
363
364To look up a GitLab issue by its number, use the URL
365[https://gitlab.isc.org/isc-projects/bind9/issues/NNN](https://gitlab.isc.org/isc-projects/bind9/issues).
366To look up a merge request, use
367[https://gitlab.isc.org/isc-projects/bind9/merge_requests/NNN](https://gitlab.isc.org/isc-projects/bind9/merge_requests).
368
369In rare cases, an issue or merge request number may be followed with the
370letter "P". This indicates that the information is in the private ISC
371GitLab instance, which is not visible to the public.
372
373### <a name="ack"/> Acknowledgments
374
375* The original development of BIND 9 was underwritten by the
376  following organizations:
377
378		Sun Microsystems, Inc.
379		Hewlett Packard
380		Compaq Computer Corporation
381		IBM
382		Process Software Corporation
383		Silicon Graphics, Inc.
384		Network Associates, Inc.
385		U.S. Defense Information Systems Agency
386		USENIX Association
387		Stichting NLnet - NLnet Foundation
388		Nominum, Inc.
389
390* This product includes software developed by the OpenSSL Project for use
391  in the OpenSSL Toolkit.
392  [http://www.OpenSSL.org/](http://www.OpenSSL.org/)
393* This product includes cryptographic software written by Eric Young
394  (eay@cryptsoft.com)
395* This product includes software written by Tim Hudson (tjh@cryptsoft.com)
396