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

# Install apt packages
RUN DEBIAN_FRONTEND=noninteractive apt-get update && apt-get install -y \
    apt-transport-https \
    curl \
    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 \
 && 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

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

# -----------------------------------------------------------------------------
# actions formerly in onboarding synchronizer

ENV DOCKER_URL https://get.docker.com/builds/Linux/x86_64/docker-1.10.3
ENV DOCKER_SHA256 d0df512afa109006a450f41873634951e19ddabf8c7bd419caeb5a526032d86d

RUN curl -fLsS $DOCKER_URL -o docker && \
    echo "${DOCKER_SHA256}  docker" | sha256sum -c - && \
    mv docker /usr/local/bin/docker && \
    chmod +x /usr/local/bin/docker

# Install docker-compose
ENV DOCKER_COMPOSE_URL https://github.com/docker/compose/releases/download/1.5.2/docker-compose-Linux-x86_64
ENV DOCKER_COMPOSE_SHA256 b6b975badc5389647ef1c16fe8a33bdc5935c61f6afd5a15a28ff765427d01e3

RUN curl -fLsS $DOCKER_COMPOSE_URL -o docker-compose && \
    echo "${DOCKER_COMPOSE_SHA256}  docker-compose" | sha256sum -c - && \
    mv docker-compose /usr/local/bin/docker-compose && \
    chmod +x /usr/local/bin/docker-compose

# end actions formerly in onboarding synchronizer
# ----------------------------------------------------------------------------
