From c41ac8d94b3efd872db40be6e66cebe01c53b8c5 Mon Sep 17 00:00:00 2001 From: alcapone1933 Date: Fri, 28 Oct 2022 18:50:16 +0200 Subject: [PATCH] commit --- Dockerfile | 26 ++++++++++++++++++++++++++ data/cronjob | 3 +++ data/ddns-update.sh | 24 ++++++++++++++++++++++++ data/entrypoint.sh | 40 ++++++++++++++++++++++++++++++++++++++++ data/healthcheck.sh | 23 +++++++++++++++++++++++ data/updip.txt | 1 + docker-compose.yml | 22 ++++++++++++++++++++++ 7 files changed, 139 insertions(+) create mode 100644 Dockerfile create mode 100644 data/cronjob create mode 100644 data/ddns-update.sh create mode 100644 data/entrypoint.sh create mode 100644 data/healthcheck.sh create mode 100644 data/updip.txt create mode 100644 docker-compose.yml diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..70aa1ea --- /dev/null +++ b/Dockerfile @@ -0,0 +1,26 @@ +FROM alpine:latest +# ipv64.net +LABEL maintainer="alcapone1933 " \ + org.opencontainers.image.created="$(date +%Y-%m-%d\ %H:%M)" \ + org.opencontainers.image.authors="alcapone1933 " \ + org.opencontainers.image.url="https://hub.docker.com/r/alcapone1933/drone-build-test" \ + org.opencontainers.image.version="v.0.0.1" \ + org.opencontainers.image.ref.name="alcapone1933/ddns-ipv64" \ + org.opencontainers.image.title="DDNS Updater ipv64.net" \ + org.opencontainers.image.description="Community DDNS Updater fuer ipv64.net" + +ENV TZ=Europe/Berlin +ENV CRON_TIME="*/15 * * * *" +ENV CRON_TIME_DIG="00 06 * * *" +RUN apk add --update --no-cache tzdata curl bash tini bind-tools && \ + rm -rf /var/cache/apk/* + +RUN mkdir -p /data /usr/local/bin/ /etc/cron.d/ +COPY data /data +RUN mv /data/entrypoint.sh /usr/local/bin/entrypoint.sh && mv /data/cronjob /etc/cron.d/container_cronjob && mv /data/healthcheck.sh /usr/local/bin/healthcheck.sh && \ + chmod 755 /data/ddns-update.sh && chmod 755 /usr/local/bin/entrypoint.sh && chmod 755 /usr/local/bin/healthcheck.sh && \ + chmod 755 /etc/cron.d/container_cronjob && touch /var/log/cron.log +VOLUME [ "/data" ] + +ENTRYPOINT ["/sbin/tini", "--", "/usr/local/bin/entrypoint.sh"] +HEALTHCHECK --interval=5s --timeout=30s --start-period=5s --retries=2 CMD /usr/local/bin/healthcheck.sh \ No newline at end of file diff --git a/data/cronjob b/data/cronjob new file mode 100644 index 0000000..d61cb41 --- /dev/null +++ b/data/cronjob @@ -0,0 +1,3 @@ +# Cronjob DDNS Updater ipv64.net +*/15 * * * * /bin/bash /data/ddns-update.sh >> /var/log/cron.log 2>&1 +00 06 * * * echo "`date +%Y-%m-%d\ %H:%M:%S` Deine DOMAIN ${DOMAIN_IPV64} HAT DIE IP=`dig +short ${DOMAIN_IPV64} A`" >> /var/log/cron.log 2>&1 \ No newline at end of file diff --git a/data/ddns-update.sh b/data/ddns-update.sh new file mode 100644 index 0000000..f99feab --- /dev/null +++ b/data/ddns-update.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash +DATUM=$(date +%Y-%m-%d\ %H:%M:%S) +PFAD="/data" +IP=$(curl -4s https://ipv64.net/wieistmeineip.php | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' | tail -n 1) +UPDIP=$(cat $PFAD/updip.txt) + +sleep 2 + +if [ "$IP" == "$UPDIP" ]; then + echo + echo "$DATUM KEIN UPDATE - Aktuelle IP=$UPDIP" + echo +else + echo + echo "$DATUM Update ..." + sleep 1 + echo "$DATUM UPDATE!!! - Update IP= $IP - Alte-IP: $UPDIP" + sleep 1 + echo "$IP" > $PFAD/updip.txt + echo + # curl -4sSL "https://ipv64.net/update.php?key=${DOMAIN_KEY}&domain=${DOMAIN_IPV64}&ip=${IP}" + # curl -4sSL https://ipv64.net/update.php?key=${DOMAIN_KEY}=${DOMAIN_IPV64}&ip=&ip6= + echo +fi diff --git a/data/entrypoint.sh b/data/entrypoint.sh new file mode 100644 index 0000000..55ed077 --- /dev/null +++ b/data/entrypoint.sh @@ -0,0 +1,40 @@ +#!/usr/bin/env bash +# set -x +set -e +sleep 15 +echo "================================ START DDNS UPDATER IPV64.NET ================================" + +if [ -z "${DOMAIN_KEY:-}" ] ; then + echo + echo "Sie haben keinen DOMAIN Key gesetzt, schauen die unter https://ipv64.net/dyndns.php nach bei DynDNS Updatehash" + echo + exit 1 +else + echo + echo "Sie haben einen DOMAIN Key gesetzt" + echo +fi + +if [ -z "${DOMAIN_IPV64:-}" ] ; then + echo + echo "Sie haben keine DOMAIN gesetzt, schauen die unter https://ipv64.net/dyndns.php nach bei Domain" + echo + exit 1 +else + echo + echo "Sie haben eine DOMAIN gesetzt" + echo + echo "Deine DOMAIN $DOMAIN_IPV64" +fi + +curl -sSL --fail https://ipv64.net/ > /dev/null || exit 1 +echo "${CRON_TIME} /bin/bash /data/ddns-update.sh >> /var/log/cron.log 2>&1" > /etc/cron.d/container_cronjob +echo "$CRON_TIME_DIG" 'echo "`date +%Y-%m-%d\ %H:%M:%S` Deine DOMAIN ${DOMAIN_IPV64} HAT DIE IP=`dig +short ${DOMAIN_IPV64} A`" >> /var/log/cron.log 2>&1' >> /etc/cron.d/container_cronjob + +sleep 2 + +/usr/bin/crontab /etc/cron.d/container_cronjob +/usr/sbin/crond + +set tail -f /var/log/cron.log "$@" +exec "$@" \ No newline at end of file diff --git a/data/healthcheck.sh b/data/healthcheck.sh new file mode 100644 index 0000000..efea849 --- /dev/null +++ b/data/healthcheck.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash +set -e +if [ -z "${DOMAIN_KEY:-}" ] ; then + echo + echo "Sie haben keinen DOMAIN Key gesetzt, schauen die unter https://ipv64.net/dyndns.php nach bei DynDNS Updatehash" + echo + exit 1 +else + echo + echo "Sie haben einen DOMAIN Key gesetzt" + echo +fi +if [ -z "${DOMAIN_IPV64:-}" ] ; then + echo + echo "Sie haben keine DOMAIN gesetzt, schauen die unter https://ipv64.net/dyndns.php nach bei Domain" + echo + exit 1 +else + echo + echo "Sie haben einen DOMAIN gesetzt" + echo +fi +curl -sSL --fail https://ipv64.net/ > /dev/null || exit 1 diff --git a/data/updip.txt b/data/updip.txt new file mode 100644 index 0000000..66a7605 --- /dev/null +++ b/data/updip.txt @@ -0,0 +1 @@ +1.1.1.1 diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..986644d --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,22 @@ +version: "3.9" +services: + ddnss-cron: + build: + dockerfile: ./Dockerfile + image: alcapone1933/ddns-ipv64:v0.0.1 + container_name: ddns-ipv64 + # restart: always + # volumes: + # - data:/data + environment: + - "TZ=Europe/Berlin" + # Standert Alle 15 Minuten + - "CRON_TIME=*/1 * * * *" + - "CRON_TIME_DIG=*/2 00 * * *" + - "DOMAIN_IPV64= + - "DOMAIN_KEY=" + + +# volumes: + # data: + # name: ddns