#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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
#
# This is a dockerfile used to construct the spark environment used for the
# integration test suite.

FROM jupyter/all-spark-notebook

# User escalation
USER root

# Spark dependencies
ENV APACHE_SPARK_VERSION 2.3.4

RUN apt-get -y update && \
    apt-get install -y --no-install-recommends openjdk-8-jre-headless && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/* && \
    update-alternatives --set java /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java

# Installing Spark2
RUN cd /tmp && \
    wget -q https://archive.apache.org/dist/spark/spark-${APACHE_SPARK_VERSION}/spark-${APACHE_SPARK_VERSION}-bin-hadoop2.6.tgz && \
    tar xzf spark-${APACHE_SPARK_VERSION}-bin-hadoop2.6.tgz -C /usr/local && \
    rm spark-${APACHE_SPARK_VERSION}-bin-hadoop2.6.tgz

# Overwrite symlink
RUN cd /usr/local && \
    rm spark && \
    ln -s spark-${APACHE_SPARK_VERSION}-bin-hadoop2.6 spark

# Remove other scala kernels
RUN cd /opt/conda/share/jupyter/kernels/ && \
    rm -rf spylon-kernel

ADD dist/toree /usr/local/share/jupyter/kernels/toree
ADD etc/kernel.json /usr/local/share/jupyter/kernels/toree/kernel.json

# Fix permissions on /etc/jupyter as root
USER root
RUN fix-permissions /usr/local/share/jupyter/

# Switch back to jovyan to avoid accidental container runs as root
USER $NB_UID
