#!/bin/bash
# -----------------------------------------------------------------------------
# Remotely pushes bits to a remote node and installs ONOS on it.
# -----------------------------------------------------------------------------

[ ! -d "$ONOS_ROOT" ] && echo "ONOS_ROOT is not defined" >&2 && exit 1
. $ONOS_ROOT/tools/build/envDefaults

# If the first option is -f attempt uninstall first.
[ "$1" = "-f" ] && shift && onos-uninstall ${1:-$OCI}

node=${1:-$OCI}
remote=$ONOS_USER@$node

scp -q $ONOS_TAR $remote:/tmp

ssh $remote "
    [ -d $ONOS_INSTALL_DIR/bin ] && echo \"ONOS is already installed\" && exit 1

    # Prepare a landing zone and unroll the bits
    sudo mkdir -p $ONOS_INSTALL_DIR && sudo chown ${ONOS_USER}:${ONOS_USER} $ONOS_INSTALL_DIR
    tar zxmf /tmp/$ONOS_BITS.tar.gz -C $ONOS_INSTALL_DIR --strip-components=1

    # Make a link to the log file directory and make a home for auxiliaries
    ln -s $ONOS_INSTALL_DIR/$KARAF_DIST/data/log /opt/onos/log
    mkdir $ONOS_INSTALL_DIR/var
    mkdir $ONOS_INSTALL_DIR/config

    # Install the upstart configuration file and setup options for debugging
    sudo cp $ONOS_INSTALL_DIR/debian/onos.conf /etc/init/onos.conf
    echo 'export ONOS_OPTS=debug' > $ONOS_INSTALL_DIR/options

    # Remove any previous ON.Lab bits from ~/.m2 repo
    rm -fr ~/.m2/repository/org/onlab

    # Drop log level for the console
    echo "log4j.logger.org.apache.sshd = WARN" >> $ONOS_INSTALL_DIR/$KARAF_DIST/etc/org.ops4j.pax.logging.cfg

"

# Configure the ONOS installation
onos-config $node

# Ignite the ONOS service.
onos-service $node start
