Enhancing onos-run-karaf to run clean installation when tar.gz changes.

Change-Id: Ie25bbb58fa48d7711308346cfc41f1b4c94394e7
diff --git a/tools/package/onos-run-karaf b/tools/package/onos-run-karaf
index e223a61..9efc725 100755
--- a/tools/package/onos-run-karaf
+++ b/tools/package/onos-run-karaf
@@ -10,17 +10,32 @@
 # Kill any running instances
 [ -f /tmp/onos.pid ] && kill -9 $(cat /tmp/onos.pid) &>/dev/null
 
-set -e
-
 ONOS_DIR=$(tar tf $ONOS_TAR | head -n 1 | cut -d/ -f1)
+ONOS_MD5=$ONOS_DIR/CHECKSUM
 
-if [ -d $ONOS_DIR -a "$1" = "clean" -o ! -d $ONOS_DIR ]; then
+# Extract MD5 of the ONOS tar file and of the previous installation, if one exists
+oldMD5=$(cat $ONOS_MD5 2>/dev/null)
+newMD5=$(md5 -q $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
@@ -39,7 +54,11 @@
       "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