mirror of
https://github.com/Luzifer/dns.git
synced 2024-11-09 22:50:06 +00:00
Rebuild to use crond and pre-compiled binary
The build process of the binary patched with the cron runner was too instable as coredns is not properly vendoring their dependencies. This way the binary is stable (provided by coredns) and the cron is taken over by alpine crond. Signed-off-by: Knut Ahlers <knut@ahlers.me>
This commit is contained in:
parent
caea3c7f13
commit
ee90549179
5 changed files with 48 additions and 83 deletions
25
Dockerfile
25
Dockerfile
|
@ -1,27 +1,14 @@
|
||||||
FROM golang:alpine
|
|
||||||
|
|
||||||
ARG COREDNS_VERSION=v1.0.5
|
|
||||||
|
|
||||||
ADD ./build.sh /usr/local/bin/build.sh
|
|
||||||
ADD ./cron_generate.go /src/cron_generate.go
|
|
||||||
RUN set -ex \
|
|
||||||
&& apk --no-cache add git bash \
|
|
||||||
&& bash /usr/local/bin/build.sh
|
|
||||||
|
|
||||||
FROM alpine
|
FROM alpine
|
||||||
|
|
||||||
LABEL maintainer Knut Ahlers <knut@ahlers.me>
|
LABEL maintainer Knut Ahlers <knut@ahlers.me>
|
||||||
|
|
||||||
COPY --from=0 /go/bin/coredns /usr/local/bin/
|
|
||||||
|
|
||||||
ADD ./requirements.txt /src/requirements.txt
|
|
||||||
RUN set -ex \
|
|
||||||
&& apk --no-cache add python3 bind-tools \
|
|
||||||
&& pip3 install -r /src/requirements.txt
|
|
||||||
|
|
||||||
ADD . /src
|
ADD . /src
|
||||||
WORKDIR /src
|
WORKDIR /src
|
||||||
|
|
||||||
|
RUN set -ex \
|
||||||
|
&& apk --no-cache add bash \
|
||||||
|
&& /src/build.sh
|
||||||
|
|
||||||
EXPOSE 53/udp 53
|
EXPOSE 53/udp 53
|
||||||
|
|
||||||
VOLUME ["/src/zones"]
|
VOLUME ["/src/zones"]
|
||||||
|
@ -29,5 +16,5 @@ VOLUME ["/src/zones"]
|
||||||
HEALTHCHECK --interval=30s --timeout=5s \
|
HEALTHCHECK --interval=30s --timeout=5s \
|
||||||
CMD dig +short @localhost health.server.test TXT || exit 1
|
CMD dig +short @localhost health.server.test TXT || exit 1
|
||||||
|
|
||||||
ENTRYPOINT ["/usr/local/bin/coredns"]
|
ENTRYPOINT ["/src/docker-entrypoint.sh"]
|
||||||
CMD ["--"]
|
CMD ["coredns"]
|
||||||
|
|
45
build.sh
Normal file → Executable file
45
build.sh
Normal file → Executable file
|
@ -1,28 +1,33 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -euxo pipefail
|
set -euxo pipefail
|
||||||
|
|
||||||
# Download sourcecode
|
# Install build utilities
|
||||||
mkdir -p /go/src/github.com/coredns
|
apk --no-cache add curl
|
||||||
git clone https://github.com/coredns/coredns.git /go/src/github.com/coredns/coredns
|
|
||||||
|
|
||||||
# Ensure version pinning
|
# Install dependencies
|
||||||
cd /go/src/github.com/coredns/coredns
|
apk --no-cache add python3 bind-tools
|
||||||
git reset --hard ${COREDNS_VERSION}
|
|
||||||
|
|
||||||
# Copy cron drop-in
|
# Get latest versions of tools using latestver
|
||||||
cp /src/cron_generate.go .
|
COREDNS_VERSION=$(curl -sSfL 'https://lv.luzifer.io/catalog-api/coredns/latest.txt?p=version')
|
||||||
|
DUMB_INIT_VERSION=$(curl -sSfL 'https://lv.luzifer.io/catalog-api/dumb-init/latest.txt?p=version')
|
||||||
|
|
||||||
# Get dependencies and build
|
[ -z "${COREDNS_VERSION}" ] && { exit 1; }
|
||||||
go get -d -v
|
[ -z "${DUMB_INIT_VERSION}" ] && { exit 1; }
|
||||||
|
|
||||||
# Force downgrades not being pinned
|
# Install tools
|
||||||
CWD=$(pwd)
|
curl -sSfL https://github.com/coredns/coredns/releases/download/v${COREDNS_VERSION}/coredns_${COREDNS_VERSION}_linux_amd64.tgz | \
|
||||||
cd ${GOPATH}/src/github.com/mholt/caddy && git checkout -q v0.10.10
|
tar -x -z -C /usr/local/bin
|
||||||
cd ${GOPATH}/src/github.com/miekg/dns && git checkout -q v1.0.4
|
|
||||||
cd ${GOPATH}/src/github.com/prometheus/client_golang && git checkout -q v0.8.0
|
|
||||||
cd ${GOPATH}/src/golang.org/x/net && git checkout -q release-branch.go1.9
|
|
||||||
cd ${GOPATH}/src/golang.org/x/text && git checkout -q e19ae1496984b1c655b8044a65c0300a3c878dd3
|
|
||||||
cd "${CWD}"
|
|
||||||
|
|
||||||
# Do the compile
|
curl -sSfLo /usr/local/bin/dumb-init https://github.com/Yelp/dumb-init/releases/download/v${DUMB_INIT_VERSION}/dumb-init_${DUMB_INIT_VERSION}_amd64
|
||||||
go install
|
chmod +x /usr/local/bin/dumb-init
|
||||||
|
|
||||||
|
# Install requirements for python3 scripts
|
||||||
|
pip3 install -r /src/requirements.txt
|
||||||
|
|
||||||
|
# Create cron to update zones periodically
|
||||||
|
echo "* * * * * run-parts /etc/periodic/1min" >> /var/spool/cron/crontabs/root
|
||||||
|
mkdir -p /etc/periodic/1min
|
||||||
|
ln -s /src/zonefile_cron /etc/periodic/1min/zonefile_cron
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
apk --no-cache del curl
|
||||||
|
|
|
@ -1,44 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"os/exec"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/Sirupsen/logrus"
|
|
||||||
"github.com/robfig/cron"
|
|
||||||
)
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
c := cron.New()
|
|
||||||
c.AddFunc("0 * * * * *", generateZonefiles)
|
|
||||||
c.Start()
|
|
||||||
|
|
||||||
go generateZonefiles()
|
|
||||||
}
|
|
||||||
|
|
||||||
func generateZonefiles() {
|
|
||||||
logger := logrus.WithFields(logrus.Fields{
|
|
||||||
"fkt": "generateZonefiles",
|
|
||||||
})
|
|
||||||
|
|
||||||
var (
|
|
||||||
iw = logger.WriterLevel(logrus.InfoLevel)
|
|
||||||
ew = logger.WriterLevel(logrus.ErrorLevel)
|
|
||||||
)
|
|
||||||
|
|
||||||
defer iw.Close()
|
|
||||||
defer ew.Close()
|
|
||||||
|
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), 59*time.Second)
|
|
||||||
defer cancel()
|
|
||||||
|
|
||||||
cmd := exec.CommandContext(ctx, "/usr/bin/python3", "generateZonefiles.py")
|
|
||||||
cmd.Stdout = iw
|
|
||||||
cmd.Stderr = ew
|
|
||||||
cmd.Dir = "/src"
|
|
||||||
|
|
||||||
if err := cmd.Run(); err != nil {
|
|
||||||
logger.WithError(err).Error("Command execution failed")
|
|
||||||
}
|
|
||||||
}
|
|
12
docker-entrypoint.sh
Executable file
12
docker-entrypoint.sh
Executable file
|
@ -0,0 +1,12 @@
|
||||||
|
#!/usr/local/bin/dumb-init /bin/bash
|
||||||
|
set -euxo pipefail
|
||||||
|
|
||||||
|
if [ "${1:-}" = 'coredns' ]; then
|
||||||
|
# Start crond in the background
|
||||||
|
crond
|
||||||
|
|
||||||
|
# Start coredns
|
||||||
|
exec "$@"
|
||||||
|
fi
|
||||||
|
|
||||||
|
exec "$@"
|
5
zonefile_cron
Executable file
5
zonefile_cron
Executable file
|
@ -0,0 +1,5 @@
|
||||||
|
#!/bin/bash
|
||||||
|
set -euxo pipefail
|
||||||
|
|
||||||
|
cd /src
|
||||||
|
exec /usr/bin/python3 generateZonefiles.py
|
Loading…
Reference in a new issue