#!/bin/bash
# -----------------------------------------------------------------------------
# Packages ONOS distributable into onos.tar.gz, onos.zip or a deb file
# -----------------------------------------------------------------------------

set -eu -o pipefail

OUT=$1
#export HOME=/Users/tom
KARAF_TAR="$HOME/Downloads/apache-karaf-4.2.1.tar.gz"
ONOS_VERSION=$3
BRANDING=$4
KARAF_PATCHES=$5
SANDBOX=${6:-.}

KARAF_VERSION="4.2.1"
ONOS_SECURITY_MODE="false"

PREFIX="onos-$ONOS_VERSION"

# Unroll the Apache Karaf bits, prune them and make ONOS top-level directories.
tar xf $KARAF_TAR

# rename path name to match what was distributed with vicci
# mv "$(ls -d apache*)" "apache-karaf-$KARAF_VERSION" || true

#tar xf $KARAF_PATCHES

# Unroll the Apache Karaf bits, prune them and make ONOS top-level directories.
KARAF_DIR=$(ls -d apache*)
rm -rf $KARAF_DIR/demos

# Patch the log-file size in place to increase it to 10 MB
perl -pi.old -e "s/maxFileSize=1MB/maxFileSize=10MB/g" \
    $KARAF_DIR/etc/org.ops4j.pax.logging.cfg

# Patch-in proper Karaf version into the startup script
sed -i.bk "s/apache-karaf-\$KARAF_VERSION/$KARAF_DIR/g" $SANDBOX/bin/onos-service

# hack - need to break the link to the script in the source tree for bazel
sed -i.bk "s/apache-karaf-\$KARAF_VERSION/$KARAF_DIR/g" $SANDBOX/bin/onos

rm -f bin/*.bk
chmod a+x $SANDBOX/bin/onos-service $SANDBOX/bin/onos

# Patch the Apache Karaf distribution with ONOS branding bundle
cp $BRANDING $KARAF_DIR/lib/onos-tools-package-branding.jar

# **** Moving karaf to subdirectory ****
mkdir $PREFIX
mv $KARAF_DIR $PREFIX

# Stage the ONOS admin scripts and patch in Karaf service wrapper extras
cp -r $SANDBOX/bin $PREFIX
cp -r $SANDBOX/runtime/bin/* $PREFIX/bin/
cp -r $SANDBOX/init $PREFIX
cp -r $SANDBOX/etc/* $PREFIX/$KARAF_DIR/etc/

# Fix the onos version string in the features config
sed -i".VERBACK" -E "s/.ONOS_VERSION/${ONOS_VERSION}/" $PREFIX/$KARAF_DIR/etc/org.apache.karaf.features.cfg

if [ "$ONOS_SECURITY_MODE" = true ]
then
    # ONOS Patching ----------------------------------------------------------------

    echo "Enabling security mode ONOS..."

    # SM-ONOS step 1: downgrade felix config admin
    FELIX_CFG_ADMIN=${FELIX_CFG_ADMIN:-~/Downloads/org.apache.felix.configadmin-1.6.0.jar}
    if [ ! -f $FELIX_CFG_ADMIN ]; then
        echo "Downloading $FELIX_CFG_ADMIN..."
        curl -sL http://archive.apache.org/dist/felix/org.apache.felix.configadmin-1.6.0.jar > $FELIX_CFG_ADMIN
    fi
    [ ! -f $FELIX_CFG_ADMIN ] && \
        echo "Felix config admin not found: $FELIX_CFG_ADMIN" && exit 1

    mkdir -p $PREFIX/$KARAF_DIR/system/org/apache/felix/org.apache.felix.configadmin/1.6.0
    cp $FELIX_CFG_ADMIN $PREFIX/$KARAF_DIR/system/org/apache/felix/org.apache.felix.configadmin/1.6.0
    perl -pi.old -e "s|org.apache.felix.configadmin/1.8.4|org.apache.felix.configadmin/1.6.0|g" \
        $PREFIX/$KARAF_DIR/etc/startup.properties

    # SM-ONOS step 2: stage ONOS Felix framework security (this is already done by karaf assembly); end

    # SM-ONOS step 3.1: configure karaf
    perl -pi.old -e "s|#java.security.policy|java.security.policy|" \
        $PREFIX/$KARAF_DIR/etc/system.properties
    perl -pi.old -e "s|#org.osgi.framework.security|org.osgi.framework.security|" \
        $PREFIX/$KARAF_DIR/etc/system.properties

    # SM-ONOS step 3.2: update featuresBoot
    export BOOT_FEATURES="onos-security,$BOOT_FEATURES"

    # Patch the Apache Karaf distribution file to load onos security feature
    perl -pi.old -e "s|^(featuresBoot=).*|\1$BOOT_FEATURES|" \
        $PREFIX/$KARAF_DIR/etc/org.apache.karaf.features.cfg
fi

zip -q -0 -r $OUT $PREFIX
