#!/usr/bin/env bash
# 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.

set -o nounset
set -o errexit
set -o pipefail
set -o xtrace

# Global variables
DPKG_LOCK="/var/lib/dpkg/lock-frontend"
DOCKER_VERSION="5:20.10.20~3-0~ubuntu-bionic"
DOCKER_COMPOSE_URL="https://github.com/docker/compose/releases/download"
DOCKER_COMPOSE_VERSION="1.29.2"

# Wait for other apt process to finish by checking the dpkg lock file.
try=0
while sudo lsof ${DPKG_LOCK}  > /dev/null 2>&1 ; do
  echo "DPKG file locked: ${DPKG_LOCK}."
  echo "   Waiting for another pkg instalaltion process to finish ..."
  sleep 10
  if [[ ${try} -gt 60 ]] ; then
    echo "ERROR: Max number of re-tries reached, exiting..."
    exit 1
  fi
  try=$((try + 1))
done

sudo apt-get update
sudo apt-get install -y --no-install-recommends \
  apt-transport-https \
  lsb-release

curl -sSL https://dl.google.com/linux/linux_signing_key.pub | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main"
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
set +e && sudo apt-get purge -y google-cloud-sdk lxc-docker && set -e
sudo apt-get install -y --no-install-recommends \
    aptitude \
    ca-certificates \
    cgroupfs-mount \
    docker-ce=${DOCKER_VERSION} \
    docker-ce-cli=${DOCKER_VERSION} \
    git \
    google-chrome-stable \
    htop \
    jq \
    less \
    lsof \
    net-tools \
    python3 \
    python3-pip \
    rsync \
    tmux \
    unzip \
    vim

# Get correct docker-compose version required for geode-AcceptanceTest
sudo curl -L "${DOCKER_COMPOSE_URL}/${DOCKER_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" \
          -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

# Increase number of Max threads that infra user (UserTasksMax) and systemd (DefaultTasksMax) can create.
# This is required for Geode UpgradeTest to avoid error:
# java.lang.OutOfMemoryError: unable to create native thread: possibly out of memory or process/resource limits reached
# todo: This should be done during image creation
sudo sed -i 's/.*DefaultTasksMax=.*/DefaultTasksMax=infinity/g' /etc/systemd/system.conf
sudo sed -i 's/.*UserTasksMax=.*/UserTasksMax=infinity/g' /etc/systemd/logind.conf
sudo systemctl set-property user-$(id -u infra).slice TasksMax=infinity
sudo systemctl daemon-reload
sudo systemctl restart systemd-logind.service

sudo cp -R /etc/alternatives /etc/keep-alternatives
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
    openjdk-8-jdk \
    openjdk-11-jdk \
    openjdk-17-jdk
sudo rm -rf /etc/alternatives
sudo mv /etc/keep-alternatives /etc/alternatives

docker pull ${GEODE_DOCKER_IMAGE}
sudo curl -Lo /usr/local/bin/dunit-progress https://github.com/jdeppe-pivotal/progress-util/releases/download/0.2/progress.linux
sudo chmod +x /usr/local/bin/dunit-progress
wget --no-verbose -O /tmp/chromedriver_linux64.zip https://chromedriver.storage.googleapis.com/${CHROME_DRIVER_VERSION}/chromedriver_linux64.zip
sudo sudo rm -rf /opt/selenium/chromedriver
sudo unzip /tmp/chromedriver_linux64.zip -d /opt/selenium
rm /tmp/chromedriver_linux64.zip
sudo mv /opt/selenium/chromedriver /opt/selenium/chromedriver-${CHROME_DRIVER_VERSION}
sudo chmod 755 /opt/selenium/chromedriver-${CHROME_DRIVER_VERSION}
sudo ln -fs /opt/selenium/chromedriver-${CHROME_DRIVER_VERSION} /usr/bin/chromedriver

sudo apt-get clean
sudo rm -rf /var/lib/apt/lists/*
