#-
# ============LICENSE_START=======================================================
# Copyright (C) 2020 Nordix Foundation.
# ================================================================================
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
# ============LICENSE_END=========================================================
FROM python:3.7.7-alpine3.11 as build
ARG zlog_version=1.2.14
ARG libyang_version=v1.0-r5
ARG sysrepo_version=v0.7.9
ARG libnetconf2_version=v0.12-r2
ARG netopeer2_version=v0.7-r2
WORKDIR /usr/src
RUN set -eux \
&& apk add \
autoconf \
bash \
build-base \
cmake \
curl-dev \
file \
git \
libev-dev \
libssh-dev \
openssh-keygen \
openssl \
openssl-dev \
pcre-dev \
pkgconfig \
protobuf-c-dev \
swig \
# for troubleshooting
ctags \
the_silver_searcher \
vim
RUN git config --global advice.detachedHead false
ENV PKG_CONFIG_PATH=/opt/lib64/pkgconfig
ENV LD_LIBRARY_PATH=/opt/lib:/opt/lib64
# libyang
COPY patches/libyang/ ./patches/libyang/
RUN set -eux \
&& git clone --branch $libyang_version --depth 1 https://github.com/CESNET/libyang.git \
&& cd libyang \
&& for p in ../patches/libyang/*.patch; do patch -p1 -i $p; done \
&& mkdir build && cd build \
&& cmake -DCMAKE_BUILD_TYPE:String="Release" -DENABLE_BUILD_TESTS=OFF \
-DCMAKE_INSTALL_PREFIX:PATH=/opt \
-DGEN_LANGUAGE_BINDINGS=OFF \
.. \
&& make -j2 \
&& make install
RUN set -eux \
&& git clone --depth 1 https://github.com/sysrepo/libredblack.git \
&& cd libredblack \
&& ./configure --prefix=/opt --without-rbgen \
&& make \
&& make install
# zlog
RUN set -eux \
&& git clone --branch $zlog_version --depth 1 https://github.com/HardySimpson/zlog \
&& cd zlog/src \
&& make PREFIX=/opt \
&& make install PREFIX=/opt
# sysrepo
COPY patches/sysrepo/ ./patches/sysrepo/
RUN set -eux \
&& git clone --branch $sysrepo_version --depth 1 https://github.com/sysrepo/sysrepo.git \
&& cd sysrepo \
&& for p in ../patches/sysrepo/*.patch; do patch -p1 -i $p; done \
&& mkdir build && cd build \
&& cmake -DCMAKE_BUILD_TYPE:String="Release" -DENABLE_TESTS=OFF \
-DREPOSITORY_LOC:PATH=/opt/etc/sysrepo \
-DCMAKE_INSTALL_PREFIX:PATH=/opt \
-DGEN_PYTHON_VERSION=3 \
-DPYTHON_MODULE_PATH:PATH=/opt/lib/python3.7/site-packages \
-DBUILD_EXAMPLES=0 \
-DBUILD_CPP_EXAMPLES=0 \
.. \
&& make -j2 \
&& make install
# libnetconf2
COPY patches/libnetconf2/ ./patches/libnetconf2/
RUN set -eux \
&& git clone --branch $libnetconf2_version --depth 1 https://github.com/CESNET/libnetconf2.git \
&& cd libnetconf2 \
&& for p in ../patches/libnetconf2/*.patch; do patch -p1 -i $p; done \
&& mkdir build && cd build \
&& cmake -DCMAKE_BUILD_TYPE:String="Release" -DENABLE_BUILD_TESTS=OFF \
-DCMAKE_INSTALL_PREFIX:PATH=/opt \
-DENABLE_PYTHON=OFF \
.. \
&& make \
&& make install
# keystore
COPY patches/Netopeer2/ ./patches/Netopeer2/
RUN set -eux \
&& git clone --branch $netopeer2_version --depth 1 https://github.com/CESNET/Netopeer2.git \
&& cd Netopeer2 \
&& for p in ../patches/Netopeer2/*.patch; do patch -p1 -i $p; done \
&& cd keystored \
&& mkdir build && cd build \
&& cmake -DCMAKE_BUILD_TYPE:String="Release" \
-DCMAKE_INSTALL_PREFIX:PATH=/opt \
-DMODEL_INSTALL=ON \
.. \
&& make -j2 \
&& make install
# netopeer2
RUN set -eux \
&& cd Netopeer2/server \
&& mkdir build && cd build \
&& cmake -DCMAKE_BUILD_TYPE:String="Release" \
-DCMAKE_INSTALL_PREFIX:PATH=/opt \
.. \
&& make -j2 \
&& make install
FROM python:3.7.7-alpine3.11 as stage0
RUN apk upgrade --no-cache --available
FROM scratch
LABEL authors="eliezio.oliveira@est.tech"
COPY --from=stage0 / /
RUN set -eux \
&& apk add --no-cache \
coreutils \
libcurl \
libev \
libssh \
openssl \
pcre \
protobuf-c \
xmlstarlet
COPY --from=build /opt/ /opt/
ENV LD_LIBRARY_PATH=/opt/lib:/opt/lib64
ENV PYTHONPATH=/opt/lib/python3.7/site-packages
COPY patches/supervisor/ /usr/src/patches/supervisor/
RUN set -eux \
&& pip install loguru supervisor supervisor virtualenv \
&& cd /usr/local/lib/python3.7/site-packages \
&& for p in /usr/src/patches/supervisor/*.patch; do patch -p1 -i $p; done
COPY config/ /config
VOLUME /config
COPY templates/ /templates
# finish setup and add netconf user
RUN adduser --system --disabled-password --gecos 'Netconf User' netconf
# This is NOT a robust health check but it does help tox-docker to detect when
# it can start the tests.
HEALTHCHECK --interval=1s --start-period=2s --retries=10 CMD test -f /run/netopeer2-server.pid
# SSH
EXPOSE 830
# TLS
EXPOSE 6513
COPY supervisord.conf /etc/supervisord.conf
RUN mkdir /etc/supervisord.d
COPY zlog.conf /opt/etc/
# Sensible defaults for loguru configuration
ENV LOGURU_FORMAT="{time:YYYY-DD-MM HH:mm:ss.SSS} {level: <5} [{module}] {message}"
ENV LOGURU_COLORIZE=True
COPY entrypoint.sh common.sh configure-*.sh reconfigure-*.sh generic_subscriber.py /opt/bin/
CMD /opt/bin/entrypoint.sh