--- a/Ghidra/Features/GhidraServer/src/main/java/ghidra/server/remote/GhidraServer.java +++ b/Ghidra/Features/GhidraServer/src/main/java/ghidra/server/remote/GhidraServer.java @@ -751,3 +751,4 @@ - File serverLogFile = new File(serverRoot, "server.log"); + File serverLogFile = new File( + System.getProperty("ghidra.server.logdir", serverRoot.getPath()), "server.log"); Application.initializeLogging(serverLogFile, serverLogFile); --- a/Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb2/pdbreader/PdbLog.java +++ b/Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb2/pdbreader/PdbLog.java @@ -24,2 +24,3 @@ import ghidra.util.Msg; +import utility.application.ApplicationUtilities; @@ -201,3 +202,4 @@ */ - File logFile = new File(Application.getUserSettingsDirectory(), "pdb.analyzer.log"); + File logFile = new File(ApplicationUtilities.getDefaultUserStateDir( + Application.getApplicationLayout().getApplicationProperties()), "pdb.analyzer.log"); if (logFile.exists()) { --- a/Ghidra/Framework/Generic/src/main/java/ghidra/framework/Application.java +++ b/Ghidra/Framework/Generic/src/main/java/ghidra/framework/Application.java @@ -151,5 +151,5 @@ * @param logFile application log file, if null the default application.log will be stored - * within the user's application settings directory + * within the user's application state directory * @param scriptLogFile scripting log file, if null the default script.log will be stored - * within the user's application settings directory + * within the user's application state directory * @throws AssertException if Application has not yet been initialized, or logging @@ -164,7 +164,16 @@ - if (logFile == null) { - logFile = new File(app.layout.getUserSettingsDir(), "application.log"); - } - if (scriptLogFile == null) { - scriptLogFile = new File(app.layout.getUserSettingsDir(), "script.log"); + if (logFile == null || scriptLogFile == null) { + try { + File logDir = ApplicationUtilities.getDefaultUserStateDir( + app.layout.getApplicationProperties()); + if (logFile == null) { + logFile = new File(logDir, "application.log"); + } + if (scriptLogFile == null) { + scriptLogFile = new File(logDir, "script.log"); + } + } + catch (IOException e) { + throw new UncheckedIOException("Failed to create log directory", e); + } } --- a/Ghidra/Framework/Utility/src/main/java/utility/application/ApplicationUtilities.java +++ b/Ghidra/Framework/Utility/src/main/java/utility/application/ApplicationUtilities.java @@ -218,3 +218,3 @@ case WINDOWS -> new File(getEnvFile("LOCALAPPDATA", true), appName); - case LINUX -> new File("/var/tmp/" + userDirName); + case LINUX -> new File(getJavaUserHomeDir(), ".cache/" + appName); case FREE_BSD -> new File("/var/tmp/" + userDirName); @@ -230,2 +230,13 @@ } + } + + public static File getDefaultUserStateDir(ApplicationProperties applicationProperties) + throws IOException { + File root = getEnvFile(XdgUtils.XDG_STATE_HOME, false); + if (root == null) { + root = new File(getJavaUserHomeDir(), ".local/state"); + } + ApplicationIdentifier id = new ApplicationIdentifier(applicationProperties); + return createDir(new File(root, + getUserSpecificDirName(root, id.getApplicationName()) + "/" + id)); } --- a/Ghidra/RuntimeScripts/server/server.conf +++ b/Ghidra/RuntimeScripts/server/server.conf @@ -13,4 +13,5 @@ -# Initial Working Directory (i.e., absolute installation directory path) -wrapper.working.dir=${ghidra_home} +# Working directory. +wrapper.working.dir=@GENTOO_EPREFIX@/var/lib/ghidra +wrapper.cache=@GENTOO_EPREFIX@/var/cache/ghidra @@ -84,2 +85,4 @@ #wrapper.java.additional.10=-Dghidra.password= + +wrapper.java.additional.22=-Dghidra.server.logdir=@GENTOO_EPREFIX@/var/log/ghidra @@ -148,3 +151,3 @@ -ghidra.repositories.dir=./repositories +ghidra.repositories.dir=@GENTOO_EPREFIX@/var/lib/ghidra/repositories @@ -236,3 +239,3 @@ # Log file to use for wrapper output logging. -wrapper.logfile=wrapper.log +wrapper.logfile=@GENTOO_EPREFIX@/var/log/ghidra/wrapper.log --- a/Ghidra/RuntimeScripts/support/launch.properties +++ b/Ghidra/RuntimeScripts/support/launch.properties @@ -153,3 +153,3 @@ # - Windows: %LOCALAPPDATA%\ -# - Linux: /var/tmp/- +# - Linux: $HOME/.cache/ # - macOS: /var/tmp/- --- a/Ghidra/RuntimeScripts/server/ghidraSvr +++ b/Ghidra/RuntimeScripts/server/ghidraSvr @@ -48,3 +48,3 @@ echo - echo -e "ERROR: $1" >> "${GHIDRA_HOME}/wrapper.log" + echo -e "ERROR: $1" >> "@GENTOO_EPREFIX@/var/log/ghidra/wrapper.log" exit 1