Skip to content

Commit 3d78ecc

Browse files
authored
Deprecate fallback to java on PATH (#37990)
Finding java on the path is sometimes confusing for users and unexpected, as well as leading to a different java being used than a user expects. This commit adds warning messages when starting elasticsearch (or any tools like the plugin cli) and using java found on the PATH instead of via JAVA_HOME.
1 parent ecf7bb0 commit 3d78ecc

File tree

8 files changed

+32
-16
lines changed

8 files changed

+32
-16
lines changed

Vagrantfile

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,11 @@ def sh_install_deps(config,
346346
echo "==> Java is not installed"
347347
return 1
348348
}
349+
cat \<\<JAVA > /etc/profile.d/java_home.sh
350+
if [ -z "\\\$JAVA_HOME" ]; then
351+
export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))
352+
fi
353+
JAVA
349354
ensure tar
350355
ensure curl
351356
ensure unzip
@@ -382,6 +387,7 @@ Defaults env_keep += "BATS_UTILS"
382387
Defaults env_keep += "BATS_TESTS"
383388
Defaults env_keep += "PACKAGING_ARCHIVES"
384389
Defaults env_keep += "PACKAGING_TESTS"
390+
Defaults env_keep += "JAVA_HOME"
385391
SUDOERS_VARS
386392
chmod 0440 /etc/sudoers.d/elasticsearch_vars
387393
SHELL

distribution/packages/src/common/scripts/preinst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ else
2525
fi
2626

2727
if [ -z "$JAVA" ]; then
28-
err_exit "could not find java; set JAVA_HOME or ensure java is in PATH"
28+
err_exit "could not find java; set JAVA_HOME"
2929
fi
3030

3131
case "$1" in

distribution/src/bin/elasticsearch-env

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,12 @@ if [ -x "$JAVA_HOME/bin/java" ]; then
4141
else
4242
set +e
4343
JAVA=`which java`
44+
echo "warning: Falling back to java on path. This behavior is deprecated. Specify JAVA_HOME"
4445
set -e
4546
fi
4647

4748
if [ ! -x "$JAVA" ]; then
48-
echo "could not find java; set JAVA_HOME or ensure java is in PATH" >&2
49+
echo "could not find java; set JAVA_HOME" >&2
4950
exit 1
5051
fi
5152

distribution/src/bin/elasticsearch-env.bat

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,12 @@ rem now set the path to java
2020
if defined JAVA_HOME (
2121
set JAVA="%JAVA_HOME%\bin\java.exe"
2222
) else (
23+
echo warning: Falling back to java on path. This behavior is deprecated. Specify JAVA_HOME
2324
for %%I in (java.exe) do set JAVA="%%~$PATH:I"
2425
)
2526

2627
if not exist %JAVA% (
27-
echo could not find java; set JAVA_HOME or ensure java is in PATH 1>&2
28+
echo could not find java; set JAVA_HOME 1>&2
2829
exit /b 1
2930
)
3031

qa/vagrant/src/main/java/org/elasticsearch/packaging/test/ArchiveTestCase.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ public void test30AbortWhenJavaMissing() {
126126
);
127127

128128
assertThat(runResult.exitCode, is(1));
129-
assertThat(runResult.stderr, containsString("could not find java; set JAVA_HOME or ensure java is in PATH"));
129+
assertThat(runResult.stderr, containsString("could not find java; set JAVA_HOME"));
130130
});
131131

132132
Platforms.onLinux(() -> {
@@ -136,7 +136,7 @@ public void test30AbortWhenJavaMissing() {
136136
sh.run("chmod -x '" + javaPath + "'");
137137
final Result runResult = sh.runIgnoreExitCode(bin.elasticsearch.toString());
138138
assertThat(runResult.exitCode, is(1));
139-
assertThat(runResult.stderr, containsString("could not find java; set JAVA_HOME or ensure java is in PATH"));
139+
assertThat(runResult.stderr, containsString("could not find java; set JAVA_HOME"));
140140
} finally {
141141
sh.run("chmod +x '" + javaPath + "'");
142142
}

qa/vagrant/src/main/java/org/elasticsearch/packaging/test/PackageTestCase.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,15 +83,16 @@ public void onlyCompatibleDistributions() {
8383

8484
public void test05InstallFailsWhenJavaMissing() {
8585
final Shell sh = new Shell();
86-
final Result java = sh.run("command -v java");
86+
final Result javaHomeOutput = sh.run("echo $JAVA_HOME");
8787

88-
final Path originalJavaPath = Paths.get(java.stdout.trim());
89-
final Path relocatedJavaPath = originalJavaPath.getParent().resolve("java.relocated");
88+
final Path javaHome = Paths.get(javaHomeOutput.stdout.trim());
89+
final Path originalJavaPath = javaHome.resolve("bin").resolve("java");
90+
final Path relocatedJavaPath = javaHome.resolve("bin").resolve("java.relocated");
9091
try {
9192
mv(originalJavaPath, relocatedJavaPath);
9293
final Result installResult = runInstallCommand(distribution());
9394
assertThat(installResult.exitCode, is(1));
94-
assertThat(installResult.stderr, containsString("could not find java; set JAVA_HOME or ensure java is in PATH"));
95+
assertThat(installResult.stderr, containsString("could not find java; set JAVA_HOME"));
9596
} finally {
9697
mv(relocatedJavaPath, originalJavaPath);
9798
}

qa/vagrant/src/test/resources/packaging/tests/module_and_plugin_test_cases.bash

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ fi
170170
sudo chmod +x $JAVA
171171

172172
[ "$status" -eq 1 ]
173-
local expected="could not find java; set JAVA_HOME or ensure java is in PATH"
173+
local expected="could not find java; set JAVA_HOME"
174174
[[ "$output" == *"$expected"* ]] || {
175175
echo "Expected error message [$expected] but found: $output"
176176
false

qa/vagrant/src/test/resources/packaging/utils/packages.bash

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,14 @@
3030
# specific language governing permissions and limitations
3131
# under the License.
3232

33+
env_file() {
34+
if is_dpkg; then
35+
echo "/etc/default/elasticsearch"
36+
fi
37+
if is_rpm; then
38+
echo "/etc/sysconfig/elasticsearch"
39+
fi
40+
}
3341

3442
# Export some useful paths.
3543
export_elasticsearch_paths() {
@@ -40,15 +48,11 @@ export_elasticsearch_paths() {
4048
export ESDATA="/var/lib/elasticsearch"
4149
export ESLOG="/var/log/elasticsearch"
4250
export ESPIDDIR="/var/run/elasticsearch"
43-
if is_dpkg; then
44-
export ESENVFILE="/etc/default/elasticsearch"
45-
fi
46-
if is_rpm; then
47-
export ESENVFILE="/etc/sysconfig/elasticsearch"
48-
fi
51+
export ESENVFILE=$(env_file)
4952
export PACKAGE_NAME=${PACKAGE_NAME:-"elasticsearch-oss"}
5053
}
5154

55+
5256
# Install the rpm or deb package.
5357
# -u upgrade rather than install. This only matters for rpm.
5458
# -v the version to upgrade to. Defaults to the version under test.
@@ -88,6 +92,9 @@ install_package() {
8892
else
8993
skip "Only rpm or deb supported"
9094
fi
95+
96+
# pass through java home to package
97+
echo "JAVA_HOME=\"$JAVA_HOME\"" >> $(env_file)
9198
}
9299

93100
# Checks that all directories & files are correctly installed after a deb or

0 commit comments

Comments
 (0)