in ambari-server/src/main/python/ambari_server/serverSetup.py [0:0]
def download_and_install_jdk(self, args, properties, ambariOnly=False):
jcePolicyWarn = (
"JCE Policy files are required for configuring Kerberos security. If you plan to use Kerberos,"
"please make sure JCE Unlimited Strength Jurisdiction Policy Files are valid on all hosts."
)
if args.ambari_java_home:
print("start setting AMBARI_JAVA_HOME for Ambari...")
if not validate_jdk(args.ambari_java_home):
err = (
"Path to Ambari java home "
+ args.ambari_java_home
+ " or java binary file does not exist"
)
raise FatalException(1, err)
print_warning_msg(
"AMBARI_JAVA_HOME " + args.ambari_java_home + " must be valid on ALL hosts"
)
print_warning_msg(jcePolicyWarn)
properties.process_pair(AMBARI_JAVA_HOME_PROPERTY, args.ambari_java_home)
properties.removeOldProp(JDK_NAME_PROPERTY)
properties.removeOldProp(JCE_NAME_PROPERTY)
if not ambariOnly:
properties.process_pair(STACK_JAVA_HOME_PROPERTY, args.ambari_java_home)
properties.removeOldProp(STACK_JDK_NAME_PROPERTY)
properties.removeOldProp(STACK_JCE_NAME_PROPERTY)
self._ensure_java_home_env_var_is_set(args.ambari_java_home)
self.jdk_index = self.custom_jdk_number
print('Setting AMBARI_JAVA_HOME for Ambari finished')
if args.java_home:
# java_home was specified among the command-line arguments. Use it as custom JDK location.
if not validate_jdk(args.java_home):
err = (
"Path to java home " + args.java_home + " or java binary file does not exists"
)
raise FatalException(1, err)
print_warning_msg("JAVA_HOME " + args.java_home + " must be valid on ALL hosts")
print_warning_msg(jcePolicyWarn)
IS_CUSTOM_JDK = True
properties.process_pair(JAVA_HOME_PROPERTY, args.java_home)
properties.removeOldProp(JDK_NAME_PROPERTY)
properties.removeOldProp(JCE_NAME_PROPERTY)
if not ambariOnly:
properties.process_pair(STACK_JAVA_HOME_PROPERTY, args.java_home)
properties.removeOldProp(STACK_JDK_NAME_PROPERTY)
properties.removeOldProp(STACK_JCE_NAME_PROPERTY)
self._ensure_java_home_env_var_is_set(args.java_home)
self.jdk_index = self.custom_jdk_number
if (
args.stack_java_home
): # reset stack specific jdk properties if stack_java_home exists
print("Setting JAVA_HOME for stack services...")
print_warning_msg(
"JAVA_HOME " + args.stack_java_home + " (Stack) must be valid on ALL hosts"
)
print_warning_msg(jcePolicyWarn)
properties.process_pair(STACK_JAVA_HOME_PROPERTY, args.stack_java_home)
properties.removeOldProp(STACK_JDK_NAME_PROPERTY)
properties.removeOldProp(STACK_JCE_NAME_PROPERTY)
return
java_home_var = get_JAVA_HOME()
if OS_FAMILY == OSConst.WINSRV_FAMILY:
progress_func = None
else:
progress_func = download_progress
if java_home_var:
message = "Do you want to change Oracle JDK [y/n] (n)? "
if ambariOnly:
message = "Do you want to change Oracle JDK for Ambari Server [y/n] (n)? "
change_jdk = get_YN_input(message, False)
if not change_jdk:
self._ensure_java_home_env_var_is_set(java_home_var)
self.jdk_index = self.custom_jdk_number
return
# Continue with the normal setup, taking the first listed JDK version as the default option
jdk_num = str(self.jdk_index + 1)
(self.jdks, jdk_choice_prompt, jdk_valid_choices, self.custom_jdk_number) = (
self._populate_jdk_configs(properties, jdk_num, ambariOnly)
)
jdk_num = get_validated_string_input(
jdk_choice_prompt, jdk_num, jdk_valid_choices, "Invalid number.", False
)
self.jdk_index = int(jdk_num) - 1
if self.jdk_index == self.custom_jdk_number:
print_warning_msg(
"JDK must be installed on all hosts and JAVA_HOME must be valid on all hosts."
)
print_warning_msg(jcePolicyWarn)
if get_silent():
print_error_msg("Path to JAVA_HOME should be specified via -j option.")
sys.exit(1)
args.java_home = get_validated_string_input(
"Path to JAVA_HOME: ", None, None, None, False, False
)
if not os.path.exists(args.java_home) or not os.path.isfile(
os.path.join(args.java_home, "bin", self.JAVA_BIN)
):
err = "Java home path or java binary file is unavailable. Please put correct path to java home."
raise FatalException(1, err)
print("Validating JDK on Ambari Server...done.")
properties.process_pair(JAVA_HOME_PROPERTY, args.java_home)
properties.removeOldProp(JDK_NAME_PROPERTY)
properties.removeOldProp(JCE_NAME_PROPERTY)
if not ambariOnly:
properties.process_pair(STACK_JAVA_HOME_PROPERTY, args.java_home)
properties.removeOldProp(STACK_JDK_NAME_PROPERTY)
properties.removeOldProp(STACK_JCE_NAME_PROPERTY)
# Make sure any previously existing JDK and JCE name properties are removed. These will
# confuse things in a Custom JDK scenario
properties.removeProp(JDK_NAME_PROPERTY)
properties.removeProp(JCE_NAME_PROPERTY)
if not ambariOnly:
properties.removeOldProp(STACK_JDK_NAME_PROPERTY)
properties.removeOldProp(STACK_JCE_NAME_PROPERTY)
self._ensure_java_home_env_var_is_set(args.java_home)
return
jdk_cfg = self.jdks[self.jdk_index]
resources_dir = get_resources_location(properties)
dest_file = os.path.abspath(os.path.join(str(resources_dir), jdk_cfg.dest_file))
if os.path.exists(dest_file):
print("JDK already exists, using " + dest_file)
elif properties[JDK_DOWNLOAD_SUPPORTED_PROPERTY].upper() == "FALSE":
print(
"ERROR: Oracle JDK is not found in {1}. JDK download is not supported in this distribution. Please download Oracle JDK "
"archive ({0}) manually from Oracle site, place it into {1} and re-run this script.".format(
jdk_cfg.dest_file, dest_file
)
)
print(
f"NOTE: If you have already downloaded the file, please verify if the name is exactly same as {jdk_cfg.dest_file}."
)
print("Exiting...")
sys.exit(1)
else:
ok = get_YN_input(
"To download the Oracle JDK and the Java Cryptography Extension (JCE) "
"Policy Files you must accept the "
"license terms found at "
"http://www.oracle.com/technetwork/java/javase/"
"terms/license/index.html and not accepting will "
"cancel the Ambari Server setup and you must install the JDK and JCE "
"files manually.\nDo you accept the "
"Oracle Binary Code License Agreement [y/n] (y)? ",
True,
)
if not ok:
print("Exiting...")
sys.exit(1)
jdk_url = jdk_cfg.url
print("Downloading JDK from " + jdk_url + " to " + dest_file)
self._download_jdk(jdk_url, dest_file, progress_func)
try:
(retcode, out, java_home_dir) = self._install_jdk(dest_file, jdk_cfg)
except Exception as e:
print(f"Installation of JDK has failed: {str(e)}\n")
file_exists = os.path.isfile(dest_file)
if file_exists:
ok = get_YN_input(
"JDK found at " + dest_file + ". "
"Would you like to re-download the JDK [y/n] (y)? ",
not get_silent(),
)
if not ok:
err = (
"Unable to install JDK. Please remove JDK file found at "
+ dest_file
+ " and re-run Ambari Server setup"
)
raise FatalException(1, err)
else:
jdk_url = jdk_cfg.url
print("Re-downloading JDK from " + jdk_url + " to " + dest_file)
self._download_jdk(jdk_url, dest_file, progress_func)
print("Successfully re-downloaded JDK distribution to " + dest_file)
try:
(retcode, out) = self._install_jdk(dest_file, jdk_cfg)
except Exception as e:
print(f"Installation of JDK was failed: {str(e)}\n")
err = (
"Unable to install JDK. Please remove JDK, file found at "
+ dest_file
+ " and re-run Ambari Server setup"
)
raise FatalException(1, err)
else:
err = (
"Unable to install JDK. File " + dest_file + " does not exist, "
"please re-run Ambari Server setup"
)
raise FatalException(1, err)
properties.process_pair(JDK_NAME_PROPERTY, jdk_cfg.dest_file)
properties.process_pair(JAVA_HOME_PROPERTY, java_home_dir)
if not ambariOnly:
properties.process_pair(STACK_JDK_NAME_PROPERTY, jdk_cfg.dest_file)
properties.process_pair(STACK_JAVA_HOME_PROPERTY, java_home_dir)
self._ensure_java_home_env_var_is_set(java_home_dir)