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" \