diff --git a/contrib/docker/Dockerfile b/contrib/docker/Dockerfile index 4a6c7655..a6e5b3b9 100755 --- a/contrib/docker/Dockerfile +++ b/contrib/docker/Dockerfile @@ -1,13 +1,29 @@ -FROM debian:stretch + +FROM debian:stretch as build + +RUN apt-get update && apt-get install -y \ + libmosquitto-dev libstdc++6 libc6 libgcc1 \ + curl \ + autoconf automake g++ make git \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /build + +ENV EBUSD_VERSION 21.1 +ENV EBUSD_ARCH amd64 + +RUN git clone https://github.com/john30/ebusd.git /build \ + && ./make_debian.sh + +ARG UPLOAD_URL +ARG UPLOAD_CREDENTIALS + + + +FROM debian:stretch-slim RUN apt-get update && apt-get install -y \ logrotate libmosquitto1 libstdc++6 libc6 libgcc1 \ - curl \ - && rm -rf /var/lib/apt/lists/* - -RUN apt-get update && apt-get install -y \ - autoconf automake g++ make git \ - libmosquitto-dev \ && rm -rf /var/lib/apt/lists/* LABEL maintainer "ebusd@ebusd.eu" @@ -17,19 +33,13 @@ ENV EBUSD_ARCH amd64 LABEL version "${EBUSD_VERSION}-${EBUSD_ARCH}-devel" -WORKDIR /build +COPY --from=build /build/ebusd-*_mqtt1.deb ebusd.deb -RUN (curl -SL https://github.com/john30/ebusd/archive/master.tar.gz \ - | tar xz --strip-components=1) \ - && ./autogen.sh \ - && make install-strip - -WORKDIR / - -RUN rm -rf /build +RUN dpkg -i ebusd.deb \ + && rm -f ebusd.deb EXPOSE 8888 -COPY release/docker-entrypoint.sh / +COPY docker-entrypoint.sh / ENTRYPOINT ["/docker-entrypoint.sh"] CMD ["-f", "--scanconfig"] diff --git a/contrib/docker/Dockerfile.arm32v7 b/contrib/docker/Dockerfile.arm32v7 new file mode 100644 index 00000000..82984d4f --- /dev/null +++ b/contrib/docker/Dockerfile.arm32v7 @@ -0,0 +1,45 @@ +FROM multiarch/qemu-user-static as qemu +FROM arm32v7/debian:stretch as build +COPY --from=qemu /usr/bin/qemu-arm-static /usr/bin/ +RUN apt-get update && apt-get install -y \ + libmosquitto-dev libstdc++6 libc6 libgcc1 \ + curl \ + autoconf automake g++ make git \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /build + +ENV EBUSD_VERSION 21.1 +ENV EBUSD_ARCH arm32v7 + +RUN git clone https://github.com/john30/ebusd.git /build \ + && ./make_debian.sh + +ARG UPLOAD_URL +ARG UPLOAD_CREDENTIALS + + + +FROM arm32v7/debian:stretch-slim +COPY --from=qemu /usr/bin/qemu-arm-static /usr/bin/ +RUN apt-get update && apt-get install -y \ + logrotate libmosquitto1 libstdc++6 libc6 libgcc1 \ + && rm -rf /var/lib/apt/lists/* + +LABEL maintainer "ebusd@ebusd.eu" + +ENV EBUSD_VERSION 21.1 +ENV EBUSD_ARCH arm32v7 + +LABEL version "${EBUSD_VERSION}-${EBUSD_ARCH}-devel" + +COPY --from=build /build/ebusd-*_mqtt1.deb ebusd.deb + +RUN dpkg -i ebusd.deb \ + && rm -f ebusd.deb /usr/bin/qemu-arm-static + +EXPOSE 8888 + +COPY docker-entrypoint.sh / +ENTRYPOINT ["/docker-entrypoint.sh"] +CMD ["-f", "--scanconfig"] diff --git a/contrib/docker/Dockerfile.template b/contrib/docker/Dockerfile.template new file mode 100644 index 00000000..813175f0 --- /dev/null +++ b/contrib/docker/Dockerfile.template @@ -0,0 +1,45 @@ +%QEMU_FROM_LINE% +FROM %BASE_IMAGE% as build +%QEMU_FROM_COPY% +RUN apt-get update && apt-get install -y \ + libmosquitto-dev libstdc++6 libc6 libgcc1 \ + curl \ + autoconf automake g++ make git \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /build + +ENV EBUSD_VERSION %EBUSD_VERSION% +ENV EBUSD_ARCH %EBUSD_ARCH% + +RUN git clone https://github.com/john30/ebusd.git /build \ + && %EBUSD_MAKE% + +ARG UPLOAD_URL +ARG UPLOAD_CREDENTIALS +%EBUSD_UPLOAD_LINE% + + +FROM %BASE_IMAGE%-slim +%QEMU_FROM_COPY% +RUN apt-get update && apt-get install -y \ + logrotate libmosquitto1 libstdc++6 libc6 libgcc1 \ + && rm -rf /var/lib/apt/lists/* + +LABEL maintainer "ebusd@ebusd.eu" + +ENV EBUSD_VERSION %EBUSD_VERSION% +ENV EBUSD_ARCH %EBUSD_ARCH% + +LABEL version "${EBUSD_VERSION}-${EBUSD_ARCH}%EBUSD_VERSION_VARIANT%" + +COPY --from=build /build/ebusd-*_mqtt1.deb ebusd.deb + +RUN dpkg -i ebusd.deb \ + && rm -f ebusd.deb%EXTRA_RM% + +EXPOSE 8888 + +COPY docker-entrypoint.sh / +ENTRYPOINT ["/docker-entrypoint.sh"] +CMD ["-f", "--scanconfig"] diff --git a/contrib/docker/buildenv/Dockerfile b/contrib/docker/buildenv/Dockerfile deleted file mode 100644 index 4a71cea0..00000000 --- a/contrib/docker/buildenv/Dockerfile +++ /dev/null @@ -1,11 +0,0 @@ -FROM debian:jessie - -RUN apt-get update && apt-get install -y \ - autoconf automake g++ make git \ - libmosquitto-dev libstdc++6 libc6 libgcc1 \ - && rm -rf /var/lib/apt/lists/* - -LABEL maintainer "ebusd@ebusd.eu" - -WORKDIR /build -CMD ["/bin/bash"] diff --git a/contrib/docker/release/docker-entrypoint.sh b/contrib/docker/docker-entrypoint.sh old mode 100755 new mode 100644 similarity index 100% rename from contrib/docker/release/docker-entrypoint.sh rename to contrib/docker/docker-entrypoint.sh diff --git a/contrib/docker/hooks/pre_build b/contrib/docker/hooks/pre_build new file mode 100644 index 00000000..e87b937c --- /dev/null +++ b/contrib/docker/hooks/pre_build @@ -0,0 +1,9 @@ +#!/bin/bash +arch=$(echo "$DOCKERFILE_PATH" | cut -d '.' -f 2) +if [ "$arch" == "Dockerfile" ]; then + echo "QEMU not needed" + exit 0 +fi +echo "registering QEMU for $arch" +docker run --rm --privileged multiarch/qemu-user-static:register --reset +echo "QEMU registered for $arch" diff --git a/contrib/docker/release/Dockerfile b/contrib/docker/release/Dockerfile index 10cca863..f24d714c 100755 --- a/contrib/docker/release/Dockerfile +++ b/contrib/docker/release/Dockerfile @@ -1,8 +1,29 @@ -FROM debian:stretch + +FROM debian:stretch as build + +RUN apt-get update && apt-get install -y \ + libmosquitto-dev libstdc++6 libc6 libgcc1 \ + curl \ + autoconf automake g++ make git \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /build + +ENV EBUSD_VERSION 21.1 +ENV EBUSD_ARCH amd64 + +RUN git clone https://github.com/john30/ebusd.git /build \ + && ./make_all.sh + +ARG UPLOAD_URL +ARG UPLOAD_CREDENTIALS +RUN if [ -n "$UPLOAD_URL" ] && [ -n "$UPLOAD_CREDENTIALS" ]; then for img in ebusd-*.deb; do echo "upload $img"; curl -u "$UPLOAD_CREDENTIALS" -s -X POST --data-binary "@$img" -H "Content-Type: application/octet-stream" "$UPLOAD_URL/$img?a=$EBUSD_ARCH&v=$EBUSD_VERSION"; done; fi + + +FROM debian:stretch-slim RUN apt-get update && apt-get install -y \ logrotate libmosquitto1 libstdc++6 libc6 libgcc1 \ - curl \ && rm -rf /var/lib/apt/lists/* LABEL maintainer "ebusd@ebusd.eu" @@ -12,11 +33,10 @@ ENV EBUSD_ARCH amd64 LABEL version "${EBUSD_VERSION}-${EBUSD_ARCH}" -RUN curl -SL https://github.com/john30/ebusd/releases/download/v${EBUSD_VERSION}/ebusd-${EBUSD_VERSION}_${EBUSD_ARCH}-stretch_mqtt1.deb > ebusd.deb +COPY --from=build /build/ebusd-*_mqtt1.deb ebusd.deb -RUN dpkg -i ebusd.deb - -RUN rm ebusd.deb +RUN dpkg -i ebusd.deb \ + && rm -f ebusd.deb EXPOSE 8888 diff --git a/contrib/docker/release/Dockerfile.arm32v7 b/contrib/docker/release/Dockerfile.arm32v7 new file mode 100644 index 00000000..8b32dc5e --- /dev/null +++ b/contrib/docker/release/Dockerfile.arm32v7 @@ -0,0 +1,45 @@ +FROM multiarch/qemu-user-static as qemu +FROM arm32v7/debian:stretch as build +COPY --from=qemu /usr/bin/qemu-arm-static /usr/bin/ +RUN apt-get update && apt-get install -y \ + libmosquitto-dev libstdc++6 libc6 libgcc1 \ + curl \ + autoconf automake g++ make git \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /build + +ENV EBUSD_VERSION 21.1 +ENV EBUSD_ARCH arm32v7 + +RUN git clone https://github.com/john30/ebusd.git /build \ + && ./make_all.sh + +ARG UPLOAD_URL +ARG UPLOAD_CREDENTIALS +RUN if [ -n "$UPLOAD_URL" ] && [ -n "$UPLOAD_CREDENTIALS" ]; then for img in ebusd-*.deb; do echo "upload $img"; curl -u "$UPLOAD_CREDENTIALS" -s -X POST --data-binary "@$img" -H "Content-Type: application/octet-stream" "$UPLOAD_URL/$img?a=$EBUSD_ARCH&v=$EBUSD_VERSION"; done; fi + + +FROM arm32v7/debian:stretch-slim +COPY --from=qemu /usr/bin/qemu-arm-static /usr/bin/ +RUN apt-get update && apt-get install -y \ + logrotate libmosquitto1 libstdc++6 libc6 libgcc1 \ + && rm -rf /var/lib/apt/lists/* + +LABEL maintainer "ebusd@ebusd.eu" + +ENV EBUSD_VERSION 21.1 +ENV EBUSD_ARCH arm32v7 + +LABEL version "${EBUSD_VERSION}-${EBUSD_ARCH}" + +COPY --from=build /build/ebusd-*_mqtt1.deb ebusd.deb + +RUN dpkg -i ebusd.deb \ + && rm -f ebusd.deb /usr/bin/qemu-arm-static + +EXPOSE 8888 + +COPY docker-entrypoint.sh / +ENTRYPOINT ["/docker-entrypoint.sh"] +CMD ["-f", "--scanconfig"] diff --git a/contrib/docker/rpirelease/Dockerfile b/contrib/docker/rpirelease/Dockerfile deleted file mode 100755 index 4f924e8c..00000000 --- a/contrib/docker/rpirelease/Dockerfile +++ /dev/null @@ -1,28 +0,0 @@ -FROM balenalib/raspberrypi3:stretch - -RUN [ "cross-build-start" ] - -RUN install_packages \ - logrotate libmosquitto1 libstdc++6 libc6 libgcc1 \ - curl - -LABEL maintainer "ebusd@ebusd.eu" - -ENV EBUSD_VERSION 21.1 -ENV EBUSD_ARCH armhf - -LABEL version "${EBUSD_VERSION}-${EBUSD_ARCH}" - -RUN curl -SL https://github.com/john30/ebusd/releases/download/v${EBUSD_VERSION}/ebusd-${EBUSD_VERSION}_${EBUSD_ARCH}-stretch_mqtt1.deb > ebusd.deb - -RUN dpkg -i ebusd.deb - -RUN rm ebusd.deb - -RUN [ "cross-build-end" ] - -EXPOSE 8888 - -COPY docker-entrypoint.sh / -ENTRYPOINT ["/docker-entrypoint.sh"] -CMD ["-f", "--scanconfig"] diff --git a/contrib/docker/rpirelease/docker-entrypoint.sh b/contrib/docker/rpirelease/docker-entrypoint.sh deleted file mode 100755 index 142a9a26..00000000 --- a/contrib/docker/rpirelease/docker-entrypoint.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash -set -e - -if [ "${1#-}" != "$1" ]; then - set -- ebusd "$@" -fi - -exec "$@" \ No newline at end of file diff --git a/contrib/docker/update.sh b/contrib/docker/update.sh index 253be61a..5c77f967 100644 --- a/contrib/docker/update.sh +++ b/contrib/docker/update.sh @@ -1,7 +1,52 @@ -#!/bin/sh -set -e -export EBUSD_VERSION=`cat ../../VERSION` -export EBUSD_ARCH=`docker version|grep -i "Arch[^:]*:"|tail -n 1|sed -e 's#^.*/##'` -sed -i -e "s#^ENV EBUSD_VERSION .*\$#ENV EBUSD_VERSION ${EBUSD_VERSION}#" -e "s#^ENV EBUSD_ARCH .*\$#ENV EBUSD_ARCH ${EBUSD_ARCH}#" Dockerfile release/Dockerfile -sed -i -e "s#^ENV EBUSD_VERSION .*\$#ENV EBUSD_VERSION ${EBUSD_VERSION}#" rpirelease/Dockerfile +#!/bin/bash +BASE_IMAGE=debian:stretch +EBUSD_VERSION=`cat ../../VERSION` +archs='amd64 i386 arm32v7:arm arm64v8:aarch64' + +function replaceTemplate () { + prefix= + suffix= + qemu_from_line= + qemu_from_copy= + extra_rm= + if [ "$arch" != "amd64" ]; then + qemu="${arch##*:}" + arch="${arch%%:*}" + prefix="$arch/" + suffix=".$arch" + qemu_from_line="FROM multiarch/qemu-user-static as qemu" + qemu_from_copy="COPY --from=qemu /usr/bin/qemu-$qemu-static /usr/bin/" + extra_rm=" /usr/bin/qemu-$qemu-static" + fi + sed \ + -e "s#%QEMU_FROM_LINE%#${qemu_from_line}#g" \ + -e "s#%BASE_IMAGE%#${prefix}${BASE_IMAGE}#g" \ + -e "s#%QEMU_FROM_COPY%#${qemu_from_copy}#g" \ + -e "s#%EBUSD_MAKE%#${make}#g" \ + -e "s#%EBUSD_VERSION%#${EBUSD_VERSION}#g" \ + -e "s#%EBUSD_VERSION_VARIANT%#${version_variant}#g" \ + -e "s#%EBUSD_ARCH%#${arch}#g" \ + -e "s#%EXTRA_RM%#${extra_rm}#g" \ + -e "s#%EBUSD_UPLOAD_LINE%#${upload_line}#g" \ + Dockerfile.template > "${dir}Dockerfile${suffix}" + echo "updated ${dir}Dockerfile${suffix}" +} + +# devel updates +version_variant='-devel' +make='./make_debian.sh' +dir='' +upload_line='' +for arch in $archs; do + replaceTemplate +done + +# release updates +version_variant='' +make='./make_all.sh' +dir='release/' +upload_line='RUN if [ -n "\$UPLOAD_URL" ] \&\& [ -n "\$UPLOAD_CREDENTIALS" ]; then for img in ebusd-*.deb; do echo "upload \$img"; curl -u "\$UPLOAD_CREDENTIALS" -s -X POST --data-binary "@\$img" -H "Content-Type: application/octet-stream" "\$UPLOAD_URL/\$img?a=\$EBUSD_ARCH\&v=\$EBUSD_VERSION"; done; fi' +for arch in $archs; do + replaceTemplate +done