ARG BASE_IMAGE=nvidia/opengl:1.2-glvnd-runtime-ubuntu20.04
ARG DEV_IMAGE=parat-dev
ARG NV_IMAGE=nvidia/opengl:1.2-glvnd-devel-ubuntu20.04

FROM ${DEV_IMAGE} AS devimage
FROM ${NV_IMAGE} AS nv_image
FROM ${BASE_IMAGE}

LABEL maintainer="Jaswant Panchumarti <jaswant.panchumarti@kitware.com>"

ENV TZ "America/New_York"

# -----------------------------------------------------------------------------
# System package
# -----------------------------------------------------------------------------
RUN apt-get update  && \
  DEBIAN_FRONTEND="noninteractive" apt-get install -y tzdata && \
  ln -fs /usr/share/zoneinfo/America/New_York /etc/localtime && \
  dpkg-reconfigure --frontend noninteractive tzdata && \
  apt-get install -y --no-install-recommends \
    ca-certificates \
    libatomic1 \
    libjson-c-dev=0.13.1+dfsg-7ubuntu0.3 \
    libsigsegv-dev=2.12-2 \
    libxcursor1 \
    openssl &&\
  apt-get install -y --no-install-recommends python3-dev python3-pip python3-setuptools && \
  update-alternatives --install /usr/bin/python python /usr/bin/python3 1 && \
  rm -rf /var/lib/apt/lists/*

# Trame for web app prototypes.
RUN pip install trame

# Create a non-root user
RUN groupadd paratuser && \
  useradd -g paratuser -d /home/paratuser paratuser && \
  usermod -u 4444 paratuser && \
  groupmod -g 4444 paratuser && \
  mkhomedir_helper paratuser && \
  mkdir -p /opt/parat && chown -R paratuser:paratuser /opt/parat

USER paratuser

# Populate parat runtime, data and demos.
COPY --from=devimage  /opt/scripts                                              /opt/scripts
COPY --from=devimage  /opt/spack/opt/spack                                      /opt/spack
COPY --from=devimage  /opt/parat/src/Remoting/Microservices/Testing/Trame/Demos /opt/parat/demos
COPY --from=devimage  /opt/parat/build/ExternalData                             /opt/parat/data
COPY --from=devimage  /opt/parat/install                                        /opt/parat/runtime

# Put them at a place runtime can find.
COPY --from=nv_image /usr/lib/x86_64-linux-gnu/libOpenGL.so.0.0.0  /usr/lib/x86_64-linux-gnu/libOpenGL.so.0.0.0
COPY --from=nv_image /usr/lib/x86_64-linux-gnu/libOpenGL.so.0      /usr/lib/x86_64-linux-gnu/libOpenGL.so.0
COPY --from=nv_image /usr/lib/x86_64-linux-gnu/libOpenGL.so        /usr/lib/x86_64-linux-gnu/libOpenGL.so

# Copy the server script.
COPY scripts/server.sh /opt/scripts/server.sh

# If spack package versions have changed, update the LD path here.
ENV PARAT_LD_PATH="/opt/spack/linux-ubuntu20.04-x86_64/gcc-9.4.0/mochi-margo-0.9.10-bg6klyuffrf2it4ukeu2alshkqgikgpb/lib:/opt/spack/linux-ubuntu20.04-x86_64/gcc-9.4.0/mercury-2.2.0-ewdo64venrazxdfnyelz4ncfdyrrtomj/lib:/opt/spack/linux-ubuntu20.04-x86_64/gcc-9.4.0/argobots-1.1-2j6qgis2por7qd6ifczlifo6jgstnma2/lib:/opt/spack/linux-ubuntu20.04-x86_64/gcc-9.4.0/mercury-2.2.0-ewdo64venrazxdfnyelz4ncfdyrrtomj/lib:/opt/spack/linux-ubuntu20.04-x86_64/gcc-9.4.0/mercury-2.2.0-ewdo64venrazxdfnyelz4ncfdyrrtomj/lib:/opt/spack/linux-ubuntu20.04-x86_64/gcc-9.4.0/mercury-2.2.0-ewdo64venrazxdfnyelz4ncfdyrrtomj/lib:/opt/spack/linux-ubuntu20.04-x86_64/gcc-9.4.0/libfabric-1.16.1-6m2tgwwo4p6edfel2ytzu4ewzwrnu7pv/lib"
ENV PARAT_DATA_DIR="/opt/parat/data"
ENV PARAT_RUNTIME_DIR="/opt/parat/runtime"
ENV PARAT_WEB_PROTOTYPE_DIR="/opt/parat/demos"

# ENTRYPOINT [ "/bin/bash" ]
ENTRYPOINT [ "/bin/bash", "/opt/scripts/server.sh" ]
