463462 - Adds formerly ignored "bin" folders
diff --git a/.gitignore b/.gitignore
index 3fbb103..99fa979 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,7 +5,6 @@
ivy-cache
.ant-targets-build.xml
user-ivy.properties
-bin/
build/
.settings/
.project
diff --git a/jetty-server/org.eclipse.virgo.jetty.sample.tags/.gitignore b/jetty-server/org.eclipse.virgo.jetty.sample.tags/.gitignore
new file mode 100644
index 0000000..fe99505
--- /dev/null
+++ b/jetty-server/org.eclipse.virgo.jetty.sample.tags/.gitignore
@@ -0,0 +1,2 @@
+bin
+
diff --git a/jetty-server/org.eclipse.virgo.jetty.smoketest/.gitignore b/jetty-server/org.eclipse.virgo.jetty.smoketest/.gitignore
new file mode 100644
index 0000000..fe99505
--- /dev/null
+++ b/jetty-server/org.eclipse.virgo.jetty.smoketest/.gitignore
@@ -0,0 +1,2 @@
+bin
+
diff --git a/jetty-server/src/main/dist/bin/checkJava.bat b/jetty-server/src/main/dist/bin/checkJava.bat
new file mode 100644
index 0000000..8df7848
--- /dev/null
+++ b/jetty-server/src/main/dist/bin/checkJava.bat
@@ -0,0 +1,17 @@
+@echo off
+rem Script for checking we have the right version of Java.
+
+if "%JAVA_HOME%" == "" (
+ echo The JAVA_HOME environment variable is not defined.
+ exit /B 1
+)
+if "%CLASSPATH%" == "" (
+ echo The CLASSPATH environment variable is not defined.
+ exit /B 1
+)
+
+rem Run java version check with the discovered java jvm.
+"%JAVA_HOME%\bin\java" -classpath "%CLASSPATH%" org.eclipse.virgo.util.env.JavaVersionChecker
+
+rem If non-zero exit then either we cannot find the checker or the Java version is incorrect.
+if not "%ERRORLEVEL%"=="0" exit /B %ERRORLEVEL%
diff --git a/jetty-server/src/main/dist/bin/checkJava.sh b/jetty-server/src/main/dist/bin/checkJava.sh
new file mode 100644
index 0000000..a06ecd5
--- /dev/null
+++ b/jetty-server/src/main/dist/bin/checkJava.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+#
+# make adjustment when running under cygwin
+#
+if $cygwin; then
+ CLASSPATH=$(cygpath -wp "$CLASSPATH")
+fi
+
+if [ -z "$JAVA_HOME" ]
+then
+ JAVA_EXECUTABLE=java
+else
+ JAVA_EXECUTABLE=$JAVA_HOME/bin/java
+fi
+
+# Run java version check with the discovered java jvm.
+$JAVA_EXECUTABLE \
+ -classpath "$CLASSPATH" \
+ org.eclipse.virgo.util.env.JavaVersionChecker
+
+# If non-zero exit then either we cannot find the check or the java version is incorrect.
+if [ $? != 0 ]
+then
+ exit 1
+fi
diff --git a/jetty-server/src/main/dist/bin/dmk.bat b/jetty-server/src/main/dist/bin/dmk.bat
new file mode 100644
index 0000000..dd54fec
--- /dev/null
+++ b/jetty-server/src/main/dist/bin/dmk.bat
@@ -0,0 +1,281 @@
+@echo off
+rem Script for starting and stopping the kernel
+
+if "%OS%" == "Windows_NT" setlocal
+
+rem Derive full path for script (includes trailing backslash)
+ set SCRIPT_DIR=%~dp0
+
+if exist "%SCRIPT_DIR%setupVars.bat" (
+ call "%SCRIPT_DIR%setupVars.bat"
+ if not "%ERRORLEVEL%"=="0" (
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B %ERRORLEVEL%
+ )
+) else (
+ echo Cannot set up environment. "setupVars.bat" file missing.
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B 1
+)
+
+rem Select command we are to run
+
+ rem First parm is command
+ set COMMAND=%~1
+ rem Rest are parameters - shift done in subroutines
+
+ rem Switch on COMMAND in {"start","stop"}
+
+ if "%COMMAND%" == "start" (
+ call :doStartCommand %*
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B 0
+ )
+
+ if "%COMMAND%" == "stop" (
+ call :doStopCommand %*
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B 0
+ )
+
+ echo Unknown command: %COMMAND%
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B 1
+
+rem ------------------ Subroutines
+rem ------------------------------
+:doStartCommand
+
+ shift
+ rem The shift must be here :()
+
+ rem Check further file that needs to exist
+ for %%I in ("%KERNEL_HOME%\bin\jmxPermissions.vbs") do if not exist "%%~I" (
+ echo File "%%~I" does not exist but is required to continue.
+ exit /B 1
+ )
+
+ rem Set defaults
+ set CONFIG_DIR=%KERNEL_HOME%\configuration
+ set CLEAN_FLAG=
+ set NO_START_FLAG=
+ set DEBUG_FLAG=
+ set DEBUG_PORT=8000
+ set SUSPEND=n
+ if not defined JMX_PORT set JMX_PORT=9875
+ if not defined KEYSTORE_PASSWORD set KEYSTORE_PASSWORD=changeit
+ set ADDITIONAL_ARGS=
+
+ rem Loop through options
+
+ :startOptionLoop
+ if "%~1"=="" goto endStartOptionLoop
+ if "%~1"=="-debug" goto debug
+ if "%~1"=="-clean" goto clean
+ if "%~1"=="-configDir" goto configDir
+ if "%~1"=="-jmxport" goto jmxport
+ if "%~1"=="-keystore" goto keystore
+ if "%~1"=="-keystorePassword" goto keystorePassword
+ if "%~1"=="-noStart" goto noStart
+ if "%~1"=="-suspend" goto suspend
+ if "%~1"=="-shell" goto shell
+
+ set ADDITIONAL_ARGS=%ADDITIONAL_ARGS% "%~1"
+
+ :continueStartOptionLoop
+ shift
+ goto startOptionLoop
+
+ :debug
+ set DEBUG_FLAG=1
+ set PORT_CANDIDATE=%~2
+ if not "%PORT_CANDIDATE:~0,1%"=="-" (
+ set DEBUG_PORT=%PORT_CANDIDATE%
+ shift
+ )
+ goto continueStartOptionLoop
+ :clean
+ set CLEAN_FLAG=1
+ goto continueStartOptionLoop
+ :configDir
+ set CONFIG_DIR=%~2
+ rem unless absolute, treat as relative to kernel home
+ if "%CONFIG_DIR:~1%"=="\" goto absoluteConfigDir
+ if "%CONFIG_DIR:~1,2%"==":\" goto absoluteConfigDir
+ set CONFIG_DIR=%KERNEL_HOME%\%CONFIG_DIR%
+ :absoluteConfigDir
+ shift
+ goto continueStartOptionLoop
+ :jmxport
+ set JMX_PORT=%~2
+ shift
+ goto continueStartOptionLoop
+ :keystore
+ set KEYSTORE_PATH=%~2
+ shift
+ goto continueStartOptionLoop
+ :keystorePassword
+ set KEYSTORE_PASSWORD=%~2
+ shift
+ goto continueStartOptionLoop
+ :noStart
+ set NO_START_FLAG=1
+ goto continueStartOptionLoop
+ :suspend
+ set SUSPEND=y
+ goto continueStartOptionLoop
+ :shell
+ set SHELL_FLAG=1
+ goto continueStartOptionLoop
+
+ :endStartOptionLoop
+
+
+ rem Adjust permissions if necessary
+ cscript //NoLogo "%KERNEL_HOME%\bin\jmxPermissions.vbs" "%CONFIG_DIR%\"
+
+ rem Adjust options now all are known
+ if "%KEYSTORE_PATH%"=="" set KEYSTORE_PATH=%CONFIG_DIR%\keystore
+ if not "%DEBUG_FLAG%"=="" set DEBUG_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=%DEBUG_PORT%,server=y,suspend=%SUSPEND%
+
+ rem do Clean work:
+ if not "%CLEAN_FLAG%"=="" (
+ rmdir /Q /S "%KERNEL_HOME%\serviceability"
+ rmdir /Q /S "%KERNEL_HOME%\work"
+
+ set LAUNCH_OPTS=%LAUNCH_OPTS% -clean
+ )
+
+ rem do Shell work:
+ if not "%SHELL_FLAG%"=="" (
+ echo "Warning: Kernel shell not supported; -shell option ignored."
+ rem set LAUNCH_OPTS=%LAUNCH_OPTS% -Forg.eclipse.virgo.kernel.shell.local=true
+ )
+
+ rem Set JMX options
+ set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.port=%JMX_PORT%
+ set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.authenticate=true
+ set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.login.config=virgo-kernel
+ set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.access.file="%CONFIG_DIR%\org.eclipse.virgo.kernel.jmxremote.access.properties"
+ set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.keyStore="%KEYSTORE_PATH%"
+ set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.keyStorePassword=%KEYSTORE_PASSWORD%
+ set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.ssl=true
+ set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.ssl.need.client.auth=false
+
+ if not "%NO_START_FLAG%"=="" goto :eof
+ rem ensure that the tmp directory exists:
+ set TMP_DIR="%KERNEL_HOME%\work\tmp"
+ if not exist "%TMP_DIR%" mkdir "%TMP_DIR%"
+
+ set JAVA_OPTS=-Xmx512m -XX:MaxPermSize=512m %JAVA_OPTS%
+ rem Run the server
+
+ rem Marshall parameters
+ set KERNEL_JAVA_PARMS=%JAVA_OPTS% %DEBUG_OPTS% %JMX_OPTS%
+
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -XX:+HeapDumpOnOutOfMemoryError
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -XX:ErrorFile="%KERNEL_HOME%\serviceability\error.log"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -XX:HeapDumpPath="%KERNEL_HOME%\serviceability\heap_dump.hprof"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Djava.security.auth.login.config="%CONFIG_DIR%\org.eclipse.virgo.kernel.authentication.config"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dorg.eclipse.virgo.kernel.authentication.file="%CONFIG_DIR%\org.eclipse.virgo.kernel.users.properties"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Djetty.home="%KERNEL_HOME%\jetty"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Djava.io.tmpdir="%TMP_DIR%"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dorg.eclipse.virgo.kernel.home="%KERNEL_HOME%"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.java.profile="file:%CONFIG_DIR%\java6-server.profile"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dssh.server.keystore="%CONFIG_DIR%/hostkey.ser"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dorg.eclipse.virgo.kernel.config="%CONFIG_DIR%"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.sharedConfiguration.area="%CONFIG_DIR%"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Declipse.ignoreApp="true"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.install.area="%KERNEL_HOME%"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.configuration.area="%KERNEL_HOME%\work"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.frameworkClassPath="%FWCLASSPATH%"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Djava.endorsed.dirs="%KERNEL_HOME%\lib\endorsed"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -classpath "%CLASSPATH%"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% org.eclipse.equinox.launcher.Main
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -noExit
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% %LAUNCH_OPTS%
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% %ADDITIONAL_ARGS%
+
+ rem Now run it
+ PUSHD %KERNEL_HOME%
+ "%JAVA_HOME%\bin\java" %KERNEL_JAVA_PARMS%
+ POPD
+
+goto :eof
+
+rem ------------------------------
+:doStopCommand
+
+ shift
+ rem The shift must be here :()
+
+ rem Set defaults
+ set CONFIG_DIR=%KERNEL_HOME%\configuration
+ if not defined TRUSTSTORE_PATH set TRUSTSTORE_PATH=%CONFIG_DIR%\keystore
+ if not defined TRUSTSTORE_PASSWORD set TRUSTSTORE_PASSWORD=changeit
+ if not defined JMX_PORT set JMX_PORT=9875
+ set OTHER_ARGS=
+
+ rem Loop through options
+ :stopOptionLoop
+
+ if "%~1"=="" goto endStopOptionLoop
+ if "%~1"=="-truststore" goto truststoreStop
+ if "%~1"=="-truststorePassword" goto truststorePasswordStop
+ if "%~1"=="-configDir" goto configDirStop
+ if "%~1"=="-jmxport" goto jmxportStop
+
+ set OTHER_ARGS=%OTHER_ARGS% "%~1"
+
+ :continueStopOptionLoop
+ shift
+ goto stopOptionLoop
+
+ :truststoreStop
+ set TRUSTSTORE_PATH=%~2
+ shift
+ goto continueStopOptionLoop
+
+ :truststorePasswordStop
+ set TRUSTSTORE_PASSWORD=%~2
+ shift
+ goto continueStopOptionLoop
+
+ :configDirStop
+ set CONFIG_DIR=%~2
+ rem unless absolute, treat as relative to kernel home
+ if "%CONFIG_DIR:~1%"=="\" goto absoluteConfigDirStop
+ if "%CONFIG_DIR:~1,2%"==":\" goto absoluteConfigDirStop
+ set CONFIG_DIR=%KERNEL_HOME%\%CONFIG_DIR%
+ :absoluteConfigDirStop
+ shift
+ goto continueStopOptionLoop
+
+ :jmxportStop
+ set JMX_PORT=%~2
+ shift
+ goto continueStopOptionLoop
+
+ :endStopOptionLoop
+
+ rem Call shutdown client
+
+ rem Extend JMX options
+ set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.trustStore="%TRUSTSTORE_PATH%"
+ set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.trustStorePassword=%TRUSTSTORE_PASSWORD%
+ set OTHER_ARGS=%OTHER_ARGS% -jmxport %JMX_PORT%
+
+ rem Marshall parameters
+ set SHUTDOWN_PARMS= %JAVA_OPTS% %JMX_OPTS%
+ set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% -classpath "%CLASSPATH%"
+ set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% -Dorg.eclipse.virgo.kernel.home="%KERNEL_HOME%"
+ set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% -Dorg.eclipse.virgo.kernel.authentication.file="%CONFIG_DIR%\org.eclipse.virgo.kernel.users.properties"
+ set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% org.eclipse.virgo.nano.shutdown.ShutdownClient
+ set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% %OTHER_ARGS%
+
+ rem Run Java program
+ PUSHD %KERNEL_HOME%
+ "%JAVA_HOME%\bin\java" %SHUTDOWN_PARMS%
+ POPD
+
+goto :eof
diff --git a/jetty-server/src/main/dist/bin/dmk.sh b/jetty-server/src/main/dist/bin/dmk.sh
new file mode 100644
index 0000000..ff277fa
--- /dev/null
+++ b/jetty-server/src/main/dist/bin/dmk.sh
@@ -0,0 +1,292 @@
+#!/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`
+
+# setup classpath and java environment
+. "$KERNEL_HOME/bin/setupClasspath.sh"
+
+# execute user setenv script if needed
+if [ -r "$KERNEL_HOME/bin/setenv.sh" ]
+then
+ . $KERNEL_HOME/bin/setenv.sh
+fi
+
+
+# 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
+ JETTY_HOME=$KERNEL_HOME/jetty
+ 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
+ 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/java6-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"
+
+ JMX_OPTS=" \
+ $JMX_OPTS \
+ -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"
+
+ 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="-Xmx512m \
+ -XX:MaxPermSize=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 \
+ -Djetty.home=$JETTY_HOME \
+ -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" \
+ -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
+
+ JMX_OPTS=" \
+ $JMX_OPTS \
+ -Djavax.net.ssl.trustStore=${TRUSTSTORE_PATH} \
+ -Djavax.net.ssl.trustStorePassword=${TRUSTSTORE_PASSWORD}"
+
+ 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 \
+ -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
+
diff --git a/jetty-server/src/main/dist/bin/jconsole.bat b/jetty-server/src/main/dist/bin/jconsole.bat
new file mode 100644
index 0000000..4cbe553
--- /dev/null
+++ b/jetty-server/src/main/dist/bin/jconsole.bat
@@ -0,0 +1,54 @@
+@echo off
+rem Script for starting jconsole
+
+if "%OS%" == "Windows_NT" setlocal
+
+rem Find root drive and path for current bat file directory (includes trailing backslash)
+ set SCRIPT_DIR=%~dp0
+
+if exist "%SCRIPT_DIR%setupVars.bat" (
+ call "%SCRIPT_DIR%setupVars.bat"
+ if not "%ERRORLEVEL%"=="0" (
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B %ERRORLEVEL%
+ )
+) else (
+ echo Cannot set up environment. "setupVars.bat" file missing.
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B 1
+)
+
+rem Set defaults
+ set TRUSTSTORE_PATH=%KERNEL_HOME%\configuration\keystore
+ set TRUSTSTORE_PASSWORD=changeit
+ set OTHER_ARGS=
+
+:Loop
+ if "%~1"=="" goto EndLoop
+
+ if "%~1"=="-truststore" (
+ set TRUSTSTORE_PATH=%~2
+ shift
+ shift
+ goto Loop
+ )
+ if "%~1"=="-truststorePassword" (
+ set TRUSTSTORE_PASSWORD=%~2
+ shift
+ shift
+ goto Loop
+ )
+ rem Accumulate extra parameters.
+ set OTHER_ARGS=%OTHER_ARGS% "%~1"
+ shift
+ goto Loop
+:EndLoop
+
+set JMX_OPTS=%JMX_OPTS% -J-Dcom.sun.tools.jconsole.mbeans.keyPropertyList=category,type
+set JMX_OPTS=%JMX_OPTS% -J-Djavax.net.ssl.trustStore="%TRUSTSTORE_PATH%"
+set JMX_OPTS=%JMX_OPTS% -J-Djavax.net.ssl.trustStorePassword=%TRUSTSTORE_PASSWORD%
+
+"%JAVA_HOME%\bin\jconsole" %JMX_OPTS% %OTHER_ARGS%
+
+if "%OS%" == "Windows_NT" endlocal
+goto :eof
diff --git a/jetty-server/src/main/dist/bin/jconsole.sh b/jetty-server/src/main/dist/bin/jconsole.sh
new file mode 100644
index 0000000..0dfbcbf
--- /dev/null
+++ b/jetty-server/src/main/dist/bin/jconsole.sh
@@ -0,0 +1,53 @@
+#!/bin/bash
+
+if [ -z "$JAVA_HOME" ]
+then
+ echo The JAVA_HOME environment variable is not defined
+ exit 1
+fi
+
+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
+
+KERNEL_HOME=`dirname "$SCRIPT"`/..
+KERNEL_HOME=`cd $KERNEL_HOME; pwd`
+
+#parse args for the script
+TRUSTSTORE_PATH=$KERNEL_HOME/configuration/keystore
+TRUSTSTORE_PASSWORD=changeit
+
+shopt -s extglob
+
+while (($# > 0))
+ do
+ case $1 in
+ -truststore)
+ TRUSTSTORE_PATH=$2
+ shift;
+ ;;
+ -truststorePassword)
+ TRUSTSTORE_PASSWORD=$2
+ shift;
+ ;;
+ esac
+ shift
+done
+
+JMX_OPTS=" \
+ $JMX_OPTS \
+ -J-Dcom.sun.tools.jconsole.mbeans.keyPropertyList=category,type \
+ -J-Djavax.net.ssl.trustStore=$TRUSTSTORE_PATH \
+ -J-Djavax.net.ssl.trustStorePassword=$TRUSTSTORE_PASSWORD"
+
+$JAVA_HOME/bin/jconsole $JMX_OPTS
diff --git a/jetty-server/src/main/dist/bin/jmxPermissions.vbs b/jetty-server/src/main/dist/bin/jmxPermissions.vbs
new file mode 100644
index 0000000..0184607
--- /dev/null
+++ b/jetty-server/src/main/dist/bin/jmxPermissions.vbs
@@ -0,0 +1,81 @@
+configFolder = Wscript.Arguments.Item(0)
+
+'WScript.Echo "Fixing permissions on " & configFolder
+
+Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2") 'Load up WMI with the right dll
+
+Dim files(0)
+files(0) = "org.eclipse.virgo.kernel.jmxremote.access.properties"
+
+For Each file In files
+ updateInheritance(configFolder & file)
+ updateOwnership(configFolder & file)
+ updatePermissions(configFolder & file)
+Next
+
+Sub updateInheritance(file)
+ 'WScript.Echo "Updating inheritance of " & file
+
+ Const SE_DACL_PRESENT = 4
+ Const SE_DACL_PROTECTED = 4096
+ Const SE_SELF_RELATIVE = 32768
+
+ Set objFileSecSetting = objWMIService.Get("Win32_LogicalFileSecuritySetting.Path='" & file & "'")
+ objFileSecSetting.GetSecurityDescriptor objSecurityDescriptor
+
+ objSecurityDescriptor.ControlFlags = SE_DACL_PRESENT + SE_DACL_PROTECTED + SE_SELF_RELATIVE
+
+ Set objMethod = objFileSecSetting.Methods_("SetSecurityDescriptor")
+ Set objInParam = objMethod.inParameters.SpawnInstance_()
+ objInParam.Properties_.item("Descriptor") = objSecurityDescriptor
+ objFileSecSetting.ExecMethod_ "SetSecurityDescriptor", objInParam
+
+ 'WScript.Echo "Updated inheritance of " & file
+End Sub
+
+Sub updateOwnership(file)
+ 'WScript.Echo "Updating ownership of " & file
+ Set objDataFile = objWMIService.Get("CIM_DataFile.Name='" & file & "'")
+
+ Set objMethod = objDataFile.Methods_("TakeOwnerShipEx")
+ Set objInParam = objMethod.inParameters.SpawnInstance_()
+
+ objDataFile.ExecMethod_ "TakeOwnerShipEx", objInParam
+
+ 'WScript.Echo "Updated ownership of " & file
+End Sub
+
+Sub updatePermissions(file)
+ 'WScript.Echo "Updating permissions of " & file
+
+ Set objFileSecSetting = objWMIService.Get("Win32_LogicalFileSecuritySetting.Path='" & file & "'")
+ objFileSecSetting.GetSecurityDescriptor objSecurityDescriptor
+
+ Set WshNetwork = WScript.CreateObject("WScript.Network")
+
+ Dim foundAce
+ foundAce = "false"
+
+ 'Search for an ACE for the current user as there is no robust, portable way of creating such an ACE from scratch in VBScript.
+ Dim specificAce(0)
+ For Each ace in objSecurityDescriptor.DACL
+ If ace.Trustee.Name = WshNetwork.UserName Then
+ Set specificAce(0) = ace
+ foundAce = "true"
+ End If
+ Next
+
+ If foundAce = "true" Then
+ objSecurityDescriptor.DACL = specificAce
+
+ Set objMethod = objFileSecSetting.Methods_("SetSecurityDescriptor")
+ Set objInParam = objMethod.inParameters.SpawnInstance_()
+ objInParam.Properties_.item("Descriptor") = objSecurityDescriptor
+ objFileSecSetting.ExecMethod_ "SetSecurityDescriptor", objInParam
+
+ 'WScript.Echo "Updated permissions of " & file
+ Else
+ WScript.Echo "WARNING: jmxPermissions.vbs did not update the permissions of " & file & ". Check the file has the correct permissions."
+ End If
+
+End Sub
diff --git a/jetty-server/src/main/dist/bin/setupClasspath.bat b/jetty-server/src/main/dist/bin/setupClasspath.bat
new file mode 100644
index 0000000..30e157c
--- /dev/null
+++ b/jetty-server/src/main/dist/bin/setupClasspath.bat
@@ -0,0 +1,31 @@
+@echo off
+rem Check JAVA_HOME and KERNEL_HOME variables
+if "%JAVA_HOME%" == "" (
+ echo The JAVA_HOME environment variable is not defined.
+ exit /B 1
+)
+if "%KERNEL_HOME%" == "" (
+ echo The KERNEL_HOME environment variable is not defined.
+ exit /B 1
+)
+
+rem Construct the CLASSPATH list from the Kernel lib directory.
+for %%G in ("%KERNEL_HOME%\lib\*.jar") do call :AppendToClasspath "%%G"
+for %%G in ("%KERNEL_HOME%\plugins\org.eclipse.osgi_*.jar") do call :AppendToClasspath "%%G"
+for %%G in ("%KERNEL_HOME%\plugins\org.eclipse.equinox.console.ssh_*.jar") do call :AppendToClasspath "%%G"
+
+rem Check if there are JAR files in the lib directory.
+if "%CLASSPATH%" == "" (
+ echo No JAR files found in %KERNEL_HOME%\lib
+ exit /B 1
+)
+
+rem Remove leading semi-colon if present
+if "%CLASSPATH:~0,1%"==";" set CLASSPATH=%CLASSPATH:~1%
+if "%FWCLASSPATH:~0,1%"=="," set FWCLASSPATH=%FWCLASSPATH:~1%
+exit /B 0
+
+:AppendToClasspath
+ set CLASSPATH=%CLASSPATH%;%~1
+ set FWCLASSPATH=%FWCLASSPATH%,file:///%~1
+ goto :eof
diff --git a/jetty-server/src/main/dist/bin/setupClasspath.sh b/jetty-server/src/main/dist/bin/setupClasspath.sh
new file mode 100644
index 0000000..741e0e3
--- /dev/null
+++ b/jetty-server/src/main/dist/bin/setupClasspath.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+# make sure we have JAVA_HOME set
+if [ -z "$JAVA_HOME" ]
+then
+ echo The JAVA_HOME environment variable is not defined. Using PATH instead.
+fi
+
+CLASSPATH=
+FWCLASSPATH=
+
+# Create the classpath for bootstrapping the Server from all the JARs in lib
+for file in "$KERNEL_HOME"/lib/*
+do
+ if [[ $file == *.jar ]]
+ then
+ CLASSPATH=$CLASSPATH:$KERNEL_HOME/lib/${file##*/}
+ FWCLASSPATH=$FWCLASSPATH,file:$KERNEL_HOME/lib/${file##*/}
+ fi
+done
+
+# Append the osgi jar to the classpath
+for file in "$KERNEL_HOME"/plugins/org.eclipse.osgi_*.jar
+do
+ CLASSPATH=$CLASSPATH:$KERNEL_HOME/plugins/${file##*/}
+ FWCLASSPATH=$FWCLASSPATH,file:$KERNEL_HOME/plugins/${file##*/}
+done
+
+# Append the console.supportability jar to the classpath to enable ssh
+for file in "$KERNEL_HOME"/plugins/org.eclipse.equinox.console.ssh_*.jar
+do
+ CLASSPATH=$CLASSPATH:$KERNEL_HOME/plugins/${file##*/}
+done
+
+# make sure we have CLASSPATH set
+if [ -z "$CLASSPATH" ]
+then
+ echo No JAR files found in $KERNEL_HOME/lib
+ exit 1
+fi
diff --git a/jetty-server/src/main/dist/bin/setupVars.bat b/jetty-server/src/main/dist/bin/setupVars.bat
new file mode 100644
index 0000000..a5d7772
--- /dev/null
+++ b/jetty-server/src/main/dist/bin/setupVars.bat
@@ -0,0 +1,31 @@
+@echo off
+rem Set up env vars needed for dmk.bat and jconsole.bat (with user-pluggable mods if present)
+
+if "%SCRIPT_DIR%"=="" (
+ echo Called setupVars.bat out of context.
+ exit /B 1
+)
+
+rem Derive KERNEL_HOME full path from script's parent (no backslash)
+ for %%I in ("%SCRIPT_DIR%..") do set KERNEL_HOME=%%~fsI
+
+rem Check files exist (exit if not)
+ set ChkLst="%KERNEL_HOME%\bin\setupClasspath.bat","%KERNEL_HOME%\bin\checkJava.bat"
+
+ for %%I in (%ChkLst%) do if not exist "%%~I" (
+ echo File "%%~I" does not exist but is required.
+ exit /B 1
+ )
+
+rem set up the classpath (check result)
+ call "%KERNEL_HOME%\bin\setupClasspath.bat"
+ if not "%ERRORLEVEL%" == "0" exit /B %ERRORLEVEL%
+
+rem Run Java Version check (uses JAVA_HOME) (check result)
+ call "%KERNEL_HOME%\bin\checkJava.bat"
+ if not "%ERRORLEVEL%" == "0" exit /B %ERRORLEVEL%
+
+rem Execute user setenv script if needed (ignore result)
+ if exist "%KERNEL_HOME%\bin\setenv.bat" call "%KERNEL_HOME%\bin\setenv.bat"
+
+goto :eof
diff --git a/jetty-server/src/main/dist/bin/shutdown.bat b/jetty-server/src/main/dist/bin/shutdown.bat
new file mode 100644
index 0000000..a2a1ff4
--- /dev/null
+++ b/jetty-server/src/main/dist/bin/shutdown.bat
@@ -0,0 +1,8 @@
+@ECHO OFF
+IF "%OS%" == "Windows_NT" SETLOCAL
+
+SET SCRIPT_DIR=%~dp0%
+SET EXECUTABLE=dmk.bat
+
+call "%SCRIPT_DIR%%EXECUTABLE%" stop %*
+if not "%ERRORLEVEL%"=="0" exit /B %ERRORLEVEL%
diff --git a/jetty-server/src/main/dist/bin/shutdown.sh b/jetty-server/src/main/dist/bin/shutdown.sh
new file mode 100644
index 0000000..1960446
--- /dev/null
+++ b/jetty-server/src/main/dist/bin/shutdown.sh
@@ -0,0 +1,29 @@
+#!/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
+
+SCRIPT_DIR=`dirname $SCRIPT`
+EXECUTABLE="dmk.sh"
+
+#
+# identify yourself when running under cygwin
+#
+cygwin=false
+case "$(uname)" in
+ CYGWIN*) cygwin=true ;;
+esac
+export cygwin
+
+exec "$SCRIPT_DIR"/"$EXECUTABLE" stop "$@"
diff --git a/jetty-server/src/main/dist/bin/startup.bat b/jetty-server/src/main/dist/bin/startup.bat
new file mode 100644
index 0000000..76e1618
--- /dev/null
+++ b/jetty-server/src/main/dist/bin/startup.bat
@@ -0,0 +1,8 @@
+@ECHO OFF
+IF "%OS%" == "Windows_NT" SETLOCAL
+
+SET SCRIPT_DIR=%~dp0%
+SET EXECUTABLE=dmk.bat
+
+call "%SCRIPT_DIR%%EXECUTABLE%" start %*
+if not "%ERRORLEVEL%"=="0" exit /B %ERRORLEVEL%
diff --git a/jetty-server/src/main/dist/bin/startup.sh b/jetty-server/src/main/dist/bin/startup.sh
new file mode 100644
index 0000000..69e43b7
--- /dev/null
+++ b/jetty-server/src/main/dist/bin/startup.sh
@@ -0,0 +1,29 @@
+#!/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
+
+SCRIPT_DIR=`dirname $SCRIPT`
+EXECUTABLE="dmk.sh"
+
+#
+# identify yourself when running under cygwin
+#
+cygwin=false
+case "$(uname)" in
+ CYGWIN*) cygwin=true ;;
+esac
+export cygwin
+
+exec "$SCRIPT_DIR"/"$EXECUTABLE" start "$@"
diff --git a/kernel/org.eclipse.virgo.kernel.smoketest/.gitignore b/kernel/org.eclipse.virgo.kernel.smoketest/.gitignore
new file mode 100644
index 0000000..fe99505
--- /dev/null
+++ b/kernel/org.eclipse.virgo.kernel.smoketest/.gitignore
@@ -0,0 +1,2 @@
+bin
+
diff --git a/kernel/src/main/dist/bin/checkJava.bat b/kernel/src/main/dist/bin/checkJava.bat
new file mode 100644
index 0000000..8df7848
--- /dev/null
+++ b/kernel/src/main/dist/bin/checkJava.bat
@@ -0,0 +1,17 @@
+@echo off
+rem Script for checking we have the right version of Java.
+
+if "%JAVA_HOME%" == "" (
+ echo The JAVA_HOME environment variable is not defined.
+ exit /B 1
+)
+if "%CLASSPATH%" == "" (
+ echo The CLASSPATH environment variable is not defined.
+ exit /B 1
+)
+
+rem Run java version check with the discovered java jvm.
+"%JAVA_HOME%\bin\java" -classpath "%CLASSPATH%" org.eclipse.virgo.util.env.JavaVersionChecker
+
+rem If non-zero exit then either we cannot find the checker or the Java version is incorrect.
+if not "%ERRORLEVEL%"=="0" exit /B %ERRORLEVEL%
diff --git a/kernel/src/main/dist/bin/checkJava.sh b/kernel/src/main/dist/bin/checkJava.sh
new file mode 100755
index 0000000..a06ecd5
--- /dev/null
+++ b/kernel/src/main/dist/bin/checkJava.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+#
+# make adjustment when running under cygwin
+#
+if $cygwin; then
+ CLASSPATH=$(cygpath -wp "$CLASSPATH")
+fi
+
+if [ -z "$JAVA_HOME" ]
+then
+ JAVA_EXECUTABLE=java
+else
+ JAVA_EXECUTABLE=$JAVA_HOME/bin/java
+fi
+
+# Run java version check with the discovered java jvm.
+$JAVA_EXECUTABLE \
+ -classpath "$CLASSPATH" \
+ org.eclipse.virgo.util.env.JavaVersionChecker
+
+# If non-zero exit then either we cannot find the check or the java version is incorrect.
+if [ $? != 0 ]
+then
+ exit 1
+fi
diff --git a/kernel/src/main/dist/bin/dmk.bat b/kernel/src/main/dist/bin/dmk.bat
new file mode 100644
index 0000000..db94d6c
--- /dev/null
+++ b/kernel/src/main/dist/bin/dmk.bat
@@ -0,0 +1,280 @@
+@echo off
+rem Script for starting and stopping the kernel
+
+if "%OS%" == "Windows_NT" setlocal
+
+rem Derive full path for script (includes trailing backslash)
+ set SCRIPT_DIR=%~dp0
+
+if exist "%SCRIPT_DIR%setupVars.bat" (
+ call "%SCRIPT_DIR%setupVars.bat"
+ if not "%ERRORLEVEL%"=="0" (
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B %ERRORLEVEL%
+ )
+) else (
+ echo Cannot set up environment. "setupVars.bat" file missing.
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B 1
+)
+
+rem Select command we are to run
+
+ rem First parm is command
+ set COMMAND=%~1
+ rem Rest are parameters - shift done in subroutines
+
+ rem Switch on COMMAND in {"start","stop"}
+
+ if "%COMMAND%" == "start" (
+ call :doStartCommand %*
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B 0
+ )
+
+ if "%COMMAND%" == "stop" (
+ call :doStopCommand %*
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B 0
+ )
+
+ echo Unknown command: %COMMAND%
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B 1
+
+rem ------------------ Subroutines
+rem ------------------------------
+:doStartCommand
+
+ shift
+ rem The shift must be here :()
+
+ rem Check further file that needs to exist
+ for %%I in ("%KERNEL_HOME%\bin\jmxPermissions.vbs") do if not exist "%%~I" (
+ echo File "%%~I" does not exist but is required to continue.
+ exit /B 1
+ )
+
+ rem Set defaults
+ set CONFIG_DIR=%KERNEL_HOME%\configuration
+ set CLEAN_FLAG=
+ set NO_START_FLAG=
+ set DEBUG_FLAG=
+ set DEBUG_PORT=8000
+ set SUSPEND=n
+ if not defined JMX_PORT set JMX_PORT=9875
+ if not defined KEYSTORE_PASSWORD set KEYSTORE_PASSWORD=changeit
+ set ADDITIONAL_ARGS=
+
+ rem Loop through options
+
+ :startOptionLoop
+ if "%~1"=="" goto endStartOptionLoop
+ if "%~1"=="-debug" goto debug
+ if "%~1"=="-clean" goto clean
+ if "%~1"=="-configDir" goto configDir
+ if "%~1"=="-jmxport" goto jmxport
+ if "%~1"=="-keystore" goto keystore
+ if "%~1"=="-keystorePassword" goto keystorePassword
+ if "%~1"=="-noStart" goto noStart
+ if "%~1"=="-suspend" goto suspend
+ if "%~1"=="-shell" goto shell
+
+ set ADDITIONAL_ARGS=%ADDITIONAL_ARGS% "%~1"
+
+ :continueStartOptionLoop
+ shift
+ goto startOptionLoop
+
+ :debug
+ set DEBUG_FLAG=1
+ set PORT_CANDIDATE=%~2
+ if not "%PORT_CANDIDATE:~0,1%"=="-" (
+ set DEBUG_PORT=%PORT_CANDIDATE%
+ shift
+ )
+ goto continueStartOptionLoop
+ :clean
+ set CLEAN_FLAG=1
+ goto continueStartOptionLoop
+ :configDir
+ set CONFIG_DIR=%~2
+ rem unless absolute, treat as relative to kernel home
+ if "%CONFIG_DIR:~1%"=="\" goto absoluteConfigDir
+ if "%CONFIG_DIR:~1,2%"==":\" goto absoluteConfigDir
+ set CONFIG_DIR=%KERNEL_HOME%\%CONFIG_DIR%
+ :absoluteConfigDir
+ shift
+ goto continueStartOptionLoop
+ :jmxport
+ set JMX_PORT=%~2
+ shift
+ goto continueStartOptionLoop
+ :keystore
+ set KEYSTORE_PATH=%~2
+ shift
+ goto continueStartOptionLoop
+ :keystorePassword
+ set KEYSTORE_PASSWORD=%~2
+ shift
+ goto continueStartOptionLoop
+ :noStart
+ set NO_START_FLAG=1
+ goto continueStartOptionLoop
+ :suspend
+ set SUSPEND=y
+ goto continueStartOptionLoop
+ :shell
+ set SHELL_FLAG=1
+ goto continueStartOptionLoop
+
+ :endStartOptionLoop
+
+
+ rem Adjust permissions if necessary
+ cscript //NoLogo "%KERNEL_HOME%\bin\jmxPermissions.vbs" "%CONFIG_DIR%\"
+
+ rem Adjust options now all are known
+ if "%KEYSTORE_PATH%"=="" set KEYSTORE_PATH=%CONFIG_DIR%\keystore
+ if not "%DEBUG_FLAG%"=="" set DEBUG_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=%DEBUG_PORT%,server=y,suspend=%SUSPEND%
+
+ rem do Clean work:
+ if not "%CLEAN_FLAG%"=="" (
+ rmdir /Q /S "%KERNEL_HOME%\serviceability"
+ rmdir /Q /S "%KERNEL_HOME%\work"
+
+ set LAUNCH_OPTS=%LAUNCH_OPTS% -clean
+ )
+
+ rem do Shell work:
+ if not "%SHELL_FLAG%"=="" (
+ echo "Warning: Kernel shell not supported; -shell option ignored."
+ rem set LAUNCH_OPTS=%LAUNCH_OPTS% -Forg.eclipse.virgo.kernel.shell.local=true
+ )
+
+ rem Set JMX options
+ set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.port=%JMX_PORT%
+ set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.authenticate=true
+ set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.login.config=virgo-kernel
+ set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.access.file="%CONFIG_DIR%\org.eclipse.virgo.kernel.jmxremote.access.properties"
+ set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.keyStore="%KEYSTORE_PATH%"
+ set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.keyStorePassword=%KEYSTORE_PASSWORD%
+ set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.ssl=true
+ set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.ssl.need.client.auth=false
+
+ if not "%NO_START_FLAG%"=="" goto :eof
+ rem ensure that the tmp directory exists:
+ set TMP_DIR="%KERNEL_HOME%\work\tmp"
+ if not exist "%TMP_DIR%" mkdir "%TMP_DIR%"
+
+ set JAVA_OPTS=-Xmx512m -XX:MaxPermSize=512m %JAVA_OPTS%
+ rem Run the server
+
+ rem Marshall parameters
+ set KERNEL_JAVA_PARMS=%JAVA_OPTS% %DEBUG_OPTS% %JMX_OPTS%
+
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -XX:+HeapDumpOnOutOfMemoryError
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -XX:ErrorFile="%KERNEL_HOME%\serviceability\error.log"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -XX:HeapDumpPath="%KERNEL_HOME%\serviceability\heap_dump.hprof"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Djava.security.auth.login.config="%CONFIG_DIR%\org.eclipse.virgo.kernel.authentication.config"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dorg.eclipse.virgo.kernel.authentication.file="%CONFIG_DIR%\org.eclipse.virgo.kernel.users.properties"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Djava.io.tmpdir="%TMP_DIR%"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dorg.eclipse.virgo.kernel.home="%KERNEL_HOME%"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.java.profile="file:%CONFIG_DIR%\java6-server.profile"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dssh.server.keystore="%CONFIG_DIR%/hostkey.ser"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dorg.eclipse.virgo.kernel.config="%CONFIG_DIR%"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.sharedConfiguration.area="%CONFIG_DIR%"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Declipse.ignoreApp="true"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.install.area="%KERNEL_HOME%"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.configuration.area="%KERNEL_HOME%\work"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.frameworkClassPath="%FWCLASSPATH%"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Djava.endorsed.dirs="%KERNEL_HOME%\lib\endorsed"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -classpath "%CLASSPATH%"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% org.eclipse.equinox.launcher.Main
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -noExit
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% %LAUNCH_OPTS%
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% %ADDITIONAL_ARGS%
+
+ rem Now run it
+ PUSHD %KERNEL_HOME%
+ "%JAVA_HOME%\bin\java" %KERNEL_JAVA_PARMS%
+ POPD
+
+goto :eof
+
+rem ------------------------------
+:doStopCommand
+
+ shift
+ rem The shift must be here :()
+
+ rem Set defaults
+ set CONFIG_DIR=%KERNEL_HOME%\configuration
+ if not defined TRUSTSTORE_PATH set TRUSTSTORE_PATH=%CONFIG_DIR%\keystore
+ if not defined TRUSTSTORE_PASSWORD set TRUSTSTORE_PASSWORD=changeit
+ if not defined JMX_PORT set JMX_PORT=9875
+ set OTHER_ARGS=
+
+ rem Loop through options
+ :stopOptionLoop
+
+ if "%~1"=="" goto endStopOptionLoop
+ if "%~1"=="-truststore" goto truststoreStop
+ if "%~1"=="-truststorePassword" goto truststorePasswordStop
+ if "%~1"=="-configDir" goto configDirStop
+ if "%~1"=="-jmxport" goto jmxportStop
+
+ set OTHER_ARGS=%OTHER_ARGS% "%~1"
+
+ :continueStopOptionLoop
+ shift
+ goto stopOptionLoop
+
+ :truststoreStop
+ set TRUSTSTORE_PATH=%~2
+ shift
+ goto continueStopOptionLoop
+
+ :truststorePasswordStop
+ set TRUSTSTORE_PASSWORD=%~2
+ shift
+ goto continueStopOptionLoop
+
+ :configDirStop
+ set CONFIG_DIR=%~2
+ rem unless absolute, treat as relative to kernel home
+ if "%CONFIG_DIR:~1%"=="\" goto absoluteConfigDirStop
+ if "%CONFIG_DIR:~1,2%"==":\" goto absoluteConfigDirStop
+ set CONFIG_DIR=%KERNEL_HOME%\%CONFIG_DIR%
+ :absoluteConfigDirStop
+ shift
+ goto continueStopOptionLoop
+
+ :jmxportStop
+ set JMX_PORT=%~2
+ shift
+ goto continueStopOptionLoop
+
+ :endStopOptionLoop
+
+ rem Call shutdown client
+
+ rem Extend JMX options
+ set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.trustStore="%TRUSTSTORE_PATH%"
+ set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.trustStorePassword=%TRUSTSTORE_PASSWORD%
+ set OTHER_ARGS=%OTHER_ARGS% -jmxport %JMX_PORT%
+
+ rem Marshall parameters
+ set SHUTDOWN_PARMS= %JAVA_OPTS% %JMX_OPTS%
+ set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% -classpath "%CLASSPATH%"
+ set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% -Dorg.eclipse.virgo.kernel.home="%KERNEL_HOME%"
+ set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% -Dorg.eclipse.virgo.kernel.authentication.file="%CONFIG_DIR%\org.eclipse.virgo.kernel.users.properties"
+ set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% org.eclipse.virgo.nano.shutdown.ShutdownClient
+ set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% %OTHER_ARGS%
+
+ rem Run Java program
+ PUSHD %KERNEL_HOME%
+ "%JAVA_HOME%\bin\java" %SHUTDOWN_PARMS%
+ POPD
+
+goto :eof
diff --git a/kernel/src/main/dist/bin/dmk.sh b/kernel/src/main/dist/bin/dmk.sh
new file mode 100755
index 0000000..78f8089
--- /dev/null
+++ b/kernel/src/main/dist/bin/dmk.sh
@@ -0,0 +1,290 @@
+#!/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`
+
+# setup classpath and java environment
+. "$KERNEL_HOME/bin/setupClasspath.sh"
+
+# execute user setenv script if needed
+if [ -r "$KERNEL_HOME/bin/setenv.sh" ]
+then
+ . $KERNEL_HOME/bin/setenv.sh
+fi
+
+
+# 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
+ 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/java6-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"
+
+ JMX_OPTS=" \
+ $JMX_OPTS \
+ -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"
+
+ 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="-Xmx512m \
+ -XX:MaxPermSize=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" \
+ -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
+
+ JMX_OPTS=" \
+ $JMX_OPTS \
+ -Djavax.net.ssl.trustStore=${TRUSTSTORE_PATH} \
+ -Djavax.net.ssl.trustStorePassword=${TRUSTSTORE_PASSWORD}"
+
+ 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 \
+ -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
+
diff --git a/kernel/src/main/dist/bin/jconsole.bat b/kernel/src/main/dist/bin/jconsole.bat
new file mode 100644
index 0000000..4cbe553
--- /dev/null
+++ b/kernel/src/main/dist/bin/jconsole.bat
@@ -0,0 +1,54 @@
+@echo off
+rem Script for starting jconsole
+
+if "%OS%" == "Windows_NT" setlocal
+
+rem Find root drive and path for current bat file directory (includes trailing backslash)
+ set SCRIPT_DIR=%~dp0
+
+if exist "%SCRIPT_DIR%setupVars.bat" (
+ call "%SCRIPT_DIR%setupVars.bat"
+ if not "%ERRORLEVEL%"=="0" (
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B %ERRORLEVEL%
+ )
+) else (
+ echo Cannot set up environment. "setupVars.bat" file missing.
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B 1
+)
+
+rem Set defaults
+ set TRUSTSTORE_PATH=%KERNEL_HOME%\configuration\keystore
+ set TRUSTSTORE_PASSWORD=changeit
+ set OTHER_ARGS=
+
+:Loop
+ if "%~1"=="" goto EndLoop
+
+ if "%~1"=="-truststore" (
+ set TRUSTSTORE_PATH=%~2
+ shift
+ shift
+ goto Loop
+ )
+ if "%~1"=="-truststorePassword" (
+ set TRUSTSTORE_PASSWORD=%~2
+ shift
+ shift
+ goto Loop
+ )
+ rem Accumulate extra parameters.
+ set OTHER_ARGS=%OTHER_ARGS% "%~1"
+ shift
+ goto Loop
+:EndLoop
+
+set JMX_OPTS=%JMX_OPTS% -J-Dcom.sun.tools.jconsole.mbeans.keyPropertyList=category,type
+set JMX_OPTS=%JMX_OPTS% -J-Djavax.net.ssl.trustStore="%TRUSTSTORE_PATH%"
+set JMX_OPTS=%JMX_OPTS% -J-Djavax.net.ssl.trustStorePassword=%TRUSTSTORE_PASSWORD%
+
+"%JAVA_HOME%\bin\jconsole" %JMX_OPTS% %OTHER_ARGS%
+
+if "%OS%" == "Windows_NT" endlocal
+goto :eof
diff --git a/kernel/src/main/dist/bin/jconsole.sh b/kernel/src/main/dist/bin/jconsole.sh
new file mode 100755
index 0000000..0dfbcbf
--- /dev/null
+++ b/kernel/src/main/dist/bin/jconsole.sh
@@ -0,0 +1,53 @@
+#!/bin/bash
+
+if [ -z "$JAVA_HOME" ]
+then
+ echo The JAVA_HOME environment variable is not defined
+ exit 1
+fi
+
+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
+
+KERNEL_HOME=`dirname "$SCRIPT"`/..
+KERNEL_HOME=`cd $KERNEL_HOME; pwd`
+
+#parse args for the script
+TRUSTSTORE_PATH=$KERNEL_HOME/configuration/keystore
+TRUSTSTORE_PASSWORD=changeit
+
+shopt -s extglob
+
+while (($# > 0))
+ do
+ case $1 in
+ -truststore)
+ TRUSTSTORE_PATH=$2
+ shift;
+ ;;
+ -truststorePassword)
+ TRUSTSTORE_PASSWORD=$2
+ shift;
+ ;;
+ esac
+ shift
+done
+
+JMX_OPTS=" \
+ $JMX_OPTS \
+ -J-Dcom.sun.tools.jconsole.mbeans.keyPropertyList=category,type \
+ -J-Djavax.net.ssl.trustStore=$TRUSTSTORE_PATH \
+ -J-Djavax.net.ssl.trustStorePassword=$TRUSTSTORE_PASSWORD"
+
+$JAVA_HOME/bin/jconsole $JMX_OPTS
diff --git a/kernel/src/main/dist/bin/jmxPermissions.vbs b/kernel/src/main/dist/bin/jmxPermissions.vbs
new file mode 100644
index 0000000..0184607
--- /dev/null
+++ b/kernel/src/main/dist/bin/jmxPermissions.vbs
@@ -0,0 +1,81 @@
+configFolder = Wscript.Arguments.Item(0)
+
+'WScript.Echo "Fixing permissions on " & configFolder
+
+Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2") 'Load up WMI with the right dll
+
+Dim files(0)
+files(0) = "org.eclipse.virgo.kernel.jmxremote.access.properties"
+
+For Each file In files
+ updateInheritance(configFolder & file)
+ updateOwnership(configFolder & file)
+ updatePermissions(configFolder & file)
+Next
+
+Sub updateInheritance(file)
+ 'WScript.Echo "Updating inheritance of " & file
+
+ Const SE_DACL_PRESENT = 4
+ Const SE_DACL_PROTECTED = 4096
+ Const SE_SELF_RELATIVE = 32768
+
+ Set objFileSecSetting = objWMIService.Get("Win32_LogicalFileSecuritySetting.Path='" & file & "'")
+ objFileSecSetting.GetSecurityDescriptor objSecurityDescriptor
+
+ objSecurityDescriptor.ControlFlags = SE_DACL_PRESENT + SE_DACL_PROTECTED + SE_SELF_RELATIVE
+
+ Set objMethod = objFileSecSetting.Methods_("SetSecurityDescriptor")
+ Set objInParam = objMethod.inParameters.SpawnInstance_()
+ objInParam.Properties_.item("Descriptor") = objSecurityDescriptor
+ objFileSecSetting.ExecMethod_ "SetSecurityDescriptor", objInParam
+
+ 'WScript.Echo "Updated inheritance of " & file
+End Sub
+
+Sub updateOwnership(file)
+ 'WScript.Echo "Updating ownership of " & file
+ Set objDataFile = objWMIService.Get("CIM_DataFile.Name='" & file & "'")
+
+ Set objMethod = objDataFile.Methods_("TakeOwnerShipEx")
+ Set objInParam = objMethod.inParameters.SpawnInstance_()
+
+ objDataFile.ExecMethod_ "TakeOwnerShipEx", objInParam
+
+ 'WScript.Echo "Updated ownership of " & file
+End Sub
+
+Sub updatePermissions(file)
+ 'WScript.Echo "Updating permissions of " & file
+
+ Set objFileSecSetting = objWMIService.Get("Win32_LogicalFileSecuritySetting.Path='" & file & "'")
+ objFileSecSetting.GetSecurityDescriptor objSecurityDescriptor
+
+ Set WshNetwork = WScript.CreateObject("WScript.Network")
+
+ Dim foundAce
+ foundAce = "false"
+
+ 'Search for an ACE for the current user as there is no robust, portable way of creating such an ACE from scratch in VBScript.
+ Dim specificAce(0)
+ For Each ace in objSecurityDescriptor.DACL
+ If ace.Trustee.Name = WshNetwork.UserName Then
+ Set specificAce(0) = ace
+ foundAce = "true"
+ End If
+ Next
+
+ If foundAce = "true" Then
+ objSecurityDescriptor.DACL = specificAce
+
+ Set objMethod = objFileSecSetting.Methods_("SetSecurityDescriptor")
+ Set objInParam = objMethod.inParameters.SpawnInstance_()
+ objInParam.Properties_.item("Descriptor") = objSecurityDescriptor
+ objFileSecSetting.ExecMethod_ "SetSecurityDescriptor", objInParam
+
+ 'WScript.Echo "Updated permissions of " & file
+ Else
+ WScript.Echo "WARNING: jmxPermissions.vbs did not update the permissions of " & file & ". Check the file has the correct permissions."
+ End If
+
+End Sub
diff --git a/kernel/src/main/dist/bin/setupClasspath.bat b/kernel/src/main/dist/bin/setupClasspath.bat
new file mode 100644
index 0000000..30e157c
--- /dev/null
+++ b/kernel/src/main/dist/bin/setupClasspath.bat
@@ -0,0 +1,31 @@
+@echo off
+rem Check JAVA_HOME and KERNEL_HOME variables
+if "%JAVA_HOME%" == "" (
+ echo The JAVA_HOME environment variable is not defined.
+ exit /B 1
+)
+if "%KERNEL_HOME%" == "" (
+ echo The KERNEL_HOME environment variable is not defined.
+ exit /B 1
+)
+
+rem Construct the CLASSPATH list from the Kernel lib directory.
+for %%G in ("%KERNEL_HOME%\lib\*.jar") do call :AppendToClasspath "%%G"
+for %%G in ("%KERNEL_HOME%\plugins\org.eclipse.osgi_*.jar") do call :AppendToClasspath "%%G"
+for %%G in ("%KERNEL_HOME%\plugins\org.eclipse.equinox.console.ssh_*.jar") do call :AppendToClasspath "%%G"
+
+rem Check if there are JAR files in the lib directory.
+if "%CLASSPATH%" == "" (
+ echo No JAR files found in %KERNEL_HOME%\lib
+ exit /B 1
+)
+
+rem Remove leading semi-colon if present
+if "%CLASSPATH:~0,1%"==";" set CLASSPATH=%CLASSPATH:~1%
+if "%FWCLASSPATH:~0,1%"=="," set FWCLASSPATH=%FWCLASSPATH:~1%
+exit /B 0
+
+:AppendToClasspath
+ set CLASSPATH=%CLASSPATH%;%~1
+ set FWCLASSPATH=%FWCLASSPATH%,file:///%~1
+ goto :eof
diff --git a/kernel/src/main/dist/bin/setupClasspath.sh b/kernel/src/main/dist/bin/setupClasspath.sh
new file mode 100755
index 0000000..741e0e3
--- /dev/null
+++ b/kernel/src/main/dist/bin/setupClasspath.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+# make sure we have JAVA_HOME set
+if [ -z "$JAVA_HOME" ]
+then
+ echo The JAVA_HOME environment variable is not defined. Using PATH instead.
+fi
+
+CLASSPATH=
+FWCLASSPATH=
+
+# Create the classpath for bootstrapping the Server from all the JARs in lib
+for file in "$KERNEL_HOME"/lib/*
+do
+ if [[ $file == *.jar ]]
+ then
+ CLASSPATH=$CLASSPATH:$KERNEL_HOME/lib/${file##*/}
+ FWCLASSPATH=$FWCLASSPATH,file:$KERNEL_HOME/lib/${file##*/}
+ fi
+done
+
+# Append the osgi jar to the classpath
+for file in "$KERNEL_HOME"/plugins/org.eclipse.osgi_*.jar
+do
+ CLASSPATH=$CLASSPATH:$KERNEL_HOME/plugins/${file##*/}
+ FWCLASSPATH=$FWCLASSPATH,file:$KERNEL_HOME/plugins/${file##*/}
+done
+
+# Append the console.supportability jar to the classpath to enable ssh
+for file in "$KERNEL_HOME"/plugins/org.eclipse.equinox.console.ssh_*.jar
+do
+ CLASSPATH=$CLASSPATH:$KERNEL_HOME/plugins/${file##*/}
+done
+
+# make sure we have CLASSPATH set
+if [ -z "$CLASSPATH" ]
+then
+ echo No JAR files found in $KERNEL_HOME/lib
+ exit 1
+fi
diff --git a/kernel/src/main/dist/bin/setupVars.bat b/kernel/src/main/dist/bin/setupVars.bat
new file mode 100644
index 0000000..a5d7772
--- /dev/null
+++ b/kernel/src/main/dist/bin/setupVars.bat
@@ -0,0 +1,31 @@
+@echo off
+rem Set up env vars needed for dmk.bat and jconsole.bat (with user-pluggable mods if present)
+
+if "%SCRIPT_DIR%"=="" (
+ echo Called setupVars.bat out of context.
+ exit /B 1
+)
+
+rem Derive KERNEL_HOME full path from script's parent (no backslash)
+ for %%I in ("%SCRIPT_DIR%..") do set KERNEL_HOME=%%~fsI
+
+rem Check files exist (exit if not)
+ set ChkLst="%KERNEL_HOME%\bin\setupClasspath.bat","%KERNEL_HOME%\bin\checkJava.bat"
+
+ for %%I in (%ChkLst%) do if not exist "%%~I" (
+ echo File "%%~I" does not exist but is required.
+ exit /B 1
+ )
+
+rem set up the classpath (check result)
+ call "%KERNEL_HOME%\bin\setupClasspath.bat"
+ if not "%ERRORLEVEL%" == "0" exit /B %ERRORLEVEL%
+
+rem Run Java Version check (uses JAVA_HOME) (check result)
+ call "%KERNEL_HOME%\bin\checkJava.bat"
+ if not "%ERRORLEVEL%" == "0" exit /B %ERRORLEVEL%
+
+rem Execute user setenv script if needed (ignore result)
+ if exist "%KERNEL_HOME%\bin\setenv.bat" call "%KERNEL_HOME%\bin\setenv.bat"
+
+goto :eof
diff --git a/kernel/src/main/dist/bin/shutdown.bat b/kernel/src/main/dist/bin/shutdown.bat
new file mode 100644
index 0000000..a2a1ff4
--- /dev/null
+++ b/kernel/src/main/dist/bin/shutdown.bat
@@ -0,0 +1,8 @@
+@ECHO OFF
+IF "%OS%" == "Windows_NT" SETLOCAL
+
+SET SCRIPT_DIR=%~dp0%
+SET EXECUTABLE=dmk.bat
+
+call "%SCRIPT_DIR%%EXECUTABLE%" stop %*
+if not "%ERRORLEVEL%"=="0" exit /B %ERRORLEVEL%
diff --git a/kernel/src/main/dist/bin/shutdown.sh b/kernel/src/main/dist/bin/shutdown.sh
new file mode 100755
index 0000000..1960446
--- /dev/null
+++ b/kernel/src/main/dist/bin/shutdown.sh
@@ -0,0 +1,29 @@
+#!/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
+
+SCRIPT_DIR=`dirname $SCRIPT`
+EXECUTABLE="dmk.sh"
+
+#
+# identify yourself when running under cygwin
+#
+cygwin=false
+case "$(uname)" in
+ CYGWIN*) cygwin=true ;;
+esac
+export cygwin
+
+exec "$SCRIPT_DIR"/"$EXECUTABLE" stop "$@"
diff --git a/kernel/src/main/dist/bin/startup.bat b/kernel/src/main/dist/bin/startup.bat
new file mode 100644
index 0000000..76e1618
--- /dev/null
+++ b/kernel/src/main/dist/bin/startup.bat
@@ -0,0 +1,8 @@
+@ECHO OFF
+IF "%OS%" == "Windows_NT" SETLOCAL
+
+SET SCRIPT_DIR=%~dp0%
+SET EXECUTABLE=dmk.bat
+
+call "%SCRIPT_DIR%%EXECUTABLE%" start %*
+if not "%ERRORLEVEL%"=="0" exit /B %ERRORLEVEL%
diff --git a/kernel/src/main/dist/bin/startup.sh b/kernel/src/main/dist/bin/startup.sh
new file mode 100755
index 0000000..69e43b7
--- /dev/null
+++ b/kernel/src/main/dist/bin/startup.sh
@@ -0,0 +1,29 @@
+#!/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
+
+SCRIPT_DIR=`dirname $SCRIPT`
+EXECUTABLE="dmk.sh"
+
+#
+# identify yourself when running under cygwin
+#
+cygwin=false
+case "$(uname)" in
+ CYGWIN*) cygwin=true ;;
+esac
+export cygwin
+
+exec "$SCRIPT_DIR"/"$EXECUTABLE" start "$@"
diff --git a/nano/org.eclipse.virgo.nano.smoketest/.gitignore b/nano/org.eclipse.virgo.nano.smoketest/.gitignore
new file mode 100644
index 0000000..fe99505
--- /dev/null
+++ b/nano/org.eclipse.virgo.nano.smoketest/.gitignore
@@ -0,0 +1,2 @@
+bin
+
diff --git a/nano/src/main/dist/bin/checkJava.bat b/nano/src/main/dist/bin/checkJava.bat
new file mode 100644
index 0000000..8df7848
--- /dev/null
+++ b/nano/src/main/dist/bin/checkJava.bat
@@ -0,0 +1,17 @@
+@echo off
+rem Script for checking we have the right version of Java.
+
+if "%JAVA_HOME%" == "" (
+ echo The JAVA_HOME environment variable is not defined.
+ exit /B 1
+)
+if "%CLASSPATH%" == "" (
+ echo The CLASSPATH environment variable is not defined.
+ exit /B 1
+)
+
+rem Run java version check with the discovered java jvm.
+"%JAVA_HOME%\bin\java" -classpath "%CLASSPATH%" org.eclipse.virgo.util.env.JavaVersionChecker
+
+rem If non-zero exit then either we cannot find the checker or the Java version is incorrect.
+if not "%ERRORLEVEL%"=="0" exit /B %ERRORLEVEL%
diff --git a/nano/src/main/dist/bin/checkJava.sh b/nano/src/main/dist/bin/checkJava.sh
new file mode 100755
index 0000000..a06ecd5
--- /dev/null
+++ b/nano/src/main/dist/bin/checkJava.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+#
+# make adjustment when running under cygwin
+#
+if $cygwin; then
+ CLASSPATH=$(cygpath -wp "$CLASSPATH")
+fi
+
+if [ -z "$JAVA_HOME" ]
+then
+ JAVA_EXECUTABLE=java
+else
+ JAVA_EXECUTABLE=$JAVA_HOME/bin/java
+fi
+
+# Run java version check with the discovered java jvm.
+$JAVA_EXECUTABLE \
+ -classpath "$CLASSPATH" \
+ org.eclipse.virgo.util.env.JavaVersionChecker
+
+# If non-zero exit then either we cannot find the check or the java version is incorrect.
+if [ $? != 0 ]
+then
+ exit 1
+fi
diff --git a/nano/src/main/dist/bin/dmk.bat b/nano/src/main/dist/bin/dmk.bat
new file mode 100644
index 0000000..db94d6c
--- /dev/null
+++ b/nano/src/main/dist/bin/dmk.bat
@@ -0,0 +1,280 @@
+@echo off
+rem Script for starting and stopping the kernel
+
+if "%OS%" == "Windows_NT" setlocal
+
+rem Derive full path for script (includes trailing backslash)
+ set SCRIPT_DIR=%~dp0
+
+if exist "%SCRIPT_DIR%setupVars.bat" (
+ call "%SCRIPT_DIR%setupVars.bat"
+ if not "%ERRORLEVEL%"=="0" (
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B %ERRORLEVEL%
+ )
+) else (
+ echo Cannot set up environment. "setupVars.bat" file missing.
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B 1
+)
+
+rem Select command we are to run
+
+ rem First parm is command
+ set COMMAND=%~1
+ rem Rest are parameters - shift done in subroutines
+
+ rem Switch on COMMAND in {"start","stop"}
+
+ if "%COMMAND%" == "start" (
+ call :doStartCommand %*
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B 0
+ )
+
+ if "%COMMAND%" == "stop" (
+ call :doStopCommand %*
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B 0
+ )
+
+ echo Unknown command: %COMMAND%
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B 1
+
+rem ------------------ Subroutines
+rem ------------------------------
+:doStartCommand
+
+ shift
+ rem The shift must be here :()
+
+ rem Check further file that needs to exist
+ for %%I in ("%KERNEL_HOME%\bin\jmxPermissions.vbs") do if not exist "%%~I" (
+ echo File "%%~I" does not exist but is required to continue.
+ exit /B 1
+ )
+
+ rem Set defaults
+ set CONFIG_DIR=%KERNEL_HOME%\configuration
+ set CLEAN_FLAG=
+ set NO_START_FLAG=
+ set DEBUG_FLAG=
+ set DEBUG_PORT=8000
+ set SUSPEND=n
+ if not defined JMX_PORT set JMX_PORT=9875
+ if not defined KEYSTORE_PASSWORD set KEYSTORE_PASSWORD=changeit
+ set ADDITIONAL_ARGS=
+
+ rem Loop through options
+
+ :startOptionLoop
+ if "%~1"=="" goto endStartOptionLoop
+ if "%~1"=="-debug" goto debug
+ if "%~1"=="-clean" goto clean
+ if "%~1"=="-configDir" goto configDir
+ if "%~1"=="-jmxport" goto jmxport
+ if "%~1"=="-keystore" goto keystore
+ if "%~1"=="-keystorePassword" goto keystorePassword
+ if "%~1"=="-noStart" goto noStart
+ if "%~1"=="-suspend" goto suspend
+ if "%~1"=="-shell" goto shell
+
+ set ADDITIONAL_ARGS=%ADDITIONAL_ARGS% "%~1"
+
+ :continueStartOptionLoop
+ shift
+ goto startOptionLoop
+
+ :debug
+ set DEBUG_FLAG=1
+ set PORT_CANDIDATE=%~2
+ if not "%PORT_CANDIDATE:~0,1%"=="-" (
+ set DEBUG_PORT=%PORT_CANDIDATE%
+ shift
+ )
+ goto continueStartOptionLoop
+ :clean
+ set CLEAN_FLAG=1
+ goto continueStartOptionLoop
+ :configDir
+ set CONFIG_DIR=%~2
+ rem unless absolute, treat as relative to kernel home
+ if "%CONFIG_DIR:~1%"=="\" goto absoluteConfigDir
+ if "%CONFIG_DIR:~1,2%"==":\" goto absoluteConfigDir
+ set CONFIG_DIR=%KERNEL_HOME%\%CONFIG_DIR%
+ :absoluteConfigDir
+ shift
+ goto continueStartOptionLoop
+ :jmxport
+ set JMX_PORT=%~2
+ shift
+ goto continueStartOptionLoop
+ :keystore
+ set KEYSTORE_PATH=%~2
+ shift
+ goto continueStartOptionLoop
+ :keystorePassword
+ set KEYSTORE_PASSWORD=%~2
+ shift
+ goto continueStartOptionLoop
+ :noStart
+ set NO_START_FLAG=1
+ goto continueStartOptionLoop
+ :suspend
+ set SUSPEND=y
+ goto continueStartOptionLoop
+ :shell
+ set SHELL_FLAG=1
+ goto continueStartOptionLoop
+
+ :endStartOptionLoop
+
+
+ rem Adjust permissions if necessary
+ cscript //NoLogo "%KERNEL_HOME%\bin\jmxPermissions.vbs" "%CONFIG_DIR%\"
+
+ rem Adjust options now all are known
+ if "%KEYSTORE_PATH%"=="" set KEYSTORE_PATH=%CONFIG_DIR%\keystore
+ if not "%DEBUG_FLAG%"=="" set DEBUG_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=%DEBUG_PORT%,server=y,suspend=%SUSPEND%
+
+ rem do Clean work:
+ if not "%CLEAN_FLAG%"=="" (
+ rmdir /Q /S "%KERNEL_HOME%\serviceability"
+ rmdir /Q /S "%KERNEL_HOME%\work"
+
+ set LAUNCH_OPTS=%LAUNCH_OPTS% -clean
+ )
+
+ rem do Shell work:
+ if not "%SHELL_FLAG%"=="" (
+ echo "Warning: Kernel shell not supported; -shell option ignored."
+ rem set LAUNCH_OPTS=%LAUNCH_OPTS% -Forg.eclipse.virgo.kernel.shell.local=true
+ )
+
+ rem Set JMX options
+ set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.port=%JMX_PORT%
+ set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.authenticate=true
+ set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.login.config=virgo-kernel
+ set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.access.file="%CONFIG_DIR%\org.eclipse.virgo.kernel.jmxremote.access.properties"
+ set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.keyStore="%KEYSTORE_PATH%"
+ set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.keyStorePassword=%KEYSTORE_PASSWORD%
+ set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.ssl=true
+ set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.ssl.need.client.auth=false
+
+ if not "%NO_START_FLAG%"=="" goto :eof
+ rem ensure that the tmp directory exists:
+ set TMP_DIR="%KERNEL_HOME%\work\tmp"
+ if not exist "%TMP_DIR%" mkdir "%TMP_DIR%"
+
+ set JAVA_OPTS=-Xmx512m -XX:MaxPermSize=512m %JAVA_OPTS%
+ rem Run the server
+
+ rem Marshall parameters
+ set KERNEL_JAVA_PARMS=%JAVA_OPTS% %DEBUG_OPTS% %JMX_OPTS%
+
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -XX:+HeapDumpOnOutOfMemoryError
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -XX:ErrorFile="%KERNEL_HOME%\serviceability\error.log"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -XX:HeapDumpPath="%KERNEL_HOME%\serviceability\heap_dump.hprof"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Djava.security.auth.login.config="%CONFIG_DIR%\org.eclipse.virgo.kernel.authentication.config"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dorg.eclipse.virgo.kernel.authentication.file="%CONFIG_DIR%\org.eclipse.virgo.kernel.users.properties"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Djava.io.tmpdir="%TMP_DIR%"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dorg.eclipse.virgo.kernel.home="%KERNEL_HOME%"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.java.profile="file:%CONFIG_DIR%\java6-server.profile"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dssh.server.keystore="%CONFIG_DIR%/hostkey.ser"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dorg.eclipse.virgo.kernel.config="%CONFIG_DIR%"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.sharedConfiguration.area="%CONFIG_DIR%"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Declipse.ignoreApp="true"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.install.area="%KERNEL_HOME%"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.configuration.area="%KERNEL_HOME%\work"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.frameworkClassPath="%FWCLASSPATH%"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Djava.endorsed.dirs="%KERNEL_HOME%\lib\endorsed"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -classpath "%CLASSPATH%"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% org.eclipse.equinox.launcher.Main
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -noExit
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% %LAUNCH_OPTS%
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% %ADDITIONAL_ARGS%
+
+ rem Now run it
+ PUSHD %KERNEL_HOME%
+ "%JAVA_HOME%\bin\java" %KERNEL_JAVA_PARMS%
+ POPD
+
+goto :eof
+
+rem ------------------------------
+:doStopCommand
+
+ shift
+ rem The shift must be here :()
+
+ rem Set defaults
+ set CONFIG_DIR=%KERNEL_HOME%\configuration
+ if not defined TRUSTSTORE_PATH set TRUSTSTORE_PATH=%CONFIG_DIR%\keystore
+ if not defined TRUSTSTORE_PASSWORD set TRUSTSTORE_PASSWORD=changeit
+ if not defined JMX_PORT set JMX_PORT=9875
+ set OTHER_ARGS=
+
+ rem Loop through options
+ :stopOptionLoop
+
+ if "%~1"=="" goto endStopOptionLoop
+ if "%~1"=="-truststore" goto truststoreStop
+ if "%~1"=="-truststorePassword" goto truststorePasswordStop
+ if "%~1"=="-configDir" goto configDirStop
+ if "%~1"=="-jmxport" goto jmxportStop
+
+ set OTHER_ARGS=%OTHER_ARGS% "%~1"
+
+ :continueStopOptionLoop
+ shift
+ goto stopOptionLoop
+
+ :truststoreStop
+ set TRUSTSTORE_PATH=%~2
+ shift
+ goto continueStopOptionLoop
+
+ :truststorePasswordStop
+ set TRUSTSTORE_PASSWORD=%~2
+ shift
+ goto continueStopOptionLoop
+
+ :configDirStop
+ set CONFIG_DIR=%~2
+ rem unless absolute, treat as relative to kernel home
+ if "%CONFIG_DIR:~1%"=="\" goto absoluteConfigDirStop
+ if "%CONFIG_DIR:~1,2%"==":\" goto absoluteConfigDirStop
+ set CONFIG_DIR=%KERNEL_HOME%\%CONFIG_DIR%
+ :absoluteConfigDirStop
+ shift
+ goto continueStopOptionLoop
+
+ :jmxportStop
+ set JMX_PORT=%~2
+ shift
+ goto continueStopOptionLoop
+
+ :endStopOptionLoop
+
+ rem Call shutdown client
+
+ rem Extend JMX options
+ set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.trustStore="%TRUSTSTORE_PATH%"
+ set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.trustStorePassword=%TRUSTSTORE_PASSWORD%
+ set OTHER_ARGS=%OTHER_ARGS% -jmxport %JMX_PORT%
+
+ rem Marshall parameters
+ set SHUTDOWN_PARMS= %JAVA_OPTS% %JMX_OPTS%
+ set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% -classpath "%CLASSPATH%"
+ set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% -Dorg.eclipse.virgo.kernel.home="%KERNEL_HOME%"
+ set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% -Dorg.eclipse.virgo.kernel.authentication.file="%CONFIG_DIR%\org.eclipse.virgo.kernel.users.properties"
+ set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% org.eclipse.virgo.nano.shutdown.ShutdownClient
+ set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% %OTHER_ARGS%
+
+ rem Run Java program
+ PUSHD %KERNEL_HOME%
+ "%JAVA_HOME%\bin\java" %SHUTDOWN_PARMS%
+ POPD
+
+goto :eof
diff --git a/nano/src/main/dist/bin/dmk.sh b/nano/src/main/dist/bin/dmk.sh
new file mode 100755
index 0000000..78f8089
--- /dev/null
+++ b/nano/src/main/dist/bin/dmk.sh
@@ -0,0 +1,290 @@
+#!/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`
+
+# setup classpath and java environment
+. "$KERNEL_HOME/bin/setupClasspath.sh"
+
+# execute user setenv script if needed
+if [ -r "$KERNEL_HOME/bin/setenv.sh" ]
+then
+ . $KERNEL_HOME/bin/setenv.sh
+fi
+
+
+# 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
+ 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/java6-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"
+
+ JMX_OPTS=" \
+ $JMX_OPTS \
+ -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"
+
+ 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="-Xmx512m \
+ -XX:MaxPermSize=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" \
+ -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
+
+ JMX_OPTS=" \
+ $JMX_OPTS \
+ -Djavax.net.ssl.trustStore=${TRUSTSTORE_PATH} \
+ -Djavax.net.ssl.trustStorePassword=${TRUSTSTORE_PASSWORD}"
+
+ 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 \
+ -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
+
diff --git a/nano/src/main/dist/bin/jconsole.bat b/nano/src/main/dist/bin/jconsole.bat
new file mode 100644
index 0000000..4cbe553
--- /dev/null
+++ b/nano/src/main/dist/bin/jconsole.bat
@@ -0,0 +1,54 @@
+@echo off
+rem Script for starting jconsole
+
+if "%OS%" == "Windows_NT" setlocal
+
+rem Find root drive and path for current bat file directory (includes trailing backslash)
+ set SCRIPT_DIR=%~dp0
+
+if exist "%SCRIPT_DIR%setupVars.bat" (
+ call "%SCRIPT_DIR%setupVars.bat"
+ if not "%ERRORLEVEL%"=="0" (
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B %ERRORLEVEL%
+ )
+) else (
+ echo Cannot set up environment. "setupVars.bat" file missing.
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B 1
+)
+
+rem Set defaults
+ set TRUSTSTORE_PATH=%KERNEL_HOME%\configuration\keystore
+ set TRUSTSTORE_PASSWORD=changeit
+ set OTHER_ARGS=
+
+:Loop
+ if "%~1"=="" goto EndLoop
+
+ if "%~1"=="-truststore" (
+ set TRUSTSTORE_PATH=%~2
+ shift
+ shift
+ goto Loop
+ )
+ if "%~1"=="-truststorePassword" (
+ set TRUSTSTORE_PASSWORD=%~2
+ shift
+ shift
+ goto Loop
+ )
+ rem Accumulate extra parameters.
+ set OTHER_ARGS=%OTHER_ARGS% "%~1"
+ shift
+ goto Loop
+:EndLoop
+
+set JMX_OPTS=%JMX_OPTS% -J-Dcom.sun.tools.jconsole.mbeans.keyPropertyList=category,type
+set JMX_OPTS=%JMX_OPTS% -J-Djavax.net.ssl.trustStore="%TRUSTSTORE_PATH%"
+set JMX_OPTS=%JMX_OPTS% -J-Djavax.net.ssl.trustStorePassword=%TRUSTSTORE_PASSWORD%
+
+"%JAVA_HOME%\bin\jconsole" %JMX_OPTS% %OTHER_ARGS%
+
+if "%OS%" == "Windows_NT" endlocal
+goto :eof
diff --git a/nano/src/main/dist/bin/jconsole.sh b/nano/src/main/dist/bin/jconsole.sh
new file mode 100755
index 0000000..0dfbcbf
--- /dev/null
+++ b/nano/src/main/dist/bin/jconsole.sh
@@ -0,0 +1,53 @@
+#!/bin/bash
+
+if [ -z "$JAVA_HOME" ]
+then
+ echo The JAVA_HOME environment variable is not defined
+ exit 1
+fi
+
+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
+
+KERNEL_HOME=`dirname "$SCRIPT"`/..
+KERNEL_HOME=`cd $KERNEL_HOME; pwd`
+
+#parse args for the script
+TRUSTSTORE_PATH=$KERNEL_HOME/configuration/keystore
+TRUSTSTORE_PASSWORD=changeit
+
+shopt -s extglob
+
+while (($# > 0))
+ do
+ case $1 in
+ -truststore)
+ TRUSTSTORE_PATH=$2
+ shift;
+ ;;
+ -truststorePassword)
+ TRUSTSTORE_PASSWORD=$2
+ shift;
+ ;;
+ esac
+ shift
+done
+
+JMX_OPTS=" \
+ $JMX_OPTS \
+ -J-Dcom.sun.tools.jconsole.mbeans.keyPropertyList=category,type \
+ -J-Djavax.net.ssl.trustStore=$TRUSTSTORE_PATH \
+ -J-Djavax.net.ssl.trustStorePassword=$TRUSTSTORE_PASSWORD"
+
+$JAVA_HOME/bin/jconsole $JMX_OPTS
diff --git a/nano/src/main/dist/bin/jmxPermissions.vbs b/nano/src/main/dist/bin/jmxPermissions.vbs
new file mode 100644
index 0000000..0184607
--- /dev/null
+++ b/nano/src/main/dist/bin/jmxPermissions.vbs
@@ -0,0 +1,81 @@
+configFolder = Wscript.Arguments.Item(0)
+
+'WScript.Echo "Fixing permissions on " & configFolder
+
+Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2") 'Load up WMI with the right dll
+
+Dim files(0)
+files(0) = "org.eclipse.virgo.kernel.jmxremote.access.properties"
+
+For Each file In files
+ updateInheritance(configFolder & file)
+ updateOwnership(configFolder & file)
+ updatePermissions(configFolder & file)
+Next
+
+Sub updateInheritance(file)
+ 'WScript.Echo "Updating inheritance of " & file
+
+ Const SE_DACL_PRESENT = 4
+ Const SE_DACL_PROTECTED = 4096
+ Const SE_SELF_RELATIVE = 32768
+
+ Set objFileSecSetting = objWMIService.Get("Win32_LogicalFileSecuritySetting.Path='" & file & "'")
+ objFileSecSetting.GetSecurityDescriptor objSecurityDescriptor
+
+ objSecurityDescriptor.ControlFlags = SE_DACL_PRESENT + SE_DACL_PROTECTED + SE_SELF_RELATIVE
+
+ Set objMethod = objFileSecSetting.Methods_("SetSecurityDescriptor")
+ Set objInParam = objMethod.inParameters.SpawnInstance_()
+ objInParam.Properties_.item("Descriptor") = objSecurityDescriptor
+ objFileSecSetting.ExecMethod_ "SetSecurityDescriptor", objInParam
+
+ 'WScript.Echo "Updated inheritance of " & file
+End Sub
+
+Sub updateOwnership(file)
+ 'WScript.Echo "Updating ownership of " & file
+ Set objDataFile = objWMIService.Get("CIM_DataFile.Name='" & file & "'")
+
+ Set objMethod = objDataFile.Methods_("TakeOwnerShipEx")
+ Set objInParam = objMethod.inParameters.SpawnInstance_()
+
+ objDataFile.ExecMethod_ "TakeOwnerShipEx", objInParam
+
+ 'WScript.Echo "Updated ownership of " & file
+End Sub
+
+Sub updatePermissions(file)
+ 'WScript.Echo "Updating permissions of " & file
+
+ Set objFileSecSetting = objWMIService.Get("Win32_LogicalFileSecuritySetting.Path='" & file & "'")
+ objFileSecSetting.GetSecurityDescriptor objSecurityDescriptor
+
+ Set WshNetwork = WScript.CreateObject("WScript.Network")
+
+ Dim foundAce
+ foundAce = "false"
+
+ 'Search for an ACE for the current user as there is no robust, portable way of creating such an ACE from scratch in VBScript.
+ Dim specificAce(0)
+ For Each ace in objSecurityDescriptor.DACL
+ If ace.Trustee.Name = WshNetwork.UserName Then
+ Set specificAce(0) = ace
+ foundAce = "true"
+ End If
+ Next
+
+ If foundAce = "true" Then
+ objSecurityDescriptor.DACL = specificAce
+
+ Set objMethod = objFileSecSetting.Methods_("SetSecurityDescriptor")
+ Set objInParam = objMethod.inParameters.SpawnInstance_()
+ objInParam.Properties_.item("Descriptor") = objSecurityDescriptor
+ objFileSecSetting.ExecMethod_ "SetSecurityDescriptor", objInParam
+
+ 'WScript.Echo "Updated permissions of " & file
+ Else
+ WScript.Echo "WARNING: jmxPermissions.vbs did not update the permissions of " & file & ". Check the file has the correct permissions."
+ End If
+
+End Sub
diff --git a/nano/src/main/dist/bin/setupClasspath.bat b/nano/src/main/dist/bin/setupClasspath.bat
new file mode 100644
index 0000000..30e157c
--- /dev/null
+++ b/nano/src/main/dist/bin/setupClasspath.bat
@@ -0,0 +1,31 @@
+@echo off
+rem Check JAVA_HOME and KERNEL_HOME variables
+if "%JAVA_HOME%" == "" (
+ echo The JAVA_HOME environment variable is not defined.
+ exit /B 1
+)
+if "%KERNEL_HOME%" == "" (
+ echo The KERNEL_HOME environment variable is not defined.
+ exit /B 1
+)
+
+rem Construct the CLASSPATH list from the Kernel lib directory.
+for %%G in ("%KERNEL_HOME%\lib\*.jar") do call :AppendToClasspath "%%G"
+for %%G in ("%KERNEL_HOME%\plugins\org.eclipse.osgi_*.jar") do call :AppendToClasspath "%%G"
+for %%G in ("%KERNEL_HOME%\plugins\org.eclipse.equinox.console.ssh_*.jar") do call :AppendToClasspath "%%G"
+
+rem Check if there are JAR files in the lib directory.
+if "%CLASSPATH%" == "" (
+ echo No JAR files found in %KERNEL_HOME%\lib
+ exit /B 1
+)
+
+rem Remove leading semi-colon if present
+if "%CLASSPATH:~0,1%"==";" set CLASSPATH=%CLASSPATH:~1%
+if "%FWCLASSPATH:~0,1%"=="," set FWCLASSPATH=%FWCLASSPATH:~1%
+exit /B 0
+
+:AppendToClasspath
+ set CLASSPATH=%CLASSPATH%;%~1
+ set FWCLASSPATH=%FWCLASSPATH%,file:///%~1
+ goto :eof
diff --git a/nano/src/main/dist/bin/setupClasspath.sh b/nano/src/main/dist/bin/setupClasspath.sh
new file mode 100755
index 0000000..741e0e3
--- /dev/null
+++ b/nano/src/main/dist/bin/setupClasspath.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+# make sure we have JAVA_HOME set
+if [ -z "$JAVA_HOME" ]
+then
+ echo The JAVA_HOME environment variable is not defined. Using PATH instead.
+fi
+
+CLASSPATH=
+FWCLASSPATH=
+
+# Create the classpath for bootstrapping the Server from all the JARs in lib
+for file in "$KERNEL_HOME"/lib/*
+do
+ if [[ $file == *.jar ]]
+ then
+ CLASSPATH=$CLASSPATH:$KERNEL_HOME/lib/${file##*/}
+ FWCLASSPATH=$FWCLASSPATH,file:$KERNEL_HOME/lib/${file##*/}
+ fi
+done
+
+# Append the osgi jar to the classpath
+for file in "$KERNEL_HOME"/plugins/org.eclipse.osgi_*.jar
+do
+ CLASSPATH=$CLASSPATH:$KERNEL_HOME/plugins/${file##*/}
+ FWCLASSPATH=$FWCLASSPATH,file:$KERNEL_HOME/plugins/${file##*/}
+done
+
+# Append the console.supportability jar to the classpath to enable ssh
+for file in "$KERNEL_HOME"/plugins/org.eclipse.equinox.console.ssh_*.jar
+do
+ CLASSPATH=$CLASSPATH:$KERNEL_HOME/plugins/${file##*/}
+done
+
+# make sure we have CLASSPATH set
+if [ -z "$CLASSPATH" ]
+then
+ echo No JAR files found in $KERNEL_HOME/lib
+ exit 1
+fi
diff --git a/nano/src/main/dist/bin/setupVars.bat b/nano/src/main/dist/bin/setupVars.bat
new file mode 100644
index 0000000..a5d7772
--- /dev/null
+++ b/nano/src/main/dist/bin/setupVars.bat
@@ -0,0 +1,31 @@
+@echo off
+rem Set up env vars needed for dmk.bat and jconsole.bat (with user-pluggable mods if present)
+
+if "%SCRIPT_DIR%"=="" (
+ echo Called setupVars.bat out of context.
+ exit /B 1
+)
+
+rem Derive KERNEL_HOME full path from script's parent (no backslash)
+ for %%I in ("%SCRIPT_DIR%..") do set KERNEL_HOME=%%~fsI
+
+rem Check files exist (exit if not)
+ set ChkLst="%KERNEL_HOME%\bin\setupClasspath.bat","%KERNEL_HOME%\bin\checkJava.bat"
+
+ for %%I in (%ChkLst%) do if not exist "%%~I" (
+ echo File "%%~I" does not exist but is required.
+ exit /B 1
+ )
+
+rem set up the classpath (check result)
+ call "%KERNEL_HOME%\bin\setupClasspath.bat"
+ if not "%ERRORLEVEL%" == "0" exit /B %ERRORLEVEL%
+
+rem Run Java Version check (uses JAVA_HOME) (check result)
+ call "%KERNEL_HOME%\bin\checkJava.bat"
+ if not "%ERRORLEVEL%" == "0" exit /B %ERRORLEVEL%
+
+rem Execute user setenv script if needed (ignore result)
+ if exist "%KERNEL_HOME%\bin\setenv.bat" call "%KERNEL_HOME%\bin\setenv.bat"
+
+goto :eof
diff --git a/nano/src/main/dist/bin/shutdown.bat b/nano/src/main/dist/bin/shutdown.bat
new file mode 100644
index 0000000..a2a1ff4
--- /dev/null
+++ b/nano/src/main/dist/bin/shutdown.bat
@@ -0,0 +1,8 @@
+@ECHO OFF
+IF "%OS%" == "Windows_NT" SETLOCAL
+
+SET SCRIPT_DIR=%~dp0%
+SET EXECUTABLE=dmk.bat
+
+call "%SCRIPT_DIR%%EXECUTABLE%" stop %*
+if not "%ERRORLEVEL%"=="0" exit /B %ERRORLEVEL%
diff --git a/nano/src/main/dist/bin/shutdown.sh b/nano/src/main/dist/bin/shutdown.sh
new file mode 100755
index 0000000..1960446
--- /dev/null
+++ b/nano/src/main/dist/bin/shutdown.sh
@@ -0,0 +1,29 @@
+#!/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
+
+SCRIPT_DIR=`dirname $SCRIPT`
+EXECUTABLE="dmk.sh"
+
+#
+# identify yourself when running under cygwin
+#
+cygwin=false
+case "$(uname)" in
+ CYGWIN*) cygwin=true ;;
+esac
+export cygwin
+
+exec "$SCRIPT_DIR"/"$EXECUTABLE" stop "$@"
diff --git a/nano/src/main/dist/bin/startup.bat b/nano/src/main/dist/bin/startup.bat
new file mode 100644
index 0000000..76e1618
--- /dev/null
+++ b/nano/src/main/dist/bin/startup.bat
@@ -0,0 +1,8 @@
+@ECHO OFF
+IF "%OS%" == "Windows_NT" SETLOCAL
+
+SET SCRIPT_DIR=%~dp0%
+SET EXECUTABLE=dmk.bat
+
+call "%SCRIPT_DIR%%EXECUTABLE%" start %*
+if not "%ERRORLEVEL%"=="0" exit /B %ERRORLEVEL%
diff --git a/nano/src/main/dist/bin/startup.sh b/nano/src/main/dist/bin/startup.sh
new file mode 100755
index 0000000..69e43b7
--- /dev/null
+++ b/nano/src/main/dist/bin/startup.sh
@@ -0,0 +1,29 @@
+#!/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
+
+SCRIPT_DIR=`dirname $SCRIPT`
+EXECUTABLE="dmk.sh"
+
+#
+# identify yourself when running under cygwin
+#
+cygwin=false
+case "$(uname)" in
+ CYGWIN*) cygwin=true ;;
+esac
+export cygwin
+
+exec "$SCRIPT_DIR"/"$EXECUTABLE" start "$@"
diff --git a/tomcat-server/org.eclipse.virgo.tomcat.smoketest/.gitignore b/tomcat-server/org.eclipse.virgo.tomcat.smoketest/.gitignore
new file mode 100644
index 0000000..fe99505
--- /dev/null
+++ b/tomcat-server/org.eclipse.virgo.tomcat.smoketest/.gitignore
@@ -0,0 +1,2 @@
+bin
+
diff --git a/tomcat-server/src/main/dist/bin/checkJava.bat b/tomcat-server/src/main/dist/bin/checkJava.bat
new file mode 100644
index 0000000..8df7848
--- /dev/null
+++ b/tomcat-server/src/main/dist/bin/checkJava.bat
@@ -0,0 +1,17 @@
+@echo off
+rem Script for checking we have the right version of Java.
+
+if "%JAVA_HOME%" == "" (
+ echo The JAVA_HOME environment variable is not defined.
+ exit /B 1
+)
+if "%CLASSPATH%" == "" (
+ echo The CLASSPATH environment variable is not defined.
+ exit /B 1
+)
+
+rem Run java version check with the discovered java jvm.
+"%JAVA_HOME%\bin\java" -classpath "%CLASSPATH%" org.eclipse.virgo.util.env.JavaVersionChecker
+
+rem If non-zero exit then either we cannot find the checker or the Java version is incorrect.
+if not "%ERRORLEVEL%"=="0" exit /B %ERRORLEVEL%
diff --git a/tomcat-server/src/main/dist/bin/checkJava.sh b/tomcat-server/src/main/dist/bin/checkJava.sh
new file mode 100755
index 0000000..a06ecd5
--- /dev/null
+++ b/tomcat-server/src/main/dist/bin/checkJava.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+#
+# make adjustment when running under cygwin
+#
+if $cygwin; then
+ CLASSPATH=$(cygpath -wp "$CLASSPATH")
+fi
+
+if [ -z "$JAVA_HOME" ]
+then
+ JAVA_EXECUTABLE=java
+else
+ JAVA_EXECUTABLE=$JAVA_HOME/bin/java
+fi
+
+# Run java version check with the discovered java jvm.
+$JAVA_EXECUTABLE \
+ -classpath "$CLASSPATH" \
+ org.eclipse.virgo.util.env.JavaVersionChecker
+
+# If non-zero exit then either we cannot find the check or the java version is incorrect.
+if [ $? != 0 ]
+then
+ exit 1
+fi
diff --git a/tomcat-server/src/main/dist/bin/dmk.bat b/tomcat-server/src/main/dist/bin/dmk.bat
new file mode 100644
index 0000000..db94d6c
--- /dev/null
+++ b/tomcat-server/src/main/dist/bin/dmk.bat
@@ -0,0 +1,280 @@
+@echo off
+rem Script for starting and stopping the kernel
+
+if "%OS%" == "Windows_NT" setlocal
+
+rem Derive full path for script (includes trailing backslash)
+ set SCRIPT_DIR=%~dp0
+
+if exist "%SCRIPT_DIR%setupVars.bat" (
+ call "%SCRIPT_DIR%setupVars.bat"
+ if not "%ERRORLEVEL%"=="0" (
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B %ERRORLEVEL%
+ )
+) else (
+ echo Cannot set up environment. "setupVars.bat" file missing.
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B 1
+)
+
+rem Select command we are to run
+
+ rem First parm is command
+ set COMMAND=%~1
+ rem Rest are parameters - shift done in subroutines
+
+ rem Switch on COMMAND in {"start","stop"}
+
+ if "%COMMAND%" == "start" (
+ call :doStartCommand %*
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B 0
+ )
+
+ if "%COMMAND%" == "stop" (
+ call :doStopCommand %*
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B 0
+ )
+
+ echo Unknown command: %COMMAND%
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B 1
+
+rem ------------------ Subroutines
+rem ------------------------------
+:doStartCommand
+
+ shift
+ rem The shift must be here :()
+
+ rem Check further file that needs to exist
+ for %%I in ("%KERNEL_HOME%\bin\jmxPermissions.vbs") do if not exist "%%~I" (
+ echo File "%%~I" does not exist but is required to continue.
+ exit /B 1
+ )
+
+ rem Set defaults
+ set CONFIG_DIR=%KERNEL_HOME%\configuration
+ set CLEAN_FLAG=
+ set NO_START_FLAG=
+ set DEBUG_FLAG=
+ set DEBUG_PORT=8000
+ set SUSPEND=n
+ if not defined JMX_PORT set JMX_PORT=9875
+ if not defined KEYSTORE_PASSWORD set KEYSTORE_PASSWORD=changeit
+ set ADDITIONAL_ARGS=
+
+ rem Loop through options
+
+ :startOptionLoop
+ if "%~1"=="" goto endStartOptionLoop
+ if "%~1"=="-debug" goto debug
+ if "%~1"=="-clean" goto clean
+ if "%~1"=="-configDir" goto configDir
+ if "%~1"=="-jmxport" goto jmxport
+ if "%~1"=="-keystore" goto keystore
+ if "%~1"=="-keystorePassword" goto keystorePassword
+ if "%~1"=="-noStart" goto noStart
+ if "%~1"=="-suspend" goto suspend
+ if "%~1"=="-shell" goto shell
+
+ set ADDITIONAL_ARGS=%ADDITIONAL_ARGS% "%~1"
+
+ :continueStartOptionLoop
+ shift
+ goto startOptionLoop
+
+ :debug
+ set DEBUG_FLAG=1
+ set PORT_CANDIDATE=%~2
+ if not "%PORT_CANDIDATE:~0,1%"=="-" (
+ set DEBUG_PORT=%PORT_CANDIDATE%
+ shift
+ )
+ goto continueStartOptionLoop
+ :clean
+ set CLEAN_FLAG=1
+ goto continueStartOptionLoop
+ :configDir
+ set CONFIG_DIR=%~2
+ rem unless absolute, treat as relative to kernel home
+ if "%CONFIG_DIR:~1%"=="\" goto absoluteConfigDir
+ if "%CONFIG_DIR:~1,2%"==":\" goto absoluteConfigDir
+ set CONFIG_DIR=%KERNEL_HOME%\%CONFIG_DIR%
+ :absoluteConfigDir
+ shift
+ goto continueStartOptionLoop
+ :jmxport
+ set JMX_PORT=%~2
+ shift
+ goto continueStartOptionLoop
+ :keystore
+ set KEYSTORE_PATH=%~2
+ shift
+ goto continueStartOptionLoop
+ :keystorePassword
+ set KEYSTORE_PASSWORD=%~2
+ shift
+ goto continueStartOptionLoop
+ :noStart
+ set NO_START_FLAG=1
+ goto continueStartOptionLoop
+ :suspend
+ set SUSPEND=y
+ goto continueStartOptionLoop
+ :shell
+ set SHELL_FLAG=1
+ goto continueStartOptionLoop
+
+ :endStartOptionLoop
+
+
+ rem Adjust permissions if necessary
+ cscript //NoLogo "%KERNEL_HOME%\bin\jmxPermissions.vbs" "%CONFIG_DIR%\"
+
+ rem Adjust options now all are known
+ if "%KEYSTORE_PATH%"=="" set KEYSTORE_PATH=%CONFIG_DIR%\keystore
+ if not "%DEBUG_FLAG%"=="" set DEBUG_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=%DEBUG_PORT%,server=y,suspend=%SUSPEND%
+
+ rem do Clean work:
+ if not "%CLEAN_FLAG%"=="" (
+ rmdir /Q /S "%KERNEL_HOME%\serviceability"
+ rmdir /Q /S "%KERNEL_HOME%\work"
+
+ set LAUNCH_OPTS=%LAUNCH_OPTS% -clean
+ )
+
+ rem do Shell work:
+ if not "%SHELL_FLAG%"=="" (
+ echo "Warning: Kernel shell not supported; -shell option ignored."
+ rem set LAUNCH_OPTS=%LAUNCH_OPTS% -Forg.eclipse.virgo.kernel.shell.local=true
+ )
+
+ rem Set JMX options
+ set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.port=%JMX_PORT%
+ set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.authenticate=true
+ set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.login.config=virgo-kernel
+ set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.access.file="%CONFIG_DIR%\org.eclipse.virgo.kernel.jmxremote.access.properties"
+ set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.keyStore="%KEYSTORE_PATH%"
+ set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.keyStorePassword=%KEYSTORE_PASSWORD%
+ set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.ssl=true
+ set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.ssl.need.client.auth=false
+
+ if not "%NO_START_FLAG%"=="" goto :eof
+ rem ensure that the tmp directory exists:
+ set TMP_DIR="%KERNEL_HOME%\work\tmp"
+ if not exist "%TMP_DIR%" mkdir "%TMP_DIR%"
+
+ set JAVA_OPTS=-Xmx512m -XX:MaxPermSize=512m %JAVA_OPTS%
+ rem Run the server
+
+ rem Marshall parameters
+ set KERNEL_JAVA_PARMS=%JAVA_OPTS% %DEBUG_OPTS% %JMX_OPTS%
+
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -XX:+HeapDumpOnOutOfMemoryError
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -XX:ErrorFile="%KERNEL_HOME%\serviceability\error.log"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -XX:HeapDumpPath="%KERNEL_HOME%\serviceability\heap_dump.hprof"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Djava.security.auth.login.config="%CONFIG_DIR%\org.eclipse.virgo.kernel.authentication.config"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dorg.eclipse.virgo.kernel.authentication.file="%CONFIG_DIR%\org.eclipse.virgo.kernel.users.properties"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Djava.io.tmpdir="%TMP_DIR%"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dorg.eclipse.virgo.kernel.home="%KERNEL_HOME%"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.java.profile="file:%CONFIG_DIR%\java6-server.profile"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dssh.server.keystore="%CONFIG_DIR%/hostkey.ser"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dorg.eclipse.virgo.kernel.config="%CONFIG_DIR%"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.sharedConfiguration.area="%CONFIG_DIR%"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Declipse.ignoreApp="true"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.install.area="%KERNEL_HOME%"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.configuration.area="%KERNEL_HOME%\work"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.frameworkClassPath="%FWCLASSPATH%"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Djava.endorsed.dirs="%KERNEL_HOME%\lib\endorsed"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -classpath "%CLASSPATH%"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% org.eclipse.equinox.launcher.Main
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -noExit
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% %LAUNCH_OPTS%
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% %ADDITIONAL_ARGS%
+
+ rem Now run it
+ PUSHD %KERNEL_HOME%
+ "%JAVA_HOME%\bin\java" %KERNEL_JAVA_PARMS%
+ POPD
+
+goto :eof
+
+rem ------------------------------
+:doStopCommand
+
+ shift
+ rem The shift must be here :()
+
+ rem Set defaults
+ set CONFIG_DIR=%KERNEL_HOME%\configuration
+ if not defined TRUSTSTORE_PATH set TRUSTSTORE_PATH=%CONFIG_DIR%\keystore
+ if not defined TRUSTSTORE_PASSWORD set TRUSTSTORE_PASSWORD=changeit
+ if not defined JMX_PORT set JMX_PORT=9875
+ set OTHER_ARGS=
+
+ rem Loop through options
+ :stopOptionLoop
+
+ if "%~1"=="" goto endStopOptionLoop
+ if "%~1"=="-truststore" goto truststoreStop
+ if "%~1"=="-truststorePassword" goto truststorePasswordStop
+ if "%~1"=="-configDir" goto configDirStop
+ if "%~1"=="-jmxport" goto jmxportStop
+
+ set OTHER_ARGS=%OTHER_ARGS% "%~1"
+
+ :continueStopOptionLoop
+ shift
+ goto stopOptionLoop
+
+ :truststoreStop
+ set TRUSTSTORE_PATH=%~2
+ shift
+ goto continueStopOptionLoop
+
+ :truststorePasswordStop
+ set TRUSTSTORE_PASSWORD=%~2
+ shift
+ goto continueStopOptionLoop
+
+ :configDirStop
+ set CONFIG_DIR=%~2
+ rem unless absolute, treat as relative to kernel home
+ if "%CONFIG_DIR:~1%"=="\" goto absoluteConfigDirStop
+ if "%CONFIG_DIR:~1,2%"==":\" goto absoluteConfigDirStop
+ set CONFIG_DIR=%KERNEL_HOME%\%CONFIG_DIR%
+ :absoluteConfigDirStop
+ shift
+ goto continueStopOptionLoop
+
+ :jmxportStop
+ set JMX_PORT=%~2
+ shift
+ goto continueStopOptionLoop
+
+ :endStopOptionLoop
+
+ rem Call shutdown client
+
+ rem Extend JMX options
+ set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.trustStore="%TRUSTSTORE_PATH%"
+ set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.trustStorePassword=%TRUSTSTORE_PASSWORD%
+ set OTHER_ARGS=%OTHER_ARGS% -jmxport %JMX_PORT%
+
+ rem Marshall parameters
+ set SHUTDOWN_PARMS= %JAVA_OPTS% %JMX_OPTS%
+ set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% -classpath "%CLASSPATH%"
+ set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% -Dorg.eclipse.virgo.kernel.home="%KERNEL_HOME%"
+ set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% -Dorg.eclipse.virgo.kernel.authentication.file="%CONFIG_DIR%\org.eclipse.virgo.kernel.users.properties"
+ set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% org.eclipse.virgo.nano.shutdown.ShutdownClient
+ set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% %OTHER_ARGS%
+
+ rem Run Java program
+ PUSHD %KERNEL_HOME%
+ "%JAVA_HOME%\bin\java" %SHUTDOWN_PARMS%
+ POPD
+
+goto :eof
diff --git a/tomcat-server/src/main/dist/bin/dmk.sh b/tomcat-server/src/main/dist/bin/dmk.sh
new file mode 100755
index 0000000..78f8089
--- /dev/null
+++ b/tomcat-server/src/main/dist/bin/dmk.sh
@@ -0,0 +1,290 @@
+#!/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`
+
+# setup classpath and java environment
+. "$KERNEL_HOME/bin/setupClasspath.sh"
+
+# execute user setenv script if needed
+if [ -r "$KERNEL_HOME/bin/setenv.sh" ]
+then
+ . $KERNEL_HOME/bin/setenv.sh
+fi
+
+
+# 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
+ 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/java6-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"
+
+ JMX_OPTS=" \
+ $JMX_OPTS \
+ -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"
+
+ 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="-Xmx512m \
+ -XX:MaxPermSize=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" \
+ -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
+
+ JMX_OPTS=" \
+ $JMX_OPTS \
+ -Djavax.net.ssl.trustStore=${TRUSTSTORE_PATH} \
+ -Djavax.net.ssl.trustStorePassword=${TRUSTSTORE_PASSWORD}"
+
+ 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 \
+ -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
+
diff --git a/tomcat-server/src/main/dist/bin/jconsole.bat b/tomcat-server/src/main/dist/bin/jconsole.bat
new file mode 100644
index 0000000..4cbe553
--- /dev/null
+++ b/tomcat-server/src/main/dist/bin/jconsole.bat
@@ -0,0 +1,54 @@
+@echo off
+rem Script for starting jconsole
+
+if "%OS%" == "Windows_NT" setlocal
+
+rem Find root drive and path for current bat file directory (includes trailing backslash)
+ set SCRIPT_DIR=%~dp0
+
+if exist "%SCRIPT_DIR%setupVars.bat" (
+ call "%SCRIPT_DIR%setupVars.bat"
+ if not "%ERRORLEVEL%"=="0" (
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B %ERRORLEVEL%
+ )
+) else (
+ echo Cannot set up environment. "setupVars.bat" file missing.
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B 1
+)
+
+rem Set defaults
+ set TRUSTSTORE_PATH=%KERNEL_HOME%\configuration\keystore
+ set TRUSTSTORE_PASSWORD=changeit
+ set OTHER_ARGS=
+
+:Loop
+ if "%~1"=="" goto EndLoop
+
+ if "%~1"=="-truststore" (
+ set TRUSTSTORE_PATH=%~2
+ shift
+ shift
+ goto Loop
+ )
+ if "%~1"=="-truststorePassword" (
+ set TRUSTSTORE_PASSWORD=%~2
+ shift
+ shift
+ goto Loop
+ )
+ rem Accumulate extra parameters.
+ set OTHER_ARGS=%OTHER_ARGS% "%~1"
+ shift
+ goto Loop
+:EndLoop
+
+set JMX_OPTS=%JMX_OPTS% -J-Dcom.sun.tools.jconsole.mbeans.keyPropertyList=category,type
+set JMX_OPTS=%JMX_OPTS% -J-Djavax.net.ssl.trustStore="%TRUSTSTORE_PATH%"
+set JMX_OPTS=%JMX_OPTS% -J-Djavax.net.ssl.trustStorePassword=%TRUSTSTORE_PASSWORD%
+
+"%JAVA_HOME%\bin\jconsole" %JMX_OPTS% %OTHER_ARGS%
+
+if "%OS%" == "Windows_NT" endlocal
+goto :eof
diff --git a/tomcat-server/src/main/dist/bin/jconsole.sh b/tomcat-server/src/main/dist/bin/jconsole.sh
new file mode 100755
index 0000000..0dfbcbf
--- /dev/null
+++ b/tomcat-server/src/main/dist/bin/jconsole.sh
@@ -0,0 +1,53 @@
+#!/bin/bash
+
+if [ -z "$JAVA_HOME" ]
+then
+ echo The JAVA_HOME environment variable is not defined
+ exit 1
+fi
+
+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
+
+KERNEL_HOME=`dirname "$SCRIPT"`/..
+KERNEL_HOME=`cd $KERNEL_HOME; pwd`
+
+#parse args for the script
+TRUSTSTORE_PATH=$KERNEL_HOME/configuration/keystore
+TRUSTSTORE_PASSWORD=changeit
+
+shopt -s extglob
+
+while (($# > 0))
+ do
+ case $1 in
+ -truststore)
+ TRUSTSTORE_PATH=$2
+ shift;
+ ;;
+ -truststorePassword)
+ TRUSTSTORE_PASSWORD=$2
+ shift;
+ ;;
+ esac
+ shift
+done
+
+JMX_OPTS=" \
+ $JMX_OPTS \
+ -J-Dcom.sun.tools.jconsole.mbeans.keyPropertyList=category,type \
+ -J-Djavax.net.ssl.trustStore=$TRUSTSTORE_PATH \
+ -J-Djavax.net.ssl.trustStorePassword=$TRUSTSTORE_PASSWORD"
+
+$JAVA_HOME/bin/jconsole $JMX_OPTS
diff --git a/tomcat-server/src/main/dist/bin/jmxPermissions.vbs b/tomcat-server/src/main/dist/bin/jmxPermissions.vbs
new file mode 100644
index 0000000..0184607
--- /dev/null
+++ b/tomcat-server/src/main/dist/bin/jmxPermissions.vbs
@@ -0,0 +1,81 @@
+configFolder = Wscript.Arguments.Item(0)
+
+'WScript.Echo "Fixing permissions on " & configFolder
+
+Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2") 'Load up WMI with the right dll
+
+Dim files(0)
+files(0) = "org.eclipse.virgo.kernel.jmxremote.access.properties"
+
+For Each file In files
+ updateInheritance(configFolder & file)
+ updateOwnership(configFolder & file)
+ updatePermissions(configFolder & file)
+Next
+
+Sub updateInheritance(file)
+ 'WScript.Echo "Updating inheritance of " & file
+
+ Const SE_DACL_PRESENT = 4
+ Const SE_DACL_PROTECTED = 4096
+ Const SE_SELF_RELATIVE = 32768
+
+ Set objFileSecSetting = objWMIService.Get("Win32_LogicalFileSecuritySetting.Path='" & file & "'")
+ objFileSecSetting.GetSecurityDescriptor objSecurityDescriptor
+
+ objSecurityDescriptor.ControlFlags = SE_DACL_PRESENT + SE_DACL_PROTECTED + SE_SELF_RELATIVE
+
+ Set objMethod = objFileSecSetting.Methods_("SetSecurityDescriptor")
+ Set objInParam = objMethod.inParameters.SpawnInstance_()
+ objInParam.Properties_.item("Descriptor") = objSecurityDescriptor
+ objFileSecSetting.ExecMethod_ "SetSecurityDescriptor", objInParam
+
+ 'WScript.Echo "Updated inheritance of " & file
+End Sub
+
+Sub updateOwnership(file)
+ 'WScript.Echo "Updating ownership of " & file
+ Set objDataFile = objWMIService.Get("CIM_DataFile.Name='" & file & "'")
+
+ Set objMethod = objDataFile.Methods_("TakeOwnerShipEx")
+ Set objInParam = objMethod.inParameters.SpawnInstance_()
+
+ objDataFile.ExecMethod_ "TakeOwnerShipEx", objInParam
+
+ 'WScript.Echo "Updated ownership of " & file
+End Sub
+
+Sub updatePermissions(file)
+ 'WScript.Echo "Updating permissions of " & file
+
+ Set objFileSecSetting = objWMIService.Get("Win32_LogicalFileSecuritySetting.Path='" & file & "'")
+ objFileSecSetting.GetSecurityDescriptor objSecurityDescriptor
+
+ Set WshNetwork = WScript.CreateObject("WScript.Network")
+
+ Dim foundAce
+ foundAce = "false"
+
+ 'Search for an ACE for the current user as there is no robust, portable way of creating such an ACE from scratch in VBScript.
+ Dim specificAce(0)
+ For Each ace in objSecurityDescriptor.DACL
+ If ace.Trustee.Name = WshNetwork.UserName Then
+ Set specificAce(0) = ace
+ foundAce = "true"
+ End If
+ Next
+
+ If foundAce = "true" Then
+ objSecurityDescriptor.DACL = specificAce
+
+ Set objMethod = objFileSecSetting.Methods_("SetSecurityDescriptor")
+ Set objInParam = objMethod.inParameters.SpawnInstance_()
+ objInParam.Properties_.item("Descriptor") = objSecurityDescriptor
+ objFileSecSetting.ExecMethod_ "SetSecurityDescriptor", objInParam
+
+ 'WScript.Echo "Updated permissions of " & file
+ Else
+ WScript.Echo "WARNING: jmxPermissions.vbs did not update the permissions of " & file & ". Check the file has the correct permissions."
+ End If
+
+End Sub
diff --git a/tomcat-server/src/main/dist/bin/setupClasspath.bat b/tomcat-server/src/main/dist/bin/setupClasspath.bat
new file mode 100644
index 0000000..30e157c
--- /dev/null
+++ b/tomcat-server/src/main/dist/bin/setupClasspath.bat
@@ -0,0 +1,31 @@
+@echo off
+rem Check JAVA_HOME and KERNEL_HOME variables
+if "%JAVA_HOME%" == "" (
+ echo The JAVA_HOME environment variable is not defined.
+ exit /B 1
+)
+if "%KERNEL_HOME%" == "" (
+ echo The KERNEL_HOME environment variable is not defined.
+ exit /B 1
+)
+
+rem Construct the CLASSPATH list from the Kernel lib directory.
+for %%G in ("%KERNEL_HOME%\lib\*.jar") do call :AppendToClasspath "%%G"
+for %%G in ("%KERNEL_HOME%\plugins\org.eclipse.osgi_*.jar") do call :AppendToClasspath "%%G"
+for %%G in ("%KERNEL_HOME%\plugins\org.eclipse.equinox.console.ssh_*.jar") do call :AppendToClasspath "%%G"
+
+rem Check if there are JAR files in the lib directory.
+if "%CLASSPATH%" == "" (
+ echo No JAR files found in %KERNEL_HOME%\lib
+ exit /B 1
+)
+
+rem Remove leading semi-colon if present
+if "%CLASSPATH:~0,1%"==";" set CLASSPATH=%CLASSPATH:~1%
+if "%FWCLASSPATH:~0,1%"=="," set FWCLASSPATH=%FWCLASSPATH:~1%
+exit /B 0
+
+:AppendToClasspath
+ set CLASSPATH=%CLASSPATH%;%~1
+ set FWCLASSPATH=%FWCLASSPATH%,file:///%~1
+ goto :eof
diff --git a/tomcat-server/src/main/dist/bin/setupClasspath.sh b/tomcat-server/src/main/dist/bin/setupClasspath.sh
new file mode 100755
index 0000000..741e0e3
--- /dev/null
+++ b/tomcat-server/src/main/dist/bin/setupClasspath.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+# make sure we have JAVA_HOME set
+if [ -z "$JAVA_HOME" ]
+then
+ echo The JAVA_HOME environment variable is not defined. Using PATH instead.
+fi
+
+CLASSPATH=
+FWCLASSPATH=
+
+# Create the classpath for bootstrapping the Server from all the JARs in lib
+for file in "$KERNEL_HOME"/lib/*
+do
+ if [[ $file == *.jar ]]
+ then
+ CLASSPATH=$CLASSPATH:$KERNEL_HOME/lib/${file##*/}
+ FWCLASSPATH=$FWCLASSPATH,file:$KERNEL_HOME/lib/${file##*/}
+ fi
+done
+
+# Append the osgi jar to the classpath
+for file in "$KERNEL_HOME"/plugins/org.eclipse.osgi_*.jar
+do
+ CLASSPATH=$CLASSPATH:$KERNEL_HOME/plugins/${file##*/}
+ FWCLASSPATH=$FWCLASSPATH,file:$KERNEL_HOME/plugins/${file##*/}
+done
+
+# Append the console.supportability jar to the classpath to enable ssh
+for file in "$KERNEL_HOME"/plugins/org.eclipse.equinox.console.ssh_*.jar
+do
+ CLASSPATH=$CLASSPATH:$KERNEL_HOME/plugins/${file##*/}
+done
+
+# make sure we have CLASSPATH set
+if [ -z "$CLASSPATH" ]
+then
+ echo No JAR files found in $KERNEL_HOME/lib
+ exit 1
+fi
diff --git a/tomcat-server/src/main/dist/bin/setupVars.bat b/tomcat-server/src/main/dist/bin/setupVars.bat
new file mode 100644
index 0000000..a5d7772
--- /dev/null
+++ b/tomcat-server/src/main/dist/bin/setupVars.bat
@@ -0,0 +1,31 @@
+@echo off
+rem Set up env vars needed for dmk.bat and jconsole.bat (with user-pluggable mods if present)
+
+if "%SCRIPT_DIR%"=="" (
+ echo Called setupVars.bat out of context.
+ exit /B 1
+)
+
+rem Derive KERNEL_HOME full path from script's parent (no backslash)
+ for %%I in ("%SCRIPT_DIR%..") do set KERNEL_HOME=%%~fsI
+
+rem Check files exist (exit if not)
+ set ChkLst="%KERNEL_HOME%\bin\setupClasspath.bat","%KERNEL_HOME%\bin\checkJava.bat"
+
+ for %%I in (%ChkLst%) do if not exist "%%~I" (
+ echo File "%%~I" does not exist but is required.
+ exit /B 1
+ )
+
+rem set up the classpath (check result)
+ call "%KERNEL_HOME%\bin\setupClasspath.bat"
+ if not "%ERRORLEVEL%" == "0" exit /B %ERRORLEVEL%
+
+rem Run Java Version check (uses JAVA_HOME) (check result)
+ call "%KERNEL_HOME%\bin\checkJava.bat"
+ if not "%ERRORLEVEL%" == "0" exit /B %ERRORLEVEL%
+
+rem Execute user setenv script if needed (ignore result)
+ if exist "%KERNEL_HOME%\bin\setenv.bat" call "%KERNEL_HOME%\bin\setenv.bat"
+
+goto :eof
diff --git a/tomcat-server/src/main/dist/bin/shutdown.bat b/tomcat-server/src/main/dist/bin/shutdown.bat
new file mode 100644
index 0000000..a2a1ff4
--- /dev/null
+++ b/tomcat-server/src/main/dist/bin/shutdown.bat
@@ -0,0 +1,8 @@
+@ECHO OFF
+IF "%OS%" == "Windows_NT" SETLOCAL
+
+SET SCRIPT_DIR=%~dp0%
+SET EXECUTABLE=dmk.bat
+
+call "%SCRIPT_DIR%%EXECUTABLE%" stop %*
+if not "%ERRORLEVEL%"=="0" exit /B %ERRORLEVEL%
diff --git a/tomcat-server/src/main/dist/bin/shutdown.sh b/tomcat-server/src/main/dist/bin/shutdown.sh
new file mode 100755
index 0000000..1960446
--- /dev/null
+++ b/tomcat-server/src/main/dist/bin/shutdown.sh
@@ -0,0 +1,29 @@
+#!/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
+
+SCRIPT_DIR=`dirname $SCRIPT`
+EXECUTABLE="dmk.sh"
+
+#
+# identify yourself when running under cygwin
+#
+cygwin=false
+case "$(uname)" in
+ CYGWIN*) cygwin=true ;;
+esac
+export cygwin
+
+exec "$SCRIPT_DIR"/"$EXECUTABLE" stop "$@"
diff --git a/tomcat-server/src/main/dist/bin/startup.bat b/tomcat-server/src/main/dist/bin/startup.bat
new file mode 100644
index 0000000..76e1618
--- /dev/null
+++ b/tomcat-server/src/main/dist/bin/startup.bat
@@ -0,0 +1,8 @@
+@ECHO OFF
+IF "%OS%" == "Windows_NT" SETLOCAL
+
+SET SCRIPT_DIR=%~dp0%
+SET EXECUTABLE=dmk.bat
+
+call "%SCRIPT_DIR%%EXECUTABLE%" start %*
+if not "%ERRORLEVEL%"=="0" exit /B %ERRORLEVEL%
diff --git a/tomcat-server/src/main/dist/bin/startup.sh b/tomcat-server/src/main/dist/bin/startup.sh
new file mode 100755
index 0000000..69e43b7
--- /dev/null
+++ b/tomcat-server/src/main/dist/bin/startup.sh
@@ -0,0 +1,29 @@
+#!/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
+
+SCRIPT_DIR=`dirname $SCRIPT`
+EXECUTABLE="dmk.sh"
+
+#
+# identify yourself when running under cygwin
+#
+cygwin=false
+case "$(uname)" in
+ CYGWIN*) cygwin=true ;;
+esac
+export cygwin
+
+exec "$SCRIPT_DIR"/"$EXECUTABLE" start "$@"
diff --git a/virgo/nano/bin/checkJava.bat b/virgo/nano/bin/checkJava.bat
new file mode 100644
index 0000000..8df7848
--- /dev/null
+++ b/virgo/nano/bin/checkJava.bat
@@ -0,0 +1,17 @@
+@echo off
+rem Script for checking we have the right version of Java.
+
+if "%JAVA_HOME%" == "" (
+ echo The JAVA_HOME environment variable is not defined.
+ exit /B 1
+)
+if "%CLASSPATH%" == "" (
+ echo The CLASSPATH environment variable is not defined.
+ exit /B 1
+)
+
+rem Run java version check with the discovered java jvm.
+"%JAVA_HOME%\bin\java" -classpath "%CLASSPATH%" org.eclipse.virgo.util.env.JavaVersionChecker
+
+rem If non-zero exit then either we cannot find the checker or the Java version is incorrect.
+if not "%ERRORLEVEL%"=="0" exit /B %ERRORLEVEL%
diff --git a/virgo/nano/bin/checkJava.sh b/virgo/nano/bin/checkJava.sh
new file mode 100755
index 0000000..a06ecd5
--- /dev/null
+++ b/virgo/nano/bin/checkJava.sh
@@ -0,0 +1,26 @@
+#!/bin/bash
+
+#
+# make adjustment when running under cygwin
+#
+if $cygwin; then
+ CLASSPATH=$(cygpath -wp "$CLASSPATH")
+fi
+
+if [ -z "$JAVA_HOME" ]
+then
+ JAVA_EXECUTABLE=java
+else
+ JAVA_EXECUTABLE=$JAVA_HOME/bin/java
+fi
+
+# Run java version check with the discovered java jvm.
+$JAVA_EXECUTABLE \
+ -classpath "$CLASSPATH" \
+ org.eclipse.virgo.util.env.JavaVersionChecker
+
+# If non-zero exit then either we cannot find the check or the java version is incorrect.
+if [ $? != 0 ]
+then
+ exit 1
+fi
diff --git a/virgo/nano/bin/dmk.bat b/virgo/nano/bin/dmk.bat
new file mode 100644
index 0000000..db94d6c
--- /dev/null
+++ b/virgo/nano/bin/dmk.bat
@@ -0,0 +1,280 @@
+@echo off
+rem Script for starting and stopping the kernel
+
+if "%OS%" == "Windows_NT" setlocal
+
+rem Derive full path for script (includes trailing backslash)
+ set SCRIPT_DIR=%~dp0
+
+if exist "%SCRIPT_DIR%setupVars.bat" (
+ call "%SCRIPT_DIR%setupVars.bat"
+ if not "%ERRORLEVEL%"=="0" (
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B %ERRORLEVEL%
+ )
+) else (
+ echo Cannot set up environment. "setupVars.bat" file missing.
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B 1
+)
+
+rem Select command we are to run
+
+ rem First parm is command
+ set COMMAND=%~1
+ rem Rest are parameters - shift done in subroutines
+
+ rem Switch on COMMAND in {"start","stop"}
+
+ if "%COMMAND%" == "start" (
+ call :doStartCommand %*
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B 0
+ )
+
+ if "%COMMAND%" == "stop" (
+ call :doStopCommand %*
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B 0
+ )
+
+ echo Unknown command: %COMMAND%
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B 1
+
+rem ------------------ Subroutines
+rem ------------------------------
+:doStartCommand
+
+ shift
+ rem The shift must be here :()
+
+ rem Check further file that needs to exist
+ for %%I in ("%KERNEL_HOME%\bin\jmxPermissions.vbs") do if not exist "%%~I" (
+ echo File "%%~I" does not exist but is required to continue.
+ exit /B 1
+ )
+
+ rem Set defaults
+ set CONFIG_DIR=%KERNEL_HOME%\configuration
+ set CLEAN_FLAG=
+ set NO_START_FLAG=
+ set DEBUG_FLAG=
+ set DEBUG_PORT=8000
+ set SUSPEND=n
+ if not defined JMX_PORT set JMX_PORT=9875
+ if not defined KEYSTORE_PASSWORD set KEYSTORE_PASSWORD=changeit
+ set ADDITIONAL_ARGS=
+
+ rem Loop through options
+
+ :startOptionLoop
+ if "%~1"=="" goto endStartOptionLoop
+ if "%~1"=="-debug" goto debug
+ if "%~1"=="-clean" goto clean
+ if "%~1"=="-configDir" goto configDir
+ if "%~1"=="-jmxport" goto jmxport
+ if "%~1"=="-keystore" goto keystore
+ if "%~1"=="-keystorePassword" goto keystorePassword
+ if "%~1"=="-noStart" goto noStart
+ if "%~1"=="-suspend" goto suspend
+ if "%~1"=="-shell" goto shell
+
+ set ADDITIONAL_ARGS=%ADDITIONAL_ARGS% "%~1"
+
+ :continueStartOptionLoop
+ shift
+ goto startOptionLoop
+
+ :debug
+ set DEBUG_FLAG=1
+ set PORT_CANDIDATE=%~2
+ if not "%PORT_CANDIDATE:~0,1%"=="-" (
+ set DEBUG_PORT=%PORT_CANDIDATE%
+ shift
+ )
+ goto continueStartOptionLoop
+ :clean
+ set CLEAN_FLAG=1
+ goto continueStartOptionLoop
+ :configDir
+ set CONFIG_DIR=%~2
+ rem unless absolute, treat as relative to kernel home
+ if "%CONFIG_DIR:~1%"=="\" goto absoluteConfigDir
+ if "%CONFIG_DIR:~1,2%"==":\" goto absoluteConfigDir
+ set CONFIG_DIR=%KERNEL_HOME%\%CONFIG_DIR%
+ :absoluteConfigDir
+ shift
+ goto continueStartOptionLoop
+ :jmxport
+ set JMX_PORT=%~2
+ shift
+ goto continueStartOptionLoop
+ :keystore
+ set KEYSTORE_PATH=%~2
+ shift
+ goto continueStartOptionLoop
+ :keystorePassword
+ set KEYSTORE_PASSWORD=%~2
+ shift
+ goto continueStartOptionLoop
+ :noStart
+ set NO_START_FLAG=1
+ goto continueStartOptionLoop
+ :suspend
+ set SUSPEND=y
+ goto continueStartOptionLoop
+ :shell
+ set SHELL_FLAG=1
+ goto continueStartOptionLoop
+
+ :endStartOptionLoop
+
+
+ rem Adjust permissions if necessary
+ cscript //NoLogo "%KERNEL_HOME%\bin\jmxPermissions.vbs" "%CONFIG_DIR%\"
+
+ rem Adjust options now all are known
+ if "%KEYSTORE_PATH%"=="" set KEYSTORE_PATH=%CONFIG_DIR%\keystore
+ if not "%DEBUG_FLAG%"=="" set DEBUG_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=%DEBUG_PORT%,server=y,suspend=%SUSPEND%
+
+ rem do Clean work:
+ if not "%CLEAN_FLAG%"=="" (
+ rmdir /Q /S "%KERNEL_HOME%\serviceability"
+ rmdir /Q /S "%KERNEL_HOME%\work"
+
+ set LAUNCH_OPTS=%LAUNCH_OPTS% -clean
+ )
+
+ rem do Shell work:
+ if not "%SHELL_FLAG%"=="" (
+ echo "Warning: Kernel shell not supported; -shell option ignored."
+ rem set LAUNCH_OPTS=%LAUNCH_OPTS% -Forg.eclipse.virgo.kernel.shell.local=true
+ )
+
+ rem Set JMX options
+ set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.port=%JMX_PORT%
+ set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.authenticate=true
+ set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.login.config=virgo-kernel
+ set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.access.file="%CONFIG_DIR%\org.eclipse.virgo.kernel.jmxremote.access.properties"
+ set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.keyStore="%KEYSTORE_PATH%"
+ set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.keyStorePassword=%KEYSTORE_PASSWORD%
+ set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.ssl=true
+ set JMX_OPTS=%JMX_OPTS% -Dcom.sun.management.jmxremote.ssl.need.client.auth=false
+
+ if not "%NO_START_FLAG%"=="" goto :eof
+ rem ensure that the tmp directory exists:
+ set TMP_DIR="%KERNEL_HOME%\work\tmp"
+ if not exist "%TMP_DIR%" mkdir "%TMP_DIR%"
+
+ set JAVA_OPTS=-Xmx512m -XX:MaxPermSize=512m %JAVA_OPTS%
+ rem Run the server
+
+ rem Marshall parameters
+ set KERNEL_JAVA_PARMS=%JAVA_OPTS% %DEBUG_OPTS% %JMX_OPTS%
+
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -XX:+HeapDumpOnOutOfMemoryError
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -XX:ErrorFile="%KERNEL_HOME%\serviceability\error.log"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -XX:HeapDumpPath="%KERNEL_HOME%\serviceability\heap_dump.hprof"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Djava.security.auth.login.config="%CONFIG_DIR%\org.eclipse.virgo.kernel.authentication.config"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dorg.eclipse.virgo.kernel.authentication.file="%CONFIG_DIR%\org.eclipse.virgo.kernel.users.properties"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Djava.io.tmpdir="%TMP_DIR%"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dorg.eclipse.virgo.kernel.home="%KERNEL_HOME%"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.java.profile="file:%CONFIG_DIR%\java6-server.profile"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dssh.server.keystore="%CONFIG_DIR%/hostkey.ser"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dorg.eclipse.virgo.kernel.config="%CONFIG_DIR%"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.sharedConfiguration.area="%CONFIG_DIR%"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Declipse.ignoreApp="true"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.install.area="%KERNEL_HOME%"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.configuration.area="%KERNEL_HOME%\work"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Dosgi.frameworkClassPath="%FWCLASSPATH%"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -Djava.endorsed.dirs="%KERNEL_HOME%\lib\endorsed"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -classpath "%CLASSPATH%"
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% org.eclipse.equinox.launcher.Main
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% -noExit
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% %LAUNCH_OPTS%
+ set KERNEL_JAVA_PARMS=%KERNEL_JAVA_PARMS% %ADDITIONAL_ARGS%
+
+ rem Now run it
+ PUSHD %KERNEL_HOME%
+ "%JAVA_HOME%\bin\java" %KERNEL_JAVA_PARMS%
+ POPD
+
+goto :eof
+
+rem ------------------------------
+:doStopCommand
+
+ shift
+ rem The shift must be here :()
+
+ rem Set defaults
+ set CONFIG_DIR=%KERNEL_HOME%\configuration
+ if not defined TRUSTSTORE_PATH set TRUSTSTORE_PATH=%CONFIG_DIR%\keystore
+ if not defined TRUSTSTORE_PASSWORD set TRUSTSTORE_PASSWORD=changeit
+ if not defined JMX_PORT set JMX_PORT=9875
+ set OTHER_ARGS=
+
+ rem Loop through options
+ :stopOptionLoop
+
+ if "%~1"=="" goto endStopOptionLoop
+ if "%~1"=="-truststore" goto truststoreStop
+ if "%~1"=="-truststorePassword" goto truststorePasswordStop
+ if "%~1"=="-configDir" goto configDirStop
+ if "%~1"=="-jmxport" goto jmxportStop
+
+ set OTHER_ARGS=%OTHER_ARGS% "%~1"
+
+ :continueStopOptionLoop
+ shift
+ goto stopOptionLoop
+
+ :truststoreStop
+ set TRUSTSTORE_PATH=%~2
+ shift
+ goto continueStopOptionLoop
+
+ :truststorePasswordStop
+ set TRUSTSTORE_PASSWORD=%~2
+ shift
+ goto continueStopOptionLoop
+
+ :configDirStop
+ set CONFIG_DIR=%~2
+ rem unless absolute, treat as relative to kernel home
+ if "%CONFIG_DIR:~1%"=="\" goto absoluteConfigDirStop
+ if "%CONFIG_DIR:~1,2%"==":\" goto absoluteConfigDirStop
+ set CONFIG_DIR=%KERNEL_HOME%\%CONFIG_DIR%
+ :absoluteConfigDirStop
+ shift
+ goto continueStopOptionLoop
+
+ :jmxportStop
+ set JMX_PORT=%~2
+ shift
+ goto continueStopOptionLoop
+
+ :endStopOptionLoop
+
+ rem Call shutdown client
+
+ rem Extend JMX options
+ set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.trustStore="%TRUSTSTORE_PATH%"
+ set JMX_OPTS=%JMX_OPTS% -Djavax.net.ssl.trustStorePassword=%TRUSTSTORE_PASSWORD%
+ set OTHER_ARGS=%OTHER_ARGS% -jmxport %JMX_PORT%
+
+ rem Marshall parameters
+ set SHUTDOWN_PARMS= %JAVA_OPTS% %JMX_OPTS%
+ set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% -classpath "%CLASSPATH%"
+ set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% -Dorg.eclipse.virgo.kernel.home="%KERNEL_HOME%"
+ set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% -Dorg.eclipse.virgo.kernel.authentication.file="%CONFIG_DIR%\org.eclipse.virgo.kernel.users.properties"
+ set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% org.eclipse.virgo.nano.shutdown.ShutdownClient
+ set SHUTDOWN_PARMS=%SHUTDOWN_PARMS% %OTHER_ARGS%
+
+ rem Run Java program
+ PUSHD %KERNEL_HOME%
+ "%JAVA_HOME%\bin\java" %SHUTDOWN_PARMS%
+ POPD
+
+goto :eof
diff --git a/virgo/nano/bin/dmk.sh b/virgo/nano/bin/dmk.sh
new file mode 100755
index 0000000..78f8089
--- /dev/null
+++ b/virgo/nano/bin/dmk.sh
@@ -0,0 +1,290 @@
+#!/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`
+
+# setup classpath and java environment
+. "$KERNEL_HOME/bin/setupClasspath.sh"
+
+# execute user setenv script if needed
+if [ -r "$KERNEL_HOME/bin/setenv.sh" ]
+then
+ . $KERNEL_HOME/bin/setenv.sh
+fi
+
+
+# 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
+ 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/java6-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"
+
+ JMX_OPTS=" \
+ $JMX_OPTS \
+ -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"
+
+ 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="-Xmx512m \
+ -XX:MaxPermSize=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" \
+ -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
+
+ JMX_OPTS=" \
+ $JMX_OPTS \
+ -Djavax.net.ssl.trustStore=${TRUSTSTORE_PATH} \
+ -Djavax.net.ssl.trustStorePassword=${TRUSTSTORE_PASSWORD}"
+
+ 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 \
+ -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
+
diff --git a/virgo/nano/bin/jconsole.bat b/virgo/nano/bin/jconsole.bat
new file mode 100644
index 0000000..4cbe553
--- /dev/null
+++ b/virgo/nano/bin/jconsole.bat
@@ -0,0 +1,54 @@
+@echo off
+rem Script for starting jconsole
+
+if "%OS%" == "Windows_NT" setlocal
+
+rem Find root drive and path for current bat file directory (includes trailing backslash)
+ set SCRIPT_DIR=%~dp0
+
+if exist "%SCRIPT_DIR%setupVars.bat" (
+ call "%SCRIPT_DIR%setupVars.bat"
+ if not "%ERRORLEVEL%"=="0" (
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B %ERRORLEVEL%
+ )
+) else (
+ echo Cannot set up environment. "setupVars.bat" file missing.
+ if "%OS%" == "Windows_NT" endlocal
+ exit /B 1
+)
+
+rem Set defaults
+ set TRUSTSTORE_PATH=%KERNEL_HOME%\configuration\keystore
+ set TRUSTSTORE_PASSWORD=changeit
+ set OTHER_ARGS=
+
+:Loop
+ if "%~1"=="" goto EndLoop
+
+ if "%~1"=="-truststore" (
+ set TRUSTSTORE_PATH=%~2
+ shift
+ shift
+ goto Loop
+ )
+ if "%~1"=="-truststorePassword" (
+ set TRUSTSTORE_PASSWORD=%~2
+ shift
+ shift
+ goto Loop
+ )
+ rem Accumulate extra parameters.
+ set OTHER_ARGS=%OTHER_ARGS% "%~1"
+ shift
+ goto Loop
+:EndLoop
+
+set JMX_OPTS=%JMX_OPTS% -J-Dcom.sun.tools.jconsole.mbeans.keyPropertyList=category,type
+set JMX_OPTS=%JMX_OPTS% -J-Djavax.net.ssl.trustStore="%TRUSTSTORE_PATH%"
+set JMX_OPTS=%JMX_OPTS% -J-Djavax.net.ssl.trustStorePassword=%TRUSTSTORE_PASSWORD%
+
+"%JAVA_HOME%\bin\jconsole" %JMX_OPTS% %OTHER_ARGS%
+
+if "%OS%" == "Windows_NT" endlocal
+goto :eof
diff --git a/virgo/nano/bin/jconsole.sh b/virgo/nano/bin/jconsole.sh
new file mode 100755
index 0000000..0dfbcbf
--- /dev/null
+++ b/virgo/nano/bin/jconsole.sh
@@ -0,0 +1,53 @@
+#!/bin/bash
+
+if [ -z "$JAVA_HOME" ]
+then
+ echo The JAVA_HOME environment variable is not defined
+ exit 1
+fi
+
+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
+
+KERNEL_HOME=`dirname "$SCRIPT"`/..
+KERNEL_HOME=`cd $KERNEL_HOME; pwd`
+
+#parse args for the script
+TRUSTSTORE_PATH=$KERNEL_HOME/configuration/keystore
+TRUSTSTORE_PASSWORD=changeit
+
+shopt -s extglob
+
+while (($# > 0))
+ do
+ case $1 in
+ -truststore)
+ TRUSTSTORE_PATH=$2
+ shift;
+ ;;
+ -truststorePassword)
+ TRUSTSTORE_PASSWORD=$2
+ shift;
+ ;;
+ esac
+ shift
+done
+
+JMX_OPTS=" \
+ $JMX_OPTS \
+ -J-Dcom.sun.tools.jconsole.mbeans.keyPropertyList=category,type \
+ -J-Djavax.net.ssl.trustStore=$TRUSTSTORE_PATH \
+ -J-Djavax.net.ssl.trustStorePassword=$TRUSTSTORE_PASSWORD"
+
+$JAVA_HOME/bin/jconsole $JMX_OPTS
diff --git a/virgo/nano/bin/jmxPermissions.vbs b/virgo/nano/bin/jmxPermissions.vbs
new file mode 100644
index 0000000..0184607
--- /dev/null
+++ b/virgo/nano/bin/jmxPermissions.vbs
@@ -0,0 +1,81 @@
+configFolder = Wscript.Arguments.Item(0)
+
+'WScript.Echo "Fixing permissions on " & configFolder
+
+Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2") 'Load up WMI with the right dll
+
+Dim files(0)
+files(0) = "org.eclipse.virgo.kernel.jmxremote.access.properties"
+
+For Each file In files
+ updateInheritance(configFolder & file)
+ updateOwnership(configFolder & file)
+ updatePermissions(configFolder & file)
+Next
+
+Sub updateInheritance(file)
+ 'WScript.Echo "Updating inheritance of " & file
+
+ Const SE_DACL_PRESENT = 4
+ Const SE_DACL_PROTECTED = 4096
+ Const SE_SELF_RELATIVE = 32768
+
+ Set objFileSecSetting = objWMIService.Get("Win32_LogicalFileSecuritySetting.Path='" & file & "'")
+ objFileSecSetting.GetSecurityDescriptor objSecurityDescriptor
+
+ objSecurityDescriptor.ControlFlags = SE_DACL_PRESENT + SE_DACL_PROTECTED + SE_SELF_RELATIVE
+
+ Set objMethod = objFileSecSetting.Methods_("SetSecurityDescriptor")
+ Set objInParam = objMethod.inParameters.SpawnInstance_()
+ objInParam.Properties_.item("Descriptor") = objSecurityDescriptor
+ objFileSecSetting.ExecMethod_ "SetSecurityDescriptor", objInParam
+
+ 'WScript.Echo "Updated inheritance of " & file
+End Sub
+
+Sub updateOwnership(file)
+ 'WScript.Echo "Updating ownership of " & file
+ Set objDataFile = objWMIService.Get("CIM_DataFile.Name='" & file & "'")
+
+ Set objMethod = objDataFile.Methods_("TakeOwnerShipEx")
+ Set objInParam = objMethod.inParameters.SpawnInstance_()
+
+ objDataFile.ExecMethod_ "TakeOwnerShipEx", objInParam
+
+ 'WScript.Echo "Updated ownership of " & file
+End Sub
+
+Sub updatePermissions(file)
+ 'WScript.Echo "Updating permissions of " & file
+
+ Set objFileSecSetting = objWMIService.Get("Win32_LogicalFileSecuritySetting.Path='" & file & "'")
+ objFileSecSetting.GetSecurityDescriptor objSecurityDescriptor
+
+ Set WshNetwork = WScript.CreateObject("WScript.Network")
+
+ Dim foundAce
+ foundAce = "false"
+
+ 'Search for an ACE for the current user as there is no robust, portable way of creating such an ACE from scratch in VBScript.
+ Dim specificAce(0)
+ For Each ace in objSecurityDescriptor.DACL
+ If ace.Trustee.Name = WshNetwork.UserName Then
+ Set specificAce(0) = ace
+ foundAce = "true"
+ End If
+ Next
+
+ If foundAce = "true" Then
+ objSecurityDescriptor.DACL = specificAce
+
+ Set objMethod = objFileSecSetting.Methods_("SetSecurityDescriptor")
+ Set objInParam = objMethod.inParameters.SpawnInstance_()
+ objInParam.Properties_.item("Descriptor") = objSecurityDescriptor
+ objFileSecSetting.ExecMethod_ "SetSecurityDescriptor", objInParam
+
+ 'WScript.Echo "Updated permissions of " & file
+ Else
+ WScript.Echo "WARNING: jmxPermissions.vbs did not update the permissions of " & file & ". Check the file has the correct permissions."
+ End If
+
+End Sub
diff --git a/virgo/nano/bin/setupClasspath.bat b/virgo/nano/bin/setupClasspath.bat
new file mode 100644
index 0000000..30e157c
--- /dev/null
+++ b/virgo/nano/bin/setupClasspath.bat
@@ -0,0 +1,31 @@
+@echo off
+rem Check JAVA_HOME and KERNEL_HOME variables
+if "%JAVA_HOME%" == "" (
+ echo The JAVA_HOME environment variable is not defined.
+ exit /B 1
+)
+if "%KERNEL_HOME%" == "" (
+ echo The KERNEL_HOME environment variable is not defined.
+ exit /B 1
+)
+
+rem Construct the CLASSPATH list from the Kernel lib directory.
+for %%G in ("%KERNEL_HOME%\lib\*.jar") do call :AppendToClasspath "%%G"
+for %%G in ("%KERNEL_HOME%\plugins\org.eclipse.osgi_*.jar") do call :AppendToClasspath "%%G"
+for %%G in ("%KERNEL_HOME%\plugins\org.eclipse.equinox.console.ssh_*.jar") do call :AppendToClasspath "%%G"
+
+rem Check if there are JAR files in the lib directory.
+if "%CLASSPATH%" == "" (
+ echo No JAR files found in %KERNEL_HOME%\lib
+ exit /B 1
+)
+
+rem Remove leading semi-colon if present
+if "%CLASSPATH:~0,1%"==";" set CLASSPATH=%CLASSPATH:~1%
+if "%FWCLASSPATH:~0,1%"=="," set FWCLASSPATH=%FWCLASSPATH:~1%
+exit /B 0
+
+:AppendToClasspath
+ set CLASSPATH=%CLASSPATH%;%~1
+ set FWCLASSPATH=%FWCLASSPATH%,file:///%~1
+ goto :eof
diff --git a/virgo/nano/bin/setupClasspath.sh b/virgo/nano/bin/setupClasspath.sh
new file mode 100755
index 0000000..741e0e3
--- /dev/null
+++ b/virgo/nano/bin/setupClasspath.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+
+# make sure we have JAVA_HOME set
+if [ -z "$JAVA_HOME" ]
+then
+ echo The JAVA_HOME environment variable is not defined. Using PATH instead.
+fi
+
+CLASSPATH=
+FWCLASSPATH=
+
+# Create the classpath for bootstrapping the Server from all the JARs in lib
+for file in "$KERNEL_HOME"/lib/*
+do
+ if [[ $file == *.jar ]]
+ then
+ CLASSPATH=$CLASSPATH:$KERNEL_HOME/lib/${file##*/}
+ FWCLASSPATH=$FWCLASSPATH,file:$KERNEL_HOME/lib/${file##*/}
+ fi
+done
+
+# Append the osgi jar to the classpath
+for file in "$KERNEL_HOME"/plugins/org.eclipse.osgi_*.jar
+do
+ CLASSPATH=$CLASSPATH:$KERNEL_HOME/plugins/${file##*/}
+ FWCLASSPATH=$FWCLASSPATH,file:$KERNEL_HOME/plugins/${file##*/}
+done
+
+# Append the console.supportability jar to the classpath to enable ssh
+for file in "$KERNEL_HOME"/plugins/org.eclipse.equinox.console.ssh_*.jar
+do
+ CLASSPATH=$CLASSPATH:$KERNEL_HOME/plugins/${file##*/}
+done
+
+# make sure we have CLASSPATH set
+if [ -z "$CLASSPATH" ]
+then
+ echo No JAR files found in $KERNEL_HOME/lib
+ exit 1
+fi
diff --git a/virgo/nano/bin/setupVars.bat b/virgo/nano/bin/setupVars.bat
new file mode 100644
index 0000000..a5d7772
--- /dev/null
+++ b/virgo/nano/bin/setupVars.bat
@@ -0,0 +1,31 @@
+@echo off
+rem Set up env vars needed for dmk.bat and jconsole.bat (with user-pluggable mods if present)
+
+if "%SCRIPT_DIR%"=="" (
+ echo Called setupVars.bat out of context.
+ exit /B 1
+)
+
+rem Derive KERNEL_HOME full path from script's parent (no backslash)
+ for %%I in ("%SCRIPT_DIR%..") do set KERNEL_HOME=%%~fsI
+
+rem Check files exist (exit if not)
+ set ChkLst="%KERNEL_HOME%\bin\setupClasspath.bat","%KERNEL_HOME%\bin\checkJava.bat"
+
+ for %%I in (%ChkLst%) do if not exist "%%~I" (
+ echo File "%%~I" does not exist but is required.
+ exit /B 1
+ )
+
+rem set up the classpath (check result)
+ call "%KERNEL_HOME%\bin\setupClasspath.bat"
+ if not "%ERRORLEVEL%" == "0" exit /B %ERRORLEVEL%
+
+rem Run Java Version check (uses JAVA_HOME) (check result)
+ call "%KERNEL_HOME%\bin\checkJava.bat"
+ if not "%ERRORLEVEL%" == "0" exit /B %ERRORLEVEL%
+
+rem Execute user setenv script if needed (ignore result)
+ if exist "%KERNEL_HOME%\bin\setenv.bat" call "%KERNEL_HOME%\bin\setenv.bat"
+
+goto :eof
diff --git a/virgo/nano/bin/shutdown.bat b/virgo/nano/bin/shutdown.bat
new file mode 100644
index 0000000..a2a1ff4
--- /dev/null
+++ b/virgo/nano/bin/shutdown.bat
@@ -0,0 +1,8 @@
+@ECHO OFF
+IF "%OS%" == "Windows_NT" SETLOCAL
+
+SET SCRIPT_DIR=%~dp0%
+SET EXECUTABLE=dmk.bat
+
+call "%SCRIPT_DIR%%EXECUTABLE%" stop %*
+if not "%ERRORLEVEL%"=="0" exit /B %ERRORLEVEL%
diff --git a/virgo/nano/bin/shutdown.sh b/virgo/nano/bin/shutdown.sh
new file mode 100755
index 0000000..1960446
--- /dev/null
+++ b/virgo/nano/bin/shutdown.sh
@@ -0,0 +1,29 @@
+#!/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
+
+SCRIPT_DIR=`dirname $SCRIPT`
+EXECUTABLE="dmk.sh"
+
+#
+# identify yourself when running under cygwin
+#
+cygwin=false
+case "$(uname)" in
+ CYGWIN*) cygwin=true ;;
+esac
+export cygwin
+
+exec "$SCRIPT_DIR"/"$EXECUTABLE" stop "$@"
diff --git a/virgo/nano/bin/startup.bat b/virgo/nano/bin/startup.bat
new file mode 100644
index 0000000..76e1618
--- /dev/null
+++ b/virgo/nano/bin/startup.bat
@@ -0,0 +1,8 @@
+@ECHO OFF
+IF "%OS%" == "Windows_NT" SETLOCAL
+
+SET SCRIPT_DIR=%~dp0%
+SET EXECUTABLE=dmk.bat
+
+call "%SCRIPT_DIR%%EXECUTABLE%" start %*
+if not "%ERRORLEVEL%"=="0" exit /B %ERRORLEVEL%
diff --git a/virgo/nano/bin/startup.sh b/virgo/nano/bin/startup.sh
new file mode 100755
index 0000000..69e43b7
--- /dev/null
+++ b/virgo/nano/bin/startup.sh
@@ -0,0 +1,29 @@
+#!/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
+
+SCRIPT_DIR=`dirname $SCRIPT`
+EXECUTABLE="dmk.sh"
+
+#
+# identify yourself when running under cygwin
+#
+cygwin=false
+case "$(uname)" in
+ CYGWIN*) cygwin=true ;;
+esac
+export cygwin
+
+exec "$SCRIPT_DIR"/"$EXECUTABLE" start "$@"