Cross-platform changes to onos.initd
We now can use start-stop-daemon (debian), daemon()
shell function (centos), or sudo (others) to start
onos-service.
It should be backward compatible on systemd systems.
Tested on Ubuntu 14 and CentOS 6. Should also work on
Ubuntu 15/16, CentOS 7, Debian, and Fedora.
(Note that we should test this against various OSes,
preferably automatically rather than manually!)
Addresses at least part of ONOS-2907
Change-Id: I4ded98baf02321a5a9db37fdff19e1ce4a3d23d2
diff --git a/tools/package/init/onos.initd b/tools/package/init/onos.initd
index 9e33c98..95c2641 100755
--- a/tools/package/init/onos.initd
+++ b/tools/package/init/onos.initd
@@ -22,26 +22,51 @@
[ -f $ONOS_HOME/options ] && . $ONOS_HOME/options
ONOS_USER=${ONOS_USER:-root}
ONOS_GROUP=${ONOS_GROUP:-$ONOS_USER}
-ONOS_OPTS=${ONOS_OPTS:-server}
-ONOS_PID=${ONOS_PID:-/var/run/onos.pid}
+ONOS_OPTS=${ONOS_OPTS:-""}
start () {
- mkdir -p $ONOS_HOME/var 2>/dev/null && chown $ONOS_USER.$ONOS_GROUP $ONOS_HOME/var
- mkdir -p $ONOS_HOME/config 2>/dev/null && chown $ONOS_USER.$ONOS_GROUP $ONOS_HOME/config
+ mkdir -p $ONOS_HOME/var 2>/dev/null && chown $ONOS_USER:$ONOS_GROUP $ONOS_HOME/var
+ mkdir -p $ONOS_HOME/config 2>/dev/null && chown $ONOS_USER:$ONOS_GROUP $ONOS_HOME/config
[ ! -h $ONOS_HOME/log ] && ln -s $ONOS_HOME/karaf/data/log $ONOS_HOME/log || :
# Start ONOS if it's not already running
- if ! status > /dev/null; then
- start-stop-daemon --signal INT --start --chuid $ONOS_USER \
- --background --exec $ONOS_HOME/bin/onos-service \
- -- $ONOS_OPTS >$ONOS_HOME/var/stdout.log 2>$ONOS_HOME/var/stderr.log
+ if ! status >/dev/null; then
+ echo "Starting ONOS"
+ startonos $ONOS_HOME/bin/onos-service server $ONOS_OPTS
else
echo "ONOS/karaf is already running"
fi
}
+startonos () {
+ cmd=$1
+ shift
+ # Start ONOS as a daemon
+ . /etc/init.d/functions && true
+ if type daemon | grep -i function >/dev/null 2>&1; then
+ # Use 'daemon' function if available
+ # Shell metacharacters are passed as arguments to daemon
+ daemon --user $ONOS_USER $cmd $* \
+ \>$ONOS_HOME/var/stdout.log 2\>$ONOS_HOME/var/stderr.log \&
+ elif type start-stop-daemon >/dev/null 2>&1; then
+ # Use start-stop-daemon if available
+ # Warning! running as root can overwrite any linked log file
+ start-stop-daemon --signal INT --start --chuid $ONOS_USER \
+ --background --exec $cmd -- $* \
+ >$ONOS_HOME/var/stdout.log 2>$ONOS_HOME/var/stderr.log
+ else
+ # Fall back to using sudo
+ # Warning! running as root can overwrite any linked log file
+ sudo -E -n -u -b $ONOS_USER $cmd $* \
+ >$ONOS_HOME/var/stdout.log 2>$ONOS_HOME/var/stderr.log
+ fi
+}
+
stop () {
- if status> /dev/null; then
+ if status >/dev/null; then
+ echo "Stopping ONOS"
$ONOS_HOME/karaf/bin/stop
+ # Wait until karaf claims not to be running
+ while status >/dev/null; do echo -n .; sleep 1; done
else
echo "ONOS/karaf is not running"
fi
@@ -49,12 +74,18 @@
restart () {
stop
+ sleep 2 # Bogus hack since karaf stop doesn't work ;-(
start
}
status () {
# karaf status returns 0 if running, 1 if not
- $ONOS_HOME/karaf/bin/status
+ if [ `id -u` == 0 ]; then
+ # Avoid creating data dir as root
+ sudo -n -u $ONOS_USER $ONOS_HOME/karaf/bin/status
+ else
+ $ONOS_HOME/karaf/bin/status
+ fi
}
case $1 in
diff --git a/tools/test/bin/onos-config b/tools/test/bin/onos-config
index e37dc3b..a38191d 100755
--- a/tools/test/bin/onos-config
+++ b/tools/test/bin/onos-config
@@ -37,7 +37,7 @@
# ONOS builtin apps and providers ignited by default
export ONOS_APPS="${ONOS_APPS:-drivers,openflow}"
-ssh $remote "
+ssh -tt $remote "
echo \"onos.ip = \$(sudo ifconfig | grep $ONOS_NIC | cut -d: -f2 | cut -d\\ -f1)\" \
>> $ONOS_INSTALL_DIR/$KARAF_DIST/etc/system.properties
diff --git a/tools/test/bin/onos-install b/tools/test/bin/onos-install
index f0fb9dd..e35585c 100755
--- a/tools/test/bin/onos-install
+++ b/tools/test/bin/onos-install
@@ -55,7 +55,7 @@
[ ! -z "$mvn_settings" ] && scp -q $mvn_settings $remote:/tmp/settings.xml
-ssh $remote "
+ssh -tt $remote "
[ -d $ONOS_INSTALL_DIR/bin ] && echo \"ONOS is already installed\" && exit 1
# Prepare a landing zone and unroll the bits
diff --git a/tools/test/bin/onos-service b/tools/test/bin/onos-service
index 43c231c..eab52ed 100755
--- a/tools/test/bin/onos-service
+++ b/tools/test/bin/onos-service
@@ -43,7 +43,7 @@
# Execute the remote commands
for node in $nodes; do
- ssh $ONOS_USER@${node} "sudo service onos ${2:-status}"
+ ssh -tt $ONOS_USER@${node} "sudo service onos ${2:-status}"
done
;;
*)
diff --git a/tools/test/bin/onos-uninstall b/tools/test/bin/onos-uninstall
index ff8ff53..cf767c4 100755
--- a/tools/test/bin/onos-uninstall
+++ b/tools/test/bin/onos-uninstall
@@ -26,9 +26,8 @@
remote=$ONOS_USER@${1:-$OCI}
-ssh $remote "
- sudo stop onos 1>/dev/null 2>/dev/null
-
+ssh -tt $remote "
+ sudo service onos stop 1>/dev/null 2>/dev/null
# Wait for onos to stop up to 5 seconds
for i in \$(seq 1 5); do
[ -z \"\$(ps -ef | grep karaf.jar | grep -v grep)\" ] && break