mirror of
https://github.com/opennetworkinglab/onos.git
synced 2025-10-27 22:31:18 +01:00
101 lines
2.9 KiB
Bash
Executable File
101 lines
2.9 KiB
Bash
Executable File
#!/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
|
|
export ONOS_USE_SSH=true
|
|
[ ! -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-secure-ssh -u onos -p 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..."
|
|
kill -9 $(cat /tmp/onos.pid) 2>/dev/null
|
|
}
|
|
|
|
# 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
|