diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e78dce78a..2c3e13ddf 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -7,7 +7,6 @@ variables: DOCKER_FILE: packaging/docker/Dockerfile.dev DOCKER_TAG: ${CI_COMMIT_REF_NAME} DOCKER_IMAGE: registry.git.rwth-aachen.de/acs/public/villas/node - DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev MAKE_OPTS: -j32 RELEASEVER: '33' DOCKER_CLI_EXPERIMENTAL: enabled @@ -32,7 +31,8 @@ before_script: script: - docker buildx build ${DOCKER_OPTS} --file ${DOCKER_FILE} - --tag ${DOCKER_IMAGE_DEV}:${DOCKER_TAG} . + --tag ${DOCKER_IMAGE_DEV}:${DOCKER_TAG} + --target dev . tags: - shell - linux @@ -40,38 +40,49 @@ before_script: prepare:fedora:docker-dev: <<: *prepare_docker_dev variables: - DOCKER_FILE: packaging/docker/Dockerfile.dev - DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev + DISTRO: fedora + DOCKER_FILE: packaging/docker/Dockerfile.fedora + DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-fedora prepare:fedora:docker-dev-minimal: <<: *prepare_docker_dev variables: - DOCKER_FILE: packaging/docker/Dockerfile.dev-minimal - DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-minimal + DISTRO: fedora-minimal + DOCKER_FILE: packaging/docker/Dockerfile.fedora-minimal + DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-fedora-minimal prepare:ubuntu:docker-dev: <<: *prepare_docker_dev variables: - DOCKER_FILE: packaging/docker/Dockerfile.dev-ubuntu + DISTRO: ubuntu + DOCKER_FILE: packaging/docker/Dockerfile.ubuntu DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-ubuntu prepare:centos:docker-dev: <<: *prepare_docker_dev variables: - DOCKER_FILE: packaging/docker/Dockerfile.dev-centos + DISTRO: centos + DOCKER_FILE: packaging/docker/Dockerfile.centos DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-centos +prepare:alpine:docker-dev: + <<: *prepare_docker_dev + variables: + DISTRO: alpine + DOCKER_FILE: packaging/docker/Dockerfile.alpine + DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-alpine + prepare:debian-armhf:docker-dev: <<: *prepare_docker_dev variables: - DOCKER_FILE: packaging/docker/Dockerfile.dev-debian-multiarch + DOCKER_FILE: packaging/docker/Dockerfile.debian-multiarch DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-debian-armhf DOCKER_OPTS: --build-arg ARCH=armhf --build-arg TRIPLET=arm-linux-gnueabihf prepare:debian-arm64:docker-dev: <<: *prepare_docker_dev variables: - DOCKER_FILE: packaging/docker/Dockerfile.dev-debian-multiarch + DOCKER_FILE: packaging/docker/Dockerfile.debian-multiarch DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-debian-arm64 DOCKER_OPTS: --build-arg ARCH=arm64 --build-arg TRIPLET=aarch64-linux-gnu @@ -88,7 +99,7 @@ prepare:debian-arm64:docker-dev: expire_in: 1 week paths: - build/ - image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG} + image: ${DOCKER_IMAGE}/dev-fedora:${DOCKER_TAG} tags: - docker @@ -98,7 +109,7 @@ build:fedora:x86_64: build:fedora-minimal:x86_64: <<: *build variables: - DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-minimal + DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-fedora-minimal CMAKE_OPTS: -DWITH_GRAPHVIZ=OFF -DWITH_HOOKS=OFF -DWITH_WEB=OFF @@ -115,7 +126,7 @@ build:fedora-minimal:x86_64: build:fedora-minimal-default:x86_64: <<: *build variables: - DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-minimal + DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-fedora-minimal build:ubuntu:x86_64: <<: *build @@ -133,6 +144,12 @@ build:centos:x86_64: DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-centos CMAKE_OPTS: -DCMAKE_MODULE_PATH=/usr/local/lib64/cmake -DCMAKE_PREFIX_PATH=/usr/local +build:alpine:x86_64: + <<: *build + variables: + DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-alpine + CMAKE_OPTS: -DCMAKE_INSTALL_PREFIX=/app -DCMAKE_PREFIX_PATH=/app -DWITH_FPGA=OFF + build:debian-multiarch:armhf: <<: *build variables: @@ -153,7 +170,7 @@ build:docs: - mkdir -p build && cd build - cmake ${CMAKE_OPTS} .. - make ${MAKE_OPTS} doc - image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG} + image: ${DOCKER_IMAGE}/dev:${DOCKER_TAG} tags: - docker @@ -165,7 +182,7 @@ test:flake8: stage: test script: - flake8 python/ - image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG} + image: ${DOCKER_IMAGE}/dev:${DOCKER_TAG} tags: - docker @@ -185,7 +202,7 @@ test:cppcheck: src/ lib/ tests/unit/ | tee cppcheck.log - image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG} + image: ${DOCKER_IMAGE}/dev:${DOCKER_TAG} dependencies: - build:fedora:x86_64 tags: @@ -208,7 +225,7 @@ test:unit: - mkdir -p build && cd build - cmake ${CMAKE_OPTS} .. - make ${MAKE_OPTS} run-unit-tests - image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG} + image: ${DOCKER_IMAGE}/dev:${DOCKER_TAG} tags: - docker @@ -226,26 +243,34 @@ test:integration: when: always paths: - build/tests/integration/ - image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG} + image: ${DOCKER_IMAGE}/dev:${DOCKER_TAG} tags: - docker # Stage: packaging ############################################################################## -packaging:docker: +.packaging:docker: &packaging_docker stage: packaging image: docker:19.03 - before_script: - - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY script: - docker build - --build-arg BUILDER_IMAGE=${DOCKER_IMAGE_DEV}:${DOCKER_TAG} - --file packaging/docker/Dockerfile.app - --tag ${DOCKER_IMAGE}:${DOCKER_TAG} . + --target app + --file packaging/docker/Dockerfile.${DISTRO} + --tag ${DOCKER_IMAGE}:${DISTRO}-${DOCKER_TAG} . tags: - docker +packaging:docker:fedora:x86_64: + <<: *packaging_docker + variables: + DISTRO: fedora + +packaging:docker:alpine:x86_64: + <<: *packaging_docker + variables: + DISTRO: alpine + packaging:rpm: stage: packaging dependencies: @@ -261,7 +286,7 @@ packaging:rpm: paths: - build/*.tar.gz - build/*.rpm - image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG} + image: ${DOCKER_IMAGE}/dev:${DOCKER_TAG} tags: - docker @@ -302,45 +327,6 @@ deploy:web: tags: - docker -.deploy:docker: &deploy_docker_latest - stage: deploy - image: docker:19.03 - before_script: - - docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY} - script: - - docker tag ${DOCKER_IMAGE}:${DOCKER_TAG} ${DOCKER_IMAGE}:latest - - docker tag ${DOCKER_IMAGE}/dev:${DOCKER_TAG} ${DOCKER_IMAGE}/dev:latest - - docker tag ${DOCKER_IMAGE}/dev-ubuntu:${DOCKER_TAG} ${DOCKER_IMAGE}/dev-ubuntu:latest - - docker tag ${DOCKER_IMAGE}/dev-centos:${DOCKER_TAG} ${DOCKER_IMAGE}/dev-centos:latest - - docker tag ${DOCKER_IMAGE}/dev-debian-arm64:${DOCKER_TAG} ${DOCKER_IMAGE}/dev-debian-arm64:latest - - docker tag ${DOCKER_IMAGE}/dev-debian-armhf:${DOCKER_TAG} ${DOCKER_IMAGE}/dev-debian-armhf:latest - - docker push ${DOCKER_IMAGE}:latest - - docker push ${DOCKER_IMAGE}/dev:latest - - docker push ${DOCKER_IMAGE}/dev-ubuntu:latest - - docker push ${DOCKER_IMAGE}/dev-centos:latest - - docker push ${DOCKER_IMAGE}/dev-debian-arm64:latest - - docker push ${DOCKER_IMAGE}/dev-debian-armhf:latest - tags: - - docker - -deploy:docker:tags: - stage: deploy - image: docker:19.03 - before_script: - - docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY} - script: - - docker push ${DOCKER_IMAGE}:${DOCKER_TAG} - - docker push ${DOCKER_IMAGE}/dev:${DOCKER_TAG} - - docker push ${DOCKER_IMAGE}/dev-ubuntu:${DOCKER_TAG} - - docker push ${DOCKER_IMAGE}/dev-centos:${DOCKER_TAG} - - docker push ${DOCKER_IMAGE}/dev-debian-arm64:${DOCKER_TAG} - - docker push ${DOCKER_IMAGE}/dev-debian-armhf:${DOCKER_TAG} - tags: - - docker - only: - # Only on version tags - - "/^v\\d+(\\.\\d+)+$/" - deploy:packages:manual: <<: *deploy_packages when: manual @@ -351,6 +337,30 @@ deploy:packages:tags: # Only on version tags - "/^v\\d+(\\.\\d+)+$/" +.deploy:docker: &deploy_docker + stage: deploy + image: docker:19.03 + before_script: + - docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY} + +.deploy:docker:latest: &deploy_docker_latest + <<: *deploy_docker + script: + - docker tag ${DOCKER_IMAGE}:${DOCKER_TAG} ${DOCKER_IMAGE}:latest + - docker tag ${DOCKER_IMAGE}/dev-fedora:${DOCKER_TAG} ${DOCKER_IMAGE}/dev-fedora:latest + - docker tag ${DOCKER_IMAGE}/dev-ubuntu:${DOCKER_TAG} ${DOCKER_IMAGE}/dev-ubuntu:latest + - docker tag ${DOCKER_IMAGE}/dev-centos:${DOCKER_TAG} ${DOCKER_IMAGE}/dev-centos:latest + - docker tag ${DOCKER_IMAGE}/dev-debian-arm64:${DOCKER_TAG} ${DOCKER_IMAGE}/dev-debian-arm64:latest + - docker tag ${DOCKER_IMAGE}/dev-debian-armhf:${DOCKER_TAG} ${DOCKER_IMAGE}/dev-debian-armhf:latest + - docker push ${DOCKER_IMAGE}:latest + - docker push ${DOCKER_IMAGE}/dev-fedora:latest + - docker push ${DOCKER_IMAGE}/dev-ubuntu:latest + - docker push ${DOCKER_IMAGE}/dev-centos:latest + - docker push ${DOCKER_IMAGE}/dev-debian-arm64:latest + - docker push ${DOCKER_IMAGE}/dev-debian-armhf:latest + tags: + - docker + deploy:docker:manual: <<: *deploy_docker_latest when: manual @@ -360,3 +370,18 @@ deploy:docker:tags: only: # Only on version tags - "/^v\\d+(\\.\\d+)+$/" + +deploy:docker:tags: + <<: *deploy_docker + script: + - docker push ${DOCKER_IMAGE}:${DOCKER_TAG} + - docker push ${DOCKER_IMAGE}/dev-fedora:${DOCKER_TAG} + - docker push ${DOCKER_IMAGE}/dev-ubuntu:${DOCKER_TAG} + - docker push ${DOCKER_IMAGE}/dev-centos:${DOCKER_TAG} + - docker push ${DOCKER_IMAGE}/dev-debian-arm64:${DOCKER_TAG} + - docker push ${DOCKER_IMAGE}/dev-debian-armhf:${DOCKER_TAG} + tags: + - docker + only: + # Only on version tags + - "/^v\\d+(\\.\\d+)+$/" diff --git a/packaging/CMakeLists.txt b/packaging/CMakeLists.txt index 0a75786a2..94337d18a 100644 --- a/packaging/CMakeLists.txt +++ b/packaging/CMakeLists.txt @@ -52,5 +52,3 @@ install( COMPONENT devel DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/pkgconfig ) - -add_subdirectory(docker) diff --git a/packaging/deps.sh b/packaging/deps.sh index 8e432194b..7b6078325 100644 --- a/packaging/deps.sh +++ b/packaging/deps.sh @@ -112,7 +112,7 @@ fi # Build & Install uldaq if ! pkg-config "libuldaq >= 1.0.0" && \ - [ "${VARIANT}" != "debian-multiarch" ]; then + [ "${DISTRO}" != "debian-multiarch" ]; then git clone https://github.com/stv0g/uldaq pushd uldaq git checkout rpmbuild diff --git a/packaging/docker/CMakeLists.txt b/packaging/docker/CMakeLists.txt deleted file mode 100644 index 482389dd9..000000000 --- a/packaging/docker/CMakeLists.txt +++ /dev/null @@ -1,89 +0,0 @@ -# CMakeLists.txt. -# -# @author Steffen Vogel -# @copyright 2014-2020, Institute for Automation of Complex Power Systems, EONERC -# @license GNU General Public License (version 3) -# -# VILLASnode -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -################################################################################### - -set(DOCKER_FILE Dockerfile) -set(DOCKER_IMAGE registry.git.rwth-aachen.de/acs/public/villas/node) -set(DOCKER_TAG ${CMAKE_PROJECT_GIT_BRANCH}) -set(DOCKER_RUN_OPTS - --interactive - --tty - --publish 80:80 - --publish 443:443 - --publish 12000:12000/udp - --publish 12001:12001/udp - --publish 2345:2345 - --privileged - --security-opt seccomp:unconfined - --volume \"${PROJECT_SOURCE_DIR}:/villas\" -) - -foreach(SUFFIX app dev dev-centos dev-ubuntu) - add_custom_target(deploy-docker-${SUFFIX} - COMMAND docker push ${DOCKER_IMAGE}/${SUFFIX}:${DOCKER_TAG} - COMMAND docker push ${DOCKER_IMAGE}/${SUFFIX}:latest - COMMENT "Deploy Docker image: ${DOCKER_IMAGE}/${SUFFIX}:${DOCKER_TAG}" - ) - - add_custom_target(run-docker-${SUFFIX} - COMMAND docker run ${DOCKER_RUN_OPTS} ${DOCKER_IMAGE}/${SUFFIX}:${DOCKER_TAG} - COMMENT "Run Docker image: ${DOCKER_IMAGE}/${SUFFIX}:${DOCKER_TAG}" - ) - - add_custom_target(docker-${SUFFIX} - COMMAND docker build - --file ${CMAKE_CURRENT_SOURCE_DIR}/Dockerfile.${SUFFIX} - --tag ${DOCKER_IMAGE}/${SUFFIX}:${DOCKER_TAG} - --tag ${DOCKER_IMAGE}/${SUFFIX}:latest - --build-arg BUILDER_IMAGE=${DOCKER_IMAGE}/dev:${DOCKER_TAG} - --build-arg DOCKER_TAG=${DOCKER_TAG} - --build-arg GIT_BRANCH=${CMAKE_PROJECT_GIT_BRANCH} - --build-arg GIT_REV=${CMAKE_PROJECT_GIT_REV} - --build-arg VERSION=${CMAKE_PROJECT_VERSION} - --build-arg VARIANT=${CMAKE_PROJECT_VARIANT} - ${DOCKER_BUILD_OPTS} ${PROJECT_SOURCE_DIR} - COMMENT "Build Docker image: ${DOCKER_IMAGE}/${SUFFIX}:${DOCKER_TAG}" - ) - - add_dependencies(deploy-docker-${SUFFIX} docker-${SUFFIX}) - add_dependencies(run-docker-${SUFFIX} docker-${SUFFIX}) -endforeach() - -# Special cases for 'docker' target -add_custom_target(run-docker - COMMAND docker run ${DOCKER_RUN_OPTS} ${DOCKER_IMAGE}:${DOCKER_TAG} node -h - COMMENT "Run Docker image: ${DOCKER_IMAGE}:${DOCKER_TAG}" -) - -add_custom_target(docker - COMMAND docker tag ${DOCKER_IMAGE}/app:${DOCKER_TAG} ${DOCKER_IMAGE}:${DOCKER_TAG} - COMMAND docker tag ${DOCKER_IMAGE}/app:${DOCKER_TAG} ${DOCKER_IMAGE}:latest -) - -add_custom_target(deploy-docker DEPENDS docker-app - COMMAND docker push ${DOCKER_IMAGE}:${DOCKER_TAG} - COMMAND docker push ${DOCKER_IMAGE}:latest -) - -add_dependencies(docker docker-app) -add_dependencies(docker-app docker-dev) -add_dependencies(deploy-docker deploy-docker-app) -add_dependencies(run-docker docker) diff --git a/packaging/docker/Dockerfile.dev-alpine b/packaging/docker/Dockerfile.alpine similarity index 74% rename from packaging/docker/Dockerfile.dev-alpine rename to packaging/docker/Dockerfile.alpine index dd0fdaaf4..79210c286 100644 --- a/packaging/docker/Dockerfile.dev-alpine +++ b/packaging/docker/Dockerfile.alpine @@ -31,19 +31,19 @@ ARG GIT_REV=unknown ARG GIT_BRANCH=unknown ARG VERSION=unknown -ARG VARIANT=unknown -ARG ALPINE_VERSION=edge +ARG DISTRO=unknown -FROM alpine:${ALPINE_VERSION} AS builder +FROM alpine:edge AS dev # Toolchain RUN apk update && \ apk add gcc g++ \ pkgconf cmake make \ autoconf automake libtool \ - git \ + git mercurial \ flex bison \ - protobuf + protobuf \ + file RUN echo "@testing http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories @@ -68,24 +68,44 @@ RUN apk update && \ mosquitto-dev \ libusb-dev -ENV VARIANT=alpine +ENV DISTRO=alpine ENV ARCH=x86_64 ENV TRIPLET=x86_64-linux-gnu +# Some fixes for Alpine +RUN echo -e "#!/bin/sh\n" | \ + tee /usr/bin/udevadm | \ + tee /bin/ldconfig && \ + chmod +x /usr/bin/udevadm /bin/ldconfig && \ + mv /sbin/ldconfig /sbin/ldconfig.orig + +# Disabling a few dependencies due to incompatability with musl-libc: +# https://github.com/creytiv/re/issues/256 +# https://github.com/mz-automation/libiec61850/issues/279 +ENV SKIP_CRITERION=1 +ENV SKIP_LIBRE=1 + +ENV PREFIX=/app +RUN mkdir /app + # Install unpackaged dependencies from source -# ADD packaging/deps.sh / -# RUN bash deps.sh && ldconfig +ADD packaging/deps.sh / +RUN bash deps.sh && \ + ldconfig.orig /usr/local/lib /usr/lib + +FROM dev AS builder COPY . /villas/ RUN mkdir -p /villas/build WORKDIR /villas/build -RUN cmake .. && \ - make -j$(nproc) doc && \ - make -j$(nproc) install && \ - ldconfig +RUN cmake -DCMAKE_INSTALL_PREFIX=${PREFIX} \ + -DCMAKE_PREFIX_PATH=${PREFIX} .. && \ + make -j$(nproc) install -FROM alpine:${ALPINE_VERSION} +FROM alpine:edge AS app + +RUN echo "@testing http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories RUN apk add \ openssl \ @@ -106,6 +126,12 @@ RUN apk add \ mosquitto \ libusb +COPY --from=builder /app /app +RUN ldconfig /app/lib /app/lib64 + +ENV LD_LIBRARY_PATH=/app/lib:/app/lib64 +ENV PATH=/app/bin:${PATH} + LABEL \ org.label-schema.schema-version="1.0" \ org.label-schema.name="VILLASnode" \ @@ -113,7 +139,6 @@ LABEL \ org.label-schema.vcs-ref="$GIT_REV" \ org.label-schema.vcs-branch="$GIT_BRANCH" \ org.label-schema.version="$VERSION" \ - org.label-schema.variant="$VARIANT" \ 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" \ @@ -121,3 +146,5 @@ LABEL \ 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" + +ENTRYPOINT ["villas"] diff --git a/packaging/docker/Dockerfile.app b/packaging/docker/Dockerfile.app deleted file mode 100644 index 2efb7f13c..000000000 --- a/packaging/docker/Dockerfile.app +++ /dev/null @@ -1,66 +0,0 @@ -# Dockerfile -# -# This image can be used for running VILLASnode -# by running: -# make docker -# -# @author Steffen Vogel -# @copyright 2014-2020, Institute for Automation of Complex Power Systems, EONERC -# @license GNU General Public License (version 3) -# -# VILLASnode -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -################################################################################### - -ARG BUILDER_IMAGE=villas/node-dev -ARG DOCKER_TAG=latest -ARG GIT_REV=unknown -ARG GIT_BRANCH=unknown -ARG VERSION=unknown -ARG VARIANT=unknown - -# This image is built by villas-node-git/packaging/docker/Dockerfile.dev -FROM $BUILDER_IMAGE - -COPY . /villas/ - -RUN rm -rf /villas/build && mkdir /villas/build -WORKDIR /villas/build -RUN cmake .. && \ - make -j$(nproc) doc && \ - make -j$(nproc) install && \ - ldconfig - -# For WebSocket / API access -EXPOSE 80 -EXPOSE 443 - -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.variant="$VARIANT" \ - 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" \ - org.label-schema.description = "A image containing 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" diff --git a/packaging/docker/Dockerfile.app-rpm b/packaging/docker/Dockerfile.app-rpm deleted file mode 100644 index f0982d668..000000000 --- a/packaging/docker/Dockerfile.app-rpm +++ /dev/null @@ -1,73 +0,0 @@ -# Dockerfile -# -# This image can be used for running VILLASnode -# by running: -# make docker -# -# @author Steffen Vogel -# @copyright 2014-2020, Institute for Automation of Complex Power Systems, EONERC -# @license GNU General Public License (version 3) -# -# VILLASnode -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -################################################################################### - -ARG BUILDER_IMAGE=villas/node-dev -ARG DOCKER_TAG=latest -ARG GIT_REV=unknown -ARG GIT_BRANCH=unknown -ARG VERSION=unknown -ARG VARIANT=unknown - -# This image is built by villas-node-git/packaging/docker/Dockerfile.dev -FROM $BUILDER_IMAGE AS builder - -COPY . /villas/ - -RUN rm -rf /villas/build && mkdir /villas/build -WORKDIR /villas/build -RUN cmake -DCPACK_GENERATOR=RPM -DWITH_NODE_ETHERCAT=OFF .. -RUN make -j$(nproc) doc -RUN make -j$(nproc) package - -FROM fedora:32 - -# Some of the dependencies are only available in our own repo -ADD https://packages.fein-aachen.org/fedora/fein.repo /etc/yum.repos.d/ - -COPY --from=builder /villas/build/*.rpm /tmp/ -RUN dnf -y install /tmp/*.rpm - -# For WebSocket / API access -EXPOSE 80 -EXPOSE 443 - -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.variant="$VARIANT" \ - 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" \ - org.label-schema.description = "A image containing 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" diff --git a/packaging/docker/Dockerfile.dev-centos b/packaging/docker/Dockerfile.centos similarity index 97% rename from packaging/docker/Dockerfile.dev-centos rename to packaging/docker/Dockerfile.centos index 9d71da9f7..17830b237 100644 --- a/packaging/docker/Dockerfile.dev-centos +++ b/packaging/docker/Dockerfile.centos @@ -33,7 +33,7 @@ FROM centos:8 ARG GIT_REV=unknown ARG GIT_BRANCH=unknown ARG VERSION=unknown -ARG VARIANT=unknown +ARG DISTRO=unknown USER root @@ -72,7 +72,7 @@ RUN dnf -y install \ ENV echo /usr/local/lib >> /etc/ld.so.conf && \ echo /usr/local/lib64 >> /etc/ld.so.conf -ENV VARIANT=centos +ENV DISTRO=centos ENV ARCH=x86_64 ENV TRIPLET=x86_64-linux-gnu @@ -96,7 +96,6 @@ LABEL \ org.label-schema.vcs-ref="$GIT_REV" \ org.label-schema.vcs-branch="$GIT_BRANCH" \ org.label-schema.version="$VERSION" \ - org.label-schema.variant="$VARIANT" \ 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.dev-debian-multiarch b/packaging/docker/Dockerfile.debian-multiarch similarity index 98% rename from packaging/docker/Dockerfile.dev-debian-multiarch rename to packaging/docker/Dockerfile.debian-multiarch index 0f89f593e..e33429e78 100644 --- a/packaging/docker/Dockerfile.dev-debian-multiarch +++ b/packaging/docker/Dockerfile.debian-multiarch @@ -34,7 +34,7 @@ FROM debian:buster ARG GIT_REV=unknown ARG GIT_BRANCH=unknown ARG VERSION=unknown -ARG VARIANT=unknown +ARG DISTRO=unknown ARG ARCH=armhf ARG TRIPLET=arm-linux-gnueabihf @@ -106,7 +106,7 @@ ENV AS=${TRIPLET}-as ENV AR=${TRIPLET}-ar ENV RANLIB=${TRIPLET}-ranlib -ENV VARIANT=debian-multiarch +ENV DISTRO=debian-multiarch ENV ARCH=${ARCH} ENV TRIPLET=${TRIPLET} @@ -127,7 +127,6 @@ LABEL \ org.label-schema.vcs-ref="$GIT_REV" \ org.label-schema.vcs-branch="$GIT_BRANCH" \ org.label-schema.version="$VERSION" \ - org.label-schema.variant="$VARIANT" \ 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.dev b/packaging/docker/Dockerfile.fedora similarity index 91% rename from packaging/docker/Dockerfile.dev rename to packaging/docker/Dockerfile.fedora index 7fea2bb4c..e011cc1a1 100644 --- a/packaging/docker/Dockerfile.dev +++ b/packaging/docker/Dockerfile.fedora @@ -28,12 +28,12 @@ # along with this program. If not, see . ################################################################################### -FROM fedora:33 +FROM fedora:33 AS dev ARG GIT_REV=unknown ARG GIT_BRANCH=unknown ARG VERSION=unknown -ARG VARIANT=unknown +ARG DISTRO=unknown # Toolchain RUN dnf -y install \ @@ -90,7 +90,7 @@ RUN dnf -y install \ RUN echo /usr/local/lib >> /etc/ld.so.conf && \ echo /usr/local/lib64 >> /etc/ld.so.conf -ENV VARIANT=fedora +ENV DISTRO=fedora ENV ARCH=x86_64 ENV TRIPLET=x86_64-linux-gnu @@ -107,7 +107,24 @@ EXPOSE 80 EXPOSE 443 WORKDIR /villas -ENTRYPOINT bash +ENTRYPOINT ["bash"] + +FROM dev AS app + +COPY . /villas/ + +RUN rm -rf /villas/build && mkdir /villas/build +WORKDIR /villas/build +RUN cmake .. && \ + make -j$(nproc) doc && \ + make -j$(nproc) install && \ + ldconfig + +# For WebSocket / API access +EXPOSE 80 +EXPOSE 443 + +ENTRYPOINT ["villas"] LABEL \ org.label-schema.schema-version="1.0" \ @@ -116,7 +133,6 @@ LABEL \ org.label-schema.vcs-ref="$GIT_REV" \ org.label-schema.vcs-branch="$GIT_BRANCH" \ org.label-schema.version="$VERSION" \ - org.label-schema.variant="$VARIANT" \ 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.dev-minimal b/packaging/docker/Dockerfile.fedora-minimal similarity index 68% rename from packaging/docker/Dockerfile.dev-minimal rename to packaging/docker/Dockerfile.fedora-minimal index 765edb6ea..6257e05ed 100644 --- a/packaging/docker/Dockerfile.dev-minimal +++ b/packaging/docker/Dockerfile.fedora-minimal @@ -20,7 +20,7 @@ # along with this program. If not, see . ################################################################################### -FROM fedora:32 +FROM fedora:33 AS dev # Toolchain RUN dnf -y install \ @@ -38,3 +38,27 @@ RUN dnf -y install \ spdlog-devel \ fmt-devel \ libwebsockets-devel + +FROM dev AS builder + +COPY . /villas/ + +RUN rm -rf /villas/build && mkdir /villas/build +WORKDIR /villas/build +RUN cmake -DCPACK_GENERATOR=RPM -DWITH_NODE_ETHERCAT=OFF .. +RUN make -j$(nproc) doc +RUN make -j$(nproc) package + +FROM fedora:33 + +# Some of the dependencies are only available in our own repo +ADD https://packages.fein-aachen.org/fedora/fein.repo /etc/yum.repos.d/ + +COPY --from=builder /villas/build/*.rpm /tmp/ +RUN dnf -y install /tmp/*.rpm + +# For WebSocket / API access +EXPOSE 80 +EXPOSE 443 + +ENTRYPOINT ["villas"] diff --git a/packaging/docker/Dockerfile.dev-ubuntu b/packaging/docker/Dockerfile.ubuntu similarity index 97% rename from packaging/docker/Dockerfile.dev-ubuntu rename to packaging/docker/Dockerfile.ubuntu index 9e6a271bc..c40dc7da2 100644 --- a/packaging/docker/Dockerfile.dev-ubuntu +++ b/packaging/docker/Dockerfile.ubuntu @@ -34,7 +34,7 @@ FROM ubuntu:20.04 ARG GIT_REV=unknown ARG GIT_BRANCH=unknown ARG VERSION=unknown -ARG VARIANT=unknown +ARG DISTRO=unknown ENV DEBIAN_FRONTEND=noninteractive @@ -73,7 +73,7 @@ RUN apt-get update && \ ENV echo /usr/local/lib >> /etc/ld.so.conf && \ echo /usr/local/lib64 >> /etc/ld.so.conf -ENV VARIANT=ubuntu +ENV DISTRO=ubuntu ENV ARCH=x86_64 ENV TRIPLET=x86_64-linux-gnu @@ -97,7 +97,6 @@ LABEL \ org.label-schema.vcs-ref="$GIT_REV" \ org.label-schema.vcs-branch="$GIT_BRANCH" \ org.label-schema.version="$VERSION" \ - org.label-schema.variant="$VARIANT" \ 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" \