You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Otto Moerbeek c4808619cf
Merge pull request #11212 from omoerbeek/fix-zonemd-test-files
15 hours ago
.circleci All of rec moved to GH workflows 4 weeks ago
.github Merge pull request #11199 from Habbie/ubuntu-jammy 2 days ago
build-aux add preliminary pdns-builder support 4 years ago
build-scripts Set policy to not start/enable services by default 1 month ago
builder@c66dee9bfa update builder - i accidentally downgraded it in 4f57dec4a7f1b94c6da4c0d3fdfecf73781bbcb2 9 months ago
builder-support add ubuntu jammy build target 2 days ago
codedocs spelling: powerdns 10 months ago
contrib dnsdist: Switch to a uint8_t for the XDP match action type 2 months ago
dockerdata Remove debug print line flooding logs 3 months ago
docs Merge pull request #11194 from Habbie/swagger-syntax 2 days ago
ext protozero: Update the file as well 1 week ago
fuzzing Add fuzzing for parseRFC1035CharString 10 months ago
m4 Merge pull request #11118 from omoerbeek/boost-clang-130 1 week ago
modules auth: add support for autoprimary management via API and pdnsutil 1 week ago
pdns Merge pull request #11207 from omoerbeek/rec-kill-no-prev-decl-warning 2 days ago
regression-tests Test for ZONEMD verification using the test zones from the RFC and some malformed ones. 1 month ago
regression-tests.api auth: add autoprimary API test 1 week ago
regression-tests.auth-py CI: dnspython 2.2.0 breaks auth and ixfrdist testing, pin to 2.1.0 2 days ago
regression-tests.common rec: Add regression tests for the proxy protocol 2 years ago
regression-tests.dnsdist Merge pull request #11121 from rgacogne/ddist-ignore-p12 4 weeks ago
regression-tests.ixfrdist CI: dnspython 2.2.0 breaks auth and ixfrdist testing, pin to 2.1.0 2 days ago
regression-tests.nobackend auth: Add IPv6 UDP error metrics 3 months ago
regression-tests.recursor Fix error in test zone that auth-45 does not like 2 months ago
regression-tests.recursor-dnssec changed theuir setup. 1 week ago
regression-tests.rootzone newer git does not like .gitignore to be a symlink 7 months ago
.clang-format AlignAfterOpenBracket: Align 10 months ago
.dockerignore docker: ignore compiled files 7 months ago
.gitignore auth/rec/dnsdist: dockerise 1 year ago
.gitmodules Add pdns-builder 3 years ago
.not-formatted Introduce rec-main.hh and split out TCP code to 1 week ago
.valgrindrc Add suppression file for valgrind, and turn it on 9 years ago
AUTHORS and auto* loves authors too 12 years ago
Brewfile Allow running "brew bundle" to fetch deps 4 years ago namespace 3 months ago
COPYING update GPLv2 license text, thanks Morten Stevens 9 years ago Additional note on Docker Engine version where the requirement of the additional capability was dropped 1 month ago
Dockerfile-auth Remove capability requirements from Docker images 1 month ago
Dockerfile-dnsdist Remove capability requirements from Docker images 1 month ago
Dockerfile-recursor Remove capability requirements from Docker images 1 month ago
INSTALL Various documentation cleanups 6 years ago Add missing dir in the zonemd test file paths 20 hours ago
Makefile.docker Docker: ensure caching works 1 year ago
NEWS Update URLs to use https scheme 3 years ago
NOTICE limit accidental scope expansion, thanks @zeha 8 years ago
README Create soft link from README to 9 years ago It's 2021 1 year ago security: update email addresses 2 years ago auth,dnsdist: Add an option to disable 'ipcipher' during configure 4 weeks ago
docker-compose.yml auth/rec/dnsdist: dockerise 1 year ago
invoke.yaml github actions: build auth+rec+dnsdist; test auth-api, dnsdist-regression, rec-api 5 months ago
lgtm.yml auth: Add /api/docs endpoint to obtain OpenAPI document 1 year ago
pdns.supp Add suppression file for valgrind, and turn it on 9 years ago auth CI: do swagger syntax check 2 days ago

PowerDNS is copyright © 2001-2021 by PowerDNS.COM BV and lots of contributors, using the GNU GPLv2 license (see NOTICE for the exact license and exception used).

