diff --git a/packaging/docker/Dockerfile.alpine b/packaging/docker/Dockerfile.alpine index e07fed92e..1acdee100 100644 --- a/packaging/docker/Dockerfile.alpine +++ b/packaging/docker/Dockerfile.alpine @@ -23,11 +23,17 @@ ARG ALPINE_VERSION=3.13.1 -FROM alpine:${ALPINE_VERSION} AS dev - ARG DISTRO=alpine ARG ARCH=x86_64 ARG TRIPLET=x86_64-alpine-linux-musl +ARG PREFIX=/app + +FROM alpine:${ALPINE_VERSION} AS dev + +ARG DISTRO +ARG ARCH +ARG TRIPLET +ARG PREFIX # Toolchain RUN apk update && \ @@ -75,8 +81,7 @@ RUN echo -e "#!/bin/sh\n" | \ chmod +x /usr/bin/udevadm /bin/ldconfig && \ mv /sbin/ldconfig /sbin/ldconfig.orig -ENV PREFIX=/app -RUN mkdir /app +RUN mkdir ${PREFIX} # Install unpackaged dependencies from source ADD packaging/deps.sh / @@ -109,12 +114,14 @@ RUN --security=insecure \ FROM alpine:${ALPINE_VERSION} AS app -ARG DISTRO=alpine -ARG ARCH=x86_64 -ARG TRIPLET=x86_64-alpine-linux-musl +ARG DISTRO +ARG ARCH +ARG TRIPLET +ARG PREFIX RUN echo "@testing http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories +# Build-time dependencies RUN apk update RUN apk add \ bash \ @@ -141,26 +148,19 @@ RUN if [ "${ARCH}" != "armv6" -a "${ARCH}" != "armv7" ]; then \ nanomsg@testing; \ fi -COPY --from=builder /app /app -RUN ldconfig /app/lib /app/lib64 +COPY --from=builder ${PREFIX}} ${PREFIX}} +RUN ldconfig ${PREFIX}/lib ${PREFIX}/lib64 -ENV LD_LIBRARY_PATH=/app/lib:/app/lib64 -ENV PATH=/app/bin:${PATH} +ENV LD_LIBRARY_PATH=${PREFIX}/lib:${PREFIX}/lib64 +ENV PATH=${PREFIX}/bin:${PATH} # Test if it runs -RUN /app/bin/villas-node -h 2>&1 > /dev/null - -ARG GIT_REV=unknown -ARG GIT_BRANCH=unknown -ARG VERSION=unknown +RUN villas node -h 2>&1 > /dev/null LABEL \ org.label-schema.schema-version="1.0" \ org.label-schema.name="VILLASnode" \ org.label-schema.license="GPL-3.0" \ - org.label-schema.vcs-ref="$GIT_REV" \ - org.label-schema.vcs-branch="$GIT_BRANCH" \ - org.label-schema.version="$VERSION" \ org.label-schema.vendor="Institute for Automation of Complex Power Systems, RWTH Aachen University" \ org.label-schema.author.name="Steffen Vogel" \ org.label-schema.author.email="stvogel@eonerc.rwth-aachen.de" \ diff --git a/packaging/docker/Dockerfile.centos b/packaging/docker/Dockerfile.centos index 2d1d23116..0cb88c33d 100644 --- a/packaging/docker/Dockerfile.centos +++ b/packaging/docker/Dockerfile.centos @@ -20,12 +20,16 @@ # along with this program. If not, see . ################################################################################### -FROM centos:8 AS dev +ARG DISTRO=centos +ARG CENTOS_VERSION=8 +ARG ARCH=x86_64 +ARG TRIPLET=x86_64-linux-gnu -ARG GIT_REV=unknown -ARG GIT_BRANCH=unknown -ARG VERSION=unknown -ARG DISTRO=unknown +FROM ${DISTRO}:${CENTOS_VERSION} AS dev + +ARG DISTRO +ARG ARCH +ARG TRIPLET USER root @@ -67,10 +71,6 @@ RUN dnf -y install \ ENV echo /usr/local/lib >> /etc/ld.so.conf && \ echo /usr/local/lib64 >> /etc/ld.so.conf -ENV DISTRO=centos -ENV ARCH=x86_64 -ENV TRIPLET=x86_64-linux-gnu - # or install unpackaged dependencies from source ADD packaging/deps.sh / RUN bash deps.sh @@ -101,9 +101,6 @@ LABEL \ org.label-schema.schema-version="1.0" \ org.label-schema.name="VILLASnode" \ org.label-schema.license="GPL-3.0" \ - org.label-schema.vcs-ref="$GIT_REV" \ - org.label-schema.vcs-branch="$GIT_BRANCH" \ - org.label-schema.version="$VERSION" \ org.label-schema.vendor="Institute for Automation of Complex Power Systems, RWTH Aachen University" \ org.label-schema.author.name="Steffen Vogel" \ org.label-schema.author.email="stvogel@eonerc.rwth-aachen.de" \ diff --git a/packaging/docker/Dockerfile.debian b/packaging/docker/Dockerfile.debian index 85bd16ae8..83ddc38db 100644 --- a/packaging/docker/Dockerfile.debian +++ b/packaging/docker/Dockerfile.debian @@ -21,12 +21,16 @@ ################################################################################### # You can choose between Debian and Ubuntu here -FROM debian:bullseye AS dev +ARG DISTRO=debian +ARG DEBIAN_VERSION=bullseye +ARG ARCH=x86_64 +ARG TRIPLET=x86_64-linux-gnu -ARG GIT_REV=unknown -ARG GIT_BRANCH=unknown -ARG VERSION=unknown -ARG DISTRO=unknown +FROM ${DISTRO}:${DEBIAN_VERSION} AS dev + +ARG DISTRO +ARG ARCH +ARG TRIPLET ENV DEBIAN_FRONTEND=noninteractive @@ -70,10 +74,6 @@ RUN apt-get update && \ ENV echo /usr/local/lib >> /etc/ld.so.conf && \ echo /usr/local/lib64 >> /etc/ld.so.conf -ENV DISTRO=debian -ENV ARCH=x86_64 -ENV TRIPLET=x86_64-linux-gnu - # or install unpackaged dependencies from source ADD packaging/deps.sh / RUN bash deps.sh @@ -101,9 +101,6 @@ LABEL \ org.label-schema.schema-version="1.0" \ org.label-schema.name="VILLASnode" \ org.label-schema.license="GPL-3.0" \ - org.label-schema.vcs-ref="$GIT_REV" \ - org.label-schema.vcs-branch="$GIT_BRANCH" \ - org.label-schema.version="$VERSION" \ org.label-schema.vendor="Institute for Automation of Complex Power Systems, RWTH Aachen University" \ org.label-schema.author.name="Steffen Vogel" \ org.label-schema.author.email="stvogel@eonerc.rwth-aachen.de" \ diff --git a/packaging/docker/Dockerfile.debian-multiarch b/packaging/docker/Dockerfile.debian-multiarch index 7ed4bb859..6a4b21b82 100644 --- a/packaging/docker/Dockerfile.debian-multiarch +++ b/packaging/docker/Dockerfile.debian-multiarch @@ -21,15 +21,19 @@ ################################################################################### # You can choose between Debian and Ubuntu here -FROM debian:bullseye AS dev - -ARG GIT_REV=unknown -ARG GIT_BRANCH=unknown -ARG VERSION=unknown -ARG DISTRO=unknown - +ARG DISTRO=debian +ARG DEBIAN_VERSION=bullseye ARG ARCH=armhf ARG TRIPLET=arm-linux-gnueabihf +ARG PLATFORM=linux/arm/v7 +ARG PREFIX=/app + +FROM ${DISTRO}:${DEBIAN_VERSION} AS dev + +ARG DISTRO +ARG ARCH +ARG TRIPLET +ARG PREFIX ENV DEBIAN_FRONTEND=noninteractive @@ -46,7 +50,7 @@ RUN apt-get update && \ flex bison \ protobuf-compiler protobuf-c-compiler -# Dependencies +# Build-time dependencies RUN apt-get update && \ apt-get install -y \ libssl-dev:${ARCH} \ @@ -55,7 +59,8 @@ RUN apt-get update && \ libprotobuf-c-dev:${ARCH} \ uuid-dev:${ARCH} \ libconfig-dev:${ARCH} \ - libnl-3-dev libnl-route-3-dev:${ARCH} \ + libnl-3-dev \ + libnl-route-3-dev:${ARCH} \ libcurl4-openssl-dev:${ARCH} \ libjansson-dev:${ARCH} \ libzmq3-dev:${ARCH} \ @@ -80,10 +85,12 @@ ADD cmake/toolchains/debian-${ARCH}.cmake / ENV PKG_CONFIG_PATH=/usr/lib/${TRIPLET}/pkgconfig:/usr/local/lib/${TRIPLET}/pkgconfig ENV CMAKE_OPTS="-DCMAKE_TOOLCHAIN_FILE=/debian-${ARCH}.cmake \ - -DCMAKE_INSTALL_LIBDIR=/usr/local/lib/${TRIPLET} \ - -DLWS_INSTALL_LIB_DIR=/usr/local/lib/${TRIPLET}" + -DCMAKE_PREFIX_PATH=${PREFIX} \ + -DCMAKE_INSTALL_PREFIX=${PREFIX} \ + -DCMAKE_INSTALL_LIBDIR=${PREFIX}/lib/${TRIPLET} \ + -DLWS_INSTALL_LIB_DIR=${PREFIX}/lib/${TRIPLET}" -ENV CONFIGURE_OPTS="--libdir=/usr/local/lib/${TRIPLET}" +ENV CONFIGURE_OPTS="--libdir=${PREFIX}/lib/${TRIPLET}" RUN mkdir -p /usr/local/lib/${TRIPLET} @@ -95,9 +102,7 @@ ENV AS=${TRIPLET}-as ENV AR=${TRIPLET}-ar ENV RANLIB=${TRIPLET}-ranlib -ENV DISTRO=debian-multiarch -ENV ARCH=${ARCH} -ENV TRIPLET=${TRIPLET} +RUN mkdir ${PREFIX} # Install unpackaged dependencies from source ADD packaging/deps.sh / @@ -109,26 +114,74 @@ EXPOSE 443 WORKDIR /villas -FROM dev AS app +FROM dev AS builder COPY . /villas/ RUN rm -rf /villas/build && mkdir /villas/build WORKDIR /villas/build -RUN cmake .. && \ + +RUN cmake .. -DWITH_FPGA=OFF ${CMAKE_OPTS} && \ make -j$(nproc) doc && \ - make -j$(nproc) install && \ + make -j$(nproc) install + +FROM --platform=${PLATFORM} ${DISTRO}:${DEBIAN_VERSION} AS app + +ARG DISTRO +ARG ARCH +ARG TRIPLET +ARG PREFIX + +ENV DEBIAN_FRONTEND=noninteractive + +# Enable ${ARCH} architecture +RUN dpkg --add-architecture ${ARCH} + +# Run-time dependencies +RUN apt-get update && \ + apt-get install -y \ + libgomp1:${ARCH} \ + libprotobuf-c1:${ARCH} \ + libssl1.1:${ARCH} \ + libcgraph6:${ARCH} \ + libcdt5:${ARCH} \ + libgvc6:${ARCH} \ + libuuid1:${ARCH} \ + libconfig9:${ARCH} \ + libnl-3-200:${ARCH} \ + libnl-route-3-200:${ARCH} \ + libcurl4:${ARCH} \ + libjansson4:${ARCH} \ + libzmq5:${ARCH} \ + libnanomsg5:${ARCH} \ + librabbitmq4:${ARCH} \ + libmosquitto1:${ARCH} \ + librdkafka1:${ARCH} \ + libcomedi0:${ARCH} \ + libibverbs1:${ARCH} \ + librdmacm1:${ARCH} \ + libusb-1.0-0:${ARCH} \ + libre0:${ARCH} \ + liblua5.3-0:${ARCH} \ + libhiredis0.14:${ARCH} && \ + rm -rf /var/lib/apt/lists/* + +COPY --from=builder ${PREFIX} ${PREFIX} +RUN echo "${PREFIX}/lib" >> /etc/ld.so.conf && \ + echo "${PREFIX}/lib/${TRIPLET}" >> /etc/ld.so.conf && \ ldconfig +ENV PATH=${PREFIX}/bin:${PATH} + +# Test if it runs +RUN villas node -h 2>&1 > /dev/null + ENTRYPOINT ["villas"] LABEL \ org.label-schema.schema-version="1.0" \ org.label-schema.name="VILLASnode" \ org.label-schema.license="GPL-3.0" \ - org.label-schema.vcs-ref="$GIT_REV" \ - org.label-schema.vcs-branch="$GIT_BRANCH" \ - org.label-schema.version="$VERSION" \ org.label-schema.vendor="Institute for Automation of Complex Power Systems, RWTH Aachen University" \ org.label-schema.author.name="Steffen Vogel" \ org.label-schema.author.email="stvogel@eonerc.rwth-aachen.de" \ diff --git a/packaging/docker/Dockerfile.fedora b/packaging/docker/Dockerfile.fedora index 1121b2a0e..d446c4b39 100644 --- a/packaging/docker/Dockerfile.fedora +++ b/packaging/docker/Dockerfile.fedora @@ -20,12 +20,16 @@ # along with this program. If not, see . ################################################################################### -FROM fedora:33 AS dev +ARG DISTRO=fedora +ARG FEDORA_VERSION=33 +ARG ARCH=x86_64 +ARG TRIPLET=x86_64-linux-gnu -ARG GIT_REV=unknown -ARG GIT_BRANCH=unknown -ARG VERSION=unknown -ARG DISTRO=unknown +FROM ${DISTRO}:${FEDORA_VERSION} AS dev + +ARG DISTRO +ARG ARCH +ARG TRIPLET # Toolchain RUN dnf -y install \ @@ -85,10 +89,6 @@ RUN dnf -y install \ RUN echo /usr/local/lib >> /etc/ld.so.conf && \ echo /usr/local/lib64 >> /etc/ld.so.conf -ENV DISTRO=fedora -ENV ARCH=x86_64 -ENV TRIPLET=x86_64-linux-gnu - # Install unpackaged dependencies from source ADD packaging/deps.sh / RUN bash deps.sh @@ -120,9 +120,6 @@ LABEL \ org.label-schema.schema-version="1.0" \ org.label-schema.name="VILLASnode" \ org.label-schema.license="GPL-3.0" \ - org.label-schema.vcs-ref="$GIT_REV" \ - org.label-schema.vcs-branch="$GIT_BRANCH" \ - org.label-schema.version="$VERSION" \ org.label-schema.vendor="Institute for Automation of Complex Power Systems, RWTH Aachen University" \ org.label-schema.author.name="Steffen Vogel" \ org.label-schema.author.email="stvogel@eonerc.rwth-aachen.de" \ diff --git a/packaging/docker/Dockerfile.fedora-minimal b/packaging/docker/Dockerfile.fedora-minimal index a7880ac29..e8819381a 100644 --- a/packaging/docker/Dockerfile.fedora-minimal +++ b/packaging/docker/Dockerfile.fedora-minimal @@ -20,7 +20,9 @@ # along with this program. If not, see . ################################################################################### -FROM fedora:33 AS dev +ARG DISTRO=fedora +ARG FEDORA_VERSION=33 +FROM ${DISTRO}:${FEDORA_VERSION} AS dev # Toolchain RUN dnf -y install \ @@ -45,11 +47,12 @@ COPY . /villas/ RUN rm -rf /villas/build && mkdir /villas/build WORKDIR /villas/build -RUN cmake -DCPACK_GENERATOR=RPM .. -RUN make -j$(nproc) doc -RUN make -j$(nproc) package -FROM fedora:33 +RUN cmake -DCPACK_GENERATOR=RPM .. && \ + make -j$(nproc) doc && \ + make -j$(nproc) package + +FROM ${DISTRO}:${FEDORA_VERSION} as app COPY --from=builder /villas/build/*.rpm /tmp/ RUN dnf -y install /tmp/*.rpm @@ -67,9 +70,6 @@ LABEL \ org.label-schema.schema-version="1.0" \ org.label-schema.name="VILLASnode" \ org.label-schema.license="GPL-3.0" \ - org.label-schema.vcs-ref="$GIT_REV" \ - org.label-schema.vcs-branch="$GIT_BRANCH" \ - org.label-schema.version="$VERSION" \ org.label-schema.vendor="Institute for Automation of Complex Power Systems, RWTH Aachen University" \ org.label-schema.author.name="Steffen Vogel" \ org.label-schema.author.email="stvogel@eonerc.rwth-aachen.de" \ diff --git a/packaging/docker/Dockerfile.ubuntu b/packaging/docker/Dockerfile.ubuntu index 3c7fc1f07..2381a1f3f 100644 --- a/packaging/docker/Dockerfile.ubuntu +++ b/packaging/docker/Dockerfile.ubuntu @@ -21,12 +21,17 @@ ################################################################################### # You can choose between Debian and Ubuntu here -FROM ubuntu:20.04 AS dev +ARG DISTRO=ubuntu +ARG UBUNTU_VERSION=20.04 +ARG DISTRO=${DISTRO} +ARG ARCH=x86_64 +ARG TRIPLET=x86_64-linux-gnu -ARG GIT_REV=unknown -ARG GIT_BRANCH=unknown -ARG VERSION=unknown -ARG DISTRO=unknown +FROM ${DISTRO}:${UBUNTU_VERSION} AS dev + +ARG DISTRO +ARG ARCH +ARG TRIPLET ENV DEBIAN_FRONTEND=noninteractive @@ -71,10 +76,6 @@ RUN apt-get update && \ ENV echo /usr/local/lib >> /etc/ld.so.conf && \ echo /usr/local/lib64 >> /etc/ld.so.conf -ENV DISTRO=ubuntu -ENV ARCH=x86_64 -ENV TRIPLET=x86_64-linux-gnu - # or install unpackaged dependencies from source ADD packaging/deps.sh / RUN bash deps.sh @@ -102,9 +103,6 @@ LABEL \ org.label-schema.schema-version="1.0" \ org.label-schema.name="VILLASnode" \ org.label-schema.license="GPL-3.0" \ - org.label-schema.vcs-ref="$GIT_REV" \ - org.label-schema.vcs-branch="$GIT_BRANCH" \ - org.label-schema.version="$VERSION" \ org.label-schema.vendor="Institute for Automation of Complex Power Systems, RWTH Aachen University" \ org.label-schema.author.name="Steffen Vogel" \ org.label-schema.author.email="stvogel@eonerc.rwth-aachen.de" \