commit 855e44402a665f122b6fc29f1c69c35ed7b80c1e Author: damage Date: Sun Oct 9 14:43:25 2022 +0200 init diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..9d0b6ff --- /dev/null +++ b/Dockerfile @@ -0,0 +1,12 @@ +FROM alpine:latest + +RUN apk update && apk add --no-cache pdns-backend-pgsql && rm -rf /var/cache/apk/* +RUN sed -i 's/^use-logfile=/#use-logfile=/' /etc/pdns/pdns.conf && \ + sed -i 's/^wildcards=/#wildcards=/' /etc/pdns/pdns.conf + +COPY start.sh / +RUN chmod a+x /start.sh + +EXPOSE 53/udp + +CMD /start.sh diff --git a/README.md b/README.md new file mode 100644 index 0000000..9588901 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# pdns +PowerDNS docker image using PostgreSQL Backend based on alpine diff --git a/build.sh b/build.sh new file mode 100755 index 0000000..779bf69 --- /dev/null +++ b/build.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +docker build --pull --tag tuxmainy/pdns:local . diff --git a/schema-4.2.pgsql.sql b/schema-4.2.pgsql.sql new file mode 100644 index 0000000..911dd37 --- /dev/null +++ b/schema-4.2.pgsql.sql @@ -0,0 +1,94 @@ +CREATE TABLE domains ( + id SERIAL PRIMARY KEY, + name VARCHAR(255) NOT NULL, + master VARCHAR(128) DEFAULT NULL, + last_check INT DEFAULT NULL, + type VARCHAR(6) NOT NULL, + notified_serial BIGINT DEFAULT NULL, + account VARCHAR(40) DEFAULT NULL, + CONSTRAINT c_lowercase_name CHECK (((name)::TEXT = LOWER((name)::TEXT))) +); + +CREATE UNIQUE INDEX name_index ON domains(name); + + +CREATE TABLE records ( + id BIGSERIAL PRIMARY KEY, + domain_id INT DEFAULT NULL, + name VARCHAR(255) DEFAULT NULL, + type VARCHAR(10) DEFAULT NULL, + content VARCHAR(65535) DEFAULT NULL, + ttl INT DEFAULT NULL, + prio INT DEFAULT NULL, + disabled BOOL DEFAULT 'f', + ordername VARCHAR(255), + auth BOOL DEFAULT 't', + CONSTRAINT domain_exists + FOREIGN KEY(domain_id) REFERENCES domains(id) + ON DELETE CASCADE, + CONSTRAINT c_lowercase_name CHECK (((name)::TEXT = LOWER((name)::TEXT))) +); + +CREATE INDEX rec_name_index ON records(name); +CREATE INDEX nametype_index ON records(name,type); +CREATE INDEX domain_id ON records(domain_id); +CREATE INDEX recordorder ON records (domain_id, ordername text_pattern_ops); + + +CREATE TABLE supermasters ( + ip INET NOT NULL, + nameserver VARCHAR(255) NOT NULL, + account VARCHAR(40) NOT NULL, + PRIMARY KEY(ip, nameserver) +); + + +CREATE TABLE comments ( + id SERIAL PRIMARY KEY, + domain_id INT NOT NULL, + name VARCHAR(255) NOT NULL, + type VARCHAR(10) NOT NULL, + modified_at INT NOT NULL, + account VARCHAR(40) DEFAULT NULL, + comment VARCHAR(65535) NOT NULL, + CONSTRAINT domain_exists + FOREIGN KEY(domain_id) REFERENCES domains(id) + ON DELETE CASCADE, + CONSTRAINT c_lowercase_name CHECK (((name)::TEXT = LOWER((name)::TEXT))) +); + +CREATE INDEX comments_domain_id_idx ON comments (domain_id); +CREATE INDEX comments_name_type_idx ON comments (name, type); +CREATE INDEX comments_order_idx ON comments (domain_id, modified_at); + + +CREATE TABLE domainmetadata ( + id SERIAL PRIMARY KEY, + domain_id INT REFERENCES domains(id) ON DELETE CASCADE, + kind VARCHAR(32), + content TEXT +); + +CREATE INDEX domainidmetaindex ON domainmetadata(domain_id); + + +CREATE TABLE cryptokeys ( + id SERIAL PRIMARY KEY, + domain_id INT REFERENCES domains(id) ON DELETE CASCADE, + flags INT NOT NULL, + active BOOL, + content TEXT +); + +CREATE INDEX domainidindex ON cryptokeys(domain_id); + + +CREATE TABLE tsigkeys ( + id SERIAL PRIMARY KEY, + name VARCHAR(255), + algorithm VARCHAR(50), + secret VARCHAR(255), + CONSTRAINT c_lowercase_name CHECK (((name)::TEXT = LOWER((name)::TEXT))) +); + +CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm); diff --git a/start.sh b/start.sh new file mode 100644 index 0000000..1c01b69 --- /dev/null +++ b/start.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +pdns_server --daemon=no \ + --launch=gpgsql \ + --webserver=no \ + --api=no \ + --chroot=/ \ + --gpgsql-host="$DB_HOST" \ + --gpgsql-port="$DB_PORT" \ + --gpgsql-dbname="$DB_NAME" \ + --gpgsql-user="$DB_USER" \ + --gpgsql-password="$DB_PASS" \ + --loglevel="$LOGLEVEL" \ + --log-dns-details="$LOG_DNS_DETAILS" \ + --log-dns-queries="$LOG_DNS_QUERIES"