diff --git a/Ghidra/RuntimeScripts/Common/server/server.conf b/Ghidra/RuntimeScripts/Common/server/server.conf index 52f2dd1fb6..40007f2e93 100644 --- a/Ghidra/RuntimeScripts/Common/server/server.conf +++ b/Ghidra/RuntimeScripts/Common/server/server.conf @@ -5,6 +5,9 @@ # Initial Working Directory (i.e., absolute installation directory path) wrapper.working.dir=${ghidra_home} +# Temporary directory (set WRAPPER_TMPDIR in ghidraSvr(.bat) script to modify this) +wrapper.tmp.path=${wrapper_tmpdir} + # Mac OS X launchd plist directory wrapper.launchd.dir=/Library/LaunchDaemons @@ -26,37 +29,40 @@ wrapper.java.additional.2=-DApplicationRollingFileAppender.maxBackupIndex=10 # Ensure that classpath_frag is defined for service startup wrapper.java.additional.3=-Dclasspath_frag=${classpath_frag} +# Java temporary directory (set WRAPPER_TMPDIR in ghidraSvr(.bat) script to modify this) +wrapper.java.additional.4=-Djava.io.tmpdir=${wrapper_tmpdir} + +# JNA temporary directory (set WRAPPER_TMPDIR in ghidraSvr(.bat) script to modify this). +# Note that YAJSW relies on jna_tmpdir (underscore). We set jna.tmpdir in case the Ghidra Server ever wants to do JNA. +wrapper.java.additional.5=-Djna.tmpdir=${wrapper_tmpdir} + # Limit server to specific TLS protocols for all secure connections. # NOTE: multiple protocols must be separated with a semi-colon (e.g., TLSv1.2;TLSv1.3). -wrapper.java.additional.4=-Dghidra.tls.server.protocols=TLSv1.2;TLSv1.3 +wrapper.java.additional.6=-Dghidra.tls.server.protocols=TLSv1.2;TLSv1.3 # A suitable cacerts file must be installed when using PKI authentication -#wrapper.java.additional.5=-Dghidra.cacerts=./Ghidra/cacerts +#wrapper.java.additional.7=-Dghidra.cacerts=./Ghidra/cacerts # If Ghidra clients must authenticate the server, the server will need to install # a server key/certificate in a secure location (e.g., /etc/pki/...) # and specify the location and password via the properties below. # Be sure to properly set permissions on the Ghidra installation and this file # if using these settings. -#wrapper.java.additional.6=-Dghidra.keystore= -#wrapper.java.additional.7=-Dghidra.password= - -# Temporary Directory Setting - uncomment the following setting to override the Java default. -# This may be necessary on certain Windows platforms when installing as a service. -#wrapper.java.additional.8=-Djava.io.tmpdir=C:\\Windows\\Temp +#wrapper.java.additional.8=-Dghidra.keystore= +#wrapper.java.additional.9=-Dghidra.password= # Enable/Disable use of compression for DataBuffer serialization and Block Streams -wrapper.java.additional.9=-Ddb.buffers.DataBuffer.compressedOutput=true +wrapper.java.additional.10=-Ddb.buffers.DataBuffer.compressedOutput=true # Uncomment to enable remote debug support # The debug address will listen on all network interfaces, if desired the '*' may be # set to a specific interface IP address (e.g., 127.0.0.1) if you wish to restrict. # During debug it may be necessary to increase timeout values to prevent the wrapper # from restarting the server due to unresponsiveness. -#wrapper.java.additional.10=-Xdebug -#wrapper.java.additional.11=-Xnoagent -#wrapper.java.additional.12=-Djava.compiler=NONE -#wrapper.java.additional.13=-Xrunjdwp:transport=dt_socket\,server=y\,suspend=n\,address=*:18200 +#wrapper.java.additional.11=-Xdebug +#wrapper.java.additional.12=-Xnoagent +#wrapper.java.additional.13=-Djava.compiler=NONE +#wrapper.java.additional.14=-Xrunjdwp:transport=dt_socket\,server=y\,suspend=n\,address=*:18200 #wrapper.startup.timeout=0 #wrapper.ping.timeout=0 @@ -67,10 +73,10 @@ wrapper.java.additional.9=-Ddb.buffers.DataBuffer.compressedOutput=true # Uncomment to enable remote use of jvisualvm for profiling # See JMX documentation for more information: http://docs.oracle.com/javase/8/docs/technotes/guides/management/agent.html -#wrapper.java.additional.14=-Dcom.sun.management.jmxremote.port=9010 -#wrapper.java.additional.15=-Dcom.sun.management.jmxremote.local.only=false -#wrapper.java.additional.16=-Dcom.sun.management.jmxremote.authenticate=false -#wrapper.java.additional.17=-Dcom.sun.management.jmxremote.ssl=false +#wrapper.java.additional.15=-Dcom.sun.management.jmxremote.port=9010 +#wrapper.java.additional.16=-Dcom.sun.management.jmxremote.local.only=false +#wrapper.java.additional.17=-Dcom.sun.management.jmxremote.authenticate=false +#wrapper.java.additional.18=-Dcom.sun.management.jmxremote.ssl=false # YAJSW will by default assume a POSIX spawn for Linux and Mac OS X systems, unfortunately it has # not yet been implemented for Mac OS X. The default process support within YAJSW for Mac OS X is diff --git a/Ghidra/RuntimeScripts/Linux/server/ghidraSvr b/Ghidra/RuntimeScripts/Linux/server/ghidraSvr index c34244ef6a..d5e729a2f5 100755 --- a/Ghidra/RuntimeScripts/Linux/server/ghidraSvr +++ b/Ghidra/RuntimeScripts/Linux/server/ghidraSvr @@ -56,6 +56,7 @@ APP_LONG_NAME="Ghidra Server" MODULE_DIR="Ghidra/Features/GhidraServer" WRAPPER_NAME_PREFIX=yajsw SERVICE_NAME=org.rzo.yajsw.$APP_NAME +WRAPPER_TMPDIR="${TMPDIR:-/tmp}" # Resolve symbolic link if present and get the directory this script lives in. # NOTE: "readlink -f" is best but works on Linux only, "readlink" will only work if your PWD @@ -137,6 +138,10 @@ fi JAVA_CMD="${JAVA_HOME}/bin/java" +VMARGS=() +VMARGS+=("-Djna_tmpdir=${WRAPPER_TMPDIR}") +VMARGS+=("-Djava.io.tmpdir=${WRAPPER_TMPDIR}") + enableForkHack() { # use of fork_hack only needed for Mac OS X @@ -180,7 +185,7 @@ EOF checkInstall() { # capture status text - RESULT=$(java="${JAVA_CMD}" ghidra_home="${GHIDRA_HOME}" classpath_frag="${CLASSPATH_FRAG}" "${JAVA_CMD}" -jar "${WRAPPER_HOME}/wrapper.jar" -q "${WRAPPER_CONF}" | grep "Installed :" | sed -E "s/Installed : //") + RESULT=$(java="${JAVA_CMD}" ghidra_home="${GHIDRA_HOME}" classpath_frag="${CLASSPATH_FRAG}" wrapper_tmpdir="${WRAPPER_TMPDIR}" "${JAVA_CMD}" "${VMARGS[@]}" -jar "${WRAPPER_HOME}/wrapper.jar" -q "${WRAPPER_CONF}" | grep "Installed :" | sed -E "s/Installed : //") if [ "${RESULT}" = "true" ]; then return 0 fi @@ -190,31 +195,31 @@ checkInstall() { console() { echo "Running ${APP_LONG_NAME}..." - java="${JAVA_CMD}" ghidra_home="${GHIDRA_HOME}" classpath_frag="${CLASSPATH_FRAG}" "${JAVA_CMD}" -jar "${WRAPPER_HOME}/wrapper.jar" -c "${WRAPPER_CONF}" + java="${JAVA_CMD}" ghidra_home="${GHIDRA_HOME}" classpath_frag="${CLASSPATH_FRAG}" wrapper_tmpdir="${WRAPPER_TMPDIR}" "${JAVA_CMD}" "${VMARGS[@]}" -jar "${WRAPPER_HOME}/wrapper.jar" -c "${WRAPPER_CONF}" } start() { echo "Starting ${APP_LONG_NAME}..." - java="${JAVA_CMD}" ghidra_home="${GHIDRA_HOME}" classpath_frag="${CLASSPATH_FRAG}" "${JAVA_CMD}" -jar "${WRAPPER_HOME}/wrapper.jar" -t "${WRAPPER_CONF}" + java="${JAVA_CMD}" ghidra_home="${GHIDRA_HOME}" classpath_frag="${CLASSPATH_FRAG}" wrapper_tmpdir="${WRAPPER_TMPDIR}" "${JAVA_CMD}" "${VMARGS[@]}" -jar "${WRAPPER_HOME}/wrapper.jar" -t "${WRAPPER_CONF}" } stopit() { echo "Stopping ${APP_LONG_NAME}..." - java="${JAVA_CMD}" ghidra_home="${GHIDRA_HOME}" classpath_frag="${CLASSPATH_FRAG}" "${JAVA_CMD}" -jar "${WRAPPER_HOME}/wrapper.jar" -p "${WRAPPER_CONF}" + java="${JAVA_CMD}" ghidra_home="${GHIDRA_HOME}" classpath_frag="${CLASSPATH_FRAG}" wrapper_tmpdir="${WRAPPER_TMPDIR}" "${JAVA_CMD}" "${VMARGS[@]}" -jar "${WRAPPER_HOME}/wrapper.jar" -p "${WRAPPER_CONF}" } install() { echo "Installing ${APP_LONG_NAME}..." - java="${JAVA_CMD}" ghidra_home="${GHIDRA_HOME}" classpath_frag="${CLASSPATH_FRAG}" "${JAVA_CMD}" -jar "${WRAPPER_HOME}/wrapper.jar" -i "${WRAPPER_CONF}" + java="${JAVA_CMD}" ghidra_home="${GHIDRA_HOME}" classpath_frag="${CLASSPATH_FRAG}" wrapper_tmpdir="${WRAPPER_TMPDIR}" "${JAVA_CMD}" "${VMARGS[@]}" -jar "${WRAPPER_HOME}/wrapper.jar" -i "${WRAPPER_CONF}" } uninstall() { echo "Uninstalling ${APP_LONG_NAME}..." - java="${JAVA_CMD}" ghidra_home="${GHIDRA_HOME}" classpath_frag="${CLASSPATH_FRAG}" "${JAVA_CMD}" -jar "${WRAPPER_HOME}/wrapper.jar" -r "${WRAPPER_CONF}" + java="${JAVA_CMD}" ghidra_home="${GHIDRA_HOME}" classpath_frag="${CLASSPATH_FRAG}" wrapper_tmpdir="${WRAPPER_TMPDIR}" "${JAVA_CMD}" "${VMARGS[@]}" -jar "${WRAPPER_HOME}/wrapper.jar" -r "${WRAPPER_CONF}" } status() { - java="${JAVA_CMD}" ghidra_home="${GHIDRA_HOME}" classpath_frag="${CLASSPATH_FRAG}" "${JAVA_CMD}" -jar "${WRAPPER_HOME}/wrapper.jar" -q "${WRAPPER_CONF}" + java="${JAVA_CMD}" ghidra_home="${GHIDRA_HOME}" classpath_frag="${CLASSPATH_FRAG}" wrapper_tmpdir="${WRAPPER_TMPDIR}" "${JAVA_CMD}" "${VMARGS[@]}" -jar "${WRAPPER_HOME}/wrapper.jar" -q "${WRAPPER_CONF}" } case "$1" in diff --git a/Ghidra/RuntimeScripts/Windows/server/ghidraSvr.bat b/Ghidra/RuntimeScripts/Windows/server/ghidraSvr.bat index e4205db329..0b6795f9e8 100644 --- a/Ghidra/RuntimeScripts/Windows/server/ghidraSvr.bat +++ b/Ghidra/RuntimeScripts/Windows/server/ghidraSvr.bat @@ -64,12 +64,11 @@ if "%IS_ADMIN%"=="NO" ( if "%OPTION%"=="restart" goto adminFail ) -set APP_NAME=ghidraSvr -set APP_LONG_NAME=Ghidra Server - -set MODULE_DIR=Ghidra\Features\GhidraServer - -set WRAPPER_NAME_PREFIX=yajsw +set "APP_NAME=ghidraSvr" +set "APP_LONG_NAME=Ghidra Server" +set "MODULE_DIR=Ghidra\Features\GhidraServer" +set "WRAPPER_NAME_PREFIX=yajsw" +set "wrapper_tmpdir=%TEMP%" if exist "%SERVER_DIR%\..\Ghidra\" goto normal @@ -137,31 +136,34 @@ if "%JAVA_HOME%" == "" ( rem reestablish JAVA path based upon final JAVA_HOME set "java=%JAVA_HOME%\bin\java.exe" +set VMARGS=-Djava.io.tmpdir="%wrapper_tmpdir%" +set VMARGS=%VMARGS% -Djna_tmpdir="%wrapper_tmpdir%" + :: set DEBUG=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:18888 if "%OPTION%"=="console" ( - start "%APP_LONG_NAME%" "%java%" %DEBUG% -jar "%WRAPPER_HOME%/wrapper.jar" -c "%WRAPPER_CONF%" + start "%APP_LONG_NAME%" "%java%" %VMARGS% %DEBUG% -jar "%WRAPPER_HOME%/wrapper.jar" -c "%WRAPPER_CONF%" echo Use Ctrl-C in Ghidra Console to terminate... ) else if "%OPTION%"=="status" ( - "%java%" -jar "%WRAPPER_HOME%/wrapper.jar" -q "%WRAPPER_CONF%" + "%java%" %VMARGS% -jar "%WRAPPER_HOME%/wrapper.jar" -q "%WRAPPER_CONF%" ) else if "%OPTION%"=="start" ( - "%java%" %DEBUG% -jar "%WRAPPER_HOME%/wrapper.jar" -t "%WRAPPER_CONF%" + "%java%" %VMARGS% %DEBUG% -jar "%WRAPPER_HOME%/wrapper.jar" -t "%WRAPPER_CONF%" ) else if "%OPTION%"=="stop" ( - "%java%" -jar "%WRAPPER_HOME%/wrapper.jar" -p "%WRAPPER_CONF%" + "%java%" %VMARGS% -jar "%WRAPPER_HOME%/wrapper.jar" -p "%WRAPPER_CONF%" ) else if "%OPTION%"=="restart" ( - "%java%" -jar "%WRAPPER_HOME%/wrapper.jar" -p "%WRAPPER_CONF%" - "%java%" -jar "%WRAPPER_HOME%/wrapper.jar" -t "%WRAPPER_CONF%" + "%java%" %VMARGS% -jar "%WRAPPER_HOME%/wrapper.jar" -p "%WRAPPER_CONF%" + "%java%" %VMARGS% -jar "%WRAPPER_HOME%/wrapper.jar" -t "%WRAPPER_CONF%" ) else if "%OPTION%"=="install" ( - "%java%" -jar "%WRAPPER_HOME%/wrapper.jar" -i "%WRAPPER_CONF%" - "%java%" -jar "%WRAPPER_HOME%/wrapper.jar" -t "%WRAPPER_CONF%" + "%java%" %VMARGS% -jar "%WRAPPER_HOME%/wrapper.jar" -i "%WRAPPER_CONF%" + "%java%" %VMARGS% -jar "%WRAPPER_HOME%/wrapper.jar" -t "%WRAPPER_CONF%" ) else if "%OPTION%"=="uninstall" ( - "%java%" -jar "%WRAPPER_HOME%/wrapper.jar" -r "%WRAPPER_CONF%" + "%java%" %VMARGS% -jar "%WRAPPER_HOME%/wrapper.jar" -r "%WRAPPER_CONF%" ) else ( goto usage