Skip to content

Commit b244c1d

Browse files
committed
first commit
0 parents  commit b244c1d

File tree

7 files changed

+525
-0
lines changed

7 files changed

+525
-0
lines changed

Dockerfile

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
FROM alpine:3.17
2+
LABEL author="Lukas Wingerberg"
3+
LABEL author_email="h@xx0r.eu"
4+
5+
# renovate: datasource=github-tags depName=PowerDNS/pdns extractVersion=^auth-(?<version>.*)$ versioning=semver
6+
ENV POWERDNS_VERSION=4.7.3
7+
ENV MYSQL_DEFAULT_AUTOCONF=true \
8+
MYSQL_DEFAULT_HOST="mysql" \
9+
MYSQL_DEFAULT_PORT="3306" \
10+
MYSQL_DEFAULT_USER="root" \
11+
MYSQL_DEFAULT_PASS="root" \
12+
MYSQL_DEFAULT_DB="pdns"
13+
14+
RUN mkdir -p /etc/pdns/conf.d
15+
16+
RUN addgroup -S pdns 2>/dev/null && \
17+
adduser -S -D -H -h /var/empty -s /bin/false -G pdns -g pdns pdns 2>/dev/null
18+
19+
RUN apk --update add bash libpq sqlite-libs libstdc++ libgcc mariadb-client mariadb-connector-c lua-dev curl-dev && \
20+
apk add --virtual build-deps \
21+
g++ make mariadb-dev postgresql-dev sqlite-dev curl boost-dev mariadb-connector-c-dev
22+
23+
RUN curl -sSL https://downloads.powerdns.com/releases/pdns-$POWERDNS_VERSION.tar.bz2 | tar xj -C /tmp && \
24+
cd /tmp/pdns-$POWERDNS_VERSION && \
25+
./configure --prefix="" --exec-prefix=/usr --sysconfdir=/etc/pdns \
26+
--with-modules="bind gmysql gpgsql gsqlite3" && \
27+
make && make install-strip
28+
29+
RUN cp /usr/lib/libboost_program_options.so* /tmp && \
30+
apk del --purge build-deps && \
31+
apk add boost-libs && \
32+
mv /tmp/lib* /usr/lib/ && \
33+
rm -rf /tmp/pdns-$POWERDNS_VERSION /var/cache/apk/*
34+
35+
ADD rootfs/ /
36+
37+
EXPOSE 53/tcp 53/udp
38+
39+
ENTRYPOINT ["/entrypoint.sh"]

build.sh

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
#!/usr/bin/env bash
2+
set -e
3+
4+
IMAGES=( "powerdns" )
5+
if [[ ${CI_COMMIT_TAG} ]]; then
6+
VERSION=$CI_COMMIT_TAG
7+
else
8+
VERSION="0.0.1-devnotworking"
9+
fi
10+
REPO=${CI_REGISTRY_IMAGE}
11+
#REPO=harbor.harbor-dev.internal.ing.staging.k8s.gfsrv.net/jitsi
12+
PUSH=NO
13+
BUILD_ARGS=()
14+
CommitMessage=
15+
16+
# Parse command line params
17+
while [[ $# -gt 0 ]]; do
18+
arg="$1";
19+
20+
case $arg in
21+
--push)
22+
PUSH=YES
23+
;;
24+
--pull)
25+
BUILD_ARGS+=("--pull")
26+
;;
27+
--no-cache)
28+
BUILD_ARGS+=("--no-cache")
29+
;;
30+
*)
31+
break
32+
;;
33+
esac
34+
35+
shift
36+
done
37+
38+
for IMAGE in "${IMAGES[@]}"
39+
do
40+
IMAGE_TAG_PATCH=${REPO}/${IMAGE}:${VERSION}
41+
IMAGE_TAG=${REPO}/${IMAGE}:${VERSION%-*}
42+
IMAGE_LATEST=${REPO}/${IMAGE}:latest
43+
docker build \
44+
-t "${IMAGE_TAG}" \
45+
-t "${IMAGE_TAG_PATCH}" \
46+
-t "${IMAGE_LATEST}" \
47+
-f ./Dockerfile \
48+
./
49+
50+
if [[ ${PUSH} = YES ]]; then
51+
if [[ ${CI_COMMIT_TAG} ]]; then
52+
docker push ${IMAGE_TAG_PATCH}
53+
docker push ${IMAGE_TAG}
54+
docker push ${IMAGE_LATEST}
55+
else
56+
docker push ${IMAGE_TAG}
57+
fi
58+
fi
59+
done

release-config.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export default {
2+
skipCommitsWithoutPullRequest: false,
3+
}

renovate.json

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
{
2+
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
3+
"dependencyDashboard": true,
4+
"packageRules": [
5+
{"datasources": ["docker"], "registryUrls": ["https://harbor.crystalnet.org/dockerhub-proxy"]}
6+
],
7+
"regexManagers": [
8+
{
9+
"fileMatch": ["^Dockerfile$"],
10+
"matchStrings": [
11+
"datasource=(?<datasource>.*?) depName=(?<depName>.*?)(?: extractVersion=(?<extractVersion>.+?))?( versioning=(?<versioning>.*?))?\\sENV .*?_VERSION=(?<currentValue>.*)\\s"
12+
],
13+
"versioningTemplate": "{{#if versioning}}{{{versioning}}}{{else}}semver{{/if}}"
14+
},
15+
{
16+
"fileMatch": ["^Dockerfile$"],
17+
"matchStrings": [
18+
"ARG IMAGE=(?<depName>.*?):(?<currentValue>.*?)@(?<currentDigest>sha256:[a-f0-9]+)\\s"
19+
],
20+
"datasourceTemplate": "docker"
21+
},
22+
{
23+
"fileMatch": ["Dockerfile$"],
24+
"matchStrings": ["FROM harbor\\.crystalnet\\.org/dockerhub-proxy/(?<depName>.*?):(?<currentValue>.*?)\n"],
25+
"datasourceTemplate": "docker"
26+
}
27+
]
28+
}
29+

rootfs/entrypoint.sh

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
#!/bin/bash
2+
set -e
3+
4+
# usage: file_env VAR [DEFAULT]
5+
# ie: file_env 'XYZ_DB_PASSWORD' 'example'
6+
# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of
7+
# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature)
8+
# source: https://github.com/docker-library/mariadb/blob/master/docker-entrypoint.sh
9+
file_env() {
10+
local var="$1"
11+
local fileVar="${var}_FILE"
12+
local def="${2:-}"
13+
if [ "${!var:-}" ] && [ "${!fileVar:-}" ]; then
14+
echo "Both $var and $fileVar are set (but are exclusive)"
15+
exit 1
16+
fi
17+
local val="$def"
18+
if [ "${!var:-}" ]; then
19+
val="${!var}"
20+
elif [ "${!fileVar:-}" ]; then
21+
val="$(< "${!fileVar}")"
22+
fi
23+
export "$var"="$val"
24+
unset "$fileVar"
25+
}
26+
27+
# Loads various settings that are used elsewhere in the script
28+
docker_setup_env() {
29+
# Initialize values that might be stored in a file
30+
31+
file_env 'MYSQL_AUTOCONF' $MYSQL_DEFAULT_AUTOCONF
32+
file_env 'MYSQL_HOST' $MYSQL_DEFAULT_HOST
33+
file_env 'MYSQL_DNSSEC' 'no'
34+
file_env 'MYSQL_DB' $MYSQL_DEFAULT_DB
35+
file_env 'MYSQL_PASS' $MYSQL_DEFAULT_PASS
36+
file_env 'MYSQL_USER' $MYSQL_DEFAULT_USER
37+
file_env 'MYSQL_PORT' $MYSQL_DEFAULT_PORT
38+
}
39+
40+
docker_setup_env
41+
42+
# --help, --version
43+
[ "$1" = "--help" ] || [ "$1" = "--version" ] && exec pdns_server $1
44+
# treat everything except -- as exec cmd
45+
[ "${1:0:2}" != "--" ] && exec "$@"
46+
47+
if $MYSQL_AUTOCONF ; then
48+
# Set MySQL Credentials in pdns.conf
49+
sed -r -i "s/^[# ]*gmysql-host=.*/gmysql-host=${MYSQL_HOST}/g" /etc/pdns/pdns.conf
50+
sed -r -i "s/^[# ]*gmysql-port=.*/gmysql-port=${MYSQL_PORT}/g" /etc/pdns/pdns.conf
51+
sed -r -i "s/^[# ]*gmysql-user=.*/gmysql-user=${MYSQL_USER}/g" /etc/pdns/pdns.conf
52+
sed -r -i "s/^[# ]*gmysql-password=.*/gmysql-password=${MYSQL_PASS}/g" /etc/pdns/pdns.conf
53+
sed -r -i "s/^[# ]*gmysql-dbname=.*/gmysql-dbname=${MYSQL_DB}/g" /etc/pdns/pdns.conf
54+
sed -r -i "s/^[# ]*gmysql-dnssec=.*/gmysql-dnssec=${MYSQL_DNSSEC}/g" /etc/pdns/pdns.conf
55+
56+
MYSQLCMD="mysql --host=${MYSQL_HOST} --user=${MYSQL_USER} --password=${MYSQL_PASS} --port=${MYSQL_PORT} -r -N"
57+
58+
# wait for Database come ready
59+
isDBup () {
60+
echo "SHOW STATUS" | $MYSQLCMD 1>/dev/null
61+
echo $?
62+
}
63+
64+
RETRY=10
65+
until [ `isDBup` -eq 0 ] || [ $RETRY -le 0 ] ; do
66+
echo "Waiting for database to come up"
67+
sleep 5
68+
RETRY=$(expr $RETRY - 1)
69+
done
70+
if [ $RETRY -le 0 ]; then
71+
>&2 echo Error: Could not connect to Database on $MYSQL_HOST:$MYSQL_PORT
72+
exit 1
73+
fi
74+
75+
# init database if necessary
76+
echo "CREATE DATABASE IF NOT EXISTS $MYSQL_DB;" | $MYSQLCMD
77+
MYSQLCMD="$MYSQLCMD $MYSQL_DB"
78+
79+
if [ "$(echo "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = \"$MYSQL_DB\";" | $MYSQLCMD)" -le 1 ]; then
80+
echo Initializing Database
81+
cat /etc/pdns/schema.sql | $MYSQLCMD
82+
83+
# Run custom mysql post-init sql scripts
84+
if [ -d "/etc/pdns/mysql-postinit" ]; then
85+
for SQLFILE in $(ls -1 /etc/pdns/mysql-postinit/*.sql | sort) ; do
86+
echo Source $SQLFILE
87+
cat $SQLFILE | $MYSQLCMD
88+
done
89+
fi
90+
fi
91+
92+
unset -v MYSQL_PASS
93+
fi
94+
95+
if [[ ! -z "${POWERDNS_LOGLEVEL}" ]]; then
96+
sed -r -i "s/^[# ]*loglevel=.*/loglevel=${POWERDNS_LOGLEVEL}/g" /etc/pdns/pdns.conf
97+
fi
98+
99+
if [[ ! -z "${POWERDNS_ALLOW_AXFR_IPS}" ]]; then
100+
sed -r -i "s/^[# ]*allow-axfr-ips=.*/allow-axfr-ips=${POWERDNS_ALLOW_AXFR_IPS}/g" /etc/pdns/pdns.conf
101+
fi
102+
103+
# Run pdns server
104+
trap "pdns_control quit" SIGHUP SIGINT SIGTERM
105+
106+
pdns_server "$@" &
107+
108+
wait

0 commit comments

Comments
 (0)