blob: 0af83e24e30c81d7169948f5e5a1172213cbbe56 [file] [log] [blame]
# Copyright 2018-2024 Open Networking Foundation (ONF) and the ONF Contributors
#
# 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.
# Download and copy the specified onos apps
FROM maven:3.6.3-openjdk-11-slim as download
SHELL ["/bin/bash", "-euo", "pipefail", "-c"]
RUN <<BANNER
echo ""
echo "** -----------------------------------------------------------------------"
echo "** Configure maven settings (./mvn_settings.sh)"
echo "** -----------------------------------------------------------------------"
BANNER
# The ENV settings must be replicated below as they are not shared between stages
ENV DOWNLOAD_ROOT=/download
RUN mkdir -p ${DOWNLOAD_ROOT}
WORKDIR ${DOWNLOAD_ROOT}
COPY mvn_settings.* ${DOWNLOAD_ROOT}/
RUN ./mvn_settings.sh
ADD dependencies.xml .
RUN <<BANNER
echo ""
echo "** -----------------------------------------------------------------------"
echo "** Copy onos artifacts into ${DOWNLOAD_ROOT}"
echo "** URL: https://maven.apache.org/plugins/maven-dependency-plugin/copy-mojo.html"
echo "** -----------------------------------------------------------------------"
BANNER
ARG LOCAL_ONOSAPPS
COPY local_imports/ /local_imports/
RUN if [ -n "$LOCAL_ONOSAPPS" ] ; then \
cp /local_imports/oar/* ${DOWNLOAD_ROOT}/ ; \
else \
mvn dependency:copy -Dmdep.useBaseVersion=true -DoutputDirectory=${DOWNLOAD_ROOT} -Dsilent=true -f dependencies.xml -s mvn_settings.xml ; \
fi
# Unpack and install specific apps from download stage
FROM onosproject/onos:2.5.8 as install
# The ENV settings must be replicated below as they are not shared between stages
ENV ONOS=/root/onos
ENV KARAF_VERSION=4.2.14
ENV KARAF_ROOT=${ONOS}/apache-karaf-${KARAF_VERSION}
ENV APPS_ROOT=${ONOS}/apps
ENV KARAF_M2=${KARAF_ROOT}/system
ENV DOWNLOAD_ROOT=/download
ENV APP_INSTALL_ROOT=/expand
RUN <<BANNER
echo ""
echo "** -----------------------------------------------------------------------"
echo "** COPY --from=download ${DOWNLOAD_ROOT} ${DOWNLOAD_ROOT}"
echo "** -----------------------------------------------------------------------"
BANNER
# Copy the downloaded artifact to the install stage container
COPY --from=download ${DOWNLOAD_ROOT} ${DOWNLOAD_ROOT}
# https://askubuntu.com/questions/1095266/apt-get-update-failed-because-certificate-verification-failed-because-handshake
RUN apt-get install --reinstall -y ca-certificates
RUN rm /etc/apt/sources.list.d/zulu-openjdk.list
RUN apt-get update
RUN apt-get install unzip -y
RUN <<BANNER
echo ""
echo "** -----------------------------------------------------------------------"
echo "** Install applications (./app-install.sh)"
echo "** -----------------------------------------------------------------------"
BANNER
# Install the applications
COPY app-install.sh ./app-install.sh
RUN chmod 755 app-install.sh
RUN ./app-install.sh
# Create the final image coping over the installed applications from the install stage
FROM onosproject/onos:2.5.8
# The ENV settings must be replicated below as they are not shared between stages
ENV ONOS=/root/onos
ENV KARAF_VERSION=4.2.14
ENV KARAF_ROOT=${ONOS}/apache-karaf-${KARAF_VERSION}
ENV KARAF_M2=${KARAF_ROOT}/system
ENV APPS_ROOT=${ONOS}/apps
ENV JAVA_OPTS='-XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:-UseContainerSupport -Dkaraf.log.console=INFO -Dds.lock.timeout.milliseconds=10000'
RUN <<BANNER
echo ""
echo "** -----------------------------------------------------------------------"
echo "** COPY --from=install ${KARAF_M2}/ ${KARAF_M2}"
echo "** -----------------------------------------------------------------------"
BANNER
COPY --from=install ${KARAF_M2}/ ${KARAF_M2}/
RUN echo "${KARAF_M2} ${APPS_ROOT}"
COPY --from=install ${APPS_ROOT}/ ${APPS_ROOT}/
COPY network-cfg.json $KARAF_ROOT/../config/network-cfg.json
## -----------------------------------------------------------------------
## Intent: Create package install directories.
## -----------------------------------------------------------------------
COPY etc/mkdir-touch-active.sh .
RUN chmod 555 mkdir-touch-active.sh
RUN ./mkdir-touch-active.sh\
$ONOS/apps/org.onosproject.hostprovider\
$ONOS/apps/org.onosproject.openflow-base\
$ONOS/apps/org.onosproject.lldpprovider\
$ONOS/apps/org.onosproject.mcast\
$ONOS/apps/org.onosproject.segmentrouting
## [DEBUG]
## RUN find "$ONOS/apps" -ls; exit 1
## -----------------------------------------------------------------------
# Label image
## -----------------------------------------------------------------------
ARG org_label_schema_version=unknown
ARG org_label_schema_vcs_url=unknown
ARG org_label_schema_vcs_ref=unknown
ARG org_label_schema_build_date=unknown
ARG org_opencord_vcs_commit_date=unknown
LABEL org.label-schema.schema-version=1.0 \
org.label-schema.name=voltha-onos \
org.label-schema.version=$org_label_schema_version \
org.label-schema.vcs-url=$org_label_schema_vcs_url \
org.label-schema.vcs-ref=$org_label_schema_vcs_ref \
org.label-schema.build-date=$org_label_schema_build_date \
org.opencord.vcs-commit-date=$org_opencord_vcs_commit_date
## Inline as a debugging breakpoint
# RUN <<FATAL
# echo ""
# echo "OUTA HERE"
# exit 1
#FATAL
# [EOF]