#!/bin/ksh
#
# @(#)vmsa_server	1.84 00/06/17 08:23:37
#
# Copyright (C) 2000 VERITAS Software Corporation.  ALL RIGHTS RESERVED.
# UNPUBLISHED -- RIGHTS RESERVED UNDER THE COPYRIGHT
# LAWS OF THE UNITED STATES.  USE OF A COPYRIGHT NOTICE
# IS PRECAUTIONARY ONLY AND DOES NOT IMPLY PUBLICATION
# OR DISCLOSURE.
#
# THIS SOFTWARE CONTAINS CONFIDENTIAL INFORMATION AND
# TRADE SECRETS OF VERITAS SOFTWARE.  USE, DISCLOSURE,
# OR REPRODUCTION IS PROHIBITED WITHOUT THE PRIOR
# EXPRESS WRITTEN PERMISSION OF VERITAS SOFTWARE.
#
#               RESTRICTED RIGHTS LEGEND
# USE, DUPLICATION, OR DISCLOSURE BY THE GOVERNMENT IS
# SUBJECT TO RESTRICTIONS AS SET FORTH IN SUBPARAGRAPH
# (C) (1) (ii) OF THE RIGHTS IN TECHNICAL DATA AND
# COMPUTER SOFTWARE CLAUSE AT DFARS 252.227-7013.
#               VERITAS SOFTWARE
# 1600 PLYMOUTH STREET, MOUNTAIN VIEW, CA 94043
#
#set -x
#
umask 022
#
CNAME="VERITAS VM Storage Administrator"
VMNAME="VxVM"
PROG=`whence $0` >/dev/null 2>&1

VMSA_HOME=${PROG%/*}	    # remove 'vmsa_server'
VMSA_HOME=${VMSA_HOME%/.} # remove a trailing '.'  (./vmsa_server causes this)
VMSA_HOME=${VMSA_HOME%/*} # remove '/vxvm'
export VMSA_HOME
export LD_LIBRARY_PATH=$VMSA_HOME/vmsa/server/lib:$LD_LIBRARY_PATH
export SHLIB_PATH=$VMSA_HOME/vmsa/server/lib:$SHLIB_PATH
if [ ! -f /usr/sbin/vxrelayout ];
then
	LD_LIBRARY_PATH=$VMSA_HOME/vmsa/server/lib/2.x:$LD_LIBRARY_PATH
	SHLIB_PATH=$VMSA_HOME/vmsa/server/lib/2.x:$SHLIB_PATH
fi


export CODEBASE=$VMSA_HOME/vmsa/java
export CP=$VMSA_HOME/vmsa/java
export PATH=$VMSA_HOME/jre/bin:$VMSA_HOME/vmsa/server:/usr/sbin:/etc/vx/bin:/usr/lib/fs/vxfs:$PATH

unset JAVA_HOME	# if set, may cause `java' to get confused
unset ENV	# prevent .kshrc file from executing
unset CLASSPATH # for jre
OS=`uname -s`

JIT=-nojit
TH_TYPE=
GC=-noasyncgc

case $OS in
	"HP-UX")
		export THREADS_TYPE=
#		TH_TYPE=-green;
esac

stop_server()
{
	if [ -f $LOGDIR/.server_pids ];
	then
		echo "Stopping $CNAME Server"
		while read pid
		do
			kill $pid >/dev/null 2>&1
		done < $LOGDIR/.server_pids
		rm -f $LOGDIR/.server_pids
	else
		echo "Unable to stop $CNAME Server"
	fi
}

check_vold()
{
	if [ -x /usr/sbin/vxdctl -o -x /sbin/voldctl ];
	then
		if [ -x /sbin/voldctl ];
		then
			output=`voldctl mode`
		else
			output=`vxdctl mode`
		fi
		mode="`expr "\$output" : '.*: \(.*\)'`"
                if [ "$mode" != "enabled" ];
                then
                        echo "$VMNAME daemon not enabled, $CNAME VM server cannot be started."
			exit 2
                fi
	else
		echo "$VMNAME daemon not found, $CNAME VM server cannot be started."
		exit 2
	fi
}

usage()
{
        cat >& $1 <<-EOF
           vmsa_server - $CNAME Server
	   usage: vmsa_server [-V|-q|-k|-h]
           Options:
              -V      Prints the version
              -q      Query to check if server is running
              -k      Kill the server processes
              -h      Prints out this help message
	EOF
}


UID=`id | cut -c5- | sed 's/(.*//'`
if [ $UID != "0" ]; then echo "Permission denied"; exit 1; fi

LOGDIR=/var/opt/vmsa/logs
if [ ! -d $LOGDIR ]; then
	mkdir -p $LOGDIR
	chmod 755 $LOGDIR
fi

bail=0
while getopts kVqh  c
do
	case $c in
	k)    stop_server;
		echo;
		bail=1;;
	V)    jre $TH_TYPE -cp $CP -Dvrts.codebase=$CODEBASE vrts.remote.VMServerImpl -V;
		echo;
		bail=1;;
	q)    jre $TH_TYPE -cp $CP -Dvrts.codebase=$CODEBASE vrts.remote.VMServerImpl -q;
		echo;
		bail=1;;
	h|*)  usage;
		echo;
		bail=1;;
	esac
done
shift `expr $OPTIND - 1`

if [ $# -gt 0 ];
then
	echo "Extra arguments (ignored): "$*
	echo
fi

if [ $bail -eq 1 ];
then
	exit 0
fi

# see if vxconfigd enabled
check_vold
#
# check to see if rmiregistry and/or cmdserver are already running
REGPIDS=`ps -ef | grep VRTSReg | grep -v grep | sed -e 's/^  *root  *//' -e 's/ .*//'`
CMDPIDS=`ps -ef | grep cmdserver | grep -v grep | sed -e 's/^  *root  *//' -e 's/ .*//'`

if [ "$REGPIDS" = "" -a "$CMDPIDS" = "" ];
then
	rm -f $LOGDIR/.server_pids
fi

if [ "$REGPIDS" ];
then 
   	echo "RMI Registry is already running"
else
	echo "Starting RMI Registry"
	jre $TH_TYPE $JIT $GC -cp $CP -Dvrts.codebase=$CODEBASE vrts.vxfw.services.misc.VxVRTSRegistryImpl &
	reg_pid=$!
	echo "$reg_pid" >> $LOGDIR/.server_pids
fi


if [ "$CMDPIDS" ];
then 
	echo "$CNAME Command Server already running"
else
	# Start the command server
	echo "Starting $CNAME Command Server"
	$VMSA_HOME/vmsa/server/cmdserver >> $LOGDIR/server.log 2>&1&
	cmd_pid=$!
	echo "$cmd_pid" >> $LOGDIR/.server_pids
fi

CODEBASE_URL="file:$CODEBASE"

sleep 1

echo "Starting $CNAME Server"
echo "Starting $CNAME Server" >> $LOGDIR/server.log
echo `date` >> $LOGDIR/server.log

jre $TH_TYPE $JIT $GC -cp $CP  -Dvrts.packageName=SOL -Dvrts.codebase=$CODEBASE -Djava.rmi.server.codebase="${CODEBASE_URL}" -Dvrts.localHost=`hostname`  vrts.remote.VMServerImpl >> $LOGDIR/server.log 2>&1&
server_pid=$!
echo "$server_pid" >> $LOGDIR/.server_pids
trap "stop_server; exit 0" 1 2

wait $server_pid >/dev/null 2>&1
rc=$?

if [ $rc != "0" ];
then
	echo "$CNAME Server terminated."
fi

exit $rc
