From b86ded3d1cfa2161fcb18aee6eb5988ce90f4b62 Mon Sep 17 00:00:00 2001 From: bunkerity Date: Wed, 9 Dec 2020 17:36:39 +0100 Subject: [PATCH] autoconf - multi arch Dockerfile --- autoconf/Dockerfile-amd64 | 15 ++++++ autoconf/Dockerfile-arm32v7 | 22 ++++++++ autoconf/Dockerfile-arm64v8 | 22 ++++++++ autoconf/Dockerfile-i386 | 15 ++++++ autoconf/autoconf.py | 101 ------------------------------------ entrypoint/entrypoint.sh | 8 --- hooks/post_push | 16 +++--- hooks/pre_build | 2 +- 8 files changed, 84 insertions(+), 117 deletions(-) create mode 100644 autoconf/Dockerfile-amd64 create mode 100644 autoconf/Dockerfile-arm32v7 create mode 100644 autoconf/Dockerfile-arm64v8 create mode 100644 autoconf/Dockerfile-i386 delete mode 100644 autoconf/autoconf.py diff --git a/autoconf/Dockerfile-amd64 b/autoconf/Dockerfile-amd64 new file mode 100644 index 0000000..5cb2449 --- /dev/null +++ b/autoconf/Dockerfile-amd64 @@ -0,0 +1,15 @@ +FROM amd64/alpine + +RUN apk add py3-pip apache2-utils bash && \ + pip3 install docker && \ + mkdir /opt/entrypoint && \ + mkdir -p /opt/confs/site + +COPY confs/site/ /opt/confs/site +COPY entrypoint/* /opt/entrypoint/ +COPY autoconf/* /opt/entrypoint/ +RUN chmod +x /opt/entrypoint/*.py /opt/entrypoint/*.sh + +VOLUME /etc/nginx + +ENTRYPOINT ["/opt/entrypoint/entrypoint.py"] diff --git a/autoconf/Dockerfile-arm32v7 b/autoconf/Dockerfile-arm32v7 new file mode 100644 index 0000000..e8450b8 --- /dev/null +++ b/autoconf/Dockerfile-arm32v7 @@ -0,0 +1,22 @@ +FROM alpine AS builder + +ENV QEMU_URL https://github.com/balena-io/qemu/releases/download/v4.0.0%2Bbalena2/qemu-4.0.0.balena2-arm.tar.gz +RUN apk add curl && curl -L ${QEMU_URL} | tar zxvf - -C . --strip-components 1 + +FROM arm32v7/alpine + +COPY --from=builder qemu-arm-static /usr/bin + +RUN apk add py3-pip apache2-utils bash && \ + pip3 install docker && \ + mkdir /opt/entrypoint && \ + mkdir -p /opt/confs/site + +COPY confs/site/ /opt/confs/site +COPY entrypoint/* /opt/entrypoint/ +COPY autoconf/* /opt/entrypoint/ +RUN chmod +x /opt/entrypoint/*.py /opt/entrypoint/*.sh + +VOLUME /etc/nginx + +ENTRYPOINT ["/opt/entrypoint/entrypoint.py"] diff --git a/autoconf/Dockerfile-arm64v8 b/autoconf/Dockerfile-arm64v8 new file mode 100644 index 0000000..227058a --- /dev/null +++ b/autoconf/Dockerfile-arm64v8 @@ -0,0 +1,22 @@ +FROM alpine AS builder + +ENV QEMU_URL https://github.com/balena-io/qemu/releases/download/v4.0.0%2Bbalena2/qemu-4.0.0.balena2-aarch64.tar.gz +RUN apk add curl && curl -L ${QEMU_URL} | tar zxvf - -C . --strip-components 1 + +FROM arm64v8/alpine + +COPY --from=builder qemu-aarch64-static /usr/bin + +RUN apk add py3-pip apache2-utils bash && \ + pip3 install docker && \ + mkdir /opt/entrypoint && \ + mkdir -p /opt/confs/site + +COPY confs/site/ /opt/confs/site +COPY entrypoint/* /opt/entrypoint/ +COPY autoconf/* /opt/entrypoint/ +RUN chmod +x /opt/entrypoint/*.py /opt/entrypoint/*.sh + +VOLUME /etc/nginx + +ENTRYPOINT ["/opt/entrypoint/entrypoint.py"] diff --git a/autoconf/Dockerfile-i386 b/autoconf/Dockerfile-i386 new file mode 100644 index 0000000..2827599 --- /dev/null +++ b/autoconf/Dockerfile-i386 @@ -0,0 +1,15 @@ +FROM i386/alpine + +RUN apk add py3-pip apache2-utils bash && \ + pip3 install docker && \ + mkdir /opt/entrypoint && \ + mkdir -p /opt/confs/site + +COPY confs/site/ /opt/confs/site +COPY entrypoint/* /opt/entrypoint/ +COPY autoconf/* /opt/entrypoint/ +RUN chmod +x /opt/entrypoint/*.py /opt/entrypoint/*.sh + +VOLUME /etc/nginx + +ENTRYPOINT ["/opt/entrypoint/entrypoint.py"] diff --git a/autoconf/autoconf.py b/autoconf/autoconf.py deleted file mode 100644 index 37c33ee..0000000 --- a/autoconf/autoconf.py +++ /dev/null @@ -1,101 +0,0 @@ -#!/usr/bin/python3 - -import docker, datetime, subprocess, shutil, os - -def log(event) : - print("[" + str(datetime.datetime.now().replace(microsecond=0)) + "] AUTOCONF - " + event, flush=True) - -def replace_in_file(file, old_str, new_str) : - with open(file) as f : - data = f.read() - data = data[::-1].replace(old_str[::-1], new_str[::-1], 1)[::-1] - with open(file, "w") as f : - f.write(data) - -def generate(vars) : - vars_defaults = vars.copy() - vars_defaults.update(os.environ) - vars_defaults.update(vars) - subprocess.run(["/opt/entrypoint/site-config.sh", vars["SERVER_NAME"]], env=vars_defaults) - log("Generated config for " + vars["SERVER_NAME"]) - -def activate(vars) : - replace_in_file("/etc/nginx/nginx.conf", "}", "include /etc/nginx/" + vars["SERVER_NAME"] + "/server.conf;\n}") - subprocess.run(["/usr/sbin/nginx", "-s", "reload"]) - log("Activated config for " + vars["SERVER_NAME"]) - -def deactivate(vars) : - replace_in_file("/etc/nginx/nginx.conf", "include /etc/nginx/" + vars["SERVER_NAME"] + "/server.conf;\n", "") - subprocess.run(["/usr/sbin/nginx", "-s", "reload"]) - log("Deactivated config for " + vars["SERVER_NAME"]) - -def remove(vars) : - shutil.rmtree("/etc/nginx/" + vars["SERVER_NAME"]) - log("Removed config for " + vars["SERVER_NAME"]) - -def process(id, event, vars) : - global containers - if event == "create" : - generate(vars) - containers.append(id) - elif event == "start" : - activate(vars) - elif event == "die" : - deactivate(vars) - elif event == "destroy" : - remove(vars) - containers.remove(id) - -containers = [] - -client = docker.DockerClient(base_url='unix:///var/run/docker.sock') - -# Process containers created before -for container in client.containers.list(all=True, filters={"label" : "bunkerized-nginx.SERVER_NAME"}) : - - # Extract bunkerized-nginx.* labels - labels = container.labels.copy() - for label in container.labels : - if not label.startswith("bunkerized-nginx.") : - del labels[label] - # Remove bunkerized-nginx. on labels - vars = { k.replace("bunkerized-nginx.", "", 1) : v for k, v in labels.items()} - - # Container is restarting or running - if container.status == "restarting" or container.status == "running" : - process(container.id, "create", vars) - process(container.id, "start", vars) - - # Container is created or exited - if container.status == "created" or container.status == "exited" : - process(container.id, "create", vars) - -for event in client.events(decode=True) : - - # Process only container events - if event["Type"] != "container" : - continue - - # Check if a bunkerized-nginx.* label is present - present = False - for label in event["Actor"]["Attributes"] : - if label.startswith("bunkerized-nginx.") : - present = True - break - if not present : - continue - - # Only process if we generated a config - if not event["id"] in containers and event["Action"] != "create" : - continue - - # Extract bunkerized-nginx.* labels - labels = event["Actor"]["Attributes"].copy() - for label in event["Actor"]["Attributes"] : - if not label.startswith("bunkerized-nginx.") : - del labels[label] - # Remove bunkerized-nginx. on labels - vars = { k.replace("bunkerized-nginx.", "", 1) : v for k, v in labels.items()} - - # Process the event - process(event["id"], event["Action"], vars) diff --git a/entrypoint/entrypoint.sh b/entrypoint/entrypoint.sh index 61d63c0..65dd6ba 100644 --- a/entrypoint/entrypoint.sh +++ b/entrypoint/entrypoint.sh @@ -111,14 +111,6 @@ if [ "$1" == "test" ] ; then exit 1 fi -# start the autoconf manager -if [ -S "/var/run/docker.sock" ] ; then - echo "[*] Running autoconf ..." - touch /var/log/autoconf.log - /opt/autoconf/autoconf.py > /var/log/autoconf.log 2>&1 & - LOGS="$LOGS /var/log/autoconf.log" -fi - # display logs tail -F $LOGS & wait $! diff --git a/hooks/post_push b/hooks/post_push index 4c8845a..4cf5620 100644 --- a/hooks/post_push +++ b/hooks/post_push @@ -3,10 +3,12 @@ curl -Lo manifest-tool https://github.com/estesp/manifest-tool/releases/download/v1.0.3/manifest-tool-linux-amd64 chmod +x manifest-tool -VERSION=$(cat VERSION | tr -d '\n') -if [ "$SOURCE_BRANCH" = "dev" ] ; then - ./manifest-tool push from-args --ignore-missing --platforms linux/amd64,linux/386,linux/arm/v7,linux/arm64/v8 --template bunkerity/bunkerized-nginx:dev-ARCHVARIANT --target bunkerity/bunkerized-nginx:dev -elif [ "$SOURCE_BRANCH" = "master" ] ; then - ./manifest-tool push from-args --ignore-missing --platforms linux/amd64,linux/386,linux/arm/v7,linux/arm64/v8 --template bunkerity/bunkerized-nginx:ARCHVARIANT --target bunkerity/bunkerized-nginx:${VERSION} - ./manifest-tool push from-args --ignore-missing --platforms linux/amd64,linux/386,linux/arm/v7,linux/arm64/v8 --template bunkerity/bunkerized-nginx:ARCHVARIANT --target bunkerity/bunkerized-nginx:latest -fi +echo "$DOCKER_REPO" + +#VERSION=$(cat VERSION | tr -d '\n') +#if [ "$SOURCE_BRANCH" = "dev" ] ; then +# ./manifest-tool push from-args --ignore-missing --platforms linux/amd64,linux/386,linux/arm/v7,linux/arm64/v8 --template bunkerity/bunkerized-nginx:dev-ARCHVARIANT --target bunkerity/bunkerized-nginx:dev +#elif [ "$SOURCE_BRANCH" = "master" ] ; then +# ./manifest-tool push from-args --ignore-missing --platforms linux/amd64,linux/386,linux/arm/v7,linux/arm64/v8 --template bunkerity/bunkerized-nginx:ARCHVARIANT --target bunkerity/bunkerized-nginx:${VERSION} +# ./manifest-tool push from-args --ignore-missing --platforms linux/amd64,linux/386,linux/arm/v7,linux/arm64/v8 --template bunkerity/bunkerized-nginx:ARCHVARIANT --target bunkerity/bunkerized-nginx:latest +#fi diff --git a/hooks/pre_build b/hooks/pre_build index 0a94f7e..acf05f1 100644 --- a/hooks/pre_build +++ b/hooks/pre_build @@ -1,5 +1,5 @@ #!/bin/bash -# Register qemu-*-static for all supported processors except the +# Register qemu-*-static for all supported processors except the # current one, but also remove all registered binfmt_misc before docker run --rm --privileged multiarch/qemu-user-static:register --reset