#!/usr/bin/env bash
# 
#   Copyright 2017 RIFT.IO Inc
#
#   Licensed 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.
#
# Author(s): Jeremy Mordkoff
# Creation Date: 26 April 2017
# 
#

# INSTALL.sh
# install launchpad UI and create the service
#

HERE=$(realpath $(dirname $0))
OSM_JENKINS=$(dirname $HERE)
. $OSM_JENKINS/common/install_common



# Defensive bash programming flags
set -o errexit    # Exit on any error
trap 'echo ERROR: Command failed: \"$BASH_COMMAND\"' ERR
set -o nounset    # Expanding an unset variable is an error.  Variables must be
                  # set before they can be used.

###############################################################################
# Set up repo and version
PLATFORM_REPOSITORY=OSM3
PLATFORM_VERSION=5.2.0.2.72254

while getopts ":P:V:h" o; do
    case "${o}" in
        P)
            PLATFORM_REPOSITORY=${OPTARG}
            ;;
        V)
            PLATFORM_VERSION=${OPTARG}
            ;;
        h)
            usage
            exit 0
            ;;
        *)
            usage
            exit 1
            ;;
    esac
done

function usage() {
    echo
    echo "NAME:"
    echo "  $0"
    echo
    echo "SYNOPSIS:"
    echo "  $0 -h|--help"
    echo "  $0 -P <PLATFORM_REPOSITORY> -V <PLATFORM_VERSION>"
    echo
    echo "DESCRIPTION:"
    echo "  Prepare current system to run SO and UI."
    echo
    echo "  PLATFORM_REPOSITORY (optional): name of the RIFT.ware repository."
    echo "  PLATFORM_VERSION (optional): version of the platform packages to be installed."
    echo
}


###############################################################################
# Main block

# enable the right repos
curl http://repos.riftio.com/public/xenial-riftware-public-key | apt-key add -
curl -o /etc/apt/sources.list.d/rift.list http://buildtracker.riftio.com/repo_file/ub16/${PLATFORM_REPOSITORY}/

# Make the Rift repo a higher priority to work around version conflicts.
cat <<EOF > /etc/apt/preferences.d/rift
Package: *
Pin: origin repos.riftio.com
Pin-Priority: 600
EOF

apt-get update

# and install the tools
apt-get install -y --allow-downgrades rw.tools-container-tools=${PLATFORM_VERSION} rw.tools-scripts=${PLATFORM_VERSION} python
/usr/rift/container_tools/mkcontainer --modes UI-base --rw-version ${PLATFORM_VERSION}


# now disable the RIFT OSM repo so that we'll get UI from
# the OSM repos
rm -f /etc/apt/sources.list.d/rift.list

apt-get update
apt-get install -y rw.ui-skyquake
echo "Creating Service ...."
/usr/rift/bin/create_launchpad_service

