# Dockerfile.base
# This image isn't used, but installs the prereqs for the other XOS images
FROM ubuntu:14.04.5

# 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-*

# 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

