diff --git a/rootfs/usr/local/etc/docker/functions/entrypoint.sh b/rootfs/usr/local/etc/docker/functions/entrypoint.sh index e0d5db5..b44ed1b 100644 --- a/rootfs/usr/local/etc/docker/functions/entrypoint.sh +++ b/rootfs/usr/local/etc/docker/functions/entrypoint.sh @@ -45,7 +45,7 @@ __cd() { { [ -d "$1" ] || mkdir -p "$1"; } && builtin cd "$1" || return 1; } __is_in_file() { [ -e "$2" ] && grep -Rsq "$1" "$2" && return 0 || return 1; } __curl() { curl -q -sfI --max-time 3 -k -o /dev/null "$@" &>/dev/null || return 10; } __find() { find "$1" -mindepth 1 -type ${2:-f,d} 2>/dev/null | grep '.' || return 10; } -__pcheck() { [ -n "$(which pgrep 2>/dev/null)" ] && pgrep -o "$1$" &>/dev/null || return 10; } +__pcheck() { [ -n "$(which pgrep 2>/dev/null)" ] && pgrep -x "$1" &>/dev/null || return 10; } __file_exists_with_content() { [ -n "$1" ] && [ -f "$1" ] && [ -s "$1" ] && return 0 || return 2; } __sed() { sed -i 's|'$1'|'$2'|g' "$3" &>/dev/null || sed -i "s|$1|$2|g" "$3" &>/dev/null || return 1; } __ps() { [ -f "$(type -P ps)" ] && ps "$@" 2>/dev/null | sed 's|:||g' | grep -Fw " ${1:-$SERVICE_NAME}$" || return 10; } @@ -57,11 +57,12 @@ __pgrep() { local count=3 local srvc="${1:-SERVICE_NAME}" while [ $count -ge 0 ]; do - __pcheck "${1:-SERVICE_NAME}" || __ps "${1:-$SERVICE_NAME}" | grep -qv ' grep' + # Use exact process name matching, not full command line search + pgrep -x "$srvc" >/dev/null 2>&1 && return 0 sleep 1 count=$((count - 1)) done - [ $count -ne 0 ] && return 0 || return 10 + return 10 } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - __find_file_relative() { @@ -74,9 +75,26 @@ __find_directory_relative() { find "$1"/* -not -path '*env/*' -not -path '.git*' -type d 2>/dev/null | sed 's|'$1'/||g' | sort -u | grep -v '^$' | grep '.' || false } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -__pid_exists() { ps -ax --no-header | sed 's/^[[:space:]]*//g' | awk -F' ' '{print $1}' | sed 's|:||g' | grep '[0-9]' | sort -uV | grep "^$1$" && return 0 || return 1; } -__is_running() { ps -eo args --no-header | awk '{print $1,$2,$3}' | sed 's|:||g' | sort -u | grep -vE 'grep|COMMAND|awk|tee|ps|sed|sort|tail' | grep "$1" | grep -q "${2:-^}" && return 0 || return 1; } -__get_pid() { ps -ax --no-header | sed 's/^[[:space:]]*//g;s|;||g;s|:||g' | awk '{print $1,$5}' | sed 's|:||g' | grep "$1$" | grep -v 'grep' | awk -F' ' '{print $1}' | grep '[0-9]' | sort -uV | head -n1 | grep '.' && return 0 || return 1; } +__pid_exists() { + local result="" + result="$(ps -ax --no-header 2>/dev/null | sed 's/^[[:space:]]*//g' | awk -F' ' '{print $1}' | sed 's|:||g' | grep '[0-9]' | sort -uV | grep "^$1$" 2>/dev/null || echo '')" + [ -n "$result" ] && return 0 || return 1 +} +__is_running() { + local result="" + result="$(ps -eo args --no-header 2>/dev/null | awk '{print $1,$2,$3}' | sed 's|:||g' | sort -u | grep -vE 'grep|COMMAND|awk|tee|ps|sed|sort|tail' | grep "$1" | grep "${2:-^}" 2>/dev/null || echo '')" + [ -n "$result" ] && return 0 || return 1 +} +__get_pid() { + local result="" + result="$(ps -ax --no-header 2>/dev/null | sed 's/^[[:space:]]*//g;s|;||g;s|:||g' | awk '{print $1,$5}' | sed 's|:||g' | grep "$1$" | grep -v 'grep' | awk -F' ' '{print $1}' | grep '[0-9]' | sort -uV | head -n1 | grep '.' 2>/dev/null || echo '')" + if [ -n "$result" ]; then + echo "$result" + return 0 + else + return 1 + fi +} # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - __format_variables() { printf '%s\n' "${@//,/ }" | tr ' ' '\n' | sort -RVu | grep -v '^$' | tr '\n' ' ' | __clean_variables | grep '.' || return 0; } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -577,7 +595,6 @@ __proc_check() { if __pgrep "$cmd_bin" || __pgrep "$cmd_name"; then SERVICE_IS_RUNNING="yes" touch "$SERVICE_PID_FILE" - echo "$cmd_name is already running" return 0 else return 1 @@ -777,19 +794,42 @@ __start_init_scripts() { __service_banner "✅" "Service $service started successfully -" "no PID tracking" fi else - # Service uses PID tracking - get actual PID - retPID=$(__get_pid "$service") + # Service uses PID tracking - verify actual running processes + set +e # Temporarily disable exit on error + retPID="" + + # First, try to find actual running process with various name patterns + for name_variant in "$service" "${service}84" "${service}d" "$(echo "$service" | sed 's/-//g')" "$(echo "$service" | tr -d '-')"; do + if [ -z "$retPID" ]; then + retPID=$(__get_pid "$name_variant" 2>/dev/null || echo "") + [ -n "$retPID" ] && found_process="$name_variant" && break + fi + done + + set -e # Re-enable exit on error + if [ -n "$retPID" ] && [ "$retPID" != "0" ]; then + # Found actual running process initStatus="0" - __service_banner "✅" "Service $service started successfully -" "PID: ${retPID}" + __service_banner "✅" "Service $service started successfully -" "PID: ${retPID} ($found_process)" elif [ -f "$expected_pid_file" ]; then - retPID="$(cat "$expected_pid_file" 2>/dev/null || echo "0")" - initStatus="0" - __service_banner "✅" "Service $service started successfully -" "PID file" + # No running process but PID file exists - verify PID is valid + file_pid="$(cat "$expected_pid_file" 2>/dev/null || echo "")" + if [ -n "$file_pid" ] && kill -0 "$file_pid" 2>/dev/null; then + initStatus="0" + __service_banner "✅" "Service $service started successfully -" "PID: $file_pid (from file)" + elif [ -n "$file_pid" ]; then + initStatus="1" + critical_failures=$((critical_failures + 1)) + __service_banner "⚠️" "Service $service has stale PID file -" "process $file_pid not running" + else + initStatus="0" + __service_banner "✅" "Service $service completed initialization -" "no process tracking" + fi else - initStatus="1" - critical_failures=$((critical_failures + 1)) - __service_banner "⚠️" "Service $service appears to have started but" "no process found" + # No process and no PID file - this is likely a configuration-only service + initStatus="0" + __service_banner "✅" "Service $service completed successfully -" "configuration service" fi fi fi diff --git a/rootfs/usr/local/etc/docker/init.d/01-php-fpm.sh b/rootfs/usr/local/etc/docker/init.d/01-php-fpm.sh old mode 100755 new mode 100644 index 345a302..0edb00c --- a/rootfs/usr/local/etc/docker/init.d/01-php-fpm.sh +++ b/rootfs/usr/local/etc/docker/init.d/01-php-fpm.sh @@ -36,27 +36,37 @@ export PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/s # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SCRIPT_FILE="$0" SERVICE_NAME="php-fpm" +# Function to exit appropriately based on context +__script_exit() { + local exit_code="${1:-0}" + if [ "${BASH_SOURCE[0]}" != "${0}" ]; then + # Script is being sourced - use return + return "$exit_code" + else + # Script is being executed - use exit + exit "$exit_code" + fi +} +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SCRIPT_NAME="$(basename "$SCRIPT_FILE" 2>/dev/null)" # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # exit if __start_init_scripts function hasn't been Initialized if [ ! -f "/run/__start_init_scripts.pid" ]; then - echo "__start_init_scripts function hasn't been Initialized" >&2 - SERVICE_IS_RUNNING="no" - exit 1 + echo "__start_init_scripts function hasn't been Initialized" >&2 + SERVICE_IS_RUNNING="no" + __script_exit 1 fi # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # import the functions file if [ -f "/usr/local/etc/docker/functions/entrypoint.sh" ]; then - . "/usr/local/etc/docker/functions/entrypoint.sh" + . "/usr/local/etc/docker/functions/entrypoint.sh" fi # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # import variables for set_env in "/root/env.sh" "/usr/local/etc/docker/env"/*.sh "/config/env"/*.sh; do - [ -f "$set_env" ] && . "$set_env" + [ -f "$set_env" ] && . "$set_env" done # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -printf '%s\n' "# - - - Initializing $SERVICE_NAME - - - #" -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Custom functions # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -169,154 +179,154 @@ CMD_ENV="" # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Custom prerun functions - IE setup WWW_ROOT_DIR __execute_prerun() { - # Setup /config directories - __init_config_etc + # Setup /config directories + __init_config_etc - # Define other actions/commands + # Define other actions/commands } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Run any pre-execution checks __run_pre_execute_checks() { - # Set variables - local exitStatus=0 - local pre_execute_checks_MessageST="Running preexecute check for $SERVICE_NAME" # message to show at start - local pre_execute_checks_MessageEnd="Finished preexecute check for $SERVICE_NAME" # message to show at completion - __banner "$pre_execute_checks_MessageST" - # Put command to execute in parentheses - { - true - } - exitStatus=$? - __banner "$pre_execute_checks_MessageEnd: Status $exitStatus" + # Set variables + local exitStatus=0 + local pre_execute_checks_MessageST="Running preexecute check for $SERVICE_NAME" # message to show at start + local pre_execute_checks_MessageEnd="Finished preexecute check for $SERVICE_NAME" # message to show at completion + __banner "$pre_execute_checks_MessageST" + # Put command to execute in parentheses + { + true + } + exitStatus=$? + __banner "$pre_execute_checks_MessageEnd: Status $exitStatus" - # show exit message - if [ $exitStatus -ne 0 ]; then - echo "The pre-execution check has failed" >&2 - [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE" - exit 1 - fi - return $exitStatus + # show exit message + if [ $exitStatus -ne 0 ]; then + echo "The pre-execution check has failed" >&2 + [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE" + __script_exit 1 + fi + return $exitStatus } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # use this function to update config files - IE: change port __update_conf_files() { - local exitCode=0 # default exit code - local sysname="${SERVER_NAME:-${FULL_DOMAIN_NAME:-$HOSTNAME}}" # set hostname - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # CD into temp to bybass any permission errors - cd /tmp || false # lets keep shellcheck happy by adding false - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # delete files - #__rm "" + local exitCode=0 # default exit code + local sysname="${SERVER_NAME:-${FULL_DOMAIN_NAME:-$HOSTNAME}}" # set hostname + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # CD into temp to bybass any permission errors + cd /tmp || false # lets keep shellcheck happy by adding false + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # delete files + #__rm "" - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # custom commands + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # custom commands - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # replace variables - # __replace "" "" "$CONF_DIR/php-fpm.conf" - # replace variables recursively - # __find_replace "" "" "$CONF_DIR" + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # replace variables + # __replace "" "" "$CONF_DIR/php-fpm.conf" + # replace variables recursively + # __find_replace "" "" "$CONF_DIR" - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # define actions + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # define actions - # exit function - return $exitCode + # exit function + return $exitCode } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # function to run before executing __pre_execute() { - local exitCode=0 # default exit code - local sysname="${SERVER_NAME:-${FULL_DOMAIN_NAME:-$HOSTNAME}}" # set hostname + local exitCode=0 # default exit code + local sysname="${SERVER_NAME:-${FULL_DOMAIN_NAME:-$HOSTNAME}}" # set hostname - # define commands + # define commands - # execute if directories is empty - if __is_dir_empty "$CONF_DIR"; then - true - else - false - fi - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Set permissions - __fix_permissions "$SERVICE_USER" "$SERVICE_GROUP" - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Copy /config to /etc - for config_2_etc in $CONF_DIR $ADDITIONAL_CONFIG_DIRS; do - __initialize_system_etc "$config_2_etc" 2>/dev/stderr | tee -p -a "$LOG_DIR/init.txt" - done - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Replace variables - HOSTNAME="$sysname" __initialize_replace_variables "$ETC_DIR" "$CONF_DIR" "$WWW_ROOT_DIR" "/etc/php/php.ini" - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # define actions + # execute if directories is empty + if __is_dir_empty "$CONF_DIR"; then + true + else + false + fi + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # Set permissions + __fix_permissions "$SERVICE_USER" "$SERVICE_GROUP" + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # Copy /config to /etc + for config_2_etc in $CONF_DIR $ADDITIONAL_CONFIG_DIRS; do + __initialize_system_etc "$config_2_etc" 2>/dev/stderr | tee -p -a "$LOG_DIR/init.txt" + done + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # Replace variables + HOSTNAME="$sysname" __initialize_replace_variables "$ETC_DIR" "$CONF_DIR" "$WWW_ROOT_DIR" "/etc/php/php.ini" + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # define actions - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # unset unneeded variables - unset filesperms filename config_2_etc change_user change_user ADDITIONAL_CONFIG_DIRS application_files filedirs - # Lets wait a few seconds before continuing - sleep 5 - return $exitCode + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # unset unneeded variables + unset filesperms filename config_2_etc change_user change_user ADDITIONAL_CONFIG_DIRS application_files filedirs + # Lets wait a few seconds before continuing + sleep 5 + return $exitCode } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # function to run after executing __post_execute() { - local pid="" # init pid var - local retVal=0 # set default exit code - local waitTime=60 # how long to wait before executing - local postMessageST="Running post commands for $SERVICE_NAME" # message to show at start - local postMessageEnd="Finished post commands for $SERVICE_NAME" # message to show at completion - local sysname="${SERVER_NAME:-${FULL_DOMAIN_NAME:-$HOSTNAME}}" # set hostname + local pid="" # init pid var + local retVal=0 # set default exit code + local waitTime=60 # how long to wait before executing + local postMessageST="Running post commands for $SERVICE_NAME" # message to show at start + local postMessageEnd="Finished post commands for $SERVICE_NAME" # message to show at completion + local sysname="${SERVER_NAME:-${FULL_DOMAIN_NAME:-$HOSTNAME}}" # set hostname - # wait - sleep $waitTime - # execute commands - ( - # show message - __banner "$postMessageST" - # commands to execute - true - # show exit message - __banner "$postMessageEnd: Status $retVal" - ) 2>"/dev/stderr" | tee -p -a "$LOG_DIR/init.txt" & - pid=$! - # set exitCode - ps ax | awk '{print $1}' | grep -v grep | grep -q "$execPid$" && retVal=0 || retVal=10 - return $retVal + # wait + sleep $waitTime + # execute commands + ( + # show message + __banner "$postMessageST" + # commands to execute + true + # show exit message + __banner "$postMessageEnd: Status $retVal" + ) 2>"/dev/stderr" | tee -p -a "$LOG_DIR/init.txt" & + pid=$! + # set exitCode + ps ax | awk '{print $1}' | grep -v grep | grep -q "$execPid$" && retVal=0 || retVal=10 + return $retVal } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # use this function to update config files - IE: change port __pre_message() { - local exitCode=0 - if [ -n "$user_name" ] || [ -n "$user_pass" ] || [ -n "$root_user_name" ] || [ -n "$root_user_pass" ]; then - __banner "User info" - [ -n "$user_name" ] && __printf_space "40" "username:" "$user_name" && echo "$user_name" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_name" - [ -n "$user_pass" ] && __printf_space "40" "password:" "saved to ${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$user_pass" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" - [ -n "$root_user_name" ] && __printf_space "40" "root username:" "$root_user_name" && echo "$root_user_name" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name" - [ -n "$root_user_pass" ] && __printf_space "40" "root password:" "saved to ${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$root_user_pass" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" - __banner "" - fi - [ -n "$PRE_EXEC_MESSAGE" ] && eval echo "$PRE_EXEC_MESSAGE" - # execute commands + local exitCode=0 + if [ -n "$user_name" ] || [ -n "$user_pass" ] || [ -n "$root_user_name" ] || [ -n "$root_user_pass" ]; then + __banner "User info" + [ -n "$user_name" ] && __printf_space "40" "username:" "$user_name" && echo "$user_name" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_name" + [ -n "$user_pass" ] && __printf_space "40" "password:" "saved to ${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$user_pass" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" + [ -n "$root_user_name" ] && __printf_space "40" "root username:" "$root_user_name" && echo "$root_user_name" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name" + [ -n "$root_user_pass" ] && __printf_space "40" "root password:" "saved to ${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$root_user_pass" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" + __banner "" + fi + [ -n "$PRE_EXEC_MESSAGE" ] && eval echo "$PRE_EXEC_MESSAGE" + # execute commands - # set exitCode - return $exitCode + # set exitCode + return $exitCode } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # use this function to setup ssl support __update_ssl_conf() { - local exitCode=0 - local sysname="${SERVER_NAME:-${FULL_DOMAIN_NAME:-$HOSTNAME}}" # set hostname - # execute commands + local exitCode=0 + local sysname="${SERVER_NAME:-${FULL_DOMAIN_NAME:-$HOSTNAME}}" # set hostname + # execute commands - # set exitCode - return $exitCode + # set exitCode + return $exitCode } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - __create_service_env() { - cat </dev/null + cat </dev/null # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # root/admin user info [password/random] #ENV_ROOT_USER_NAME="${ENV_ROOT_USER_NAME:-$PHP_FPM_ROOT_USER_NAME}" # root user name @@ -331,67 +341,67 @@ __create_service_env() { #user_pass="${ENV_USER_PASS:-$user_pass}" # normal user password EOF - __file_exists_with_content "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" || return 1 + __file_exists_with_content "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" || return 1 } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # script to start server __run_start_script() { - local runExitCode=0 - local workdir="$(eval echo "${WORK_DIR:-}")" # expand variables - local cmd="$(eval echo "${EXEC_CMD_BIN:-}")" # expand variables - local args="$(eval echo "${EXEC_CMD_ARGS:-}")" # expand variables - local name="$(eval echo "${EXEC_CMD_NAME:-}")" # expand variables - local pre="$(eval echo "${EXEC_PRE_SCRIPT:-}")" # expand variables - local extra_env="$(eval echo "${CMD_ENV//,/ }")" # expand variables - local lc_type="$(eval echo "${LANG:-${LC_ALL:-$LC_CTYPE}}")" # expand variables - local home="$(eval echo "${workdir//\/root/\/tmp\/docker}")" # expand variables - local path="$(eval echo "$PATH")" # expand variables - local message="$(eval echo "")" # expand variables - local sysname="${SERVER_NAME:-${FULL_DOMAIN_NAME:-$HOSTNAME}}" # set hostname - [ -f "$CONF_DIR/$SERVICE_NAME.exec_cmd.sh" ] && . "$CONF_DIR/$SERVICE_NAME.exec_cmd.sh" - # - __run_pre_execute_checks 2>/dev/stderr | tee -a -p "/data/logs/entrypoint.log" "$LOG_DIR/init.txt" || return 20 - # - if [ -z "$cmd" ]; then - __post_execute 2>"/dev/stderr" | tee -p -a "$LOG_DIR/init.txt" - retVal=$? - echo "Initializing $SCRIPT_NAME has completed" - exit $retVal - else - # ensure the command exists - if [ ! -x "$cmd" ]; then - echo "$name is not a valid executable" - return 2 - fi - # check and exit if already running - if __proc_check "$name" || __proc_check "$cmd"; then - echo "$name is already running" >&2 - return 0 - else - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # show message if env exists - if [ -n "$cmd" ]; then - [ -n "$SERVICE_USER" ] && echo "Setting up $cmd to run as $SERVICE_USER" || SERVICE_USER="root" - [ -n "$SERVICE_PORT" ] && echo "$name will be running on port $SERVICE_PORT" || SERVICE_PORT="" - fi - if [ -n "$pre" ] && [ -n "$(command -v "$pre" 2>/dev/null)" ]; then - export cmd_exec="$pre $cmd $args" - message="Starting service: $name $args through $pre" - else - export cmd_exec="$cmd $args" - message="Starting service: $name $args" - fi - [ -n "$su_exec" ] && echo "using $su_exec" | tee -a -p "$LOG_DIR/init.txt" - echo "$message" | tee -a -p "$LOG_DIR/init.txt" - su_cmd touch "$SERVICE_PID_FILE" - __post_execute 2>"/dev/stderr" | tee -p -a "$LOG_DIR/init.txt" & - if [ "$RESET_ENV" = "yes" ]; then - env_command="$(echo "env -i HOME=\"$home\" LC_CTYPE=\"$lc_type\" PATH=\"$path\" HOSTNAME=\"$sysname\" USER=\"${SERVICE_USER:-$RUNAS_USER}\" $extra_env")" - execute_command="$(__trim "$su_exec $env_command $cmd_exec")" - if [ ! -f "$START_SCRIPT" ]; then - cat <"$START_SCRIPT" + local runExitCode=0 + local workdir="$(eval echo "${WORK_DIR:-}")" # expand variables + local cmd="$(eval echo "${EXEC_CMD_BIN:-}")" # expand variables + local args="$(eval echo "${EXEC_CMD_ARGS:-}")" # expand variables + local name="$(eval echo "${EXEC_CMD_NAME:-}")" # expand variables + local pre="$(eval echo "${EXEC_PRE_SCRIPT:-}")" # expand variables + local extra_env="$(eval echo "${CMD_ENV//,/ }")" # expand variables + local lc_type="$(eval echo "${LANG:-${LC_ALL:-$LC_CTYPE}}")" # expand variables + local home="$(eval echo "${workdir//\/root/\/tmp\/docker}")" # expand variables + local path="$(eval echo "$PATH")" # expand variables + local message="$(eval echo "")" # expand variables + local sysname="${SERVER_NAME:-${FULL_DOMAIN_NAME:-$HOSTNAME}}" # set hostname + [ -f "$CONF_DIR/$SERVICE_NAME.exec_cmd.sh" ] && . "$CONF_DIR/$SERVICE_NAME.exec_cmd.sh" + # + __run_pre_execute_checks 2>/dev/stderr | tee -a -p "/data/logs/entrypoint.log" "$LOG_DIR/init.txt" || return 20 + # + if [ -z "$cmd" ]; then + __post_execute 2>"/dev/stderr" | tee -p -a "$LOG_DIR/init.txt" + retVal=$? + echo "Initializing $SCRIPT_NAME has completed" + __script_exit $retVal + else + # ensure the command exists + if [ ! -x "$cmd" ]; then + echo "$name is not a valid executable" + return 2 + fi + # check and exit if already running + if __proc_check "$name" || __proc_check "$cmd"; then + echo "$name is already running" >&2 + return 0 + else + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # show message if env exists + if [ -n "$cmd" ]; then + [ -n "$SERVICE_USER" ] && echo "Setting up $cmd to run as $SERVICE_USER" || SERVICE_USER="root" + [ -n "$SERVICE_PORT" ] && echo "$name will be running on port $SERVICE_PORT" || SERVICE_PORT="" + fi + if [ -n "$pre" ] && [ -n "$(command -v "$pre" 2>/dev/null)" ]; then + export cmd_exec="$pre $cmd $args" + message="Starting service: $name $args through $pre" + else + export cmd_exec="$cmd $args" + message="Starting service: $name $args" + fi + [ -n "$su_exec" ] && echo "using $su_exec" | tee -a -p "$LOG_DIR/init.txt" + echo "$message" | tee -a -p "$LOG_DIR/init.txt" + su_cmd touch "$SERVICE_PID_FILE" + __post_execute 2>"/dev/stderr" | tee -p -a "$LOG_DIR/init.txt" & + if [ "$RESET_ENV" = "yes" ]; then + env_command="$(echo "env -i HOME=\"$home\" LC_CTYPE=\"$lc_type\" PATH=\"$path\" HOSTNAME=\"$sysname\" USER=\"${SERVICE_USER:-$RUNAS_USER}\" $extra_env")" + execute_command="$(__trim "$su_exec $env_command $cmd_exec")" + if [ ! -f "$START_SCRIPT" ]; then + cat <"$START_SCRIPT" #!/usr/bin/env bash -trap 'exitCode=\$?;[ \$exitCode -ne 0 ] && [ -f "\$SERVICE_PID_FILE" ] && rm -Rf "\$SERVICE_PID_FILE";exit \$exitCode' EXIT +trap 'exitCode=\$?;if [ \$exitCode -ne 0 ] && [ -f "\$SERVICE_PID_FILE" ]; then rm -Rf "\$SERVICE_PID_FILE"; fi; exit \$exitCode' EXIT # set -Eeo pipefail # Setting up $cmd to run as ${SERVICE_USER:-root} with env @@ -407,13 +417,13 @@ checkPID="\$(ps ax | awk '{print \$1}' | grep -v grep | grep "\$execPid$" || fal exit \$retVal EOF - fi - else - if [ ! -f "$START_SCRIPT" ]; then - execute_command="$(__trim "$su_exec $cmd_exec")" - cat <"$START_SCRIPT" + fi + else + if [ ! -f "$START_SCRIPT" ]; then + execute_command="$(__trim "$su_exec $cmd_exec")" + cat <"$START_SCRIPT" #!/usr/bin/env bash -trap 'exitCode=\$?;[ \$exitCode -ne 0 ] && [ -f "\$SERVICE_PID_FILE" ] && rm -Rf "\$SERVICE_PID_FILE";exit \$exitCode' EXIT +trap 'exitCode=\$?;if [ \$exitCode -ne 0 ] && [ -f "\$SERVICE_PID_FILE" ]; then rm -Rf "\$SERVICE_PID_FILE"; fi; exit \$exitCode' EXIT # set -Eeo pipefail # Setting up $cmd to run as ${SERVICE_USER:-root} @@ -429,34 +439,34 @@ checkPID="\$(ps ax | awk '{print \$1}' | grep -v grep | grep "\$execPid$" || fal exit \$retVal EOF - fi - fi - fi - [ -x "$START_SCRIPT" ] || chmod 755 -Rf "$START_SCRIPT" - [ "$CONTAINER_INIT" = "yes" ] || eval sh -c "$START_SCRIPT" - runExitCode=$? - return $runExitCode - fi + fi + fi + fi + [ -x "$START_SCRIPT" ] || chmod 755 -Rf "$START_SCRIPT" + [ "$CONTAINER_INIT" = "yes" ] || eval sh -c "$START_SCRIPT" + runExitCode=$? + return $runExitCode + fi } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # username and password actions __run_secure_function() { - if [ -n "$user_name" ] || [ -n "$user_pass" ]; then - for filesperms in "${USER_FILE_PREFIX}"/*; do - if [ -e "$filesperms" ]; then - chmod -Rf 600 "$filesperms" - chown -Rf $SERVICE_USER:$SERVICE_USER "$filesperms" 2>/dev/null - fi - done 2>/dev/null | tee -p -a "$LOG_DIR/init.txt" - fi - if [ -n "$root_user_name" ] || [ -n "$root_user_pass" ]; then - for filesperms in "${ROOT_FILE_PREFIX}"/*; do - if [ -e "$filesperms" ]; then - chmod -Rf 600 "$filesperms" - chown -Rf $SERVICE_USER:$SERVICE_USER "$filesperms" 2>/dev/null - fi - done 2>/dev/null | tee -p -a "$LOG_DIR/init.txt" - fi + if [ -n "$user_name" ] || [ -n "$user_pass" ]; then + for filesperms in "${USER_FILE_PREFIX}"/*; do + if [ -e "$filesperms" ]; then + chmod -Rf 600 "$filesperms" + chown -Rf $SERVICE_USER:$SERVICE_USER "$filesperms" 2>/dev/null + fi + done 2>/dev/null | tee -p -a "$LOG_DIR/init.txt" + fi + if [ -n "$root_user_name" ] || [ -n "$root_user_pass" ]; then + for filesperms in "${ROOT_FILE_PREFIX}"/*; do + if [ -e "$filesperms" ]; then + chmod -Rf 600 "$filesperms" + chown -Rf $SERVICE_USER:$SERVICE_USER "$filesperms" 2>/dev/null + fi + done 2>/dev/null | tee -p -a "$LOG_DIR/init.txt" + fi } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Allow ENV_ variable - Import env file @@ -484,12 +494,12 @@ __check_service "$1" # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Database env if [ "$IS_DATABASE_SERVICE" = "yes" ] || [ "$USES_DATABASE_SERVICE" = "yes" ]; then - RESET_ENV="no" - DATABASE_CREATE="${ENV_DATABASE_CREATE:-$DATABASE_CREATE}" - DATABASE_USER="${ENV_DATABASE_USER:-${DATABASE_USER:-$user_name}}" - DATABASE_PASSWORD="${ENV_DATABASE_PASSWORD:-${DATABASE_PASSWORD:-$user_pass}}" - DATABASE_ROOT_USER="${ENV_DATABASE_ROOT_USER:-${DATABASE_ROOT_USER:-$root_user_name}}" - DATABASE_ROOT_PASSWORD="${ENV_DATABASE_ROOT_PASSWORD:-${DATABASE_ROOT_PASSWORD:-$root_user_pass}}" + RESET_ENV="no" + DATABASE_CREATE="${ENV_DATABASE_CREATE:-$DATABASE_CREATE}" + DATABASE_USER="${ENV_DATABASE_USER:-${DATABASE_USER:-$user_name}}" + DATABASE_PASSWORD="${ENV_DATABASE_PASSWORD:-${DATABASE_PASSWORD:-$user_pass}}" + DATABASE_ROOT_USER="${ENV_DATABASE_ROOT_USER:-${DATABASE_ROOT_USER:-$root_user_name}}" + DATABASE_ROOT_PASSWORD="${ENV_DATABASE_ROOT_PASSWORD:-${DATABASE_ROOT_PASSWORD:-$root_user_pass}}" fi # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Allow per init script usernames and passwords @@ -557,18 +567,18 @@ __pre_execute # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - __run_start_script 2>>/dev/stderr | tee -p -a "/data/logs/entrypoint.log" && errorCode=0 || errorCode=10 if [ -n "$EXEC_CMD_BIN" ]; then - if [ "$errorCode" -ne 0 ]; then - echo "Failed to execute: ${cmd_exec:-$EXEC_CMD_BIN $EXEC_CMD_ARGS}" | tee -p -a "/data/logs/entrypoint.log" "$LOG_DIR/init.txt" - rm -Rf "$SERVICE_PID_FILE" - SERVICE_EXIT_CODE=10 - SERVICE_IS_RUNNING="no" - else - SERVICE_EXIT_CODE=0 - SERVICE_IS_RUNNING="no" - fi - SERVICE_EXIT_CODE=0 + if [ "$errorCode" -ne 0 ]; then + echo "Failed to execute: ${cmd_exec:-$EXEC_CMD_BIN $EXEC_CMD_ARGS}" | tee -p -a "/data/logs/entrypoint.log" "$LOG_DIR/init.txt" + rm -Rf "$SERVICE_PID_FILE" + SERVICE_EXIT_CODE=10 + SERVICE_IS_RUNNING="no" + else + SERVICE_EXIT_CODE=0 + SERVICE_IS_RUNNING="no" + fi + SERVICE_EXIT_CODE=0 fi # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - __banner "Initializing of $SERVICE_NAME has completed with statusCode: $SERVICE_EXIT_CODE" | tee -p -a "/data/logs/entrypoint.log" "$LOG_DIR/init.txt" # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -exit $SERVICE_EXIT_CODE +__script_exit $SERVICE_EXIT_CODE diff --git a/rootfs/usr/local/etc/docker/init.d/99-nginx.sh b/rootfs/usr/local/etc/docker/init.d/99-nginx.sh old mode 100755 new mode 100644 index a80cc12..8d5b347 --- a/rootfs/usr/local/etc/docker/init.d/99-nginx.sh +++ b/rootfs/usr/local/etc/docker/init.d/99-nginx.sh @@ -36,27 +36,37 @@ export PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/s # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SCRIPT_FILE="$0" SERVICE_NAME="nginx" +# Function to exit appropriately based on context +__script_exit() { + local exit_code="${1:-0}" + if [ "${BASH_SOURCE[0]}" != "${0}" ]; then + # Script is being sourced - use return + return "$exit_code" + else + # Script is being executed - use exit + exit "$exit_code" + fi +} +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SCRIPT_NAME="$(basename "$SCRIPT_FILE" 2>/dev/null)" # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # exit if __start_init_scripts function hasn't been Initialized if [ ! -f "/run/__start_init_scripts.pid" ]; then - echo "__start_init_scripts function hasn't been Initialized" >&2 - SERVICE_IS_RUNNING="no" - exit 1 + echo "__start_init_scripts function hasn't been Initialized" >&2 + SERVICE_IS_RUNNING="no" + __script_exit 1 fi # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # import the functions file if [ -f "/usr/local/etc/docker/functions/entrypoint.sh" ]; then - . "/usr/local/etc/docker/functions/entrypoint.sh" + . "/usr/local/etc/docker/functions/entrypoint.sh" fi # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # import variables for set_env in "/root/env.sh" "/usr/local/etc/docker/env"/*.sh "/config/env"/*.sh; do - [ -f "$set_env" ] && . "$set_env" + [ -f "$set_env" ] && . "$set_env" done # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -printf '%s\n' "# - - - Initializing $SERVICE_NAME - - - #" -# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Custom functions # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -171,162 +181,162 @@ CMD_ENV="" # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Custom prerun functions - IE setup WWW_ROOT_DIR __execute_prerun() { - # Setup /config directories - __init_config_etc + # Setup /config directories + __init_config_etc - # Define other actions/commands + # Define other actions/commands } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Run any pre-execution checks __run_pre_execute_checks() { - # Set variables - local exitStatus=0 - local pre_execute_checks_MessageST="Running preexecute check for $SERVICE_NAME" # message to show at start - local pre_execute_checks_MessageEnd="Finished preexecute check for $SERVICE_NAME" # message to show at completion - __banner "$pre_execute_checks_MessageST" - # Put command to execute in parentheses - { - true - } - exitStatus=$? - __banner "$pre_execute_checks_MessageEnd: Status $exitStatus" + # Set variables + local exitStatus=0 + local pre_execute_checks_MessageST="Running preexecute check for $SERVICE_NAME" # message to show at start + local pre_execute_checks_MessageEnd="Finished preexecute check for $SERVICE_NAME" # message to show at completion + __banner "$pre_execute_checks_MessageST" + # Put command to execute in parentheses + { + true + } + exitStatus=$? + __banner "$pre_execute_checks_MessageEnd: Status $exitStatus" - # show exit message - if [ $exitStatus -ne 0 ]; then - echo "The pre-execution check has failed" >&2 - [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE" - exit 1 - fi - return $exitStatus + # show exit message + if [ $exitStatus -ne 0 ]; then + echo "The pre-execution check has failed" >&2 + [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE" + __script_exit 1 + fi + return $exitStatus } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # use this function to update config files - IE: change port __update_conf_files() { - local exitCode=0 # default exit code - local sysname="${SERVER_NAME:-${FULL_DOMAIN_NAME:-$HOSTNAME}}" # set hostname - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # CD into temp to bybass any permission errors - cd /tmp || false # lets keep shellcheck happy by adding false - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # delete files - #__rm "" + local exitCode=0 # default exit code + local sysname="${SERVER_NAME:-${FULL_DOMAIN_NAME:-$HOSTNAME}}" # set hostname + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # CD into temp to bybass any permission errors + cd /tmp || false # lets keep shellcheck happy by adding false + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # delete files + #__rm "" - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # custom commands - if [ ! -f "/config/stikked/config.php" ] && [ -f "/etc/stikked/config.php" ]; then - cp -Rf "/etc/stikked/config.php" "/config/stikked/config.php" - fi - cp -Rf "/config/stikked/config.php" "/etc/stikked/config.php" - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # replace variables - __replace "REPLACE_STIKKED_SITE_NAME" "$STIKKED_SITE_NAME" "/config/stikked/config.php" - __replace "REPLACE_STIKKED_CRON_KEY" "$STIKKED_CRON_KEY" "/config/stikked/config.php" - __replace "REPLACE_STIKKED_ADMIN_PASS" "$STIKKED_ADMIN_PASS" "/config/stikked/config.php" - # replace variables recursively - # __find_replace "" "" "$CONF_DIR" + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # custom commands + if [ ! -f "/config/stikked/config.php" ] && [ -f "/etc/stikked/config.php" ]; then + cp -Rf "/etc/stikked/config.php" "/config/stikked/config.php" + fi + cp -Rf "/config/stikked/config.php" "/etc/stikked/config.php" + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # replace variables + __replace "REPLACE_STIKKED_SITE_NAME" "$STIKKED_SITE_NAME" "/config/stikked/config.php" + __replace "REPLACE_STIKKED_CRON_KEY" "$STIKKED_CRON_KEY" "/config/stikked/config.php" + __replace "REPLACE_STIKKED_ADMIN_PASS" "$STIKKED_ADMIN_PASS" "/config/stikked/config.php" + # replace variables recursively + # __find_replace "" "" "$CONF_DIR" - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # define actions + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # define actions - # exit function - return $exitCode + # exit function + return $exitCode } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # function to run before executing __pre_execute() { - local exitCode=0 # default exit code - local sysname="${SERVER_NAME:-${FULL_DOMAIN_NAME:-$HOSTNAME}}" # set hostname + local exitCode=0 # default exit code + local sysname="${SERVER_NAME:-${FULL_DOMAIN_NAME:-$HOSTNAME}}" # set hostname - # define commands + # define commands - # execute if directories is empty - if __is_dir_empty "$CONF_DIR"; then - true - else - false - fi - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Set permissions - __fix_permissions "$SERVICE_USER" "$SERVICE_GROUP" - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Copy /config to /etc - for config_2_etc in $CONF_DIR $ADDITIONAL_CONFIG_DIRS; do - __initialize_system_etc "$config_2_etc" 2>/dev/stderr | tee -p -a "$LOG_DIR/init.txt" - done - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Replace variables - HOSTNAME="$sysname" __initialize_replace_variables "$ETC_DIR" "$CONF_DIR" "$WWW_ROOT_DIR" - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # define actions - __printf_space "40" "Admin username is:" "root" - __printf_space "40" "Admin password is:" "$STIKKED_ADMIN_PASS" - __printf_space "40" "cron key is:" "$STIKKED_CRON_KEY" + # execute if directories is empty + if __is_dir_empty "$CONF_DIR"; then + true + else + false + fi + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # Set permissions + __fix_permissions "$SERVICE_USER" "$SERVICE_GROUP" + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # Copy /config to /etc + for config_2_etc in $CONF_DIR $ADDITIONAL_CONFIG_DIRS; do + __initialize_system_etc "$config_2_etc" 2>/dev/stderr | tee -p -a "$LOG_DIR/init.txt" + done + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # Replace variables + HOSTNAME="$sysname" __initialize_replace_variables "$ETC_DIR" "$CONF_DIR" "$WWW_ROOT_DIR" + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # define actions + __printf_space "40" "Admin username is:" "root" + __printf_space "40" "Admin password is:" "$STIKKED_ADMIN_PASS" + __printf_space "40" "cron key is:" "$STIKKED_CRON_KEY" - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # unset unneeded variables - unset filesperms filename config_2_etc change_user change_user ADDITIONAL_CONFIG_DIRS application_files filedirs - # Lets wait a few seconds before continuing - sleep 5 - return $exitCode + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # unset unneeded variables + unset filesperms filename config_2_etc change_user change_user ADDITIONAL_CONFIG_DIRS application_files filedirs + # Lets wait a few seconds before continuing + sleep 5 + return $exitCode } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # function to run after executing __post_execute() { - local pid="" # init pid var - local retVal=0 # set default exit code - local waitTime=60 # how long to wait before executing - local postMessageST="Running post commands for $SERVICE_NAME" # message to show at start - local postMessageEnd="Finished post commands for $SERVICE_NAME" # message to show at completion - local sysname="${SERVER_NAME:-${FULL_DOMAIN_NAME:-$HOSTNAME}}" # set hostname + local pid="" # init pid var + local retVal=0 # set default exit code + local waitTime=60 # how long to wait before executing + local postMessageST="Running post commands for $SERVICE_NAME" # message to show at start + local postMessageEnd="Finished post commands for $SERVICE_NAME" # message to show at completion + local sysname="${SERVER_NAME:-${FULL_DOMAIN_NAME:-$HOSTNAME}}" # set hostname - # wait - sleep $waitTime - # execute commands - ( - # show message - __banner "$postMessageST" - # commands to execute - true - # show exit message - __banner "$postMessageEnd: Status $retVal" - ) 2>"/dev/stderr" | tee -p -a "$LOG_DIR/init.txt" & - pid=$! - # set exitCode - ps ax | awk '{print $1}' | grep -v grep | grep -q "$execPid$" && retVal=0 || retVal=10 - return $retVal + # wait + sleep $waitTime + # execute commands + ( + # show message + __banner "$postMessageST" + # commands to execute + true + # show exit message + __banner "$postMessageEnd: Status $retVal" + ) 2>"/dev/stderr" | tee -p -a "$LOG_DIR/init.txt" & + pid=$! + # set exitCode + ps ax | awk '{print $1}' | grep -v grep | grep -q "$execPid$" && retVal=0 || retVal=10 + return $retVal } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # use this function to update config files - IE: change port __pre_message() { - local exitCode=0 - if [ -n "$user_name" ] || [ -n "$user_pass" ] || [ -n "$root_user_name" ] || [ -n "$root_user_pass" ]; then - __banner "User info" - [ -n "$user_name" ] && __printf_space "40" "username:" "$user_name" && echo "$user_name" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_name" - [ -n "$user_pass" ] && __printf_space "40" "password:" "saved to ${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$user_pass" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" - [ -n "$root_user_name" ] && __printf_space "40" "root username:" "$root_user_name" && echo "$root_user_name" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name" - [ -n "$root_user_pass" ] && __printf_space "40" "root password:" "saved to ${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$root_user_pass" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" - __banner "" - fi - [ -n "$PRE_EXEC_MESSAGE" ] && eval echo "$PRE_EXEC_MESSAGE" - # execute commands + local exitCode=0 + if [ -n "$user_name" ] || [ -n "$user_pass" ] || [ -n "$root_user_name" ] || [ -n "$root_user_pass" ]; then + __banner "User info" + [ -n "$user_name" ] && __printf_space "40" "username:" "$user_name" && echo "$user_name" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_name" + [ -n "$user_pass" ] && __printf_space "40" "password:" "saved to ${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$user_pass" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" + [ -n "$root_user_name" ] && __printf_space "40" "root username:" "$root_user_name" && echo "$root_user_name" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name" + [ -n "$root_user_pass" ] && __printf_space "40" "root password:" "saved to ${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$root_user_pass" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" + __banner "" + fi + [ -n "$PRE_EXEC_MESSAGE" ] && eval echo "$PRE_EXEC_MESSAGE" + # execute commands - # set exitCode - return $exitCode + # set exitCode + return $exitCode } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # use this function to setup ssl support __update_ssl_conf() { - local exitCode=0 - local sysname="${SERVER_NAME:-${FULL_DOMAIN_NAME:-$HOSTNAME}}" # set hostname - # execute commands + local exitCode=0 + local sysname="${SERVER_NAME:-${FULL_DOMAIN_NAME:-$HOSTNAME}}" # set hostname + # execute commands - # set exitCode - return $exitCode + # set exitCode + return $exitCode } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - __create_service_env() { - cat </dev/null + cat </dev/null # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # root/admin user info [password/random] #ENV_ROOT_USER_NAME="${ENV_ROOT_USER_NAME:-$NGINX_ROOT_USER_NAME}" # root user name @@ -341,67 +351,67 @@ __create_service_env() { #user_pass="${ENV_USER_PASS:-$user_pass}" # normal user password EOF - __file_exists_with_content "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" || return 1 + __file_exists_with_content "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" || return 1 } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # script to start server __run_start_script() { - local runExitCode=0 - local workdir="$(eval echo "${WORK_DIR:-}")" # expand variables - local cmd="$(eval echo "${EXEC_CMD_BIN:-}")" # expand variables - local args="$(eval echo "${EXEC_CMD_ARGS:-}")" # expand variables - local name="$(eval echo "${EXEC_CMD_NAME:-}")" # expand variables - local pre="$(eval echo "${EXEC_PRE_SCRIPT:-}")" # expand variables - local extra_env="$(eval echo "${CMD_ENV//,/ }")" # expand variables - local lc_type="$(eval echo "${LANG:-${LC_ALL:-$LC_CTYPE}}")" # expand variables - local home="$(eval echo "${workdir//\/root/\/tmp\/docker}")" # expand variables - local path="$(eval echo "$PATH")" # expand variables - local message="$(eval echo "")" # expand variables - local sysname="${SERVER_NAME:-${FULL_DOMAIN_NAME:-$HOSTNAME}}" # set hostname - [ -f "$CONF_DIR/$SERVICE_NAME.exec_cmd.sh" ] && . "$CONF_DIR/$SERVICE_NAME.exec_cmd.sh" - # - __run_pre_execute_checks 2>/dev/stderr | tee -a -p "/data/logs/entrypoint.log" "$LOG_DIR/init.txt" || return 20 - # - if [ -z "$cmd" ]; then - __post_execute 2>"/dev/stderr" | tee -p -a "$LOG_DIR/init.txt" - retVal=$? - echo "Initializing $SCRIPT_NAME has completed" - exit $retVal - else - # ensure the command exists - if [ ! -x "$cmd" ]; then - echo "$name is not a valid executable" - return 2 - fi - # check and exit if already running - if __proc_check "$name" || __proc_check "$cmd"; then - echo "$name is already running" >&2 - return 0 - else - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # show message if env exists - if [ -n "$cmd" ]; then - [ -n "$SERVICE_USER" ] && echo "Setting up $cmd to run as $SERVICE_USER" || SERVICE_USER="root" - [ -n "$SERVICE_PORT" ] && echo "$name will be running on port $SERVICE_PORT" || SERVICE_PORT="" - fi - if [ -n "$pre" ] && [ -n "$(command -v "$pre" 2>/dev/null)" ]; then - export cmd_exec="$pre $cmd $args" - message="Starting service: $name $args through $pre" - else - export cmd_exec="$cmd $args" - message="Starting service: $name $args" - fi - [ -n "$su_exec" ] && echo "using $su_exec" | tee -a -p "$LOG_DIR/init.txt" - echo "$message" | tee -a -p "$LOG_DIR/init.txt" - su_cmd touch "$SERVICE_PID_FILE" - __post_execute 2>"/dev/stderr" | tee -p -a "$LOG_DIR/init.txt" & - if [ "$RESET_ENV" = "yes" ]; then - env_command="$(echo "env -i HOME=\"$home\" LC_CTYPE=\"$lc_type\" PATH=\"$path\" HOSTNAME=\"$sysname\" USER=\"${SERVICE_USER:-$RUNAS_USER}\" $extra_env")" - execute_command="$(__trim "$su_exec $env_command $cmd_exec")" - if [ ! -f "$START_SCRIPT" ]; then - cat <"$START_SCRIPT" + local runExitCode=0 + local workdir="$(eval echo "${WORK_DIR:-}")" # expand variables + local cmd="$(eval echo "${EXEC_CMD_BIN:-}")" # expand variables + local args="$(eval echo "${EXEC_CMD_ARGS:-}")" # expand variables + local name="$(eval echo "${EXEC_CMD_NAME:-}")" # expand variables + local pre="$(eval echo "${EXEC_PRE_SCRIPT:-}")" # expand variables + local extra_env="$(eval echo "${CMD_ENV//,/ }")" # expand variables + local lc_type="$(eval echo "${LANG:-${LC_ALL:-$LC_CTYPE}}")" # expand variables + local home="$(eval echo "${workdir//\/root/\/tmp\/docker}")" # expand variables + local path="$(eval echo "$PATH")" # expand variables + local message="$(eval echo "")" # expand variables + local sysname="${SERVER_NAME:-${FULL_DOMAIN_NAME:-$HOSTNAME}}" # set hostname + [ -f "$CONF_DIR/$SERVICE_NAME.exec_cmd.sh" ] && . "$CONF_DIR/$SERVICE_NAME.exec_cmd.sh" + # + __run_pre_execute_checks 2>/dev/stderr | tee -a -p "/data/logs/entrypoint.log" "$LOG_DIR/init.txt" || return 20 + # + if [ -z "$cmd" ]; then + __post_execute 2>"/dev/stderr" | tee -p -a "$LOG_DIR/init.txt" + retVal=$? + echo "Initializing $SCRIPT_NAME has completed" + __script_exit $retVal + else + # ensure the command exists + if [ ! -x "$cmd" ]; then + echo "$name is not a valid executable" + return 2 + fi + # check and exit if already running + if __proc_check "$name" || __proc_check "$cmd"; then + echo "$name is already running" >&2 + return 0 + else + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # show message if env exists + if [ -n "$cmd" ]; then + [ -n "$SERVICE_USER" ] && echo "Setting up $cmd to run as $SERVICE_USER" || SERVICE_USER="root" + [ -n "$SERVICE_PORT" ] && echo "$name will be running on port $SERVICE_PORT" || SERVICE_PORT="" + fi + if [ -n "$pre" ] && [ -n "$(command -v "$pre" 2>/dev/null)" ]; then + export cmd_exec="$pre $cmd $args" + message="Starting service: $name $args through $pre" + else + export cmd_exec="$cmd $args" + message="Starting service: $name $args" + fi + [ -n "$su_exec" ] && echo "using $su_exec" | tee -a -p "$LOG_DIR/init.txt" + echo "$message" | tee -a -p "$LOG_DIR/init.txt" + su_cmd touch "$SERVICE_PID_FILE" + __post_execute 2>"/dev/stderr" | tee -p -a "$LOG_DIR/init.txt" & + if [ "$RESET_ENV" = "yes" ]; then + env_command="$(echo "env -i HOME=\"$home\" LC_CTYPE=\"$lc_type\" PATH=\"$path\" HOSTNAME=\"$sysname\" USER=\"${SERVICE_USER:-$RUNAS_USER}\" $extra_env")" + execute_command="$(__trim "$su_exec $env_command $cmd_exec")" + if [ ! -f "$START_SCRIPT" ]; then + cat <"$START_SCRIPT" #!/usr/bin/env bash -trap 'exitCode=\$?;[ \$exitCode -ne 0 ] && [ -f "\$SERVICE_PID_FILE" ] && rm -Rf "\$SERVICE_PID_FILE";exit \$exitCode' EXIT +trap 'exitCode=\$?;if [ \$exitCode -ne 0 ] && [ -f "\$SERVICE_PID_FILE" ]; then rm -Rf "\$SERVICE_PID_FILE"; fi; exit \$exitCode' EXIT # set -Eeo pipefail # Setting up $cmd to run as ${SERVICE_USER:-root} with env @@ -417,13 +427,13 @@ checkPID="\$(ps ax | awk '{print \$1}' | grep -v grep | grep "\$execPid$" || fal exit \$retVal EOF - fi - else - if [ ! -f "$START_SCRIPT" ]; then - execute_command="$(__trim "$su_exec $cmd_exec")" - cat <"$START_SCRIPT" + fi + else + if [ ! -f "$START_SCRIPT" ]; then + execute_command="$(__trim "$su_exec $cmd_exec")" + cat <"$START_SCRIPT" #!/usr/bin/env bash -trap 'exitCode=\$?;[ \$exitCode -ne 0 ] && [ -f "\$SERVICE_PID_FILE" ] && rm -Rf "\$SERVICE_PID_FILE";exit \$exitCode' EXIT +trap 'exitCode=\$?;if [ \$exitCode -ne 0 ] && [ -f "\$SERVICE_PID_FILE" ]; then rm -Rf "\$SERVICE_PID_FILE"; fi; exit \$exitCode' EXIT # set -Eeo pipefail # Setting up $cmd to run as ${SERVICE_USER:-root} @@ -439,34 +449,34 @@ checkPID="\$(ps ax | awk '{print \$1}' | grep -v grep | grep "\$execPid$" || fal exit \$retVal EOF - fi - fi - fi - [ -x "$START_SCRIPT" ] || chmod 755 -Rf "$START_SCRIPT" - [ "$CONTAINER_INIT" = "yes" ] || eval sh -c "$START_SCRIPT" - runExitCode=$? - return $runExitCode - fi + fi + fi + fi + [ -x "$START_SCRIPT" ] || chmod 755 -Rf "$START_SCRIPT" + [ "$CONTAINER_INIT" = "yes" ] || eval sh -c "$START_SCRIPT" + runExitCode=$? + return $runExitCode + fi } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # username and password actions __run_secure_function() { - if [ -n "$user_name" ] || [ -n "$user_pass" ]; then - for filesperms in "${USER_FILE_PREFIX}"/*; do - if [ -e "$filesperms" ]; then - chmod -Rf 600 "$filesperms" - chown -Rf $SERVICE_USER:$SERVICE_USER "$filesperms" 2>/dev/null - fi - done 2>/dev/null | tee -p -a "$LOG_DIR/init.txt" - fi - if [ -n "$root_user_name" ] || [ -n "$root_user_pass" ]; then - for filesperms in "${ROOT_FILE_PREFIX}"/*; do - if [ -e "$filesperms" ]; then - chmod -Rf 600 "$filesperms" - chown -Rf $SERVICE_USER:$SERVICE_USER "$filesperms" 2>/dev/null - fi - done 2>/dev/null | tee -p -a "$LOG_DIR/init.txt" - fi + if [ -n "$user_name" ] || [ -n "$user_pass" ]; then + for filesperms in "${USER_FILE_PREFIX}"/*; do + if [ -e "$filesperms" ]; then + chmod -Rf 600 "$filesperms" + chown -Rf $SERVICE_USER:$SERVICE_USER "$filesperms" 2>/dev/null + fi + done 2>/dev/null | tee -p -a "$LOG_DIR/init.txt" + fi + if [ -n "$root_user_name" ] || [ -n "$root_user_pass" ]; then + for filesperms in "${ROOT_FILE_PREFIX}"/*; do + if [ -e "$filesperms" ]; then + chmod -Rf 600 "$filesperms" + chown -Rf $SERVICE_USER:$SERVICE_USER "$filesperms" 2>/dev/null + fi + done 2>/dev/null | tee -p -a "$LOG_DIR/init.txt" + fi } # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Allow ENV_ variable - Import env file @@ -494,12 +504,12 @@ __check_service "$1" # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Database env if [ "$IS_DATABASE_SERVICE" = "yes" ] || [ "$USES_DATABASE_SERVICE" = "yes" ]; then - RESET_ENV="no" - DATABASE_CREATE="${ENV_DATABASE_CREATE:-$DATABASE_CREATE}" - DATABASE_USER="${ENV_DATABASE_USER:-${DATABASE_USER:-$user_name}}" - DATABASE_PASSWORD="${ENV_DATABASE_PASSWORD:-${DATABASE_PASSWORD:-$user_pass}}" - DATABASE_ROOT_USER="${ENV_DATABASE_ROOT_USER:-${DATABASE_ROOT_USER:-$root_user_name}}" - DATABASE_ROOT_PASSWORD="${ENV_DATABASE_ROOT_PASSWORD:-${DATABASE_ROOT_PASSWORD:-$root_user_pass}}" + RESET_ENV="no" + DATABASE_CREATE="${ENV_DATABASE_CREATE:-$DATABASE_CREATE}" + DATABASE_USER="${ENV_DATABASE_USER:-${DATABASE_USER:-$user_name}}" + DATABASE_PASSWORD="${ENV_DATABASE_PASSWORD:-${DATABASE_PASSWORD:-$user_pass}}" + DATABASE_ROOT_USER="${ENV_DATABASE_ROOT_USER:-${DATABASE_ROOT_USER:-$root_user_name}}" + DATABASE_ROOT_PASSWORD="${ENV_DATABASE_ROOT_PASSWORD:-${DATABASE_ROOT_PASSWORD:-$root_user_pass}}" fi # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # Allow per init script usernames and passwords @@ -567,18 +577,18 @@ __pre_execute # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - __run_start_script 2>>/dev/stderr | tee -p -a "/data/logs/entrypoint.log" && errorCode=0 || errorCode=10 if [ -n "$EXEC_CMD_BIN" ]; then - if [ "$errorCode" -ne 0 ]; then - echo "Failed to execute: ${cmd_exec:-$EXEC_CMD_BIN $EXEC_CMD_ARGS}" | tee -p -a "/data/logs/entrypoint.log" "$LOG_DIR/init.txt" - rm -Rf "$SERVICE_PID_FILE" - SERVICE_EXIT_CODE=10 - SERVICE_IS_RUNNING="no" - else - SERVICE_EXIT_CODE=0 - SERVICE_IS_RUNNING="no" - fi - SERVICE_EXIT_CODE=0 + if [ "$errorCode" -ne 0 ]; then + echo "Failed to execute: ${cmd_exec:-$EXEC_CMD_BIN $EXEC_CMD_ARGS}" | tee -p -a "/data/logs/entrypoint.log" "$LOG_DIR/init.txt" + rm -Rf "$SERVICE_PID_FILE" + SERVICE_EXIT_CODE=10 + SERVICE_IS_RUNNING="no" + else + SERVICE_EXIT_CODE=0 + SERVICE_IS_RUNNING="no" + fi + SERVICE_EXIT_CODE=0 fi # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - __banner "Initializing of $SERVICE_NAME has completed with statusCode: $SERVICE_EXIT_CODE" | tee -p -a "/data/logs/entrypoint.log" "$LOG_DIR/init.txt" # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -exit $SERVICE_EXIT_CODE +__script_exit $SERVICE_EXIT_CODE