in ambari-server/src/main/python/ambari-server.py [0:0]
def start(args):
current_user = getpass.getuser()
ambari_user = read_ambari_user()
if ambari_user is None:
err = "Unable to detect a system user for Ambari Server.\n" + SETUP_OR_UPGRADE_MSG
raise FatalException(1, err)
if current_user != ambari_user and not is_root():
err = "Unable to start Ambari Server as user {0}. Please either run \"ambari-server start\" " \
"command as root, as sudo or as user \"{1}\"".format(current_user, ambari_user)
raise FatalException(1, err)
check_database_name_property()
parse_properties_file(args)
status, pid = is_server_runing()
if status:
err = "Ambari Server is already running."
raise FatalException(1, err)
print_info_msg("Ambari Server is not running...")
conf_dir = get_conf_dir()
jdk_path = find_jdk()
if jdk_path is None:
err = "No JDK found, please run the \"ambari-server setup\" " \
"command to install a JDK automatically or install any " \
"JDK manually to " + JDK_INSTALL_DIR
raise FatalException(1, err)
if args.persistence_type == 'remote':
result = find_jdbc_driver(args)
msg = 'Before starting Ambari Server, ' \
'you must copy the {0} JDBC driver JAR file to {1}.'.format(
DATABASE_FULL_NAMES[args.database],
JAVA_SHARE_PATH)
if result == -1:
raise FatalException(-1, msg)
# Preparations
if is_root():
print "Ambari Server running with 'root' privileges."
if args.persistence_type == "local":
retcode = check_postgre_up()
if not retcode == 0:
err = "Unable to start PostgreSQL server. Exiting"
raise FatalException(retcode, err)
else: # Skipping actions that require root permissions
print "Unable to check iptables status when starting "\
"without root privileges."
print "Please do not forget to disable or adjust iptables if needed"
if args.persistence_type == "local":
print "Unable to check PostgreSQL server status when starting " \
"without root privileges."
print "Please do not forget to start PostgreSQL server."
properties = get_ambari_properties()
isSecure = get_is_secure(properties)
(isPersisted, masterKeyFile) = get_is_persisted(properties)
environ = os.environ.copy()
# Need to handle master key not persisted scenario
if isSecure and not masterKeyFile:
prompt = False
masterKey = environ.get(SECURITY_KEY_ENV_VAR_NAME)
if masterKey is not None and masterKey != "":
pass
else:
keyLocation = environ.get(SECURITY_MASTER_KEY_LOCATION)
if keyLocation is not None:
try:
# Verify master key can be read by the java process
with open(keyLocation, 'r') : pass
except IOError:
print_warning_msg("Cannot read Master key from path specified in "
"environemnt.")
prompt = True
else:
# Key not provided in the environment
prompt = True
if prompt:
masterKey = get_original_master_key(properties)
tempDir = tempfile.gettempdir()
tempFilePath = tempDir + os.sep + "masterkey"
save_master_key(masterKey, tempFilePath, True)
if ambari_user != current_user:
uid = pwd.getpwnam(ambari_user).pw_uid
gid = pwd.getpwnam(ambari_user).pw_gid
os.chown(tempFilePath, uid, gid)
else:
os.chmod(tempFilePath, stat.S_IREAD | stat.S_IWRITE)
if tempFilePath is not None:
environ[SECURITY_MASTER_KEY_LOCATION] = tempFilePath
pidfile = PID_DIR + os.sep + PID_NAME
command_base = SERVER_START_CMD_DEBUG if (SERVER_DEBUG_MODE or SERVER_START_DEBUG) else SERVER_START_CMD
command = command_base.format(jdk_path, conf_dir, get_ambari_classpath(), pidfile)
if is_root() and ambari_user != "root":
# To inherit exported environment variables (especially AMBARI_PASSPHRASE),
# from subprocess, we have to skip --login option of su command. That's why
# we change dir to / (otherwise subprocess can face with 'permission denied'
# errors while trying to list current directory
os.chdir("/")
param_list = ["/bin/su", ambari_user, "-s", "/bin/sh", "-c", command]
else:
param_list = ["/bin/sh", "-c", command]
print_info_msg ("Running server: " + str(param_list))
server_process = subprocess.Popen(param_list, env=environ)
print "Server PID at: "+pidfile
print "Server out at: "+SERVER_OUT_FILE
print "Server log at: "+SERVER_LOG_FILE