blob: d35468a6e44b535d34589089ca36f884edfd475b [file] [log] [blame]
#!/bin/bash
# -----------------------------------------------------------------------------
# Runs ONOS from distributable onos.tar.gz
# -----------------------------------------------------------------------------
ONOS_TAR=
[ -f $ONOS_TAR ] || (echo "$ONOS_TAR not found" && exit 1)
# Kill any running instances
[ -f /tmp/onos.pid ] && kill -9 $(cat /tmp/onos.pid) &>/dev/null
ONOS_DIR=/tmp/$(tar tf $ONOS_TAR | head -n 1 | cut -d/ -f1)
ONOS_MD5=$ONOS_DIR/CHECKSUM
# Extract MD5 of the ONOS tar file and of the previous installation, if one exists
md5cmd=''
md5cmdprm=''
case "$OSTYPE" in
darwin*) md5cmd='md5' ; md5cmdprm='-q' ;;
*) md5cmd='md5sum';;
esac
oldMD5=$(cat $ONOS_MD5 2>/dev/null)
newMD5=$(${md5cmd} ${md5cmdprm} $ONOS_TAR)
# Search for the "clean" argument anywhere on the command-line
echo "$@" | egrep -q "\bclean\b" && clean=true || unset clean
set -e # Do not tolerate any errors from this point onward
# If the previous installation does not exist, or if the ONOS tar changed,
# or if the user asked for clean run, start from scratch.
if [ ! -d $ONOS_DIR -o "$oldMD5" != "$newMD5" -o -d $ONOS_DIR -a -n "$clean" ]; then
echo "Running clean installation..."
# Blitz previously unrolled onos- directory
rm -fr $ONOS_DIR
# Unroll new image from the specified tar file
[ -f $ONOS_TAR ] && tar zxf $ONOS_TAR -C /tmp
# Write out this installation's MD5 checksum
echo "$newMD5" > $ONOS_MD5
# Run using the secure SSH client
[ ! -f ~/.ssh/id_rsa.pub ] && ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '' -q
$ONOS_DIR/bin/onos-user-key $(id -un) "$(cut -d\ -f2 ~/.ssh/id_rsa.pub)"
$ONOS_DIR/bin/onos-user-password onos rocks
# Create config/cluster.json (cluster metadata)
IP=${ONOS_IP:-127.0.0.1}
echo "Creating local cluster configs for IP $IP..."
[ -d $ONOS_DIR/config ] || mkdir -p $ONOS_DIR/config
cat > $ONOS_DIR/config/cluster.json <<-EOF
{
"name": "default",
"cluster": [ {"id": "$IP", "ip": "$IP", "port": 9876 } ]
}
EOF
# Copy config files
find $ONOS_ROOT/tools/package/config -maxdepth 1 -name \*.json -exec cp {} $ONOS_HOME/config/ \;
else
# Otherwise, run using the previous installation
echo "Running previous installation..."
fi
# Change into the ONOS home directory
cd $ONOS_DIR
export ONOS_HOME=$PWD
# Start ONOS as a server, but include any specified options
./bin/onos-service server "$@" &>onos.log &
echo "$!" > /tmp/onos.pid
function killServer() {
echo "Killing ONOS server..."
cat /tmp/onos.pid | xargs kill -9
}
# Hang-on a bit and then start tailing the ONOS log output
MAX_RETRY=30
echo "Waiting for karaf.log"
until [ $MAX_RETRY -le 0 ]; do
KARAF_LOG=$(find $ONOS_HOME -type f -name karaf.log)
if [ $KARAF_LOG ]; then
trap killServer INT
tail -f $KARAF_LOG
return
fi
MAX_RETRY=$[$MAX_RETRY-1]
sleep 1
done
echo "Fail to open karaf.log"
killServer