All documentation can be found on

This file may lag behind at times. For most recent updates, always check

Another good place to look for information is:

To file bugs, head towards:

But please check if the issue is already reported there first.


This README is mirrored from GitHub to dockerhub. For information about our Docker images, please refer to


Source code is available on GitHub:

git clone

This repository contains the sources for the PowerDNS Recursor, the PowerDNS Authoritative Server, and dnsdist (a powerful DNS loadbalancer). All three can be built from this repository. However, all three released separately as .tar.bz2, .deb and .rpm.

The different releases can be built by the help of pdns-builder, which uses a docker-based build process. To get started with this, run these commands in the root of this repository:

git submodule init
git submodule update

This will bring up a USAGE-page which will explain how to build the different releases.

COMPILING Authoritative Server

The PowerDNS Authoritative Server depends on Boost, OpenSSL and Lua, and requires a compiler with C++-2011 support.

On Debian 9, the following is useful:

apt install g++ libboost-all-dev libtool make pkg-config default-libmysqlclient-dev libssl-dev libluajit-5.1-dev python3-venv

When building from git, the following packages are also required:

apt install autoconf automake ragel bison flex

For Ubuntu 18.04 (Bionic Beaver), the following packages should be installed:

apt install libcurl4-openssl-dev luajit lua-yaml-dev libyaml-cpp-dev libtolua-dev lua5.3 autoconf automake ragel bison flex g++ libboost-all-dev libtool make pkg-config libssl-dev lua-yaml-dev libyaml-cpp-dev libluajit-5.1-dev libcurl4 gawk libsqlite3-dev python3-venv
# For DNSSEC ed25519 (algorithm 15) support with --with-libsodium
apt install libsodium-dev
# If using the gmysql (Generic MySQL) backend
apt install default-libmysqlclient-dev
# If using the gpgsql (Generic PostgreSQL) backend
apt install libpq-dev
# If using --enable-systemd (will create the service scripts so it can be managed with systemctl/service)
apt install libsystemd0 libsystemd-dev
# If using the geoip backend
apt install libmaxminddb-dev libmaxminddb0 libgeoip1 libgeoip-dev

Then generate the configure file:

autoreconf -vi

To compile a very clean version, use:

./configure --with-modules="" --disable-lua-records
# make install

This generates a PowerDNS Authoritative Server binary with no modules built in.

See for a list of available modules.

When ./configure is run without --with-modules, the bind and gmysql module are built-in by default and the pipe-backend is compiled for runtime loading.

To add multiple modules, try:

./configure --with-modules="bind gmysql gpgsql"

Note that you will need the development headers for PostgreSQL as well in this case.

See for more details.

If you run into C++11-related symbol trouble, please try passing CPPFLAGS=-D_GLIBCXX_USE_CXX11_ABI=0 (or 1) to ./configure to make sure you are compatible with the installed dependencies.

Compiling the Recursor

See in pdns/recursordist/.

Compiling dnsdist

See in pdns/.

Building the HTML documentation

The HTML documentation (as seen on the PowerDNS docs site) is built from ReStructured Text (rst) files located in docs. They are compiled into HTML files using Sphinx, a documentation generator tool which is built in Python.

Install the dependencies under "COMPILING", and run autoreconf if you haven't already:

autoreconf -vi

Enter the docs folder, and use make to build the HTML docs.

cd docs
make html-docs

The HTML documentation will now be available in html-docs.

FreeBSD Notes

You need to compile using gmake - regular make only appears to work, but doesn't in fact. Use gmake, not make.

The clang compiler installed through FreeBSD's package manager does not expose all of the C++11 features needed under std=gnuc++11. Force the compiler to use std=c++11 mode instead.

export CXXFLAGS=-std=c++11

macOS Notes

PowerDNS Authoritative Server is available through Homebrew:

brew install pdns

If you want to compile yourself, the dependencies can be installed using Homebrew. You need to tell configure where to find OpenSSL, too.

brew install boost lua pkg-config ragel openssl
./configure --with-modules="" PKG_CONFIG_PATH=/usr/local/opt/openssl/lib/pkgconfig
make -j4

Additionally, for PostgreSQL support, run brew install postgresql and add --with-modules="gpgsql" to ./configure. For MySQL support, run brew install mariadb and add --with-modules="gmysql" to ./configure.

Linux notes

None really.