]>
Commit | Line | Data |
---|---|---|
79fb4337 | 1 | PowerDNS is copyright © 2001-2019 by PowerDNS.COM BV and lots of |
79a0f9ff CH |
2 | contributors, using the GNU GPLv2 license (see NOTICE for the |
3 | exact license and exception used). | |
bdbf07f0 | 4 | |
620e780a | 5 | All documentation can be found on https://doc.powerdns.com/ |
48cfdbc4 | 6 | |
1d329048 | 7 | This file may lag behind at times. For most recent updates, always check |
f778b0f4 | 8 | https://doc.powerdns.com/md/changelog/. |
1d329048 BH |
9 | |
10 | Another good place to look for information is: | |
75c698a7 | 11 | https://doc.powerdns.com/md/appendix/compiling-powerdns/ |
1d329048 | 12 | |
2847a0d2 | 13 | To file bugs, head towards: |
7d7b7179 | 14 | https://github.com/PowerDNS/pdns/issues |
2847a0d2 | 15 | |
7d7b7179 | 16 | But please check if the issue is already reported there first. |
da5d2b0f | 17 | |
48cfdbc4 | 18 | SOURCE CODE / GIT |
19 | ----------------- | |
48cfdbc4 | 20 | Source code is available on GitHub: |
21 | ||
d5f41e30 JS |
22 | ```sh |
23 | git clone https://github.com/PowerDNS/pdns.git | |
6942a39e PL |
24 | ``` |
25 | ||
26 | This repository contains the sources for the PowerDNS Recursor, the PowerDNS | |
27 | Authoritative Server, and dnsdist (a powerful DNS loadbalancer). All three can | |
28 | be built from this repository. However, all three released separately as .tar.bz2, | |
29 | .deb and .rpm. | |
48cfdbc4 | 30 | |
6ea8f68f | 31 | The different releases can be built by the help of pdns-builder, which uses a |
32 | docker-based build process. To get started with this, run these commands in the root | |
33 | of this repository: | |
34 | ||
35 | ```sh | |
36 | git submodule init | |
37 | git submodule update | |
38 | ./builder/build.sh | |
39 | ``` | |
40 | ||
41 | This will bring up a USAGE-page which will explain how to build the different releases. | |
42 | ||
48cfdbc4 | 43 | COMPILING Authoritative Server |
44 | ------------------------------ | |
6942a39e PL |
45 | The PowerDNS Authoritative Server depends on Boost, OpenSSL and requires a |
46 | compiler with C++-2011 support. | |
1d329048 | 47 | |
e5dae152 | 48 | On Debian 9, the following is useful: |
3869cd3b | 49 | |
d5f41e30 | 50 | ```sh |
d86d172d | 51 | apt install g++ libboost-all-dev libtool make pkg-config default-libmysqlclient-dev libssl-dev virtualenv libluajit-5.1-dev |
6942a39e | 52 | ``` |
3869cd3b | 53 | |
e5dae152 JS |
54 | When building from git, the following packages are also required: |
55 | ||
56 | ```sh | |
57 | apt install autoconf automake ragel bison flex | |
58 | ``` | |
59 | ||
c7ccd22e CS |
60 | For Ubuntu 18.04 (Bionic Beaver), the following packages should be installed: |
61 | ||
62 | ```sh | |
63 | 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 virtualenv lua-yaml-dev libyaml-cpp-dev libluajit-5.1-dev libcurl4 gawk | |
cb264691 | 64 | # For DNSSEC ed25519 (algorithm 15) support with --with-libsodium |
c7ccd22e CS |
65 | apt install libsodium-dev |
66 | # If using the gmysql (Generic MySQL) backend | |
67 | apt install default-libmysqlclient-dev | |
68 | # If using the gpgsql (Generic PostgreSQL) backend | |
69 | apt install postgresql-server-dev-10 | |
70 | # If using --enable-systemd (will create the service scripts so it can be managed with systemctl/service) | |
71 | apt install libsystemd0 libsystemd-dev | |
72 | # If using the geoip backend | |
73 | apt install libmaxminddb-dev libmaxminddb0 libgeoip1 libgeoip-dev | |
74 | ``` | |
75 | ||
76 | Then generate the configure file: | |
3869cd3b | 77 | |
d5f41e30 JS |
78 | ```sh |
79 | autoreconf -vi | |
6942a39e | 80 | ``` |
3869cd3b | 81 | |
d022a079 | 82 | To compile a very clean version, use: |
2e938e5d | 83 | |
d5f41e30 | 84 | ```sh |
d86d172d | 85 | ./configure --with-modules="" --disable-lua-records |
d5f41e30 | 86 | make |
6942a39e PL |
87 | # make install |
88 | ``` | |
2e938e5d | 89 | |
4486aaac | 90 | This generates a PowerDNS Authoritative Server binary with no modules built in. |
1d329048 | 91 | |
c7ccd22e CS |
92 | See https://doc.powerdns.com/authoritative/backends/index.html for a list of available modules. |
93 | ||
4486aaac | 94 | When `./configure` is run without `--with-modules`, the bind and gmysql module are |
1d329048 | 95 | built-in by default and the pipe-backend is compiled for runtime loading. |
2e938e5d BH |
96 | |
97 | To add multiple modules, try: | |
98 | ||
d5f41e30 JS |
99 | ```sh |
100 | ./configure --with-modules="bind gmysql gpgsql" | |
6942a39e | 101 | ``` |
2e938e5d | 102 | |
6942a39e PL |
103 | Note that you will need the development headers for PostgreSQL as well in this case. |
104 | ||
c7ccd22e | 105 | See https://doc.powerdns.com/authoritative/appendices/compiling.html for more details. |
343546e5 | 106 | |
cc2ee9e2 PD |
107 | 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. |
108 | ||
b1b2586e | 109 | Compiling the Recursor |
48cfdbc4 | 110 | ---------------------- |
a9cad190 | 111 | See [README.md](pdns/recursordist/README.md) in `pdns/recursordist/`. |
3e69796e | 112 | |
b1b2586e CH |
113 | Compiling dnsdist |
114 | ----------------- | |
a9cad190 | 115 | See [README-dnsdist.md](pdns/README-dnsdist.md) in `pdns/`. |
e291c62e | 116 | |
c7ccd22e CS |
117 | Building the HTML documentation |
118 | ------------------------------- | |
119 | ||
120 | The HTML documentation (as seen [on the PowerDNS docs site](https://doc.powerdns.com/authoritative/)) is built from ReStructured Text (rst) files located in `docs`. They are compiled into HTML files using [Sphinx](http://www.sphinx-doc.org/en/master/index.html), a documentation generator tool which is built in Python. | |
121 | ||
122 | **Using a normal Python installation** | |
123 | ||
124 | For those simply contributing to the documentation, this avoids needing to install the various build | |
125 | tools and other dependencies. | |
126 | ||
127 | Install Python 2.7 or Python 3 (preferable) if you don't yet have it installed. On some operating | |
128 | systems you may also have to install `python3-pip` or similarly named. | |
129 | ||
130 | Ubuntu 16.04 / 18.04 | |
131 | ||
132 | ```sh | |
133 | apt update | |
134 | apt install python3 python3-pip python3-venv | |
135 | ``` | |
136 | ||
137 | macOS (using homebrew) | |
138 | ||
139 | ```sh | |
140 | brew install python3 | |
141 | ``` | |
142 | ||
143 | Update your `pip` and install/update `virtualenv` to avoid problems: | |
144 | ||
145 | ```sh | |
146 | # for python2, use "pip" instead of "pip3" | |
147 | pip3 install -U pip | |
148 | pip3 install -U virtualenv | |
149 | ``` | |
150 | ||
151 | Enter the repository's `docs` folder, set up the virtualenv, and install the requirements | |
152 | ||
153 | ```sh | |
154 | cd docs | |
155 | # for python2, use "virtualenv .venv" instead | |
156 | python3 -m venv .venv | |
157 | source .venv/bin/activate | |
158 | # The virtualenv may use an older pip, so upgrade it again | |
159 | pip3 install -U pip setuptools setuptools-git | |
160 | # Now you can install the requirements | |
161 | pip3 install -r requirements.txt | |
162 | ``` | |
163 | ||
164 | Finally, you can build the documentation: | |
165 | ||
166 | ```sh | |
167 | sphinx-build . html-docs | |
168 | ``` | |
169 | ||
170 | Note: If your shell has problems finding sphinx-build, try using `.venv/bin/sphinx-build` instead. | |
171 | ||
172 | The HTML documentation is now available in `html-docs`. | |
173 | ||
174 | **Using the build tools** | |
175 | ||
176 | This method is preferable for those who already have a working build environment for PowerDNS. | |
177 | ||
178 | Install the dependencies under "COMPILING", and run autoreconf if you haven't already: | |
179 | ||
180 | ```sh | |
181 | autoreconf -vi | |
182 | ``` | |
183 | ||
184 | Enter the `docs` folder, and use make to build the HTML docs. | |
185 | ||
186 | ``` | |
187 | cd docs | |
188 | make html-docs | |
189 | ``` | |
190 | ||
191 | The HTML documentation will now be available in `html-docs`. | |
192 | ||
b1b2586e | 193 | Solaris Notes |
343546e5 | 194 | ------------- |
66f85567 | 195 | Use a recent gcc (and other build tools), possibly from Solaris 11 IPS. |
152b4591 | 196 | |
48cfdbc4 | 197 | If you encounter problems with the Solaris make, gmake is advised. |
343546e5 | 198 | |
b1b2586e | 199 | FreeBSD Notes |
343546e5 | 200 | ------------- |
48cfdbc4 | 201 | You need to compile using gmake - regular make only appears to work, but doesn't in fact. Use gmake, not make. |
5088e8bc | 202 | |
2bf96826 SM |
203 | 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. |
204 | ||
d5f41e30 JS |
205 | ```sh |
206 | export CXXFLAGS=-std=c++11 | |
b1b2586e | 207 | ``` |
2bf96826 | 208 | |
b1b2586e CH |
209 | macOS Notes |
210 | ----------- | |
43a2814f | 211 | PowerDNS Authoritative Server is available through Homebrew: |
7d7b7179 | 212 | |
6942a39e | 213 | ``` |
d5f41e30 | 214 | brew install pdns |
6942a39e | 215 | ``` |
7d7b7179 JC |
216 | |
217 | If you want to compile yourself, the dependencies can be installed using | |
b1b2586e | 218 | Homebrew. You need to tell configure where to find OpenSSL, too. |
7d7b7179 | 219 | |
d5f41e30 JS |
220 | ```sh |
221 | brew install boost lua pkg-config ragel openssl | |
d86d172d | 222 | ./configure --with-modules="" PKG_CONFIG_PATH=/usr/local/opt/openssl/lib/pkgconfig |
d5f41e30 | 223 | make -j4 |
6942a39e | 224 | ``` |
7d7b7179 | 225 | |
ed1015aa | 226 | Additionally, for PostgreSQL support, run `brew install postgresql` and add `--with-modules="gpgsql"` to `./configure`. |
b1b2586e | 227 | For MySQL support, run `brew install mariadb` and add `--with-modules="gmysql"` to `./configure`. |
7d7b7179 | 228 | |
b1b2586e | 229 | Linux notes |
343546e5 BH |
230 | ----------- |
231 | None really. |