blob: d4fe9e26c8856666b08d2e677dc81cb845c1af64 [file] [log] [blame]
#!/bin/bash
SCRIPT="$0"
# SCRIPT may be an arbitrarily deep series of symlinks. Loop until we have the concrete path.
while [ -h "$SCRIPT" ] ; do
ls=`ls -ld "$SCRIPT"`
# Drop everything prior to ->
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
SCRIPT="$link"
else
SCRIPT=`dirname "$SCRIPT"`/"$link"
fi
done
# determine kernel home
KERNEL_HOME=`dirname "$SCRIPT"`/..
# make KERNEL_HOME absolute
KERNEL_HOME=`cd "$KERNEL_HOME"; pwd`
# execute user setenv script if needed
if [ -r "$KERNEL_HOME/bin/setenv.sh" ]
then
. $KERNEL_HOME/bin/setenv.sh
fi
# setup classpath and java environment
. "$KERNEL_HOME/bin/setupClasspath.sh"
# Run java version check with the discovered java jvm.
. "$KERNEL_HOME/bin/checkJava.sh"
shopt -s extglob
# parse the command we executing
COMMAND=$1
shift;
if [ "$COMMAND" = "start" ]
then
# parse the standard arguments
CONFIG_DIR=$KERNEL_HOME/configuration
CLEAN_FLAG=
NO_START_FLAG=
SHELL_FLAG=
DEBUG_FLAG=
DEBUG_PORT=8000
SUSPEND=n
if [ -z "$JMX_PORT" ]
then
JMX_PORT=9875
fi
if [ -z "$KEYSTORE_PASSWORD" ]
then
KEYSTORE_PASSWORD=changeit
fi
ADDITIONAL_ARGS=
while (($# > 0))
do
case $1 in
-debug)
DEBUG_FLAG=1
if [[ "$2" == +([0-9]) ]]
then
DEBUG_PORT=$2
shift;
fi
;;
-clean)
CLEAN_FLAG=1
;;
-configDir)
CONFIG_DIR=$2
shift;
;;
-jmxport)
JMX_PORT=$2
shift;
;;
-keystore)
KEYSTORE_PATH=$2
shift;
;;
-keystorePassword)
KEYSTORE_PASSWORD=$2
shift;
;;
-noStart)
NO_START_FLAG=1
;;
-suspend)
SUSPEND=y
;;
-shell)
SHELL_FLAG=1
;;
*)
ADDITIONAL_ARGS="$ADDITIONAL_ARGS $1"
;;
esac
shift
done
# start the kernel
if [[ "$CONFIG_DIR" != /* ]]
then
CONFIG_DIR=$KERNEL_HOME/$CONFIG_DIR
fi
if [ -z "$KEYSTORE_PATH" ]
then
KEYSTORE_PATH=$CONFIG_DIR/keystore
fi
if [ "$DEBUG_FLAG" ]
then
DEBUG_OPTS=" \
-Xdebug \
-Xrunjdwp:transport=dt_socket,address=$DEBUG_PORT,server=y,suspend=$SUSPEND"
fi
if [ "$CLEAN_FLAG" ]
then
echo "Cleaning the serviceability and working directories..."
rm -rf "$KERNEL_HOME/work"
rm -rf "$KERNEL_HOME/serviceability"
LAUNCH_OPTS="$LAUNCH_OPTS -clean" #equivalent to setting osgi.clean to "true"
fi
if [ "$SHELL_FLAG" ]
then
echo "Warning: Kernel shell not supported; -shell option ignored."
# LAUNCH_OPTS="$LAUNCH_OPTS -Forg.eclipse.virgo.kernel.shell.local=true"
fi
ACCESS_PROPERTIES=$CONFIG_DIR/org.eclipse.virgo.kernel.jmxremote.access.properties
AUTH_LOGIN=$CONFIG_DIR/org.eclipse.virgo.kernel.authentication.config
AUTH_FILE=$CONFIG_DIR/org.eclipse.virgo.kernel.users.properties
CONFIG_AREA=$KERNEL_HOME/work
JAVA_PROFILE=$KERNEL_HOME/configuration/java-server.profile
if $cygwin; then
ACCESS_PROPERTIES=$(cygpath -wp $ACCESS_PROPERTIES)
AUTH_LOGIN=$(cygpath -wp $AUTH_LOGIN)
AUTH_FILE=$(cygpath -wp $AUTH_FILE)
KERNEL_HOME=$(cygpath -wp $KERNEL_HOME)
CONFIG_DIR=$(cygpath -wp $CONFIG_DIR)
CONFIG_AREA=$(cygpath -wp $CONFIG_AREA)
JAVA_PROFILE=$(cygpath -wp $JAVA_PROFILE)
fi
# Set the required permissions on the JMX configuration files
chmod 600 "$ACCESS_PROPERTIES"
if [ -z "$JAVA_HOME" ]
then
JAVA_EXECUTABLE=java
else
JAVA_EXECUTABLE=$JAVA_HOME/bin/java
fi
# If we get here we have the correct Java version.
if [ -z "$NO_START_FLAG" ]
then
TMP_DIR=$KERNEL_HOME/work/tmp
# Ensure that the tmp directory exists
mkdir -p "$TMP_DIR"
JAVA_OPTS="-Xmx1024m \
-XX:MaxMetaspaceSize=512m $JAVA_OPTS"
cd "$KERNEL_HOME"; exec $JAVA_EXECUTABLE \
$JAVA_OPTS \
$DEBUG_OPTS \
$JMX_OPTS \
-XX:+HeapDumpOnOutOfMemoryError \
-XX:ErrorFile="$KERNEL_HOME/serviceability/error.log" \
-XX:HeapDumpPath="$KERNEL_HOME/serviceability/heap_dump.hprof" \
-Djava.security.auth.login.config="$AUTH_LOGIN" \
-Dorg.eclipse.virgo.kernel.authentication.file="$AUTH_FILE" \
-Djava.io.tmpdir="$TMP_DIR" \
-Dorg.eclipse.virgo.kernel.home="$KERNEL_HOME" \
-Dorg.eclipse.virgo.kernel.config="$CONFIG_DIR" \
-Dosgi.sharedConfiguration.area="$CONFIG_DIR" \
-Dosgi.java.profile="file:$JAVA_PROFILE" \
-Declipse.ignoreApp=true \
-Dosgi.install.area="$KERNEL_HOME" \
-Dosgi.configuration.area="$CONFIG_AREA" \
-Dssh.server.keystore="$CONFIG_DIR/hostkey.ser" \
-Dosgi.frameworkClassPath="$FWCLASSPATH" \
-Djava.endorsed.dirs="$KERNEL_HOME/lib/endorsed" \
-Dcom.sun.management.jmxremote.port=$JMX_PORT \
-Dcom.sun.management.jmxremote.authenticate=true \
-Dcom.sun.management.jmxremote.login.config=virgo-kernel \
-Dcom.sun.management.jmxremote.access.file="$ACCESS_PROPERTIES" \
-Djavax.net.ssl.keyStore="$KEYSTORE_PATH" \
-Djavax.net.ssl.keyStorePassword="$KEYSTORE_PASSWORD" \
-Dcom.sun.management.jmxremote.ssl=true \
-Dcom.sun.management.jmxremote.ssl.need.client.auth=false \
-classpath "$CLASSPATH" \
org.eclipse.equinox.launcher.Main \
-noExit \
$LAUNCH_OPTS \
$ADDITIONAL_ARGS
fi
elif [ "$COMMAND" = "stop" ]
then
CONFIG_DIR="$KERNEL_HOME/configuration"
#parse args for the script
if [ -z "$TRUSTSTORE_PATH" ]
then
TRUSTSTORE_PATH=$CONFIG_DIR/keystore
fi
if [ -z "$TRUSTSTORE_PASSWORD" ]
then
TRUSTSTORE_PASSWORD=changeit
fi
if [ -z "$JMX_PORT" ]
then
JMX_PORT=9875
fi
shopt -s extglob
while (($# > 0))
do
case $1 in
-truststore)
TRUSTSTORE_PATH=$2
shift;
;;
-truststorePassword)
TRUSTSTORE_PASSWORD=$2
shift;
;;
-configDir)
CONFIG_DIR=$2
shift;
;;
-jmxport)
JMX_PORT=$2
shift;
;;
*)
OTHER_ARGS+=" $1"
;;
esac
shift
done
OTHER_ARGS+=" -jmxport $JMX_PORT"
if $cygwin; then
KERNEL_HOME=$(cygpath -wp $KERNEL_HOME)
CONFIG_DIR=$(cygpath -wp $CONFIG_DIR)
fi
exec $JAVA_EXECUTABLE \
$JAVA_OPTS \
$JMX_OPTS \
-classpath "$CLASSPATH" \
-Djavax.net.ssl.trustStore="$TRUSTSTORE_PATH" \
-Djavax.net.ssl.trustStorePassword="$TRUSTSTORE_PASSWORD" \
-Dorg.eclipse.virgo.kernel.home="$KERNEL_HOME" \
-Dorg.eclipse.virgo.kernel.authentication.file="$CONFIG_DIR/org.eclipse.virgo.kernel.users.properties" \
org.eclipse.virgo.nano.shutdown.ShutdownClient $OTHER_ARGS
else
echo "Unknown command: ${COMMAND}"
fi