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

FROM ubuntu:xenial

LABEL maintainer="Daniel Kuppitz <me@gremlin.guru>"

RUN apt-get update
RUN apt-get -y install software-properties-common python-software-properties apt-transport-https curl dpkg netcat net-tools
RUN add-apt-repository ppa:openjdk-r/ppa
RUN sh -c 'curl -s https://packages.microsoft.com/config/ubuntu/16.04/packages-microsoft-prod.deb -o packages-microsoft-prod.deb'
RUN sh -c 'dpkg -i packages-microsoft-prod.deb'
RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
RUN apt-get install apt-transport-https gnupg ca-certificates
RUN sh -c 'echo "deb https://download.mono-project.com/repo/ubuntu stable-xenial main" | tee /etc/apt/sources.list.d/mono-official-stable.list'
RUN apt-get update

# include both java 8/11 so that we can use the same docker image for future builds on that version of the jdk as we do
# for the older release branches. the java version to use is just controlled by JAVA_HOME hardcoded below
RUN apt-get install -y openjdk-8-jdk openjdk-11-jdk gawk git maven openssh-server subversion zip
RUN apt-get install -y --force-yes dotnet-sdk-3.1 mono-devel

# python3 on xenial install 3.5.2 which is insufficient for newer versions of python/typing#259 so
# custom build and install 3.6.9 and upgrade pip along the way. this could be resolved by using bionic
# but trying to keep all of our release branches on the same docker image and the older versions suit 3.4.x+
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get install -y python python-dev python-pip build-essential checkinstall zlib1g-dev libreadline-gplv2-dev \
    libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev libkrb5-dev krb5-user
RUN cd /opt && wget https://www.python.org/ftp/python/3.6.9/Python-3.6.9.tgz && tar -xvf Python-3.6.9.tgz
RUN cd /opt/Python-3.6.9 && ./configure && make && make install
RUN ln -sf /usr/bin/python3.6.9 /usr/bin/python3
# pip drops support of Python 2 starting from version 21.0
RUN pip install --upgrade "pip<21.0"
RUN pip install virtualenv
# pin bpr to 5.5.1 since 5.6.0 hassles virtualenvwrapper - maybe can remove after full drop of 3.4.x support with
# no further need for python 2 at all
RUN pip install pbr==5.5.1
RUN pip install virtualenvwrapper --no-deps

RUN rm -rf /var/lib/apt/lists/* /var/cache/openjdk-8-jdk
RUN rm -rf /var/lib/apt/lists/* /var/cache/openjdk-11-jdk

RUN sed -i 's@PermitRootLogin without-password@PermitRootLogin yes@' /etc/ssh/sshd_config
RUN sed -i 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuuid.so@g' /etc/pam.d/sshd
RUN ssh-keygen -t rsa -f ~/.ssh/id_rsa -N '' \
    && cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys

RUN sed -i 's/.*"$PS1".*/# \0/' ~/.bashrc

RUN echo "Host *" >> ~/.ssh/config
RUN echo "  UserKnownHostsFile /dev/null" >> ~/.ssh/config
RUN echo "  StrictHostKeyChecking no" >> ~/.ssh/config
