PowerDNS can be compiled with modules built in, or with modules designed to be loaded at runtime. All that is configured before compiling using the well known autoconf/automake system.
PowerDNS requires 'Boost' to compile, it is available for most operating systems. Otherwise, see the Boost website.
To compile in modules, specify them as
--with-modules='mod1 mod2 mod3',
substituting the desired module names. Each backend has a module name that you
look up in this table.
To compile a module for inclusion at runtime, which is great if you are a unix
--with-dynmodules='mod1 mod2 mod3'. These modules then end up as
.so files in the compiled libdir.
Getting the sources
There are 3 ways of getting the source. If you want the bleeding edge, you can
clone the repository at GitHub and run
./bootstrap in the clone.
You can also download snapshot tarballs generated by Jenkins and can be found here.
OS specific gotcha's
It is unknown if PowerDNS compiles on AIX.
Works fine, but use gmake.
The FreeBSD Boost include files are installed in
/usr/local/include, so prefix
CXXFLAGS=-I/usr/local/include to your
Linux is probably the best supported platform as most of the main coders are
Linux users. The static DEB distribution is known to have problems on Debian
'Sid', but that doesn't matter as PowerDNS is a native part of Debian 'Sid'.
Mac OS X
The installation from Homebrew for the authoritative server should work, event though not all commits are tested on OS X.
The recursor has been reported to crash for some OS X users.
Compiles but then does not work very well. We hear that it may work with more
recent versions of gcc, please let us know on
Solaris 8 and 9 work fine. The 'Sunpro' compiler has not been tried but is reported to be lacking large parts of the Standard Template Library, which PowerDNS relies on heavily. Use gcc and gmake (if available). Regular Solaris make has some issues with some PowerDNS Makefile constructs.
When compiling, make sure that you have
/usr/ccs/bin in your path.
Furthermore, with some versions of MySQL, you may have to add