From fa96d2a016e36b64222b7c9fd8173158aabb6c0c Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Sun, 7 Jun 2020 01:38:05 +0200 Subject: [PATCH] more CI fixes --- .gitlab-ci.yml | 219 +++++++++--------- cmake/toolchains/debian-arm64.cmake | 3 +- cmake/toolchains/debian-armhf.cmake | 2 +- lib/nodes/CMakeLists.txt | 4 +- packaging/deps.sh | 34 +-- packaging/docker/CMakeLists.txt | 2 +- packaging/docker/Dockerfile.app | 16 +- ...erfile.app-raspbian => Dockerfile.app-rpm} | 25 +- packaging/docker/Dockerfile.dev | 44 ++-- packaging/docker/Dockerfile.dev-centos | 10 +- .../docker/Dockerfile.dev-debian-multiarch | 32 ++- packaging/docker/Dockerfile.dev-raspbian | 91 -------- packaging/docker/Dockerfile.dev-ubuntu | 13 +- 13 files changed, 221 insertions(+), 274 deletions(-) rename packaging/docker/{Dockerfile.app-raspbian => Dockerfile.app-rpm} (80%) delete mode 100644 packaging/docker/Dockerfile.dev-raspbian diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index cb619c625..9c4765a6b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -12,57 +12,57 @@ variables: RELEASEVER: '29' stages: - - prepare - - build - - test - - packaging - - deploy +- prepare +- build +- test +- packaging +- deploy # For some reason, GitLab CI prunes the contents of the submodules so we need to restore them. before_script: - - git submodule foreach git checkout . +- git submodule foreach git checkout . # Stage: prepare ############################################################################## # Build docker image which is used to build & test VILLASnode -prepare:fedora:docker-dev: +.prepare:docker-dev: &prepare_docker_dev stage: prepare script: - - docker build ${DOCKER_OPTS} - --file ${DOCKER_FILE} - --tag ${DOCKER_IMAGE_DEV}:${DOCKER_TAG} . + - docker build ${DOCKER_OPTS} + --file ${DOCKER_FILE} + --tag ${DOCKER_IMAGE_DEV}:${DOCKER_TAG} . tags: - - shell - - linux + - shell + - linux -prepare:raspbian:docker-dev: - extends: prepare:fedora:docker-dev +prepare:fedora:docker-dev: + <<: *prepare_docker_dev variables: - DOCKER_FILE: packaging/docker/Dockerfile.dev-raspbian - DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-raspbian + DOCKER_FILE: packaging/docker/Dockerfile.dev + DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev prepare:ubuntu:docker-dev: - extends: prepare:fedora:docker-dev + <<: *prepare_docker_dev variables: DOCKER_FILE: packaging/docker/Dockerfile.dev-ubuntu DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-ubuntu prepare:centos:docker-dev: - extends: prepare:fedora:docker-dev + <<: *prepare_docker_dev variables: DOCKER_FILE: packaging/docker/Dockerfile.dev-centos DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-centos prepare:debian-armhf:docker-dev: - extends: prepare:fedora:docker-dev + <<: *prepare_docker_dev variables: DOCKER_FILE: packaging/docker/Dockerfile.dev-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: - extends: prepare:fedora:docker-dev + <<: *prepare_docker_dev variables: DOCKER_FILE: packaging/docker/Dockerfile.dev-debian-multiarch DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-debian-arm64 @@ -71,73 +71,67 @@ prepare:debian-arm64:docker-dev: # Stage: build ############################################################################## -build:fedora:x86_64: +.build:fedora:x86_64: &build stage: build script: - - mkdir -p build && cd build - - cmake .. ${CMAKE_OPTS} - - make ${MAKE_OPTS} + - mkdir -p build && cd build + - cmake .. ${CMAKE_OPTS} + - make ${MAKE_OPTS} artifacts: expire_in: 1 week paths: - - build/ + - build/ image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG} tags: - - docker + - docker + +build:fedora:x86_64: + <<: *build build:fedora-minimal:x86_64: - extends: build:fedora:x86_64 + <<: *build variables: CMAKE_OPTS: -DWITH_HOOKS=OFF -DWITH_WEB=OFF -DWITH_API=OFF -DWITH_CONFIG=OFF -DWITH_SRC=OFF -DWITH_TOOLS=OFF -DWITH_TESTS=OFF -DWITH_PLUGINS=OFF -DWITH_CLIENTS=OFF -DWITH_DOC=OFF build:ubuntu:x86_64: - extends: build:fedora:x86_64 + <<: *build variables: DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-ubuntu CMAKE_OPTS: -DCMAKE_MODULE_PATH=/usr/local/lib64/cmake -DCMAKE_PREFIX_PATH=/usr/local build:centos:x86_64: - extends: build:fedora:x86_64 + <<: *build script: - - mkdir -p build && cd build - - cmake3 .. ${CMAKE_OPTS} - - make ${MAKE_OPTS} + - mkdir -p build && cd build + - cmake3 .. ${CMAKE_OPTS} + - make ${MAKE_OPTS} variables: DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-centos CMAKE_OPTS: -DCMAKE_MODULE_PATH=/usr/local/lib64/cmake -DCMAKE_PREFIX_PATH=/usr/local -build:raspbian:armv6l: - extends: build:fedora:x86_64 - variables: - DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-raspbian - CMAKE_OPTS: -DWITH_NODE_INFINIBAND=OFF - when: manual - build:debian-multiarch:armhf: - extends: build:fedora:x86_64 + <<: *build variables: DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-debian-armhf - CMAKE_OPTS: -DCMAKE_TOOLCHAIN_FILE=/debian-armhf.cmake -DCMAKE_INSTALL_LIBDIR=/usr/lib/arm-linux-gnueabihf build:debian-multiarch:arm64: - extends: build:fedora:x86_64 + <<: *build variables: DOCKER_IMAGE_DEV: ${DOCKER_IMAGE}/dev-debian-arm64 - CMAKE_OPTS: -DCMAKE_TOOLCHAIN_FILE=/debian-arm64.cmake -DCMAKE_INSTALL_LIBDIR=/usr/lib/aarch64-linux-gnu build:docs: stage: build artifacts: name: ${CI_PROJECT_NAME}-doc-${CI_BUILD_REF} paths: - - build/doc/ + - build/doc/ script: - - mkdir -p build && cd build - - cmake .. - - make ${MAKE_OPTS} doc + - mkdir -p build && cd build + - cmake .. + - make ${MAKE_OPTS} doc image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG} tags: - - docker + - docker # Stage: test @@ -154,46 +148,47 @@ test:flake8: test:unit: stage: test dependencies: - - build:fedora:x86_64 + - build:fedora:x86_64 variables: LD_PRELOAD: /usr/lib64/libSegFault.so SEGFAULT_SIGNALS: all SEGFAULT_SIGNALS: bus abrt script: - - mkdir -p build && cd build - - cmake .. && make ${MAKE_OPTS} unit-tests - - "tests/unit/unit-tests || true" + - mkdir -p build && cd build + - cmake .. && make ${MAKE_OPTS} unit-tests + - "tests/unit/unit-tests || true" image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG} tags: - - docker + - docker test:integration: stage: test dependencies: - - build:fedora:x86_64 + - build:fedora:x86_64 variables: LD_PRELOAD: /usr/lib64/libSegFault.so SEGFAULT_SIGNALS: all SEGFAULT_SIGNALS: bus abrt script: - - mkdir -p build && cd build - - cmake .. - - make ${MAKE_OPTS} run-integration-tests + - mkdir -p build && cd build + - cmake .. + - make ${MAKE_OPTS} run-integration-tests artifacts: name: ${CI_PROJECT_NAME}-integration-tests-${CI_BUILD_REF} when: always paths: - - build/tests/integration/ + - build/tests/integration/ image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG} allow_failure: true tags: - - docker + - docker # Stage: packaging ############################################################################## packaging:docker: stage: packaging + image: docker:19.03 before_script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY script: @@ -202,27 +197,26 @@ packaging:docker: --file packaging/docker/Dockerfile.app --tag ${DOCKER_IMAGE}:${DOCKER_TAG} . tags: - - shell - - linux + - docker packaging:rpm: stage: packaging dependencies: - - build:fedora:x86_64 + - build:fedora:x86_64 script: - - mkdir -p build && cd build - - cmake -DWITH_NODE_ETHERCAT=OFF .. - - make ${MAKE_OPTS} doc - - make ${MAKE_OPTS} package + - mkdir -p build && cd build + - cmake -DWITH_NODE_ETHERCAT=OFF .. + - make ${MAKE_OPTS} doc + - make ${MAKE_OPTS} package artifacts: expire_in: 1 week name: ${CI_PROJECT_NAME}-packages-${CI_BUILD_REF} paths: - - build/*.tar.gz - - build/*.rpm + - build/*.tar.gz + - build/*.rpm image: ${DOCKER_IMAGE_DEV}:${DOCKER_TAG} tags: - - docker + - docker # Stage: deploy ############################################################################## @@ -233,16 +227,16 @@ deploy:web: name: rclone/rclone:1.50 entrypoint: [""] before_script: - - rclone config create fein webdav url ${DEPLOY_PATH} vendor other user ${DEPLOY_USER} pass ${DEPLOY_PASS} + - rclone config create fein webdav url ${DEPLOY_PATH} vendor other user ${DEPLOY_USER} pass ${DEPLOY_PASS} script: - - rclone copy build/doc/html fein:villas/doc-dev/${CI_BUILD_REF_NAME} + - rclone copy build/doc/html fein:villas/doc-dev/${CI_BUILD_REF_NAME} dependencies: - - build:docs + - build:docs only: # Only on version tags - - "/^v\\d+(\\.\\d+)+$/" + - "/^v\\d+(\\.\\d+)+$/" tags: - - docker + - docker .deploy:packages: &deploy_packages stage: deploy @@ -250,16 +244,16 @@ deploy:web: name: rclone/rclone:1.50 entrypoint: [""] before_script: - - apk add curl - - rclone config create fein webdav url ${DEPLOY_PATH} vendor other user ${DEPLOY_USER} pass ${DEPLOY_PASS} + - apk add curl + - rclone config create fein webdav url ${DEPLOY_PATH} vendor other user ${DEPLOY_USER} pass ${DEPLOY_PASS} script: - - rclone copy --max-depth 1 --include '*.tar.gz' build fein:packages/dist - - rclone copy --max-depth 1 --include '*.rpm' build fein:packages/fedora/${RELEASEVER}/x86_64 - - curl -L --user ${DEPLOY_USER}:${DEPLOY_PASS} ${DEPLOY_PATH}/hooks/createrepo + - rclone copy --max-depth 1 --include '*.tar.gz' build fein:packages/dist + - rclone copy --max-depth 1 --include '*.rpm' build fein:packages/fedora/${RELEASEVER}/x86_64 + - curl -L --user ${DEPLOY_USER}:${DEPLOY_PASS} ${DEPLOY_PATH}/hooks/createrepo dependencies: - - packaging:rpm + - packaging:rpm tags: - - docker + - docker deploy:packages:manual: <<: *deploy_packages @@ -268,50 +262,47 @@ deploy:packages:manual: deploy:packages:tags: <<: *deploy_packages only: - # Only on version tags - - "/^v\\d+(\\.\\d+)+$/" + # Only on version tags + - "/^v\\d+(\\.\\d+)+$/" deploy:docker: stage: deploy + image: docker:19.03 before_script: - - docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY} + - 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-raspbian:${DOCKER_TAG} ${DOCKER_IMAGE}/dev-raspbian: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-raspbian:latest - - docker push ${DOCKER_IMAGE}/dev-debian-arm64:latest - - docker push ${DOCKER_IMAGE}/dev-debian-armhf:latest + - 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: - - shell - - linux + - docker only: - # Only on version tags - - "/^v\\d+(\\.\\d+)+$/" + # Only on version tags + - "/^v\\d+(\\.\\d+)+$/" deploy:docker:tags: stage: deploy + image: docker:19.03 before_script: - - docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} ${CI_REGISTRY} + - 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-raspbian:${DOCKER_TAG} - - docker push ${DOCKER_IMAGE}/dev-debian-arm64:${DOCKER_TAG} - - docker push ${DOCKER_IMAGE}/dev-debian-armhf:${DOCKER_TAG} + - 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: - - shell - - linux + - docker only: - # Only on version tags - - "/^v\\d+(\\.\\d+)+$/" + # Only on version tags + - "/^v\\d+(\\.\\d+)+$/" diff --git a/cmake/toolchains/debian-arm64.cmake b/cmake/toolchains/debian-arm64.cmake index 0a3b553f0..368559f8f 100644 --- a/cmake/toolchains/debian-arm64.cmake +++ b/cmake/toolchains/debian-arm64.cmake @@ -11,5 +11,4 @@ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "Buildroot CFLAGS") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" CACHE STRING "Buildroot CXXFLAGS") set(CMAKE_EXE_LINKER_FLAGS " ${CMAKE_EXE_LINKER_FLAGS}" CACHE STRING "Buildroot LDFLAGS") -set(CMAKE_LIBRARY_PATH "/usr/lib/${TRIPLET}") - +set(CMAKE_LIBRARY_PATH "/usr/lib/${TRIPLET};/usr/local/lib/${TRIPLET}") diff --git a/cmake/toolchains/debian-armhf.cmake b/cmake/toolchains/debian-armhf.cmake index 4594efdd2..aeb392a44 100644 --- a/cmake/toolchains/debian-armhf.cmake +++ b/cmake/toolchains/debian-armhf.cmake @@ -11,5 +11,5 @@ set(CMAKE_C_FLAGS "-mfloat-abi=hard ${CMAKE_C_FLAGS}" CACHE STRING "Buildroot CF set(CMAKE_CXX_FLAGS "-mfloat-abi=hard ${CMAKE_CXX_FLAGS}" CACHE STRING "Buildroot CXXFLAGS") set(CMAKE_EXE_LINKER_FLAGS " ${CMAKE_EXE_LINKER_FLAGS}" CACHE STRING "Buildroot LDFLAGS") -set(CMAKE_LIBRARY_PATH "/usr/lib/${TRIPLET}") +set(CMAKE_LIBRARY_PATH "/usr/lib/${TRIPLET};/usr/local/lib/${TRIPLET}") diff --git a/lib/nodes/CMakeLists.txt b/lib/nodes/CMakeLists.txt index 673a98a27..ab17ad430 100644 --- a/lib/nodes/CMakeLists.txt +++ b/lib/nodes/CMakeLists.txt @@ -93,7 +93,7 @@ endif() if(WITH_NODE_NANOMSG) list(APPEND NODE_SRC nanomsg.cpp) list(APPEND INCLUDE_DIRS ${NANOMSG_INCLUDE_DIRS}) - list(APPEND LIBRARIES PkgConfig::NANOMSG) + list(APPEND LIBRARIES ${NANOMSG_LIBRARIES}) endif() # Enable ZeroMQ node type when libzmq is available @@ -135,7 +135,7 @@ endif() if(WITH_NODE_COMEDI) list(APPEND NODE_SRC comedi.cpp) list(APPEND INCLUDE_DIRS ${COMEDILIB_INCLUDE_DIRS}) - list(APPEND LIBRARIES PkgConfig::COMEDILIB) + list(APPEND LIBRARIES ${COMEDILIB_LIBRARIES}) endif() # Enable Infiniband support diff --git a/packaging/deps.sh b/packaging/deps.sh index ca00cfa85..d17879633 100644 --- a/packaging/deps.sh +++ b/packaging/deps.sh @@ -2,7 +2,11 @@ set -e -CMAKE_OPTS="-DCMAKE_BUILD_TYPE=Release" +PREFIX=${PREFIX:-/usr/local} +TRIPLET=${TRIPLET:-x86_64-linux-gnu} + +CONFIGURE_OPTS+=" --host=${TRIPLET} --prefix=${PREFIX}" +CMAKE_OPTS+=" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=${PREFIX}" if [ -n "${PACKAGE}" ]; then TARGET="package" @@ -19,16 +23,12 @@ else TARGET="install" fi -if [ -f /etc/redhat-release -o -f /etc/fedora-release ]; then - CMAKE_OPTS+=" -DCMAKE_INSTALL_LIBDIR=/usr/local/lib64" -fi - -rm -rf thirdparty -mkdir -p thirdparty -pushd thirdparty +DIR=$(mktemp -d) +pushd ${DIR} # Build & Install Criterion -if [ $(uname -m) != "armv6l" ] && ! pkg-config "criterion >= 2.3.1"; then +if ! pkg-config "criterion >= 2.3.1" && \ + [ "${ARCH}" == "x86_64" ]; then git clone --recursive https://github.com/Snaipe/Criterion mkdir -p Criterion/build pushd Criterion/build @@ -44,7 +44,7 @@ fi hg clone --branch stable-1.5 http://hg.code.sf.net/p/etherlabmaster/code etherlab pushd etherlab ./bootstrap -./configure --enable-userlib=yes --enable-kernel=no +./configure --enable-userlib=yes --enable-kernel=no ${CONFIGURE_OPTS} if [ -z "${PACKAGE}" ]; then make -j$(nproc) install else @@ -102,18 +102,19 @@ if ! pkg-config "libwebsockets >= 2.3.0"; then mkdir -p libwebsockets/build pushd libwebsockets/build git checkout v4.0-stable - cmake -DLWS_WITHOUT_EXTENSIONS=OFF ${CMAKE_OPTS} .. + cmake -DLWS_WITHOUT_TESTAPPS=ON -DLWS_WITHOUT_EXTENSIONS=OFF ${CMAKE_OPTS} .. make -j$(nproc) ${TARGET} popd fi # Build & Install uldaq -if [ "${DEBIAN_MULTIARCH}" != "1" ] && ! pkg-config "libuldaq >= 1.0.0"; then +if ! pkg-config "libuldaq >= 1.0.0" && \ + [ "${VARIANT}" != "debian-multiarch" ]; then git clone https://github.com/stv0g/uldaq pushd uldaq git checkout rpmbuild autoreconf -i - ./configure --enable-examples=no + ./configure --enable-examples=no ${CONFIGURE_OPTS} if [ -z "${PACKAGE}" ]; then make -j$(nproc) install else @@ -130,7 +131,7 @@ if ! pkg-config "comedilib >= 0.11.0"; then pushd comedilib git checkout r0_11_0 ./autogen.sh - ./configure + ./configure ${CONFIGURE_OPTS} if [ -z "${PACKAGE}" ]; then make -j$(nproc) install else @@ -173,6 +174,9 @@ if [ -n "${PACKAGE}" ]; then fi popd +rm -rf ${DIR} # Update linker cache -ldconfig +if [ -z "${PACKAGE}" ]; then + ldconfig +fi diff --git a/packaging/docker/CMakeLists.txt b/packaging/docker/CMakeLists.txt index b4f32c0f5..482389dd9 100644 --- a/packaging/docker/CMakeLists.txt +++ b/packaging/docker/CMakeLists.txt @@ -36,7 +36,7 @@ set(DOCKER_RUN_OPTS --volume \"${PROJECT_SOURCE_DIR}:/villas\" ) -foreach(SUFFIX app dev dev-centos dev-ubuntu dev-raspbian) +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 diff --git a/packaging/docker/Dockerfile.app b/packaging/docker/Dockerfile.app index 81e401c0a..c76fd9bc5 100644 --- a/packaging/docker/Dockerfile.app +++ b/packaging/docker/Dockerfile.app @@ -32,23 +32,15 @@ ARG VERSION=unknown ARG VARIANT=unknown # This image is built by villas-node-git/packaging/docker/Dockerfile.dev -FROM $BUILDER_IMAGE AS builder +FROM $BUILDER_IMAGE 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:29 - -# 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 +RUN cmake .. && \ + make -j$(nproc) doc && \ + make -j$(nproc) install # For WebSocket / API access EXPOSE 80 diff --git a/packaging/docker/Dockerfile.app-raspbian b/packaging/docker/Dockerfile.app-rpm similarity index 80% rename from packaging/docker/Dockerfile.app-raspbian rename to packaging/docker/Dockerfile.app-rpm index fe1f25359..f0982d668 100644 --- a/packaging/docker/Dockerfile.app-raspbian +++ b/packaging/docker/Dockerfile.app-rpm @@ -1,5 +1,9 @@ # 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) @@ -20,22 +24,31 @@ # along with this program. If not, see . ################################################################################### -ARG BUILDER_IMAGE=villas/node-dev-raspbian +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-raspbian -FROM $BUILDER_IMAGE +# 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 .. -RUN make -j$(nproc) install +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 @@ -54,7 +67,7 @@ LABEL \ 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 Raspbian" \ + 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 b/packaging/docker/Dockerfile.dev index e36f30656..1a51bef6b 100644 --- a/packaging/docker/Dockerfile.dev +++ b/packaging/docker/Dockerfile.dev @@ -66,24 +66,32 @@ RUN pip install \ # Dependencies RUN dnf -y install \ - openssl-devel \ - protobuf-devel \ - protobuf-c-devel \ - libuuid-devel \ - libconfig-devel \ - libnl3-devel \ - libcurl-devel \ - jansson-devel \ - libwebsockets-devel \ - zeromq-devel \ - nanomsg-devel \ - librabbitmq-devel \ - mosquitto-devel \ - libibverbs-devel \ - librdmacm-devel \ - libusb-devel + openssl-devel \ + protobuf-devel \ + protobuf-c-devel \ + libuuid-devel \ + libconfig-devel \ + libnl3-devel \ + libcurl-devel \ + jansson-devel \ + zeromq-devel \ + nanomsg-devel \ + librabbitmq-devel \ + mosquitto-devel \ + libibverbs-devel \ + librdmacm-devel \ + libusb-devel \ + libwebsockets-devel -# or install unpackaged dependencies from source +# 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 + +ENV VARIANT=ubuntu +ENV ARCH=x86_64 +ENV TRIPLET=x86_64-linux-gnu + +# Install unpackaged dependencies from source ADD packaging/deps.sh / RUN bash deps.sh @@ -94,8 +102,6 @@ RUN ln -s /usr/lib64/tc /usr/lib/tc EXPOSE 80 EXPOSE 443 -ENV LD_LIBRARY_PATH /usr/local/lib:/usr/local/lib64 - WORKDIR /villas ENTRYPOINT bash diff --git a/packaging/docker/Dockerfile.dev-centos b/packaging/docker/Dockerfile.dev-centos index 46365fc12..e69309d42 100644 --- a/packaging/docker/Dockerfile.dev-centos +++ b/packaging/docker/Dockerfile.dev-centos @@ -67,6 +67,14 @@ RUN dnf -y install \ librdmacm-devel \ libusb1-devel +# 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 + +ENV VARIANT=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 @@ -78,8 +86,6 @@ RUN ln -s /usr/lib64/tc /usr/lib/tc EXPOSE 80 EXPOSE 443 -ENV LD_LIBRARY_PATH /usr/local/lib:/usr/local/lib64 - WORKDIR /villas LABEL \ diff --git a/packaging/docker/Dockerfile.dev-debian-multiarch b/packaging/docker/Dockerfile.dev-debian-multiarch index 0c0973a04..8df87e819 100644 --- a/packaging/docker/Dockerfile.dev-debian-multiarch +++ b/packaging/docker/Dockerfile.dev-debian-multiarch @@ -69,10 +69,15 @@ RUN apt-get update && \ libnanomsg-dev:${ARCH} \ librabbitmq-dev:${ARCH} \ libmosquitto-dev:${ARCH} \ + libcomedi-dev:${ARCH} \ libibverbs-dev:${ARCH} \ librdmacm-dev:${ARCH} \ libre-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 + # Install cmake (version from buster has a bug) RUN cd /tmp && \ wget https://github.com/Kitware/CMake/releases/download/v3.15.3/cmake-3.15.3-Linux-x86_64.sh && \ @@ -82,20 +87,37 @@ RUN cd /tmp && \ ADD cmake/toolchains/debian-${ARCH}.cmake / -ENV PKG_CONFIG_PATH=/usr/lib/${TRIPLET}/pkgconfig:/usr/local/lib/pkgconfig:/usr/share/pkgconfig -ENV PKG_CONFIG_LIBDIR=/usr/lib/${TRIPLET}/pkgconfig:/usr/share/pkgconfig +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/lib/${TRIPLET}" + -DCMAKE_INSTALL_LIBDIR=/usr/local/lib/${TRIPLET} \ + -DLWS_INSTALL_LIB_DIR=/usr/local/lib/${TRIPLET}" -ENV DEBIAN_MULTIARCH=1 +ENV CONFIGURE_OPTS="--libdir=/usr/local/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 + +ENV VARIANT=debian-multiarch +ENV ARCH=${ARCH} +ENV TRIPLET=${TRIPLET} # 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 -ENTRYPOINT bash LABEL \ org.label-schema.schema-version="1.0" \ diff --git a/packaging/docker/Dockerfile.dev-raspbian b/packaging/docker/Dockerfile.dev-raspbian deleted file mode 100644 index a0a848c4d..000000000 --- a/packaging/docker/Dockerfile.dev-raspbian +++ /dev/null @@ -1,91 +0,0 @@ -# Dockerfile for cross-compilation in Docker targeting the Raspberyy Pi. -# -# @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 . -################################################################################### - -FROM balenalib/rpi-raspbian:buster - -ARG GIT_REV=unknown -ARG GIT_BRANCH=unknown -ARG VERSION=unknown -ARG VARIANT=unknown - -# Toolchain -RUN apt-get update && \ - apt-get install -y \ - gcc g++ \ - pkg-config cmake make \ - autoconf automake autogen libtool \ - git mercurial curl wget tar bzip2 diffutils \ - flex bison \ - protobuf-compiler protobuf-c-compiler - -# Dependencies -RUN apt-get update && \ - apt-get install -y\ - libssl-dev \ - libprotobuf-dev \ - libprotobuf-c-dev \ - uuid-dev \ - libconfig-dev \ - libnl-3-dev libnl-route-3-dev \ - libcurl4-openssl-dev \ - libjansson-dev \ - libzmq3-dev \ - libnanomsg-dev \ - librabbitmq-dev \ - libmosquitto-dev \ - librdmacm-dev \ - libusb-1.0-0-dev - -ENV CC=gcc -ENV CXX=g++ - -# Add CMake install dir to PATH -ENV PATH="usr/local/bin:${PATH}" - -# Install unpackaged dependencies from source -ADD packaging/deps.sh / -RUN bash deps.sh - -# Expose ports for HTTP and WebSocket frontend -EXPOSE 80 -EXPOSE 443 - -ENV LD_LIBRARY_PATH /usr/local/lib - -WORKDIR /villas -ENTRYPOINT bash - -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 all build-time dependencies for VILLASnode based on Raspbian" \ - 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-ubuntu b/packaging/docker/Dockerfile.dev-ubuntu index 6eea63de3..870f58eaf 100644 --- a/packaging/docker/Dockerfile.dev-ubuntu +++ b/packaging/docker/Dockerfile.dev-ubuntu @@ -29,7 +29,7 @@ ################################################################################### # You can choose between Debian and Ubuntu here -FROM ubuntu:18.04 +FROM ubuntu:20.04 ARG GIT_REV=unknown ARG GIT_BRANCH=unknown @@ -68,6 +68,14 @@ RUN apt-get update && \ librdmacm-dev \ libusb-1.0-0-dev +# 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 + +ENV VARIANT=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 @@ -76,13 +84,10 @@ RUN bash deps.sh EXPOSE 80 EXPOSE 443 -ENV LD_LIBRARY_PATH /usr/local/lib:/usr/local/lib64 - # Workaround for libnl3's search path for netem distributions RUN ln -s /usr/lib64/tc /usr/lib/tc WORKDIR /villas -ENTRYPOINT bash LABEL \ org.label-schema.schema-version="1.0" \