Fábio Kaiser Rauber 3 years ago
parent
commit
cb32149dfe
  1. 4
      README.md
  2. 10
      pdns/Dockerfile
  3. 90
      pdns/schema.mysql.sql
  4. 8
      pdns/start.sh

4
README.md

@ -46,9 +46,9 @@ mysql:
## Environment Variables Supported ## Environment Variables Supported
Any setting from https://doc.powerdns.com/authoritative/settings.html is supported. Just add the prefix "PDNS\_" and replace any hyphens (-) with underscore (\_). Example: Any setting from https://doc.powerdns.com/authoritative/settings.html is supported. Just add the prefix "PDNSCONF\_" and replace any hyphens (-) with underscore (\_). Example:
``` allow-axfr-ips ===> PDNS_ALLOW_AXFR_IPS ``` ``` allow-axfr-ips ===> PDNSCONF_ALLOW_AXFR_IPS ```
### Additional Environment Variables: ### Additional Environment Variables:

10
pdns/Dockerfile

@ -12,16 +12,17 @@ ENV PDNSCONF_LAUNCH="gmysql" \
PDNSCONF_API_KEY="" \ PDNSCONF_API_KEY="" \
SECALLZONES_CRONJOB="no" SECALLZONES_CRONJOB="no"
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -q -y curl gnupg && \ ADD https://repo.powerdns.com/FD380FBB-pub.asc /etc/apt/trusted.gpg.d/powerdns-key.asc
curl https://repo.powerdns.com/FD380FBB-pub.asc | apt-key add -
ADD pdns.list /etc/apt/sources.list.d/pdns.list ADD pdns.list /etc/apt/sources.list.d/pdns.list
ADD pdns.preference /etc/apt/preferences.d/pdns ADD pdns.preference /etc/apt/preferences.d/pdns
RUN apt-get update && \ RUN chmod 644 /etc/apt/trusted.gpg.d/powerdns-key.asc && \
apt-get update && \
echo "path-include /usr/share/doc/*/*.sql" >> /etc/dpkg/dpkg.cfg.d/docker && \
DEBIAN_FRONTEND=noninteractive apt-get install -q -y pdns-server pdns-backend-mysql mariadb-client && \ DEBIAN_FRONTEND=noninteractive apt-get install -q -y pdns-server pdns-backend-mysql mariadb-client && \
rm /etc/powerdns/pdns.d/*.conf && rm /etc/powerdns/*.conf && \ rm /etc/powerdns/pdns.d/*.conf && rm /etc/powerdns/*.conf && \
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends cron jq && \ DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends cron curl jq && \
rm /etc/cron.daily/* && \ rm /etc/cron.daily/* && \
mkdir /var/run/pdns && \ mkdir /var/run/pdns && \
apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
@ -31,7 +32,6 @@ EXPOSE 53/udp 53/tcp
ADD start.sh /usr/local/bin/start.sh ADD start.sh /usr/local/bin/start.sh
ADD fixdsrrs.sh /usr/local/bin/fixdsrrs.sh ADD fixdsrrs.sh /usr/local/bin/fixdsrrs.sh
ADD secallzones.sh /usr/local/bin/secallzones.sh ADD secallzones.sh /usr/local/bin/secallzones.sh
ADD schema.mysql.sql /usr/share/doc/pdns-backend-mysql/
RUN chmod a+x /usr/local/bin/*.sh RUN chmod a+x /usr/local/bin/*.sh
CMD ["/usr/local/bin/start.sh"] CMD ["/usr/local/bin/start.sh"]

90
pdns/schema.mysql.sql

@ -1,90 +0,0 @@
CREATE TABLE domains (
id INT AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
master VARCHAR(128) DEFAULT NULL,
last_check INT DEFAULT NULL,
type VARCHAR(6) NOT NULL,
notified_serial INT DEFAULT NULL,
account VARCHAR(40) DEFAULT NULL,
PRIMARY KEY (id)
) Engine=InnoDB;
CREATE UNIQUE INDEX name_index ON domains(name);
CREATE TABLE records (
id INT AUTO_INCREMENT,
domain_id INT DEFAULT NULL,
name VARCHAR(255) DEFAULT NULL,
type VARCHAR(10) DEFAULT NULL,
content VARCHAR(64000) DEFAULT NULL,
ttl INT DEFAULT NULL,
prio INT DEFAULT NULL,
change_date INT DEFAULT NULL,
disabled TINYINT(1) DEFAULT 0,
ordername VARCHAR(255) BINARY DEFAULT NULL,
auth TINYINT(1) DEFAULT 1,
PRIMARY KEY (id)
) Engine=InnoDB;
CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);
CREATE INDEX recordorder ON records (domain_id, ordername);
CREATE TABLE supermasters (
ip VARCHAR(64) NOT NULL,
nameserver VARCHAR(255) NOT NULL,
account VARCHAR(40) NOT NULL,
PRIMARY KEY (ip, nameserver)
) Engine=InnoDB;
CREATE TABLE comments (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
name VARCHAR(255) NOT NULL,
type VARCHAR(10) NOT NULL,
modified_at INT NOT NULL,
account VARCHAR(40) NOT NULL,
comment VARCHAR(64000) NOT NULL,
PRIMARY KEY (id)
) Engine=InnoDB;
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 INT AUTO_INCREMENT,
domain_id INT NOT NULL,
kind VARCHAR(32),
content TEXT,
PRIMARY KEY (id)
) Engine=InnoDB;
CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind);
CREATE TABLE cryptokeys (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
flags INT NOT NULL,
active BOOL,
content TEXT,
PRIMARY KEY(id)
) Engine=InnoDB;
CREATE INDEX domainidindex ON cryptokeys(domain_id);
CREATE TABLE tsigkeys (
id INT AUTO_INCREMENT,
name VARCHAR(255),
algorithm VARCHAR(50),
secret VARCHAR(255),
PRIMARY KEY (id)
) Engine=InnoDB;
CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);

8
pdns/start.sh

@ -5,6 +5,8 @@ mkdir -p /etc/powerdns/pdns.d
PDNSVARS=`echo ${!PDNSCONF_*}` PDNSVARS=`echo ${!PDNSCONF_*}`
touch /etc/powerdns/pdns.conf touch /etc/powerdns/pdns.conf
PDNSCONF_GMYSQL_HOST=${PDNSCONF_GMYSQL_HOST:-mysql}
if [ ! -z $MYSQL_ENV_MARIADB_DATABASE ]; then if [ ! -z $MYSQL_ENV_MARIADB_DATABASE ]; then
PDNSCONF_GMYSQL_USER=$MYSQL_ENV_MARIADB_USER PDNSCONF_GMYSQL_USER=$MYSQL_ENV_MARIADB_USER
PDNSCONF_GMYSQL_DBNAME=$MYSQL_ENV_MARIADB_DATABASE PDNSCONF_GMYSQL_DBNAME=$MYSQL_ENV_MARIADB_DATABASE
@ -35,7 +37,7 @@ fi
mysqlcheck() { mysqlcheck() {
# Wait for MySQL to be available... # Wait for MySQL to be available...
COUNTER=20 COUNTER=20
until mysql -h mysql -u $PDNSCONF_GMYSQL_USER -p$PDNSCONF_GMYSQL_PASSWORD -e "show databases" 2>/dev/null; do until mysql -h "$PDNSCONF_GMYSQL_HOST" -u "$PDNSCONF_GMYSQL_USER" -p"$PDNSCONF_GMYSQL_PASSWORD" -e "show databases" 2>/dev/null; do
echo "WARNING: MySQL still not up. Trying again..." echo "WARNING: MySQL still not up. Trying again..."
sleep 10 sleep 10
let COUNTER-=1 let COUNTER-=1
@ -45,10 +47,10 @@ mysqlcheck() {
fi fi
done done
count=`mysql -h mysql -u $PDNSCONF_GMYSQL_USER -p$PDNSCONF_GMYSQL_PASSWORD -e "select count(*) from information_schema.tables where table_type='BASE TABLE' and table_schema='$PDNSCONF_GMYSQL_DBNAME';" | tail -1` count=`mysql -h "$PDNSCONF_GMYSQL_HOST" -u "$PDNSCONF_GMYSQL_USER" -p"$PDNSCONF_GMYSQL_PASSWORD" -e "select count(*) from information_schema.tables where table_type='BASE TABLE' and table_schema='$PDNSCONF_GMYSQL_DBNAME';" | tail -1`
if [ "$count" == "0" ]; then if [ "$count" == "0" ]; then
echo "Database is empty. Importing PowerDNS schema..." echo "Database is empty. Importing PowerDNS schema..."
mysql -h mysql -u $PDNSCONF_GMYSQL_USER -p$PDNSCONF_GMYSQL_PASSWORD $PDNSCONF_GMYSQL_DBNAME < /usr/share/doc/pdns-backend-mysql/schema.mysql.sql && echo "Import done." mysql -h "$PDNSCONF_GMYSQL_HOST" -u "$PDNSCONF_GMYSQL_USER" -p"$PDNSCONF_GMYSQL_PASSWORD" "$PDNSCONF_GMYSQL_DBNAME" < /usr/share/doc/pdns-backend-mysql/schema.mysql.sql && echo "Import done."
fi fi
} }

Loading…
Cancel
Save