| #!/bin/bash |
| # ----------------------------------------------------------------------------- |
| # Runs ONOS from distributable onos.tar.gz |
| # ----------------------------------------------------------------------------- |
| |
| ONOS_TAR= |
| |
| cd /tmp |
| |
| # Kill any running instances |
| [ -f /tmp/onos.pid ] && kill -9 $(cat /tmp/onos.pid) &>/dev/null |
| |
| ONOS_DIR=$(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 |
| |
| # Write out this installation's MD5 checksum |
| echo "$newMD5" > $ONOS_MD5 |
| |
| # Change into the ONOS home directory |
| cd $ONOS_DIR |
| export ONOS_HOME=$PWD |
| |
| # Run using the secure SSH client |
| [ ! -f ~/.ssh/id_rsa.pub ] && ssh-keygen -t rsa -f ~/.ssh/id_rsa -P '' -q |
| $ONOS_HOME/bin/onos-user-key $(id -un) "$(cut -d\ -f2 ~/.ssh/id_rsa.pub)" |
| $ONOS_HOME/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_HOME/config ] || mkdir -p $ONOS_HOME/config |
| cat > $ONOS_HOME/config/cluster.json <<-EOF |
| { |
| "name": "default", |
| "nodes": [ {"id": "$IP", "ip": "$IP", "port": 9876 } ], |
| "partitions": [ { "id": 1, "members": [ "$IP" ] } ] |
| } |
| EOF |
| |
| else |
| # Otherwise, run using the previous installation |
| echo "Running previous installation..." |
| |
| # Change into the ONOS home directory |
| cd $ONOS_DIR |
| export ONOS_HOME=$PWD |
| fi |
| |
| # 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 |