Introduce ES_JAVA_HOME (#68954)

This commit introduces a dedicated envirnoment variable ES_JAVA_HOME to
determine the JDK used to start (if not using the bundled JDK). This
environment variable will replace JAVA_HOME. The reason that we are
making this change is because JAVA_HOME is a common environment variable
and sometimes users have it set in their environment from other JDK
applications that they have installed on their system. In this case,
they would accidentally end up not using the bundled JDK despite their
intentions. By using a dedicated environment variable specific to
Elasticsearch, we avoid this potential for conflict. With this commit,
we introduce the new environment variable, and deprecate the use of
JAVA_HOME. We will remove support for JAVA_HOME in a future commit.
This commit is contained in:
Jason Tedor 2021-02-17 12:41:23 -05:00 committed by GitHub
parent 42bca5bfc2
commit 0cd4863585
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
19 changed files with 129 additions and 60 deletions

View file

@ -48,6 +48,7 @@ else
fi fi
sudo bash -c 'cat > /etc/sudoers.d/elasticsearch_vars' << SUDOERS_VARS sudo bash -c 'cat > /etc/sudoers.d/elasticsearch_vars' << SUDOERS_VARS
Defaults env_keep += "ES_JAVA_HOME"
Defaults env_keep += "JAVA_HOME" Defaults env_keep += "JAVA_HOME"
Defaults env_keep += "SYSTEM_JAVA_HOME" Defaults env_keep += "SYSTEM_JAVA_HOME"
SUDOERS_VARS SUDOERS_VARS
@ -63,6 +64,7 @@ sudo mkdir -p /elasticsearch/qa/ && sudo chown jenkins /elasticsearch/qa/ && ln
sudo -E env \ sudo -E env \
PATH=$BUILD_JAVA_HOME/bin:`sudo bash -c 'echo -n $PATH'` \ PATH=$BUILD_JAVA_HOME/bin:`sudo bash -c 'echo -n $PATH'` \
RUNTIME_JAVA_HOME=`readlink -f -n $RUNTIME_JAVA_HOME` \ RUNTIME_JAVA_HOME=`readlink -f -n $RUNTIME_JAVA_HOME` \
--unset=ES_JAVA_HOME \
--unset=JAVA_HOME \ --unset=JAVA_HOME \
SYSTEM_JAVA_HOME=`readlink -f -n $RUNTIME_JAVA_HOME` \ SYSTEM_JAVA_HOME=`readlink -f -n $RUNTIME_JAVA_HOME` \
./gradlew -g $HOME/.gradle --scan --parallel --continue $@ ./gradlew -g $HOME/.gradle --scan --parallel --continue $@

1
Vagrantfile vendored
View file

@ -461,6 +461,7 @@ def sh_install_deps(config,
ensure expect ensure expect
cat \<\<SUDOERS_VARS > /etc/sudoers.d/elasticsearch_vars cat \<\<SUDOERS_VARS > /etc/sudoers.d/elasticsearch_vars
Defaults env_keep += "ES_JAVA_HOME"
Defaults env_keep += "JAVA_HOME" Defaults env_keep += "JAVA_HOME"
Defaults env_keep += "SYSTEM_JAVA_HOME" Defaults env_keep += "SYSTEM_JAVA_HOME"
SUDOERS_VARS SUDOERS_VARS

View file

@ -728,7 +728,7 @@ public class ElasticsearchNode implements TestClusterConfiguration {
Map<String, String> defaultEnv = new HashMap<>(); Map<String, String> defaultEnv = new HashMap<>();
// If we are testing the current version of Elasticsearch, use the configured runtime Java, otherwise use the bundled JDK // If we are testing the current version of Elasticsearch, use the configured runtime Java, otherwise use the bundled JDK
if (getTestDistribution() == TestDistribution.INTEG_TEST || getVersion().equals(VersionProperties.getElasticsearchVersion())) { if (getTestDistribution() == TestDistribution.INTEG_TEST || getVersion().equals(VersionProperties.getElasticsearchVersion())) {
defaultEnv.put("JAVA_HOME", BuildParams.getRuntimeJavaHome().getAbsolutePath()); defaultEnv.put("ES_JAVA_HOME", BuildParams.getRuntimeJavaHome().getAbsolutePath());
} }
defaultEnv.put("ES_PATH_CONF", configFile.getParent().toString()); defaultEnv.put("ES_PATH_CONF", configFile.getParent().toString());
String systemPropertiesString = ""; String systemPropertiesString = "";

View file

@ -36,17 +36,23 @@ ES_HOME=`dirname "$ES_HOME"`
ES_CLASSPATH="$ES_HOME/lib/*" ES_CLASSPATH="$ES_HOME/lib/*"
# now set the path to java # now set the path to java
if [ ! -z "$JAVA_HOME" ]; then if [ ! -z "$ES_JAVA_HOME" ]; then
JAVA="$ES_JAVA_HOME/bin/java"
JAVA_TYPE="ES_JAVA_HOME"
elif [ ! -z "$JAVA_HOME" ]; then
# fallback to JAVA_HOME
echo "warning: usage of JAVA_HOME is deprecated, use ES_JAVA_HOME" >&2
JAVA="$JAVA_HOME/bin/java" JAVA="$JAVA_HOME/bin/java"
JAVA_TYPE="JAVA_HOME" JAVA_TYPE="JAVA_HOME"
else else
# use the bundled JDK (default)
if [ "$(uname -s)" = "Darwin" ]; then if [ "$(uname -s)" = "Darwin" ]; then
# macOS has a different structure # macOS has a different structure
JAVA="$ES_HOME/jdk.app/Contents/Home/bin/java" JAVA="$ES_HOME/jdk.app/Contents/Home/bin/java"
else else
JAVA="$ES_HOME/jdk/bin/java" JAVA="$ES_HOME/jdk/bin/java"
fi fi
JAVA_TYPE="bundled jdk" JAVA_TYPE="bundled JDK"
fi fi
if [ ! -x "$JAVA" ]; then if [ ! -x "$JAVA" ]; then

View file

@ -40,16 +40,23 @@ if "%1" == "nojava" (
exit /b exit /b
) )
rem compariing to empty string makes this equivalent to bash -v check on env var rem comparing to empty string makes this equivalent to bash -v check on env var
rem and allows to effectively force use of the bundled jdk when launching ES rem and allows to effectively force use of the bundled jdk when launching ES
rem by setting JAVA_HOME= rem by setting JAVA_HOME=
if "%JAVA_HOME%" == "" ( if defined ES_JAVA_HOME (
set JAVA="%ES_HOME%\jdk\bin\java.exe" set JAVA="%ES_JAVA_HOME%\bin\java.exe"
set "JAVA_HOME=%ES_HOME%\jdk" set JAVA_TYPE=ES_JAVA_HOME
set JAVA_TYPE=bundled jdk ) else if defined JAVA_HOME (
) else ( rem fallback to JAVA_HOME
echo "warning: usage of JAVA_HOME is deprecated, use ES_JAVA_HOME" >&2
set JAVA="%JAVA_HOME%\bin\java.exe" set JAVA="%JAVA_HOME%\bin\java.exe"
set "ES_JAVA_HOME=%JAVA_HOME%"
set JAVA_TYPE=JAVA_HOME set JAVA_TYPE=JAVA_HOME
) else (
rem use the bundled JDK (default)
set JAVA="%ES_HOME%\jdk\bin\java.exe"
set "ES_JAVA_HOME=%ES_HOME%\jdk"
set JAVA_TYPE=bundled JDK
) )
if not exist !JAVA! ( if not exist !JAVA! (

View file

@ -88,20 +88,20 @@ goto:eof
:doInstall :doInstall
echo Installing service : "%SERVICE_ID%" echo Installing service : "%SERVICE_ID%"
echo Using JAVA_HOME (%ARCH%): "%JAVA_HOME%" echo Using ES_JAVA_HOME (%ARCH%): "%ES_JAVA_HOME%"
rem Check JVM server dll first rem Check JVM server dll first
if exist "%JAVA_HOME%\jre\bin\server\jvm.dll" ( if exist "%ES_JAVA_HOME%\jre\bin\server\jvm.dll" (
set JVM_DLL=\jre\bin\server\jvm.dll set JVM_DLL=\jre\bin\server\jvm.dll
goto foundJVM goto foundJVM
) )
rem Check 'server' JRE (JRE installed on Windows Server) rem Check 'server' JRE (JRE installed on Windows Server)
if exist "%JAVA_HOME%\bin\server\jvm.dll" ( if exist "%ES_JAVA_HOME%\bin\server\jvm.dll" (
set JVM_DLL=\bin\server\jvm.dll set JVM_DLL=\bin\server\jvm.dll
goto foundJVM goto foundJVM
) else ( ) else (
echo JAVA_HOME ("%JAVA_HOME%"^) points to an invalid Java installation (no jvm.dll found in "%JAVA_HOME%\jre\bin\server" or "%JAVA_HOME%\bin\server"^). Exiting... echo ES_JAVA_HOME ("%ES_JAVA_HOME%"^) points to an invalid Java installation (no jvm.dll found in "%ES_JAVA_HOME%\jre\bin\server" or "%ES_JAVA_HOME%\bin\server"^). Exiting...
goto:eof goto:eof
) )
@ -207,7 +207,7 @@ if not "%SERVICE_USERNAME%" == "" (
set SERVICE_PARAMS=%SERVICE_PARAMS% --ServiceUser "%SERVICE_USERNAME%" --ServicePassword "%SERVICE_PASSWORD%" set SERVICE_PARAMS=%SERVICE_PARAMS% --ServiceUser "%SERVICE_USERNAME%" --ServicePassword "%SERVICE_PASSWORD%"
) )
) )
"%EXECUTABLE%" //IS//%SERVICE_ID% --Startup %ES_START_TYPE% --StopTimeout %ES_STOP_TIMEOUT% --StartClass org.elasticsearch.bootstrap.Elasticsearch --StartMethod main ++StartParams --quiet --StopClass org.elasticsearch.bootstrap.Elasticsearch --StopMethod close --Classpath "%ES_CLASSPATH%" --JvmMs %JVM_MS% --JvmMx %JVM_MX% --JvmSs %JVM_SS% --JvmOptions %OTHER_JAVA_OPTS% ++JvmOptions %ES_PARAMS% %LOG_OPTS% --PidFile "%SERVICE_ID%.pid" --DisplayName "%SERVICE_DISPLAY_NAME%" --Description "%SERVICE_DESCRIPTION%" --Jvm "%JAVA_HOME%%JVM_DLL%" --StartMode jvm --StopMode jvm --StartPath "%ES_HOME%" %SERVICE_PARAMS% ++Environment HOSTNAME="%%COMPUTERNAME%%" "%EXECUTABLE%" //IS//%SERVICE_ID% --Startup %ES_START_TYPE% --StopTimeout %ES_STOP_TIMEOUT% --StartClass org.elasticsearch.bootstrap.Elasticsearch --StartMethod main ++StartParams --quiet --StopClass org.elasticsearch.bootstrap.Elasticsearch --StopMethod close --Classpath "%ES_CLASSPATH%" --JvmMs %JVM_MS% --JvmMx %JVM_MX% --JvmSs %JVM_SS% --JvmOptions %OTHER_JAVA_OPTS% ++JvmOptions %ES_PARAMS% %LOG_OPTS% --PidFile "%SERVICE_ID%.pid" --DisplayName "%SERVICE_DISPLAY_NAME%" --Description "%SERVICE_DESCRIPTION%" --Jvm "%ES_JAVA_HOME%%JVM_DLL%" --StartMode jvm --StopMode jvm --StartPath "%ES_HOME%" %SERVICE_PARAMS% ++Environment HOSTNAME="%%COMPUTERNAME%%"
if not errorlevel 1 goto installed if not errorlevel 1 goto installed
echo Failed installing '%SERVICE_ID%' service echo Failed installing '%SERVICE_ID%' service
@ -219,7 +219,7 @@ echo The service '%SERVICE_ID%' has been installed.
goto:eof goto:eof
:err :err
echo JAVA_HOME environment variable must be set! echo ES_JAVA_HOME environment variable must be set!
pause pause
goto:eof goto:eof

View file

@ -28,7 +28,7 @@ https://openjdk.java.net[OpenJDK] from the JDK maintainers (GPLv2+CE)
within each distribution. The bundled JVM is the recommended JVM and within each distribution. The bundled JVM is the recommended JVM and
is located within the `jdk` directory of the Elasticsearch home directory. is located within the `jdk` directory of the Elasticsearch home directory.
To use your own version of Java, set the `JAVA_HOME` environment variable. To use your own version of Java, set the `ES_JAVA_HOME` environment variable.
If you must use a version of Java that is different from the bundled JVM, If you must use a version of Java that is different from the bundled JVM,
we recommend using a link:/support/matrix[supported] we recommend using a link:/support/matrix[supported]
https://www.oracle.com/technetwork/java/eol-135779.html[LTS version of Java]. https://www.oracle.com/technetwork/java/eol-135779.html[LTS version of Java].

View file

@ -198,7 +198,7 @@ locations for a Debian-based system:
| jdk | jdk
| The bundled Java Development Kit used to run Elasticsearch. Can | The bundled Java Development Kit used to run Elasticsearch. Can
be overridden by setting the `JAVA_HOME` environment variable be overridden by setting the `ES_JAVA_HOME` environment variable
in `/etc/default/elasticsearch`. in `/etc/default/elasticsearch`.
| /usr/share/elasticsearch/jdk | /usr/share/elasticsearch/jdk
d| d|

View file

@ -191,7 +191,7 @@ locations for an RPM-based system:
| jdk | jdk
| The bundled Java Development Kit used to run Elasticsearch. Can | The bundled Java Development Kit used to run Elasticsearch. Can
be overridden by setting the `JAVA_HOME` environment variable be overridden by setting the `ES_JAVA_HOME` environment variable
in `/etc/sysconfig/elasticsearch`. in `/etc/sysconfig/elasticsearch`.
| /usr/share/elasticsearch/jdk | /usr/share/elasticsearch/jdk
d| d|

View file

@ -1,5 +1,5 @@
[horizontal] [horizontal]
`JAVA_HOME`:: `ES_JAVA_HOME`::
Set a custom Java path to be used. Set a custom Java path to be used.

View file

@ -120,24 +120,24 @@ The commands available are:
`manager`:: Start a GUI for managing the installed service `manager`:: Start a GUI for managing the installed service
The name of the service and the value of `JAVA_HOME` will be made available during install: The name of the service and the value of `ES_JAVA_HOME` will be made available during install:
["source","sh",subs="attributes"] ["source","sh",subs="attributes"]
-------------------------------------------------- --------------------------------------------------
c:\elasticsearch-{version}{backslash}bin>elasticsearch-service.bat install c:\elasticsearch-{version}{backslash}bin>elasticsearch-service.bat install
Installing service : "elasticsearch-service-x64" Installing service : "elasticsearch-service-x64"
Using JAVA_HOME (64-bit): "c:\jvm\jdk1.8" Using ES_JAVA_HOME (64-bit): "c:\jvm\jdk1.8"
The service 'elasticsearch-service-x64' has been installed. The service 'elasticsearch-service-x64' has been installed.
-------------------------------------------------- --------------------------------------------------
NOTE: While a JRE can be used for the Elasticsearch service, due to its use of a client VM (as opposed to a server JVM which offers better performance for long-running applications) its usage is discouraged and a warning will be issued. NOTE: While a JRE can be used for the Elasticsearch service, due to its use of a client VM (as opposed to a server JVM which offers better performance for long-running applications) its usage is discouraged and a warning will be issued.
NOTE: The system environment variable `JAVA_HOME` should be set to the path to NOTE: The system environment variable `ES_JAVA_HOME` should be set to the path
the JDK installation that you want the service to use. If you upgrade the JDK, to the JDK installation that you want the service to use. If you upgrade the
you are not required to the reinstall the service but you must set the value of JDK, you are not required to the reinstall the service but you must set the
the system environment variable `JAVA_HOME` to the path to the new JDK value of the system environment variable `ES_JAVA_HOME` to the path to the new
installation. However, upgrading across JVM types (e.g. JRE versus SE) is not JDK installation. However, upgrading across JVM types (e.g. JRE versus SE) is
supported, and does require the service to be reinstalled. not supported, and does require the service to be reinstalled.
[[windows-service-settings]] [[windows-service-settings]]
[discrete] [discrete]
@ -167,7 +167,7 @@ The Elasticsearch service can be configured prior to installation by setting the
The description of the service. Defaults to `Elasticsearch <version> Windows Service - https://elastic.co`. The description of the service. Defaults to `Elasticsearch <version> Windows Service - https://elastic.co`.
`JAVA_HOME`:: `ES_JAVA_HOME`::
The installation directory of the desired JVM to run the service under. The installation directory of the desired JVM to run the service under.

View file

@ -137,6 +137,7 @@ if (Os.isFamily(Os.FAMILY_WINDOWS)) {
dependsOn unzip dependsOn unzip
executable = "${BuildParams.runtimeJavaHome}/bin/java" executable = "${BuildParams.runtimeJavaHome}/bin/java"
env 'CLASSPATH', "${-> project.configurations.oldesFixture.asPath}" env 'CLASSPATH', "${-> project.configurations.oldesFixture.asPath}"
// old versions of Elasticsearch need JAVA_HOME
env 'JAVA_HOME', jdks.legacy.javaHomePath env 'JAVA_HOME', jdks.legacy.javaHomePath
args 'oldes.OldElasticsearch', args 'oldes.OldElasticsearch',
baseDir, baseDir,

View file

@ -62,7 +62,7 @@ public class ArchiveTests extends PackagingTestCase {
public void test30MissingBundledJdk() throws Exception { public void test30MissingBundledJdk() throws Exception {
final Installation.Executables bin = installation.executables(); final Installation.Executables bin = installation.executables();
sh.getEnv().remove("JAVA_HOME"); sh.getEnv().remove("ES_JAVA_HOME");
final Path relocatedJdk = installation.bundledJdk.getParent().resolve("jdk.relocated"); final Path relocatedJdk = installation.bundledJdk.getParent().resolve("jdk.relocated");
@ -73,7 +73,7 @@ public class ArchiveTests extends PackagingTestCase {
// ask for elasticsearch version to quickly exit if java is actually found (ie test failure) // ask for elasticsearch version to quickly exit if java is actually found (ie test failure)
final Result runResult = sh.runIgnoreExitCode(bin.elasticsearch.toString() + " -v"); final Result runResult = sh.runIgnoreExitCode(bin.elasticsearch.toString() + " -v");
assertThat(runResult.exitCode, is(1)); assertThat(runResult.exitCode, is(1));
assertThat(runResult.stderr, containsString("could not find java in bundled jdk")); assertThat(runResult.stderr, containsString("could not find java in bundled JDK"));
} finally { } finally {
if (distribution().hasJdk) { if (distribution().hasJdk) {
mv(relocatedJdk, installation.bundledJdk); mv(relocatedJdk, installation.bundledJdk);
@ -83,13 +83,12 @@ public class ArchiveTests extends PackagingTestCase {
public void test31BadJavaHome() throws Exception { public void test31BadJavaHome() throws Exception {
final Installation.Executables bin = installation.executables(); final Installation.Executables bin = installation.executables();
sh.getEnv().put("JAVA_HOME", "doesnotexist"); sh.getEnv().put("ES_JAVA_HOME", "doesnotexist");
// ask for elasticsearch version to quickly exit if java is actually found (ie test failure) // ask for elasticsearch version to quickly exit if java is actually found (ie test failure)
final Result runResult = sh.runIgnoreExitCode(bin.elasticsearch.toString() + " -V"); final Result runResult = sh.runIgnoreExitCode(bin.elasticsearch.toString() + " -V");
assertThat(runResult.exitCode, is(1)); assertThat(runResult.exitCode, is(1));
assertThat(runResult.stderr, containsString("could not find java in JAVA_HOME")); assertThat(runResult.stderr, containsString("could not find java in ES_JAVA_HOME"));
} }
public void test32SpecialCharactersInJdkPath() throws Exception { public void test32SpecialCharactersInJdkPath() throws Exception {
@ -97,7 +96,7 @@ public class ArchiveTests extends PackagingTestCase {
assumeTrue("Only run this test when we know where the JDK is.", distribution().hasJdk); assumeTrue("Only run this test when we know where the JDK is.", distribution().hasJdk);
final Path relocatedJdk = installation.bundledJdk.getParent().resolve("a (special) path"); final Path relocatedJdk = installation.bundledJdk.getParent().resolve("a (special) path");
sh.getEnv().put("JAVA_HOME", relocatedJdk.toString()); sh.getEnv().put("ES_JAVA_HOME", relocatedJdk.toString());
try { try {
mv(installation.bundledJdk, relocatedJdk); mv(installation.bundledJdk, relocatedJdk);
@ -130,24 +129,76 @@ public class ArchiveTests extends PackagingTestCase {
stopElasticsearch(); stopElasticsearch();
} }
public void test51JavaHomeOverride() throws Exception { public void test51EsJavaHomeOverride() throws Exception {
Platforms.onLinux(() -> { Platforms.onLinux(() -> {
String systemJavaHome1 = sh.run("echo $SYSTEM_JAVA_HOME").stdout.trim(); String systemJavaHome1 = sh.run("echo $SYSTEM_JAVA_HOME").stdout.trim();
sh.getEnv().put("JAVA_HOME", systemJavaHome1); sh.getEnv().put("ES_JAVA_HOME", systemJavaHome1);
}); });
Platforms.onWindows(() -> { Platforms.onWindows(() -> {
final String systemJavaHome1 = sh.run("$Env:SYSTEM_JAVA_HOME").stdout.trim(); final String systemJavaHome1 = sh.run("$Env:SYSTEM_JAVA_HOME").stdout.trim();
sh.getEnv().put("JAVA_HOME", systemJavaHome1); sh.getEnv().put("ES_JAVA_HOME", systemJavaHome1);
}); });
startElasticsearch(); startElasticsearch();
ServerUtils.runElasticsearchTests(); ServerUtils.runElasticsearchTests();
stopElasticsearch(); stopElasticsearch();
String systemJavaHome1 = sh.getEnv().get("ES_JAVA_HOME");
assertThat(FileUtils.slurpAllLogs(installation.logs, "elasticsearch.log", "*.log.gz"), containsString(systemJavaHome1));
}
public void test51JavaHomeOverride() throws Exception {
Platforms.onLinux(() -> {
String systemJavaHome1 = sh.run("echo $SYSTEM_JAVA_HOME").stdout.trim();
sh.getEnv().put("JAVA_HOME", systemJavaHome1);
// ensure that ES_JAVA_HOME is not set for the test
sh.getEnv().remove("ES_JAVA_HOME");
});
Platforms.onWindows(() -> {
final String systemJavaHome1 = sh.run("$Env:SYSTEM_JAVA_HOME").stdout.trim();
sh.getEnv().put("JAVA_HOME", systemJavaHome1);
// ensure that ES_JAVA_HOME is not set for the test
sh.getEnv().remove("ES_JAVA_HOME");
});
final Installation.Executables bin = installation.executables();
final Result runResult = sh.run(bin.elasticsearch.toString() + " -V");
assertThat(runResult.stderr, containsString("warning: usage of JAVA_HOME is deprecated, use ES_JAVA_HOME"));
startElasticsearch();
ServerUtils.runElasticsearchTests();
stopElasticsearch();
String systemJavaHome1 = sh.getEnv().get("JAVA_HOME"); String systemJavaHome1 = sh.getEnv().get("JAVA_HOME");
assertThat(FileUtils.slurpAllLogs(installation.logs, "elasticsearch.log", "*.log.gz"), containsString(systemJavaHome1)); assertThat(FileUtils.slurpAllLogs(installation.logs, "elasticsearch.log", "*.log.gz"), containsString(systemJavaHome1));
} }
public void test51EsJavaHomeOverrideOverridesJavaHome() throws Exception {
Platforms.onLinux(() -> {
String systemJavaHome1 = sh.run("echo $SYSTEM_JAVA_HOME").stdout.trim();
sh.getEnv().put("ES_JAVA_HOME", systemJavaHome1);
// deliberately set to a location that does not exist, if ES_JAVA_HOME takes precedence this is ignored
sh.getEnv().put("JAVA_HOME", "doesnotexist");
});
Platforms.onWindows(() -> {
final String systemJavaHome1 = sh.run("$Env:SYSTEM_JAVA_HOME").stdout.trim();
sh.getEnv().put("ES_JAVA_HOME", systemJavaHome1);
// deliberately set to a location that does not exist, if ES_JAVA_HOME takes precedence this is ignored
sh.getEnv().put("JAVA_HOME", "doesnotexist");
});
final Installation.Executables bin = installation.executables();
final Result runResult = sh.run(bin.elasticsearch.toString() + " -V");
assertThat(runResult.stderr, not(containsString("warning: usage of JAVA_HOME is deprecated, use ES_JAVA_HOME")));
startElasticsearch();
ServerUtils.runElasticsearchTests();
stopElasticsearch();
String systemJavaHome1 = sh.getEnv().get("ES_JAVA_HOME");
assertThat(FileUtils.slurpAllLogs(installation.logs, "elasticsearch.log", "*.log.gz"), containsString(systemJavaHome1));
}
public void test52BundledJdkRemoved() throws Exception { public void test52BundledJdkRemoved() throws Exception {
assumeThat(distribution().hasJdk, is(true)); assumeThat(distribution().hasJdk, is(true));
@ -156,18 +207,18 @@ public class ArchiveTests extends PackagingTestCase {
mv(installation.bundledJdk, relocatedJdk); mv(installation.bundledJdk, relocatedJdk);
Platforms.onLinux(() -> { Platforms.onLinux(() -> {
String systemJavaHome1 = sh.run("echo $SYSTEM_JAVA_HOME").stdout.trim(); String systemJavaHome1 = sh.run("echo $SYSTEM_JAVA_HOME").stdout.trim();
sh.getEnv().put("JAVA_HOME", systemJavaHome1); sh.getEnv().put("ES_JAVA_HOME", systemJavaHome1);
}); });
Platforms.onWindows(() -> { Platforms.onWindows(() -> {
final String systemJavaHome1 = sh.run("$Env:SYSTEM_JAVA_HOME").stdout.trim(); final String systemJavaHome1 = sh.run("$Env:SYSTEM_JAVA_HOME").stdout.trim();
sh.getEnv().put("JAVA_HOME", systemJavaHome1); sh.getEnv().put("ES_JAVA_HOME", systemJavaHome1);
}); });
startElasticsearch(); startElasticsearch();
ServerUtils.runElasticsearchTests(); ServerUtils.runElasticsearchTests();
stopElasticsearch(); stopElasticsearch();
String systemJavaHome1 = sh.getEnv().get("JAVA_HOME"); String systemJavaHome1 = sh.getEnv().get("ES_JAVA_HOME");
assertThat(FileUtils.slurpAllLogs(installation.logs, "elasticsearch.log", "*.log.gz"), containsString(systemJavaHome1)); assertThat(FileUtils.slurpAllLogs(installation.logs, "elasticsearch.log", "*.log.gz"), containsString(systemJavaHome1));
} finally { } finally {
mv(relocatedJdk, installation.bundledJdk); mv(relocatedJdk, installation.bundledJdk);
@ -181,7 +232,7 @@ public class ArchiveTests extends PackagingTestCase {
// once windows 2012 is no longer supported and powershell 5.0 is always available we can change this command // once windows 2012 is no longer supported and powershell 5.0 is always available we can change this command
sh.run("cmd /c mklink /D '" + javaPath + "' $Env:SYSTEM_JAVA_HOME"); sh.run("cmd /c mklink /D '" + javaPath + "' $Env:SYSTEM_JAVA_HOME");
sh.getEnv().put("JAVA_HOME", "C:\\Program Files (x86)\\java"); sh.getEnv().put("ES_JAVA_HOME", "C:\\Program Files (x86)\\java");
// verify ES can start, stop and run plugin list // verify ES can start, stop and run plugin list
startElasticsearch(); startElasticsearch();
@ -206,7 +257,7 @@ public class ArchiveTests extends PackagingTestCase {
try { try {
final String systemJavaHome = sh.run("echo $SYSTEM_JAVA_HOME").stdout.trim(); final String systemJavaHome = sh.run("echo $SYSTEM_JAVA_HOME").stdout.trim();
sh.run("ln -s \"" + systemJavaHome + "\" \"" + testJavaHome + "\""); sh.run("ln -s \"" + systemJavaHome + "\" \"" + testJavaHome + "\"");
sh.getEnv().put("JAVA_HOME", testJavaHome); sh.getEnv().put("ES_JAVA_HOME", testJavaHome);
// verify ES can start, stop and run plugin list // verify ES can start, stop and run plugin list
startElasticsearch(); startElasticsearch();
@ -227,7 +278,7 @@ public class ArchiveTests extends PackagingTestCase {
// cleanup from previous test // cleanup from previous test
rm(installation.config("elasticsearch.keystore")); rm(installation.config("elasticsearch.keystore"));
sh.getEnv().put("JAVA_HOME", ""); sh.getEnv().put("ES_JAVA_HOME", "");
startElasticsearch(); startElasticsearch();
ServerUtils.runElasticsearchTests(); ServerUtils.runElasticsearchTests();

View file

@ -83,7 +83,7 @@ public class PackageTests extends PackagingTestCase {
private void assertRunsWithJavaHome() throws Exception { private void assertRunsWithJavaHome() throws Exception {
byte[] originalEnvFile = Files.readAllBytes(installation.envFile); byte[] originalEnvFile = Files.readAllBytes(installation.envFile);
try { try {
Files.write(installation.envFile, List.of("JAVA_HOME=" + systemJavaHome), APPEND); Files.write(installation.envFile, List.of("ES_JAVA_HOME=" + systemJavaHome), APPEND);
startElasticsearch(); startElasticsearch();
runElasticsearchTests(); runElasticsearchTests();
stopElasticsearch(); stopElasticsearch();

View file

@ -161,8 +161,8 @@ public abstract class PackagingTestCase extends Assert {
sh.reset(); sh.reset();
if (distribution().hasJdk == false) { if (distribution().hasJdk == false) {
Platforms.onLinux(() -> sh.getEnv().put("JAVA_HOME", systemJavaHome)); Platforms.onLinux(() -> sh.getEnv().put("ES_JAVA_HOME", systemJavaHome));
Platforms.onWindows(() -> sh.getEnv().put("JAVA_HOME", systemJavaHome)); Platforms.onWindows(() -> sh.getEnv().put("ES_JAVA_HOME", systemJavaHome));
} }
if (installation != null && distribution.isDocker() == false) { if (installation != null && distribution.isDocker() == false) {
setHeap("1g"); setHeap("1g");

View file

@ -118,17 +118,17 @@ public class WindowsServiceTests extends PackagingTestCase {
mv(installation.bundledJdk, relocatedJdk); mv(installation.bundledJdk, relocatedJdk);
Result result = sh.runIgnoreExitCode(serviceScript + " install"); Result result = sh.runIgnoreExitCode(serviceScript + " install");
assertThat(result.exitCode, equalTo(1)); assertThat(result.exitCode, equalTo(1));
assertThat(result.stderr, containsString("could not find java in bundled jdk")); assertThat(result.stderr, containsString("could not find java in bundled JDK"));
} finally { } finally {
mv(relocatedJdk, installation.bundledJdk); mv(relocatedJdk, installation.bundledJdk);
} }
} }
public void test14InstallBadJavaHome() throws IOException { public void test14InstallBadJavaHome() throws IOException {
sh.getEnv().put("JAVA_HOME", "doesnotexist"); sh.getEnv().put("ES_JAVA_HOME", "doesnotexist");
Result result = sh.runIgnoreExitCode(serviceScript + " install"); Result result = sh.runIgnoreExitCode(serviceScript + " install");
assertThat(result.exitCode, equalTo(1)); assertThat(result.exitCode, equalTo(1));
assertThat(result.stderr, containsString("could not find java in JAVA_HOME")); assertThat(result.stderr, containsString("could not find java in ES_JAVA_HOME"));
} }
public void test15RemoveNotInstalled() { public void test15RemoveNotInstalled() {
@ -139,7 +139,7 @@ public class WindowsServiceTests extends PackagingTestCase {
public void test16InstallSpecialCharactersInJdkPath() throws IOException { public void test16InstallSpecialCharactersInJdkPath() throws IOException {
assumeTrue("Only run this test when we know where the JDK is.", distribution().hasJdk); assumeTrue("Only run this test when we know where the JDK is.", distribution().hasJdk);
final Path relocatedJdk = installation.bundledJdk.getParent().resolve("a (special) jdk"); final Path relocatedJdk = installation.bundledJdk.getParent().resolve("a (special) jdk");
sh.getEnv().put("JAVA_HOME", relocatedJdk.toString()); sh.getEnv().put("ES_JAVA_HOME", relocatedJdk.toString());
try { try {
mv(installation.bundledJdk, relocatedJdk); mv(installation.bundledJdk, relocatedJdk);
@ -227,9 +227,9 @@ public class WindowsServiceTests extends PackagingTestCase {
try { try {
mv(installation.bundledJdk, relocatedJdk); mv(installation.bundledJdk, relocatedJdk);
sh.getEnv().put("JAVA_HOME", relocatedJdk.toString()); sh.getEnv().put("ES_JAVA_HOME", relocatedJdk.toString());
assertCommand(serviceScript + " install"); assertCommand(serviceScript + " install");
sh.getEnv().remove("JAVA_HOME"); sh.getEnv().remove("ES_JAVA_HOME");
assertCommand(serviceScript + " start"); assertCommand(serviceScript + " start");
assertStartedAndStop(); assertStartedAndStop();
} finally { } finally {

View file

@ -77,7 +77,7 @@ public class Packages {
public static Installation installPackage(Shell sh, Distribution distribution) throws IOException { public static Installation installPackage(Shell sh, Distribution distribution) throws IOException {
String systemJavaHome = sh.run("echo $SYSTEM_JAVA_HOME").stdout.trim(); String systemJavaHome = sh.run("echo $SYSTEM_JAVA_HOME").stdout.trim();
if (distribution.hasJdk == false) { if (distribution.hasJdk == false) {
sh.getEnv().put("JAVA_HOME", systemJavaHome); sh.getEnv().put("ES_JAVA_HOME", systemJavaHome);
} }
final Result result = runPackageManager(distribution, sh, PackageManagerCommand.INSTALL); final Result result = runPackageManager(distribution, sh, PackageManagerCommand.INSTALL);
if (result.exitCode != 0) { if (result.exitCode != 0) {
@ -87,7 +87,7 @@ public class Packages {
Installation installation = Installation.ofPackage(sh, distribution); Installation installation = Installation.ofPackage(sh, distribution);
if (distribution.hasJdk == false) { if (distribution.hasJdk == false) {
Files.write(installation.envFile, List.of("JAVA_HOME=" + systemJavaHome), StandardOpenOption.APPEND); Files.write(installation.envFile, List.of("ES_JAVA_HOME=" + systemJavaHome), StandardOpenOption.APPEND);
} }
return installation; return installation;
} }

View file

@ -155,7 +155,8 @@ public class Shell {
if (workingDirectory != null) { if (workingDirectory != null) {
setWorkingDirectory(builder, workingDirectory); setWorkingDirectory(builder, workingDirectory);
} }
builder.environment().keySet().remove("JAVA_HOME"); // start with a fresh environment builder.environment().keySet().remove("ES_JAVA_HOME"); // start with a fresh environment
builder.environment().keySet().remove("JAVA_HOME");
for (Map.Entry<String, String> entry : env.entrySet()) { for (Map.Entry<String, String> entry : env.entrySet()) {
builder.environment().put(entry.getKey(), entry.getValue()); builder.environment().put(entry.getKey(), entry.getValue());
} }

View file

@ -153,8 +153,8 @@ features are not available while running in FIPS 140-2 mode. The list is as foll
* Ingest Attachment Plugin * Ingest Attachment Plugin
* The <<certutil,`elasticsearch-certutil`>> tool. However, * The <<certutil,`elasticsearch-certutil`>> tool. However,
`elasticsearch-certutil` can very well be used in a non FIPS 140-2 `elasticsearch-certutil` can very well be used in a non FIPS 140-2
configured JVM (pointing `JAVA_HOME` environment variable to a different java configured JVM (pointing `ES_JAVA_HOME` environment variable to a different
installation) in order to generate the keys and certificates that java installation) in order to generate the keys and certificates that
can be later used in the FIPS 140-2 configured JVM. can be later used in the FIPS 140-2 configured JVM.
* The SQL CLI client cannot run in a FIPS 140-2 configured JVM while using * The SQL CLI client cannot run in a FIPS 140-2 configured JVM while using
TLS for transport security or PKI for client authentication. TLS for transport security or PKI for client authentication.