1
0
Fork 0
mirror of https://git.rwth-aachen.de/acs/public/villas/node/ synced 2025-03-23 00:00:01 +01:00
VILLASnode/packaging/docker/Dockerfile.debian-multiarch
Steffen Vogel f61c7d9b8f Fix formatting of Dockerfiles
Signed-off-by: Steffen Vogel <steffen.vogel@opal-rt.com>
2023-09-08 11:37:42 +02:00

182 lines
4.6 KiB
Text

# Debian Multiarch Dockerfile
#
# Author: Steffen Vogel <post@steffenvogel.de>
# SPDX-FileCopyrightText: 2014-2023 Institute for Automation of Complex Power Systems, RWTH Aachen University
# SPDX-License-Identifier: Apache-2.0
# You can choose between Debian and Ubuntu here
ARG DISTRO=debian
ARG DEBIAN_VERSION=bullseye
ARG ARCH=armhf
ARG TRIPLET=arm-linux-gnueabihf
ARG PREFIX=/app
FROM --platform=${BUILDPLATFORM} ${DISTRO}:${DEBIAN_VERSION} AS dev
ARG DISTRO
ARG ARCH
ARG TRIPLET
ARG PREFIX
ENV DEBIAN_FRONTEND=noninteractive
# Enable ${ARCH} architecture
RUN dpkg --add-architecture ${ARCH}
# Toolchain
RUN apt-get update && \
apt-get install -y \
crossbuild-essential-${ARCH} \
pkg-config cmake make \
autoconf automake autogen libtool \
texinfo git curl tar wget diffutils \
flex bison \
protobuf-compiler protobuf-c-compiler \
clang-format clangd
# Build-time dependencies
RUN apt-get update && \
apt-get install -y \
libssl-dev:${ARCH} \
libgraphviz-dev:${ARCH} \
libprotobuf-dev:${ARCH} \
libprotobuf-c-dev:${ARCH} \
uuid-dev:${ARCH} \
libconfig-dev:${ARCH} \
libnl-3-dev \
libnl-route-3-dev:${ARCH} \
libcurl4-openssl-dev:${ARCH} \
libjansson-dev:${ARCH} \
libzmq3-dev:${ARCH} \
libnanomsg-dev:${ARCH} \
librabbitmq-dev:${ARCH} \
libmosquitto-dev:${ARCH} \
librdkafka-dev:${ARCH} \
libcomedi-dev:${ARCH} \
libibverbs-dev:${ARCH} \
librdmacm-dev:${ARCH} \
libusb-1.0-0-dev:${ARCH} \
libre-dev:${ARCH} \
liblua5.3-dev:${ARCH} \
libhiredis-dev:${ARCH} \
libmodbus-dev:${ARCH}
# Add local and 64-bit locations to linker paths
ENV echo /usr/local/lib >> /etc/ld.so.conf && \
echo /usr/local/lib64 >> /etc/ld.so.conf
ADD cmake/toolchains/debian-${ARCH}.cmake /
ENV PKG_CONFIG_PATH=/usr/lib/${TRIPLET}/pkgconfig:/usr/local/lib/${TRIPLET}/pkgconfig
ENV CMAKE_EXTRA_OPTS="-DCMAKE_TOOLCHAIN_FILE=/debian-${ARCH}.cmake \
-DCMAKE_BUILD_TYPE=Release \
-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=${PREFIX}/lib/${TRIPLET}"
RUN mkdir -p /usr/local/lib/${TRIPLET}
ENV CPP=${TRIPLET}-cpp
ENV CC=${TRIPLET}-gcc
ENV CXX=${TRIPLET}-g++
ENV LD=${TRIPLET}-ld
ENV AS=${TRIPLET}-as
ENV AR=${TRIPLET}-ar
ENV RANLIB=${TRIPLET}-ranlib
RUN mkdir ${PREFIX}
# Install unpackaged dependencies from source
ADD packaging/deps.sh /
RUN bash deps.sh
# Expose ports for HTTP and WebSocket frontend
EXPOSE 80
EXPOSE 443
WORKDIR /villas
ENV LC_ALL C.UTF-8
ENV LANG C.UTF-8
FROM dev AS builder
ARG CMAKE_OPTS
COPY . /villas/
RUN rm -rf /villas/build && mkdir /villas/build
WORKDIR /villas/build
RUN cmake ${CMAKE_OPTS} ${CMAKE_EXTRA_OPTS} .. && \
make -j$(nproc) install
FROM --platform=${TARGETPLATFORM} ${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} \
libmodbus5:${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="Apache-2.0" \
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="post@steffenvogel.de" \
org.label-schema.description="A image containing all build-time dependencies for VILLASnode based on Fedora" \
org.label-schema.url="http://fein-aachen.org/projects/villas-framework/" \
org.label-schema.vcs-url="https://git.rwth-aachen.de/acs/public/villas/node" \
org.label-schema.usage="https://villas.fein-aachen.org/doc/node-installation.html#node-installation-docker"