ARG FROM_TAG
FROM registry.gitlab.com/rychly-edu/docker/docker-spark:${FROM_TAG:-latest}

MAINTAINER Marek Rychly <marek.rychly@gmail.com>

# https://livy.apache.org/download/
ARG LIVY_NAME=apache-livy
ARG LIVY_VERSION=0.6.0-incubating

ARG DOWNLOAD_CACHE
ARG APACHE_ORIG="http://www-eu.apache.org/dist"
#ARG APACHE_MIRROR="ftp://mirror.hosting90.cz/apache"
ARG APACHE_MIRROR="http://archive.apache.org/dist"

ENV LIVY_HOME="/opt/livy"
ENV LIVY_CONF_DIR="${LIVY_HOME}/conf"
ENV \
LIVY_DEF_CONF="${LIVY_CONF_DIR}/livy.conf" \
LIVY_ENV_CONF="${LIVY_CONF_DIR}/livy-env.sh"

COPY scripts /

RUN true \
# make the scripts executable
&& chmod 755 /*.sh \
&& apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get -y install gnupg unzip \
\
# download keys and trust them
&& ( [ -n "${DOWNLOAD_CACHE}" ] && cp -v "${DOWNLOAD_CACHE}/livy.KEYS" /tmp \
	|| curl -LfsSo /tmp/livy.KEYS "${APACHE_ORIG}/incubator/livy/KEYS" ) \
&& gpg --import /tmp/livy.KEYS \
&& echo "trust-model always" > ~/.gnupg/gpg.conf \
\
# download the package
&& ( [ -n "${DOWNLOAD_CACHE}" ] && cp -v "${DOWNLOAD_CACHE}/${LIVY_NAME}-${LIVY_VERSION}-bin.zip" /tmp \
	|| curl -LfsSo /tmp/livy-${LIVY_VERSION}-bin.zip "${APACHE_MIRROR}/incubator/livy/${LIVY_VERSION}/${LIVY_NAME}-${LIVY_VERSION}-bin.zip" ) \
\
# download and verify signature
&& ( [ -n "${DOWNLOAD_CACHE}" ] && cp -v "${DOWNLOAD_CACHE}/${LIVY_NAME}-${LIVY_VERSION}-bin.zip.asc" /tmp \
	|| curl -LfsSo /tmp/livy-${LIVY_VERSION}-bin.zip.asc "${APACHE_ORIG}/incubator/livy/${LIVY_VERSION}/${LIVY_NAME}-${LIVY_VERSION}-bin.zip.asc" ) \
&& for SIG in /tmp/*.asc; do gpg --verify "${SIG}" "${SIG%.asc}"; done \
\
# extract the package and remove garbage
&& mkdir -p "${LIVY_HOME%/*}" \
&& unzip -q "/tmp/${LIVY_NAME}-${LIVY_VERSION}-bin.zip" -d "${LIVY_HOME%/*}" \
&& mv "${LIVY_HOME%/*}"/${LIVY_NAME}-* "${LIVY_HOME}" \
\
# create a log directory
&& mkdir -p ${LIVY_HOME}/logs \
\
# integrate with Java, Hadoop, and Spark
&& echo '#!/bin/sh' > ${LIVY_ENV_CONF} \
&& echo "export JAVA_HOME=${JAVA_HOME}" >> ${LIVY_ENV_CONF} \
&& echo "export HADOOP_CONF_DIR=${HADOOP_CONF_DIR}" >> ${LIVY_ENV_CONF} \
&& echo "export SPARK_HOME=${SPARK_HOME}" >> ${LIVY_ENV_CONF} \
&& chmod 755 ${LIVY_ENV_CONF} \
\
# set up permissions
&& addgroup --system livy \
&& adduser --system --home ${LIVY_HOME} --gecos "Apache Livy" --shell /bin/sh --ingroup livy --disabled-login --no-create-home livy \
&& chown -R livy:livy ${LIVY_HOME} \
\
# set path for the shell
&& echo '#!/bin/sh' > /etc/profile.d/path-livy.sh \
&& echo "export PATH=\"\${PATH}:${LIVY_HOME}/bin\"" >> /etc/profile.d/path-livy.sh \
&& chmod 755 /etc/profile.d/path-livy.sh \
\
# clean up
&& apt-get -y autoremove gnupg unzip \
&& apt-get clean \
&& rm -rf /tmp/* /var/tmp/* /var/lib/apt/lists/*

ENTRYPOINT ["/entrypoint.sh"]

HEALTHCHECK CMD /healthcheck.sh
