# Dockerfile.base
# This image isn't used, but installs the prereqs for the other XOS images
FROM ubuntu:14.04.5
MAINTAINER Zack Williams <zdw@cs.arizona.edu>

# Label image
ARG org_label_schema_schema_version=1.0
ARG org_label_schema_name=xos-base
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=$org_label_schema_schema_version \
      org.label-schema.name=$org_label_schema_name \
      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

# Install apt packages, including docker
RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y \
    apt-transport-https \
    curl \
    cython \
    gcc \
    geoip-database \
    git \
    graphviz \
    graphviz-dev \
    libcurl4-gnutls-dev \
    libffi-dev \
    libgeoip1 \
    libpq-dev \
    libxslt1-dev \
    libxslt1.1 \
    libyaml-dev \
    m4 \
    openssh-client \
    pkg-config \
    python-dev \
    python-pip \
    rsync \
    software-properties-common \
    supervisor \
    unzip \
    wget \
 && apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 \
    --recv-keys 58118E89F3A912897C070ADBF76221572C52609D \
 && echo "deb https://apt.dockerproject.org/repo ubuntu-trusty main" | \
    sudo tee /etc/apt/sources.list.d/docker.list \
 && apt-get update \
 && apt-get install -y docker-engine \
 && rm -rf /var/lib/apt/lists/* \
 && mkdir /var/xos \
 && pip freeze > /var/xos/pip_freeze_apt_`date -u +%Y%m%dT%H%M%S`

# Install python packages with pip
COPY pip_requirements.txt /tmp/pip_requirements.txt

# Upgrade requests from apt installed version
RUN pip install --no-deps -U -I requests==2.11.1 \
 && pip install --no-deps -r /tmp/pip_requirements.txt \
 && pip freeze > /var/xos/pip_freeze_pip_up_`date -u +%Y%m%dT%H%M%S`

# Copy over ansible hosts
COPY ansible-hosts /etc/ansible/hosts

# Install jQuery
ENV JQUERY_DL_URL http://code.jquery.com/jquery-1.12.4.min.js
ENV JQUERY_SHA256 668b046d12db350ccba6728890476b3efee53b2f42dbb84743e5e9f1ae0cc404

RUN curl -fLsS $JQUERY_DL_URL -o jquery.min.js && \
    echo "$JQUERY_SHA256  jquery.min.js" | sha256sum -c - && \
    mv jquery.min.js /usr/local/lib/python2.7/dist-packages/suit/static/suit/js/

# Install jQueryUI
ENV JQUERYUI_DL_URL https://jqueryui.com/resources/download/jquery-ui-1.11.4.zip
ENV JQUERYUI_SHA256 503e4c0f109bf627aff87a424edc760608ec15e4a6e37f217a083ca682543e32

RUN curl -fLsS $JQUERYUI_DL_URL -o jquery-ui.zip && \
    echo "$JQUERYUI_SHA256  jquery-ui.zip" | sha256sum -c - && \
    unzip jquery-ui.zip && \
    mv jquery-ui-*/jquery-ui.min.js /usr/local/lib/python2.7/dist-packages/suit/static/suit/js/ && \
    rm -rf jquery-ui.zip jquery-ui-*

ENV JQUERYUI_THEMES_DL_URL http://jqueryui.com/resources/download/jquery-ui-themes-1.11.4.zip
ENV JQUERYUI_THEMES_SHA256 df2b9cb084095ea24129a6a54587a1d9d7ae4bcd68bf5ea2957eb3d4d18fe884

RUN curl -fLsS $JQUERYUI_THEMES_DL_URL -o jquery-ui-themes.zip && \
    echo "$JQUERYUI_THEMES_SHA256  jquery-ui-themes.zip" | sha256sum -c - && \
    unzip jquery-ui-themes.zip && \
    mv jquery-ui-themes-*/themes/smoothness/jquery-ui.min.css /usr/local/lib/python2.7/dist-packages/suit/static/suit/css/ && \
    rm -rf jquery-ui-themes.zip jquery-ui-themes-*

