mirror of
				https://github.com/dockersrc/scripts
				synced 2025-11-04 01:02:39 -05:00 
			
		
		
		
	🦈🏠🐜❗ Initial Commit ❗🐜🦈🏠
This commit is contained in:
		
							
								
								
									
										487
									
								
								init/done/00-couchdb.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										487
									
								
								init/done/00-couchdb.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,487 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
 | 
			
		||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -o pipefail -x$DEBUGGER_OPTIONS || set -o pipefail
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
printf '%s\n' "# - - - Initializing couchdb - - - #"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_NAME="couchdb"
 | 
			
		||||
SCRIPT_NAME="$(basename "$0" 2>/dev/null)"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
export PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run trap command on exit
 | 
			
		||||
trap 'retVal=$?;[ "$SERVICE_IS_RUNNING" != "true" ] && [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE";exit $retVal' SIGINT SIGTERM EXIT
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# import the functions file
 | 
			
		||||
if [ -f "/usr/local/etc/docker/functions/entrypoint.sh" ]; then
 | 
			
		||||
  . "/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"
 | 
			
		||||
done
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Custom functions
 | 
			
		||||
__curl() { curl -q -LSsf --user "$root_user_name:$root_user_pass" "$@"; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__curl_users() { __curl -X PUT -H 'Accept: application/json' -H 'Content-Type: application/json' 'http://'$COUCHDB_SERVER':'$SERVICE_PORT'/_users/org.couchdb.user:'$1'' -d "{\"name\": \"$1\", \"password\": \"$2\", \"roles\": [], \"type\": \"user\"}" || return 2; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__curl_database() { curl -q -LSsf -X PUT 'http://'$root_user_name:$root_user_pass'@'$COUCHDB_SERVER':'$SERVICE_PORT'/'$1'' || return 2; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Show message before execute
 | 
			
		||||
PRE_EXEC_MESSAGE=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Default predefined variables
 | 
			
		||||
WORKDIR=""                 # set working directory
 | 
			
		||||
DATA_DIR="/data"           # set data directory
 | 
			
		||||
WWW_DIR="/data/htdocs/www" # set the web root
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ETC_DIR="/opt/couchdb/etc" # set etc directory
 | 
			
		||||
CONF_DIR="/config/couchdb" # set config directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
RUN_DIR="/run/init.d"        # set scripts pid dir
 | 
			
		||||
LOG_DIR="/data/logs/couchdb" # set log directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ROOT_FILE_PREFIX="/config/secure/auth/root" # directory to save username/password for root user
 | 
			
		||||
USER_FILE_PREFIX="/config/secure/auth/user" # directory to save username/password for normal user
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set the database directory
 | 
			
		||||
DATABASE_DIR="${DATABASE_DIR_COUCHDB:-/data/db/couchdb}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional predefined variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# port which service is listening on
 | 
			
		||||
SERVICE_PORT="5984"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# execute command variables
 | 
			
		||||
SERVICE_UID="0"        # set the user id
 | 
			
		||||
SERVICE_USER="root"    # execute command as another user
 | 
			
		||||
EXEC_CMD_BIN="couchdb" # command to execute
 | 
			
		||||
EXEC_CMD_ARGS="-vvvvv" # command arguments
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a web server
 | 
			
		||||
IS_WEB_SERVER="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a database server
 | 
			
		||||
IS_DATABASE_SERVICE="yes"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional variables
 | 
			
		||||
NODENAME="${NODENAME:-}"
 | 
			
		||||
CREATE_DATABASE="${CREATE_DATABASE:-}"
 | 
			
		||||
COUCHDB_SERVER="${COUCHDB_SERVER:-localhost}"
 | 
			
		||||
COUCHDB_ROOT_USER_NAME="${COUCHDB_USER:-root}"
 | 
			
		||||
COUCHDB_ROOT_PASS_WORD="${COUCHDB_PASSWORD:-$(__random_password)}"
 | 
			
		||||
COUCHDB_ERLANG_COOKIE="${COUCHDB_ERLANG_COOKIE:-}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# usernames
 | 
			
		||||
user_name="${COUCHDB_USER_NAME:-}"           # normal user name
 | 
			
		||||
root_user_name="${COUCHDB_ROOT_USER_NAME:-}" # root user name
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# passwords [password/random]
 | 
			
		||||
user_pass="${COUCHDB_USER_PASS_WORD:-}"      # normal user password
 | 
			
		||||
root_user_pass="${COUCHDB_ROOT_PASS_WORD:-}" # root user password
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Overwrite variables from files
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_name" ] && user_name="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && user_pass="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name" ] && root_user_name="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && root_user_pass="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Specifiy custom directories to be created
 | 
			
		||||
ADD_APPLICATION_FILES=""
 | 
			
		||||
ADD_APPLICATION_DIRS=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
APPLICATION_FILES="$LOG_DIR/couchdb.log"
 | 
			
		||||
APPLICATION_DIRS="$RUN_DIR $ETC_DIR $CONF_DIR $LOG_DIR"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__update_conf_files() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
 | 
			
		||||
  # delete files
 | 
			
		||||
  [ -e "/opt/couchdb/data" ] && rm -rf "/opt/couchdb/data"
 | 
			
		||||
 | 
			
		||||
  # define actions
 | 
			
		||||
 | 
			
		||||
  # create default directories
 | 
			
		||||
  for filedirs in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
    if [ -n "$filedirs" ] && [ ! -d "$filedirs" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating directory $filedirs with permissions 777"
 | 
			
		||||
        mkdir -p "$filedirs" && chmod -Rf 777 "$filedirs"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create default files
 | 
			
		||||
  for application_files in $ADD_APPLICATION_FILES $APPLICATION_FILES; do
 | 
			
		||||
    if [ -n "$application_files" ] && [ ! -e "$application_files" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating file $application_files with permissions 777"
 | 
			
		||||
        touch "$application_files" && chmod -Rf 777 "$application_files"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create directories if variable is yes"
 | 
			
		||||
  [ "$IS_WEB_SERVER" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $WWW_DIR" && { [ -d "$WWW_DIR" ] || { (echo "Creating directory $WWW_DIR with permissions 777" && mkdir -p "$WWW_DIR" && chmod -f 777 "$WWW_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  [ "$IS_DATABASE_SERVICE" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $DATABASE_DIR" && { [ -d "$DATABASE_DIR" ] || { (echo "Creating directory $DATABASE_DIR with permissions 777" && mkdir -p "$DATABASE_DIR" && chmod -f 777 "$DATABASE_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  # copy config files to system
 | 
			
		||||
  __file_copy "$CONF_DIR/." "$ETC_DIR/" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  # replace variables
 | 
			
		||||
  __replace "REPLACE_DATABASE_DIR" "$DATABASE_DIR" "$ETC_DIR/default.ini"
 | 
			
		||||
  # custom commands
 | 
			
		||||
  touch "$ETC_DIR/local.d/docker.ini" 2>/dev/null
 | 
			
		||||
  ln -sf "$DATABASE_DIR" "/opt/couchdb/data" 2>/dev/null
 | 
			
		||||
 | 
			
		||||
  # other
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset application_files filedirs
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run before executing
 | 
			
		||||
__pre_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  # define commands
 | 
			
		||||
 | 
			
		||||
  # execute if directories is empty
 | 
			
		||||
  #__is_dir_empty "" &&
 | 
			
		||||
 | 
			
		||||
  # create user if needed
 | 
			
		||||
  # __create_service_user "$user" "/home/$user" "${USER_GID:-${USER_UID:-1000}"
 | 
			
		||||
  # set user on files/folders
 | 
			
		||||
  if [ -n "$user" ] && [ "$user" != "root" ]; then
 | 
			
		||||
    if grep -s -q "$user:" "/etc/passwd"; then
 | 
			
		||||
      for permissions in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
        if [ -n "$permissions" ] && [ -e "$permissions" ]; then
 | 
			
		||||
          (chown -Rf $user:$user "$permissions" && echo "changed ownership on $permissions to $user") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
        fi
 | 
			
		||||
      done
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset filesperms filename
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run after executing
 | 
			
		||||
__post_execute() {
 | 
			
		||||
  local exitCode=0                                # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}"              # specifiy different user
 | 
			
		||||
  local user_name="${user_name:-$root_user_name}" # set user name
 | 
			
		||||
  local user_pass="${user_pass:-$root_user_pass}" # set user pass
 | 
			
		||||
  sleep 60                                        # how long to wait before executing
 | 
			
		||||
  echo "Running post commands"                    # message
 | 
			
		||||
  # execute commands
 | 
			
		||||
  if ! __curl "http://$COUCHDB_SERVER:$SERVICE_PORT/_users" | grep -q 'db_name":"_users'; then
 | 
			
		||||
    echo "Creating the _users databases"
 | 
			
		||||
    if __curl_database "_users" | grep -qE '200|"ok":true'; then
 | 
			
		||||
      echo "Created database _users"
 | 
			
		||||
    else
 | 
			
		||||
      echo "Failed to create database _users" >&2
 | 
			
		||||
    fi
 | 
			
		||||
    sleep 1
 | 
			
		||||
  fi
 | 
			
		||||
  if ! __curl "http://$COUCHDB_SERVER:$SERVICE_PORT/_replicator" | grep -q 'db_name":"_replicator'; then
 | 
			
		||||
    echo "Creating the _replicator databases"
 | 
			
		||||
    if __curl_database "_replicator" | grep -qE '200|"ok":true'; then
 | 
			
		||||
      echo "Created database _replicator"
 | 
			
		||||
    else
 | 
			
		||||
      echo "Failed to create database _replicator" >&2
 | 
			
		||||
    fi
 | 
			
		||||
    sleep 1
 | 
			
		||||
  fi
 | 
			
		||||
  if ! __curl "http://$COUCHDB_SERVER:$SERVICE_PORT/_global_changes" | grep -q 'db_name":"_global_changes'; then
 | 
			
		||||
    echo "Creating the _global_changes databases"
 | 
			
		||||
    if __curl_database "_global_changes" | grep -qE '200|"ok":true'; then
 | 
			
		||||
      echo "Created database _global_changes"
 | 
			
		||||
    else
 | 
			
		||||
      echo "Failed to create database _global_changes" >&2
 | 
			
		||||
    fi
 | 
			
		||||
    sleep 1
 | 
			
		||||
  fi
 | 
			
		||||
  if [ -n "$user_name" ] && [ -n "$user_pass" ]; then
 | 
			
		||||
    echo "Creating new user $username"
 | 
			
		||||
    if __curl_users "$user_name" "$user_pass"; then
 | 
			
		||||
      echo "Created user: $user_name"
 | 
			
		||||
    else
 | 
			
		||||
      echo "Failed to create user: $user_name" >&2
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
  if [ -n "$CREATE_DATABASE" ]; then
 | 
			
		||||
    echo "Creating database: $CREATE_DATABASE"
 | 
			
		||||
    __curl_database "$CREATE_DATABASE" || echo "Failed to create database: $CREATE_DATABASE" >&2
 | 
			
		||||
  fi
 | 
			
		||||
  echo ""
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__pre_message() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
  [ -n "$user_name" ] && echo "username:               $user_name" && echo "$user_name" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$user_pass" ] && echo "password:               saved to ${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$user_pass" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
  [ -n "$root_user_name" ] && echo "root username:     $root_user_name" && echo "$root_user_name" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$root_user_pass" ] && echo "root password:     saved to ${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$root_user_pass" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to setup ssl support
 | 
			
		||||
__update_ssl_conf() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__create_env() {
 | 
			
		||||
  cat <<EOF | tee "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" &>/dev/null
 | 
			
		||||
# ENV_WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
# ENV_WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
# ENV_ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
# ENV_DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
# ENV_CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
# ENV_DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
# ENV_SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
# ENV_SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
# ENV_SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
# EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
# EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
# EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
# ENV_USER_NAME="${user_name:-$ENV_USER_NAME}"                      #
 | 
			
		||||
# ENV_USER_PASS="${user_pass:-$ENV_USER_PASS}"                      #
 | 
			
		||||
# ENV_ROOT_USER_NAME="${root_user_name:-$ENV_ROOT_USER_NAME}"       #
 | 
			
		||||
# ENV_ROOT_USER_PASS="${root_user_pass:-$ENV_ROOT_USER_PASS}"       #
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
  [ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] || return 1
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# script to start server
 | 
			
		||||
__run_start_script() {
 | 
			
		||||
  local user="${SERVICE_USER:-root}"
 | 
			
		||||
  local workdir="${WORKDIR:-$WORK_DIR}"
 | 
			
		||||
  local cmd="$EXEC_CMD_BIN $EXEC_CMD_ARGS"
 | 
			
		||||
  local lc_type="${LC_ALL:-${LC_CTYPE:-$LANG}}"
 | 
			
		||||
  local home="${workdir//\/root/\/tmp\/docker}"
 | 
			
		||||
  local path="/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
  if [ -z "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
    __post_execute 2>"/dev/stderr" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    echo "Initializing $SCRIPT_NAME has completed"
 | 
			
		||||
  else
 | 
			
		||||
    # ensure the command exists
 | 
			
		||||
    if [ ! -x "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is not a valid executable"
 | 
			
		||||
      exit 2
 | 
			
		||||
    fi
 | 
			
		||||
    # set working directories
 | 
			
		||||
    [ -z "$home" ] && home="${workdir:-/tmp/docker}"
 | 
			
		||||
    [ "$home" = "/root" ] && home="/tmp/docker"
 | 
			
		||||
    [ "$home" = "$workdir" ] && workdir=""
 | 
			
		||||
    # create needed directories
 | 
			
		||||
    [ -n "$home" ] && { [ -d "$home" ] || mkdir -p "$home"; }
 | 
			
		||||
    [ -n "$workdir" ] && { [ -d "$workdir" ] || mkdir -p "$workdir" || workdir="/tmp"; }
 | 
			
		||||
    [ -n "$workdir" ] && __cd "$workdir" || { [ -n "$home" ] && __cd "$home"; } || __cd "/tmp"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$home" ] && chmod -f 777 "$home"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$workdir" ] && chmod -f 777 "$workdir"
 | 
			
		||||
    # check and exit if already running
 | 
			
		||||
    if __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is already running" >&2
 | 
			
		||||
      exit 0
 | 
			
		||||
    else
 | 
			
		||||
      echo "Starting service: $EXEC_CMD_NAME $EXEC_CMD_ARGS"
 | 
			
		||||
      su_cmd touch "$SERVICE_PID_FILE"
 | 
			
		||||
      __post_execute 2>"/dev/stderr" 2>&1 |& tee -a "$LOG_DIR/init.txt" &>/dev/null &
 | 
			
		||||
      if [ -n "$NODENAME" ] && ! grep "couchdb@" /opt/couchdb/etc/vm.args; then
 | 
			
		||||
        echo "-name couchdb@$NODENAME" >>/opt/couchdb/etc/vm.args
 | 
			
		||||
      fi
 | 
			
		||||
      if [ -n "$root_user_name" ] && [ -n "$root_user_pass" ]; then
 | 
			
		||||
        if ! grep -Pzoqr "\[admins\]\n$root_user_name =" /opt/couchdb/etc/local.d/*.ini /opt/couchdb/etc/local.ini; then
 | 
			
		||||
          printf "\n[admins]\n%s = %s\n" "$root_user_name" "$root_user_pass" >>/opt/couchdb/etc/local.d/docker.ini
 | 
			
		||||
        fi
 | 
			
		||||
      fi
 | 
			
		||||
      if [ -n "$COUCHDB_SECRET" ]; then
 | 
			
		||||
        if ! grep -Pzoqr "\[chttpd_auth\]\nsecret =" /opt/couchdb/etc/local.d/*.ini /opt/couchdb/etc/local.ini; then
 | 
			
		||||
          printf "\n[chttpd_auth]\nsecret = %s\n" "$COUCHDB_SECRET" >>/opt/couchdb/etc/local.d/docker.ini
 | 
			
		||||
        fi
 | 
			
		||||
      fi
 | 
			
		||||
      if [ -n "$COUCHDB_ERLANG_COOKIE" ]; then
 | 
			
		||||
        cookieFile='/opt/couchdb/.erlang.cookie'
 | 
			
		||||
        if [ -e "$cookieFile" ]; then
 | 
			
		||||
          if [ "$(cat "$cookieFile" 2>/dev/null)" != "$COUCHDB_ERLANG_COOKIE" ]; then
 | 
			
		||||
            echo >&2
 | 
			
		||||
            echo >&2 "warning: $cookieFile contents do not match COUCHDB_ERLANG_COOKIE"
 | 
			
		||||
            echo >&2
 | 
			
		||||
          fi
 | 
			
		||||
        else
 | 
			
		||||
          echo "$COUCHDB_ERLANG_COOKIE" >"$cookieFile"
 | 
			
		||||
        fi
 | 
			
		||||
        chmod 600 "$cookieFile"
 | 
			
		||||
      fi
 | 
			
		||||
      if [ "$(id -u)" = '0' ]; then
 | 
			
		||||
        find /opt/couchdb \! \( -user couchdb -group couchdb \) -exec chown -f $SERVICE_USER:$SERVICE_USER '{}' +
 | 
			
		||||
        find /opt/couchdb/data -type d ! -perm 0755 -exec chmod -f 0755 '{}' +
 | 
			
		||||
        find /opt/couchdb/data -type f ! -perm 0644 -exec chmod -f 0644 '{}' +
 | 
			
		||||
        find /opt/couchdb/etc -type d ! -perm 0755 -exec chmod -f 0755 '{}' +
 | 
			
		||||
        find /opt/couchdb/etc -type f ! -perm 0644 -exec chmod -f 0644 '{}' +
 | 
			
		||||
      fi
 | 
			
		||||
      su_cmd env -i HOME="$home" LC_CTYPE="$lc_type" PATH="$path" USER="$user" sh -c "$cmd" || return 10
 | 
			
		||||
    fi
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# simple cd function
 | 
			
		||||
__cd() { mkdir -p "$1" && builtin cd "$1" || exit 1; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# process check functions
 | 
			
		||||
__pcheck() { [ -n "$(type -P pgrep 2>/dev/null)" ] && pgrep -x "$1" &>/dev/null && return 0 || return 10; }
 | 
			
		||||
__pgrep() { __pcheck "${1:-$EXEC_CMD_BIN}" || __ps aux 2>/dev/null | grep -Fw " ${1:-$EXEC_CMD_BIN}" | grep -qv ' grep' | grep '^' && return 0 || return 10; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# check if process is already running
 | 
			
		||||
__proc_check() {
 | 
			
		||||
  cmd_bin="$(type -P "${1:-$EXEC_CMD_BIN}")"
 | 
			
		||||
  cmd_name="$(basename "${cmd_bin:-$EXEC_CMD_NAME}")"
 | 
			
		||||
  if __pgrep "$cmd_bin" || __pgrep "$cmd_name"; then
 | 
			
		||||
    SERVICE_IS_RUNNING="true"
 | 
			
		||||
    touch "$SERVICE_PID_FILE"
 | 
			
		||||
    echo "$cmd_name is already running"
 | 
			
		||||
    return 0
 | 
			
		||||
  else
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow ENV_ variable - Import env file
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_EXIT_CODE=0                                           # default exit code
 | 
			
		||||
WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
PRE_EXEC_MESSAGE="${ENV_PRE_EXEC_MESSAGE:-$PRE_EXEC_MESSAGE}" # Show message before execute
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# application specific
 | 
			
		||||
EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
EXEC_CMD_BIN="$(type -P "$EXEC_CMD_BIN" || echo "$EXEC_CMD_BIN")" # set full path
 | 
			
		||||
EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
SERVICE_PID_FILE="/run/init.d/$EXEC_CMD_NAME.pid"                 # set the pid file location
 | 
			
		||||
EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
SERVICE_PID_NUMBER="$(__pgrep)"                                   # check if running
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# create auth directories
 | 
			
		||||
[ -n "$USER_FILE_PREFIX" ] && { [ -d "$USER_FILE_PREFIX" ] || mkdir -p "$USER_FILE_PREFIX"; }
 | 
			
		||||
[ -n "$ROOT_FILE_PREFIX" ] && { [ -d "$ROOT_FILE_PREFIX" ] || mkdir -p "$ROOT_FILE_PREFIX"; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow per init script usernames and passwords
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/name" ] && user_name="$(<"$ETC_DIR/auth/user/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/pass" ] && user_pass="$(<"$ETC_DIR/auth/user/pass")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/name" ] && root_user_name="$(<"$ETC_DIR/auth/root/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/pass" ] && root_user_pass="$(<"$ETC_DIR/auth/root/pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow setting initial users and passwords via environment
 | 
			
		||||
user_name="${user_name:-$ENV_USER_NAME}"
 | 
			
		||||
user_pass="${user_pass:-$ENV_USER_PASS}"
 | 
			
		||||
root_user_name="${root_user_name:-$ENV_ROOT_USER_NAME}"
 | 
			
		||||
root_user_pass="${root_user_pass:-$ENV_ROOT_USER_PASS}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set password to random if variable is random
 | 
			
		||||
if [ "$user_pass" = "random" ]; then
 | 
			
		||||
  user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
if [ "$root_user_pass" = "random" ]; then
 | 
			
		||||
  root_user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow variables via imports - Overwrite existing
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Only run check
 | 
			
		||||
if [ "$1" = "check" ]; then
 | 
			
		||||
  __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"
 | 
			
		||||
  exit $?
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show message if env exists
 | 
			
		||||
if [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  [ -n "$SERVICE_USER" ] && echo "Setting up service to run as $SERVICE_USER" || SERVICE_USER="root"
 | 
			
		||||
  [ -n "$SERVICE_PORT" ] && echo "${EXEC_CMD_NAME:-$EXEC_CMD_BIN} will be running on $SERVICE_PORT" || SERVICE_PORT=""
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set switch user command
 | 
			
		||||
if [ "$SERVICE_USER" = "root" ] || [ -z "$SERVICE_USER" ]; then
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P gosu)" ]; then
 | 
			
		||||
  su_cmd() { gosu $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P runuser)" ]; then
 | 
			
		||||
  su_cmd() { runuser -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P sudo)" ]; then
 | 
			
		||||
  su_cmd() { sudo -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P su)" ]; then
 | 
			
		||||
  su_cmd() { su -s /bin/sh - $SERVICE_USER -c "$@" || return 1; }
 | 
			
		||||
else
 | 
			
		||||
  echo "Can not switch to $SERVICE_USER: attempting to run as root"
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Change to working directory
 | 
			
		||||
[ -n "$WORKDIR" ] && [ -n "$EXEC_CMD_BIN" ] && __cd "$WORKDIR" && echo "Changed to $PWD"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show init message
 | 
			
		||||
__pre_message
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Initialize ssl
 | 
			
		||||
__update_ssl_conf
 | 
			
		||||
__update_ssl_certs
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Updating config files
 | 
			
		||||
__create_env
 | 
			
		||||
__update_conf_files
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run the pre execute commands
 | 
			
		||||
[ -n "$PRE_EXEC_MESSAGE" ] && echo "$PRE_EXEC_MESSAGE"
 | 
			
		||||
__pre_execute
 | 
			
		||||
__run_secure_function
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__run_start_script "$@" |& tee -a "/data/logs/entrypoint.log" &>/dev/null
 | 
			
		||||
if [ "$?" -ne 0 ] && [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  echo "Failed to execute: $EXEC_CMD_BIN $EXEC_CMD_ARGS" |& tee -a "/data/logs/entrypoint.log" "$LOG_DIR/init.txt"
 | 
			
		||||
  SERVICE_EXIT_CODE=10
 | 
			
		||||
  SERVICE_IS_RUNNING="false"
 | 
			
		||||
  rm -Rf "$SERVICE_PID_FILE"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
exit $SERVICE_EXIT_CODE
 | 
			
		||||
							
								
								
									
										445
									
								
								init/done/00-mariadb.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										445
									
								
								init/done/00-mariadb.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,445 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
 | 
			
		||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -o pipefail -x$DEBUGGER_OPTIONS || set -o pipefail
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
printf '%s\n' "# - - - Initializing mariadb - - - #"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_NAME="mariadb"
 | 
			
		||||
SCRIPT_NAME="$(basename "$0" 2>/dev/null)"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
export PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run trap command on exit
 | 
			
		||||
trap 'retVal=$?;[ "$SERVICE_IS_RUNNING" != "true" ] && [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE";exit $retVal' SIGINT SIGTERM EXIT
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# import the functions file
 | 
			
		||||
if [ -f "/usr/local/etc/docker/functions/entrypoint.sh" ]; then
 | 
			
		||||
  . "/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"
 | 
			
		||||
done
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Custom functions
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Show message before execute
 | 
			
		||||
PRE_EXEC_MESSAGE=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Default predefined variables
 | 
			
		||||
WORKDIR=""                 # set working directory
 | 
			
		||||
DATA_DIR="/data"           # set data directory
 | 
			
		||||
WWW_DIR="/data/htdocs/www" # set the web root
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ETC_DIR="/etc/mariadb"     # set etc directory
 | 
			
		||||
CONF_DIR="/config/mariadb" # set config directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
RUN_DIR="/run/init.d"        # set scripts pid dir
 | 
			
		||||
LOG_DIR="/data/logs/mariadb" # set log directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ROOT_FILE_PREFIX="/config/secure/auth/root" # directory to save username/password for root user
 | 
			
		||||
USER_FILE_PREFIX="/config/secure/auth/user" # directory to save username/password for normal user
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set the database directory
 | 
			
		||||
DATABASE_DIR="${DATABASE_DIR_MARIADB:-/data/db/mariadb}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional predefined variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# port which service is listening on
 | 
			
		||||
SERVICE_PORT="3306"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# execute command variables
 | 
			
		||||
SERVICE_UID="0"                                              # set the user id
 | 
			
		||||
SERVICE_USER="mysql"                                         # execute command as another user
 | 
			
		||||
EXEC_CMD_BIN="mysqld"                                        # command to execute
 | 
			
		||||
EXEC_CMD_ARGS="--user=$SERVICE_USER --datadir=$DATABASE_DIR" # command arguments
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a web server
 | 
			
		||||
IS_WEB_SERVER="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a database server
 | 
			
		||||
IS_DATABASE_SERVICE="yes"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional variables
 | 
			
		||||
DATABASE_CREATE="${MARIADB_DATABASE:-}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# usernames
 | 
			
		||||
user_name="${MARIADB_USER_NAME:-}"           # normal user name
 | 
			
		||||
root_user_name="${MARIADB_ROOT_USER_NAME:-}" # root user name
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# passwords [password/random]
 | 
			
		||||
user_pass="${MARIADB_USER_PASS_WORD:-}"            # normal user password
 | 
			
		||||
root_user_pass="${MARIADB_ROOT_PASS_WORD:-random}" # root user password
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Overwrite variables from files
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_name" ] && user_name="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && user_pass="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name" ] && root_user_name="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && root_user_pass="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Specifiy custom directories to be created
 | 
			
		||||
ADD_APPLICATION_FILES=""
 | 
			
		||||
ADD_APPLICATION_DIRS=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
APPLICATION_FILES="$LOG_DIR/mariadb.log $LOG_DIR/mariadb.err.log"
 | 
			
		||||
APPLICATION_DIRS="$RUN_DIR $ETC_DIR $CONF_DIR $LOG_DIR"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__update_conf_files() {
 | 
			
		||||
  local exitCode=0                    # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-mysql}" # specifiy different user
 | 
			
		||||
 | 
			
		||||
  # create default directories
 | 
			
		||||
  for filedirs in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
    if [ -n "$filedirs" ] && [ ! -d "$filedirs" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating directory $filedirs with permissions 777"
 | 
			
		||||
        mkdir -p "$filedirs" && chmod -Rf 777 "$filedirs"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create default files
 | 
			
		||||
  for application_files in $ADD_APPLICATION_FILES $APPLICATION_FILES; do
 | 
			
		||||
    if [ -n "$application_files" ] && [ ! -e "$application_files" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating file $application_files with permissions 777"
 | 
			
		||||
        touch "$application_files" && chmod -Rf 777 "$application_files"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create directories if variable is yes"
 | 
			
		||||
  [ "$IS_WEB_SERVER" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $WWW_DIR" && { [ -d "$WWW_DIR" ] || { (echo "Creating directory $WWW_DIR with permissions 777" && mkdir -p "$WWW_DIR" && chmod -f 777 "$WWW_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  [ "$IS_DATABASE_SERVICE" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $DATABASE_DIR" && { [ -d "$DATABASE_DIR" ] || { (echo "Creating directory $DATABASE_DIR with permissions 777" && mkdir -p "$DATABASE_DIR" && chmod -f 777 "$DATABASE_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  # copy config files to system
 | 
			
		||||
  __file_copy "$CONF_DIR/." "$ETC_DIR/" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  # replace variables
 | 
			
		||||
  __replace "REPLACE_ROOT_USER" "$root_user_name" "$ETC_DIR/my.cnf"
 | 
			
		||||
  __replace "REPLACE_ROOT_PASS" "$root_user_pass" "$ETC_DIR/my.cnf"
 | 
			
		||||
  # custom commands
 | 
			
		||||
  if [ -f "$ETC_DIR/my.cnf" ] && [ ! -f "$CONF_DIR/my.cnf" ]; then
 | 
			
		||||
    __file_copy "$ETC_DIR/my.cnf" "$CONF_DIR/my.cnf" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  fi
 | 
			
		||||
  # other
 | 
			
		||||
  [ -f "$ETC_DIR/my.cnf" ] && ln -sf "$ETC_DIR/my.cnf" "/etc/my.cnf"
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset application_files filedirs
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run before executing
 | 
			
		||||
__pre_execute() {
 | 
			
		||||
  local exitCode=0                    # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-mysql}" # specifiy different user
 | 
			
		||||
  # define commands
 | 
			
		||||
 | 
			
		||||
  # Initialize the database
 | 
			
		||||
  if __is_dir_empty "$DATABASE_DIR"; then
 | 
			
		||||
    mkdir -p "$DATABASE_DIR" && chown -Rf $user:$user "$DATABASE_DIR"
 | 
			
		||||
    mysql_install_db --datadir=$DATABASE_DIR --user=$user --skip-test-db --old-mode='UTF8_IS_UTF8MB3' --default-time-zone=SYSTEM --enforce-storage-engine= --skip-log-bin --expire-logs-days=0 --loose-innodb_buffer_pool_load_at_startup=0 --loose-innodb_buffer_pool_dump_at_shutdown=0
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # create user if needed
 | 
			
		||||
  # __create_service_user "$user" "/home/$user" "${USER_GID:-${USER_UID:-1000}"
 | 
			
		||||
  # set user on files/folders
 | 
			
		||||
  if [ -n "$user" ] && [ "$user" != "root" ]; then
 | 
			
		||||
    if grep -s -q "$user:" "/etc/passwd"; then
 | 
			
		||||
      for permissions in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
        if [ -n "$permissions" ] && [ -e "$permissions" ]; then
 | 
			
		||||
          (chown -Rf $user:$user "$permissions" && echo "changed ownership on $permissions to $user") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
        fi
 | 
			
		||||
      done
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset filesperms filename
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run after executing
 | 
			
		||||
__post_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  sleep 60                           # how long to wait before executing
 | 
			
		||||
  echo "Running post commands"       # message
 | 
			
		||||
  # execute commands
 | 
			
		||||
  if [ -f "$CONF_DIR/init.sh" ]; then
 | 
			
		||||
    bash -c "$CONF_DIR/init.sh"
 | 
			
		||||
  else
 | 
			
		||||
    # create database
 | 
			
		||||
    if [ -n "$DATABASE_CREATE" ]; then
 | 
			
		||||
      mysql -v -u root --database=mysql --binary-mode <<MYSQL_SCRIPT
 | 
			
		||||
CREATE DATABASE IF NOT EXISTS $DATABASE_CREATE;
 | 
			
		||||
MYSQL_SCRIPT
 | 
			
		||||
    fi
 | 
			
		||||
    # create user
 | 
			
		||||
    if [ -n "$user_name" ] && [ "$user_name" != "root" ]; then
 | 
			
		||||
      mysql -v -u root --database=mysql --binary-mode <<MYSQL_SCRIPT
 | 
			
		||||
CREATE USER IF NOT EXISTS $user_name@'%' IDENTIFIED BY '$user_pass';
 | 
			
		||||
MYSQL_SCRIPT
 | 
			
		||||
    fi
 | 
			
		||||
    # give user privileges to database
 | 
			
		||||
    if [ -n "$user_name" ] && [ "$user_name" != "root" ] && [ -n "$DATABASE_CREATE" ]; then
 | 
			
		||||
      mysql -v -u root --database=mysql --binary-mode <<MYSQL_SCRIPT
 | 
			
		||||
GRANT ALL PRIVILEGES ON $DATABASE_CREATE.* TO $user_name@'%';
 | 
			
		||||
MYSQL_SCRIPT
 | 
			
		||||
    fi
 | 
			
		||||
    # update root password
 | 
			
		||||
    mysql -v -u root --database=mysql --binary-mode <<MYSQL_SCRIPT
 | 
			
		||||
DROP USER IF EXISTS root@'127.0.0.1', root@'::1';
 | 
			
		||||
ALTER USER root@localhost IDENTIFIED BY '$root_user_pass';
 | 
			
		||||
GRANT ALL ON *.* TO root@localhost WITH GRANT OPTION
 | 
			
		||||
MYSQL_SCRIPT
 | 
			
		||||
  fi
 | 
			
		||||
  # drop the test database
 | 
			
		||||
  mysql -v -u root <<MYSQL_SCRIPT
 | 
			
		||||
DROP DATABASE IF EXISTS test;
 | 
			
		||||
MYSQL_SCRIPT
 | 
			
		||||
  # flush the database
 | 
			
		||||
  mysql -v -u root --database=mysql --binary-mode <<MYSQL_SCRIPT
 | 
			
		||||
FLUSH PRIVILEGES;
 | 
			
		||||
MYSQL_SCRIPT
 | 
			
		||||
  # change the root password in my.cnf file
 | 
			
		||||
  if
 | 
			
		||||
    grep -qs "#password   " "$ETC_DIR/my.cnf"
 | 
			
		||||
  then
 | 
			
		||||
    __replace "#password   " "password   " "$ETC_DIR/my.cnf"
 | 
			
		||||
  fi
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__pre_message() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
  [ -n "$user_name" ] && echo "username:               $user_name" && echo "$user_name" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$user_pass" ] && echo "password:               saved to ${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$user_pass" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
  [ -n "$root_user_name" ] && echo "root username:     $root_user_name" && echo "$root_user_name" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$root_user_pass" ] && echo "root password:     saved to ${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$root_user_pass" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to setup ssl support
 | 
			
		||||
__update_ssl_conf() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__create_env() {
 | 
			
		||||
  cat <<EOF | tee "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" &>/dev/null
 | 
			
		||||
# ENV_WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
# ENV_WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
# ENV_ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
# ENV_DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
# ENV_CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
# ENV_DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
# ENV_SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
# ENV_SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
# ENV_SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
# EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
# EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
# EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
# ENV_USER_NAME="${user_name:-$ENV_USER_NAME}"                      #
 | 
			
		||||
# ENV_USER_PASS="${user_pass:-$ENV_USER_PASS}"                      #
 | 
			
		||||
# ENV_ROOT_USER_NAME="${root_user_name:-$ENV_ROOT_USER_NAME}"       #
 | 
			
		||||
# ENV_ROOT_USER_PASS="${root_user_pass:-$ENV_ROOT_USER_PASS}"       #
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
  [ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] || return 1
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# script to start server
 | 
			
		||||
__run_start_script() {
 | 
			
		||||
  local user="${SERVICE_USER:-root}"
 | 
			
		||||
  local workdir="${WORKDIR:-$WORK_DIR}"
 | 
			
		||||
  local cmd="$EXEC_CMD_BIN $EXEC_CMD_ARGS"
 | 
			
		||||
  local lc_type="${LC_ALL:-${LC_CTYPE:-$LANG}}"
 | 
			
		||||
  local home="${workdir//\/root/\/tmp\/docker}"
 | 
			
		||||
  local path="/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
  if [ -z "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
    __post_execute 2>"/dev/stderr" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    echo "Initializing $SCRIPT_NAME has completed"
 | 
			
		||||
  else
 | 
			
		||||
    # ensure the command exists
 | 
			
		||||
    if [ ! -x "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is not a valid executable"
 | 
			
		||||
      exit 2
 | 
			
		||||
    fi
 | 
			
		||||
    # set working directories
 | 
			
		||||
    [ -z "$home" ] && home="${workdir:-/tmp/docker}"
 | 
			
		||||
    [ "$home" = "/root" ] && home="/tmp/docker"
 | 
			
		||||
    [ "$home" = "$workdir" ] && workdir=""
 | 
			
		||||
    # create needed directories
 | 
			
		||||
    [ -n "$home" ] && { [ -d "$home" ] || mkdir -p "$home"; }
 | 
			
		||||
    [ -n "$workdir" ] && { [ -d "$workdir" ] || mkdir -p "$workdir" || workdir="/tmp"; }
 | 
			
		||||
    [ -n "$workdir" ] && __cd "$workdir" || { [ -n "$home" ] && __cd "$home"; } || __cd "/tmp"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$home" ] && chmod -f 777 "$home"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$workdir" ] && chmod -f 777 "$workdir"
 | 
			
		||||
    # check and exit if already running
 | 
			
		||||
    if __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is already running" >&2
 | 
			
		||||
      exit 0
 | 
			
		||||
    else
 | 
			
		||||
      echo "Starting service: $EXEC_CMD_NAME $EXEC_CMD_ARGS"
 | 
			
		||||
      su_cmd touch "$SERVICE_PID_FILE"
 | 
			
		||||
      __post_execute 2>"/dev/stderr" 2>&1 |& tee -a "$LOG_DIR/init.txt" &>/dev/null &
 | 
			
		||||
      su_cmd env -i HOME="$home" LC_CTYPE="$lc_type" PATH="$path" USER="$user" sh -c "$cmd" || return 10
 | 
			
		||||
    fi
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# simple cd function
 | 
			
		||||
__cd() { mkdir -p "$1" && builtin cd "$1" || exit 1; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# process check functions
 | 
			
		||||
__pcheck() { [ -n "$(type -P pgrep 2>/dev/null)" ] && pgrep -x "$1" &>/dev/null && return 0 || return 10; }
 | 
			
		||||
__pgrep() { __pcheck "${1:-$EXEC_CMD_BIN}" || __ps aux 2>/dev/null | grep -Fw " ${1:-$EXEC_CMD_BIN}" | grep -qv ' grep' | grep '^' && return 0 || return 10; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# check if process is already running
 | 
			
		||||
__proc_check() {
 | 
			
		||||
  cmd_bin="$(type -P "${1:-$EXEC_CMD_BIN}")"
 | 
			
		||||
  cmd_name="$(basename "${cmd_bin:-$EXEC_CMD_NAME}")"
 | 
			
		||||
  if __pgrep "$cmd_bin" || __pgrep "$cmd_name"; then
 | 
			
		||||
    SERVICE_IS_RUNNING="true"
 | 
			
		||||
    touch "$SERVICE_PID_FILE"
 | 
			
		||||
    echo "$cmd_name is already running"
 | 
			
		||||
    return 0
 | 
			
		||||
  else
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow ENV_ variable - Import env file
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_EXIT_CODE=0                                           # default exit code
 | 
			
		||||
WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
PRE_EXEC_MESSAGE="${ENV_PRE_EXEC_MESSAGE:-$PRE_EXEC_MESSAGE}" # Show message before execute
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# application specific
 | 
			
		||||
EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
EXEC_CMD_BIN="$(type -P "$EXEC_CMD_BIN" || echo "$EXEC_CMD_BIN")" # set full path
 | 
			
		||||
EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
SERVICE_PID_FILE="/run/init.d/$EXEC_CMD_NAME.pid"                 # set the pid file location
 | 
			
		||||
EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
SERVICE_PID_NUMBER="$(__pgrep)"                                   # check if running
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# create auth directories
 | 
			
		||||
[ -n "$USER_FILE_PREFIX" ] && { [ -d "$USER_FILE_PREFIX" ] || mkdir -p "$USER_FILE_PREFIX"; }
 | 
			
		||||
[ -n "$ROOT_FILE_PREFIX" ] && { [ -d "$ROOT_FILE_PREFIX" ] || mkdir -p "$ROOT_FILE_PREFIX"; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow per init script usernames and passwords
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/name" ] && user_name="$(<"$ETC_DIR/auth/user/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/pass" ] && user_pass="$(<"$ETC_DIR/auth/user/pass")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/name" ] && root_user_name="$(<"$ETC_DIR/auth/root/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/pass" ] && root_user_pass="$(<"$ETC_DIR/auth/root/pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow setting initial users and passwords via environment
 | 
			
		||||
user_name="${user_name:-$ENV_USER_NAME}"
 | 
			
		||||
user_pass="${user_pass:-$ENV_USER_PASS}"
 | 
			
		||||
root_user_name="${root_user_name:-$ENV_ROOT_USER_NAME}"
 | 
			
		||||
root_user_pass="${root_user_pass:-$ENV_ROOT_USER_PASS}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set password to random if variable is random
 | 
			
		||||
if [ "$user_pass" = "random" ]; then
 | 
			
		||||
  user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
if [ "$root_user_pass" = "random" ]; then
 | 
			
		||||
  root_user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow variables via imports - Overwrite existing
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Only run check
 | 
			
		||||
if [ "$1" = "check" ]; then
 | 
			
		||||
  __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"
 | 
			
		||||
  exit $?
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show message if env exists
 | 
			
		||||
if [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  [ -n "$SERVICE_USER" ] && echo "Setting up service to run as $SERVICE_USER" || SERVICE_USER="root"
 | 
			
		||||
  [ -n "$SERVICE_PORT" ] && echo "${EXEC_CMD_NAME:-$EXEC_CMD_BIN} will be running on $SERVICE_PORT" || SERVICE_PORT=""
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set switch user command
 | 
			
		||||
if [ "$SERVICE_USER" = "root" ] || [ -z "$SERVICE_USER" ]; then
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P gosu)" ]; then
 | 
			
		||||
  su_cmd() { gosu $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P runuser)" ]; then
 | 
			
		||||
  su_cmd() { runuser -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P sudo)" ]; then
 | 
			
		||||
  su_cmd() { sudo -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P su)" ]; then
 | 
			
		||||
  su_cmd() { su -s /bin/sh - $SERVICE_USER -c "$@" || return 1; }
 | 
			
		||||
else
 | 
			
		||||
  echo "Can not switch to $SERVICE_USER: attempting to run as root"
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Change to working directory
 | 
			
		||||
[ -n "$WORKDIR" ] && [ -n "$EXEC_CMD_BIN" ] && __cd "$WORKDIR" && echo "Changed to $PWD"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show init message
 | 
			
		||||
__pre_message
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Initialize ssl
 | 
			
		||||
__update_ssl_conf
 | 
			
		||||
__update_ssl_certs
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Updating config files
 | 
			
		||||
__create_env
 | 
			
		||||
__update_conf_files
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run the pre execute commands
 | 
			
		||||
[ -n "$PRE_EXEC_MESSAGE" ] && echo "$PRE_EXEC_MESSAGE"
 | 
			
		||||
__pre_execute
 | 
			
		||||
__run_secure_function
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__run_start_script "$@" |& tee -a "/data/logs/entrypoint.log" &>/dev/null
 | 
			
		||||
if [ "$?" -ne 0 ] && [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  echo "Failed to execute: $EXEC_CMD_BIN $EXEC_CMD_ARGS" |& tee -a "/data/logs/entrypoint.log" "$LOG_DIR/init.txt"
 | 
			
		||||
  SERVICE_EXIT_CODE=10
 | 
			
		||||
  SERVICE_IS_RUNNING="false"
 | 
			
		||||
  rm -Rf "$SERVICE_PID_FILE"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
exit $SERVICE_EXIT_CODE
 | 
			
		||||
							
								
								
									
										404
									
								
								init/done/00-mongodb.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										404
									
								
								init/done/00-mongodb.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,404 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
 | 
			
		||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -o pipefail -x$DEBUGGER_OPTIONS || set -o pipefail
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
printf '%s\n' "# - - - Initializing mongodb - - - #"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_NAME="mongodb"
 | 
			
		||||
SCRIPT_NAME="$(basename "$0" 2>/dev/null)"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
export PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run trap command on exit
 | 
			
		||||
trap 'retVal=$?;[ "$SERVICE_IS_RUNNING" != "true" ] && [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE";exit $retVal' SIGINT SIGTERM EXIT
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# import the functions file
 | 
			
		||||
if [ -f "/usr/local/etc/docker/functions/entrypoint.sh" ]; then
 | 
			
		||||
  . "/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"
 | 
			
		||||
done
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Custom functions
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Show message before execute
 | 
			
		||||
PRE_EXEC_MESSAGE=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Default predefined variables
 | 
			
		||||
WORKDIR=""                 # set working directory
 | 
			
		||||
DATA_DIR="/data"           # set data directory
 | 
			
		||||
WWW_DIR="/data/htdocs/www" # set the web root
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ETC_DIR="/etc/mongodb"     # set etc directory
 | 
			
		||||
CONF_DIR="/config/mongodb" # set config directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
RUN_DIR="/run/init.d"        # set scripts pid dir
 | 
			
		||||
LOG_DIR="/data/logs/mongodb" # set log directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ROOT_FILE_PREFIX="/config/secure/auth/root" # directory to save username/password for root user
 | 
			
		||||
USER_FILE_PREFIX="/config/secure/auth/user" # directory to save username/password for normal user
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set the database directory
 | 
			
		||||
DATABASE_DIR="${DATABASE_DIR_MONGODB:-/data/db/mongodb}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional predefined variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# port which service is listening on
 | 
			
		||||
SERVICE_PORT="27017"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# execute command variables
 | 
			
		||||
SERVICE_UID="0"       # set the user id
 | 
			
		||||
SERVICE_USER="root"   # execute command as another user
 | 
			
		||||
EXEC_CMD_BIN="mongod" # command to execute
 | 
			
		||||
EXEC_CMD_ARGS="-vvvv" # command arguments
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a web server
 | 
			
		||||
IS_WEB_SERVER="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a database server
 | 
			
		||||
IS_DATABASE_SERVICE="yes"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# usernames
 | 
			
		||||
user_name="${MONGODB_USER_NAME:-}"           # normal user name
 | 
			
		||||
root_user_name="${MONGODB_ROOT_USER_NAME:-}" # root user name
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# passwords [password/random]
 | 
			
		||||
user_pass="${MONGODB_USER_PASS_WORD:-}"      # normal user password
 | 
			
		||||
root_user_pass="${MONGODB_ROOT_PASS_WORD:-}" # root user password
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Overwrite variables from files
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_name" ] && user_name="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && user_pass="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name" ] && root_user_name="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && root_user_pass="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Specifiy custom directories to be created
 | 
			
		||||
ADD_APPLICATION_FILES=""
 | 
			
		||||
ADD_APPLICATION_DIRS=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
APPLICATION_FILES="$LOG_DIR/mongodb.log"
 | 
			
		||||
APPLICATION_DIRS="$RUN_DIR $ETC_DIR $CONF_DIR $LOG_DIR"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__update_conf_files() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
 | 
			
		||||
  # delete files
 | 
			
		||||
  #__rm ""
 | 
			
		||||
 | 
			
		||||
  # define actions
 | 
			
		||||
 | 
			
		||||
  # create default directories
 | 
			
		||||
  for filedirs in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
    if [ -n "$filedirs" ] && [ ! -d "$filedirs" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating directory $filedirs with permissions 777"
 | 
			
		||||
        mkdir -p "$filedirs" && chmod -Rf 777 "$filedirs"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create default files
 | 
			
		||||
  for application_files in $ADD_APPLICATION_FILES $APPLICATION_FILES; do
 | 
			
		||||
    if [ -n "$application_files" ] && [ ! -e "$application_files" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating file $application_files with permissions 777"
 | 
			
		||||
        touch "$application_files" && chmod -Rf 777 "$application_files"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create directories if variable is yes"
 | 
			
		||||
  [ "$IS_WEB_SERVER" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $WWW_DIR" && { [ -d "$WWW_DIR" ] || { (echo "Creating directory $WWW_DIR with permissions 777" && mkdir -p "$WWW_DIR" && chmod -f 777 "$WWW_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  [ "$IS_DATABASE_SERVICE" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $DATABASE_DIR" && { [ -d "$DATABASE_DIR" ] || { (echo "Creating directory $DATABASE_DIR with permissions 777" && mkdir -p "$DATABASE_DIR" && chmod -f 777 "$DATABASE_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  # copy config files to system
 | 
			
		||||
  __file_copy "$CONF_DIR/." "$ETC_DIR/" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  # replace variables
 | 
			
		||||
  # __replace "" "" "$CONF_DIR/mongodb.conf"
 | 
			
		||||
  # replace variables recursively
 | 
			
		||||
  # __find_replace "" "" "$CONF_DIR/"
 | 
			
		||||
  # custom commands
 | 
			
		||||
 | 
			
		||||
  # other
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset application_files filedirs
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run before executing
 | 
			
		||||
__pre_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  # define commands
 | 
			
		||||
 | 
			
		||||
  # execute if directories is empty
 | 
			
		||||
  #__is_dir_empty "" &&
 | 
			
		||||
 | 
			
		||||
  # create user if needed
 | 
			
		||||
  # __create_service_user "$user" "/home/$user" "${USER_GID:-${USER_UID:-1000}"
 | 
			
		||||
  # set user on files/folders
 | 
			
		||||
  if [ -n "$user" ] && [ "$user" != "root" ]; then
 | 
			
		||||
    if grep -s -q "$user:" "/etc/passwd"; then
 | 
			
		||||
      for permissions in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
        if [ -n "$permissions" ] && [ -e "$permissions" ]; then
 | 
			
		||||
          (chown -Rf $user:$user "$permissions" && echo "changed ownership on $permissions to $user") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
        fi
 | 
			
		||||
      done
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset filesperms filename
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run after executing
 | 
			
		||||
__post_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  sleep 60                           # how long to wait before executing
 | 
			
		||||
  echo "Running post commands"       # message
 | 
			
		||||
  # execute commands
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__pre_message() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
  [ -n "$user_name" ] && echo "username:               $user_name" && echo "$user_name" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$user_pass" ] && echo "password:               saved to ${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$user_pass" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
  [ -n "$root_user_name" ] && echo "root username:     $root_user_name" && echo "$root_user_name" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$root_user_pass" ] && echo "root password:     saved to ${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$root_user_pass" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to setup ssl support
 | 
			
		||||
__update_ssl_conf() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__create_env() {
 | 
			
		||||
  cat <<EOF | tee "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" &>/dev/null
 | 
			
		||||
# ENV_WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
# ENV_WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
# ENV_ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
# ENV_DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
# ENV_CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
# ENV_DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
# ENV_SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
# ENV_SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
# ENV_SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
# EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
# EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
# EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
# ENV_USER_NAME="${user_name:-$ENV_USER_NAME}"                      #
 | 
			
		||||
# ENV_USER_PASS="${user_pass:-$ENV_USER_PASS}"                      #
 | 
			
		||||
# ENV_ROOT_USER_NAME="${root_user_name:-$ENV_ROOT_USER_NAME}"       #
 | 
			
		||||
# ENV_ROOT_USER_PASS="${root_user_pass:-$ENV_ROOT_USER_PASS}"       #
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
  [ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] || return 1
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# script to start server
 | 
			
		||||
__run_start_script() {
 | 
			
		||||
  local user="${SERVICE_USER:-root}"
 | 
			
		||||
  local workdir="${WORKDIR:-$WORK_DIR}"
 | 
			
		||||
  local cmd="$EXEC_CMD_BIN $EXEC_CMD_ARGS"
 | 
			
		||||
  local lc_type="${LC_ALL:-${LC_CTYPE:-$LANG}}"
 | 
			
		||||
  local home="${workdir//\/root/\/tmp\/docker}"
 | 
			
		||||
  local path="/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
  if [ -z "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
    __post_execute 2>"/dev/stderr" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    echo "Initializing $SCRIPT_NAME has completed"
 | 
			
		||||
  else
 | 
			
		||||
    # ensure the command exists
 | 
			
		||||
    if [ ! -x "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is not a valid executable"
 | 
			
		||||
      exit 2
 | 
			
		||||
    fi
 | 
			
		||||
    # set working directories
 | 
			
		||||
    [ -z "$home" ] && home="${workdir:-/tmp/docker}"
 | 
			
		||||
    [ "$home" = "/root" ] && home="/tmp/docker"
 | 
			
		||||
    [ "$home" = "$workdir" ] && workdir=""
 | 
			
		||||
    # create needed directories
 | 
			
		||||
    [ -n "$home" ] && { [ -d "$home" ] || mkdir -p "$home"; }
 | 
			
		||||
    [ -n "$workdir" ] && { [ -d "$workdir" ] || mkdir -p "$workdir" || workdir="/tmp"; }
 | 
			
		||||
    [ -n "$workdir" ] && __cd "$workdir" || { [ -n "$home" ] && __cd "$home"; } || __cd "/tmp"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$home" ] && chmod -f 777 "$home"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$workdir" ] && chmod -f 777 "$workdir"
 | 
			
		||||
    # check and exit if already running
 | 
			
		||||
    if __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is already running" >&2
 | 
			
		||||
      exit 0
 | 
			
		||||
    else
 | 
			
		||||
      echo "Starting service: $EXEC_CMD_NAME $EXEC_CMD_ARGS"
 | 
			
		||||
      su_cmd touch "$SERVICE_PID_FILE"
 | 
			
		||||
      __post_execute 2>"/dev/stderr" 2>&1 |& tee -a "$LOG_DIR/init.txt" &>/dev/null &
 | 
			
		||||
      su_cmd env -i HOME="$home" LC_CTYPE="$lc_type" PATH="$path" USER="$user" sh -c "$cmd" || return 10
 | 
			
		||||
    fi
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# simple cd function
 | 
			
		||||
__cd() { mkdir -p "$1" && builtin cd "$1" || exit 1; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# process check functions
 | 
			
		||||
__pcheck() { [ -n "$(type -P pgrep 2>/dev/null)" ] && pgrep -x "$1" &>/dev/null && return 0 || return 10; }
 | 
			
		||||
__pgrep() { __pcheck "${1:-$EXEC_CMD_BIN}" || __ps aux 2>/dev/null | grep -Fw " ${1:-$EXEC_CMD_BIN}" | grep -qv ' grep' | grep '^' && return 0 || return 10; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# check if process is already running
 | 
			
		||||
__proc_check() {
 | 
			
		||||
  cmd_bin="$(type -P "${1:-$EXEC_CMD_BIN}")"
 | 
			
		||||
  cmd_name="$(basename "${cmd_bin:-$EXEC_CMD_NAME}")"
 | 
			
		||||
  if __pgrep "$cmd_bin" || __pgrep "$cmd_name"; then
 | 
			
		||||
    SERVICE_IS_RUNNING="true"
 | 
			
		||||
    touch "$SERVICE_PID_FILE"
 | 
			
		||||
    echo "$cmd_name is already running"
 | 
			
		||||
    return 0
 | 
			
		||||
  else
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow ENV_ variable - Import env file
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_EXIT_CODE=0                                           # default exit code
 | 
			
		||||
WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
PRE_EXEC_MESSAGE="${ENV_PRE_EXEC_MESSAGE:-$PRE_EXEC_MESSAGE}" # Show message before execute
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# application specific
 | 
			
		||||
EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
EXEC_CMD_BIN="$(type -P "$EXEC_CMD_BIN" || echo "$EXEC_CMD_BIN")" # set full path
 | 
			
		||||
EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
SERVICE_PID_FILE="/run/init.d/$EXEC_CMD_NAME.pid"                 # set the pid file location
 | 
			
		||||
EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
SERVICE_PID_NUMBER="$(__pgrep)"                                   # check if running
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# create auth directories
 | 
			
		||||
[ -n "$USER_FILE_PREFIX" ] && { [ -d "$USER_FILE_PREFIX" ] || mkdir -p "$USER_FILE_PREFIX"; }
 | 
			
		||||
[ -n "$ROOT_FILE_PREFIX" ] && { [ -d "$ROOT_FILE_PREFIX" ] || mkdir -p "$ROOT_FILE_PREFIX"; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow per init script usernames and passwords
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/name" ] && user_name="$(<"$ETC_DIR/auth/user/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/pass" ] && user_pass="$(<"$ETC_DIR/auth/user/pass")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/name" ] && root_user_name="$(<"$ETC_DIR/auth/root/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/pass" ] && root_user_pass="$(<"$ETC_DIR/auth/root/pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow setting initial users and passwords via environment
 | 
			
		||||
user_name="${user_name:-$ENV_USER_NAME}"
 | 
			
		||||
user_pass="${user_pass:-$ENV_USER_PASS}"
 | 
			
		||||
root_user_name="${root_user_name:-$ENV_ROOT_USER_NAME}"
 | 
			
		||||
root_user_pass="${root_user_pass:-$ENV_ROOT_USER_PASS}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set password to random if variable is random
 | 
			
		||||
if [ "$user_pass" = "random" ]; then
 | 
			
		||||
  user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
if [ "$root_user_pass" = "random" ]; then
 | 
			
		||||
  root_user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow variables via imports - Overwrite existing
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Only run check
 | 
			
		||||
if [ "$1" = "check" ]; then
 | 
			
		||||
  __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"
 | 
			
		||||
  exit $?
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show message if env exists
 | 
			
		||||
if [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  [ -n "$SERVICE_USER" ] && echo "Setting up service to run as $SERVICE_USER" || SERVICE_USER="root"
 | 
			
		||||
  [ -n "$SERVICE_PORT" ] && echo "${EXEC_CMD_NAME:-$EXEC_CMD_BIN} will be running on $SERVICE_PORT" || SERVICE_PORT=""
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set switch user command
 | 
			
		||||
if [ "$SERVICE_USER" = "root" ] || [ -z "$SERVICE_USER" ]; then
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P gosu)" ]; then
 | 
			
		||||
  su_cmd() { gosu $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P runuser)" ]; then
 | 
			
		||||
  su_cmd() { runuser -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P sudo)" ]; then
 | 
			
		||||
  su_cmd() { sudo -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P su)" ]; then
 | 
			
		||||
  su_cmd() { su -s /bin/sh - $SERVICE_USER -c "$@" || return 1; }
 | 
			
		||||
else
 | 
			
		||||
  echo "Can not switch to $SERVICE_USER: attempting to run as root"
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Change to working directory
 | 
			
		||||
[ -n "$WORKDIR" ] && [ -n "$EXEC_CMD_BIN" ] && __cd "$WORKDIR" && echo "Changed to $PWD"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show init message
 | 
			
		||||
__pre_message
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Initialize ssl
 | 
			
		||||
__update_ssl_conf
 | 
			
		||||
__update_ssl_certs
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Updating config files
 | 
			
		||||
__create_env
 | 
			
		||||
__update_conf_files
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run the pre execute commands
 | 
			
		||||
[ -n "$PRE_EXEC_MESSAGE" ] && echo "$PRE_EXEC_MESSAGE"
 | 
			
		||||
__pre_execute
 | 
			
		||||
__run_secure_function
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__run_start_script "$@" |& tee -a "/data/logs/entrypoint.log" &>/dev/null
 | 
			
		||||
if [ "$?" -ne 0 ] && [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  echo "Failed to execute: $EXEC_CMD_BIN $EXEC_CMD_ARGS" |& tee -a "/data/logs/entrypoint.log" "$LOG_DIR/init.txt"
 | 
			
		||||
  SERVICE_EXIT_CODE=10
 | 
			
		||||
  SERVICE_IS_RUNNING="false"
 | 
			
		||||
  rm -Rf "$SERVICE_PID_FILE"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
exit $SERVICE_EXIT_CODE
 | 
			
		||||
							
								
								
									
										420
									
								
								init/done/03-aria2.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										420
									
								
								init/done/03-aria2.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,420 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
 | 
			
		||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -o pipefail -x$DEBUGGER_OPTIONS || set -o pipefail
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
printf '%s\n' "# - - - Initializing aria2 - - - #"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_NAME="aria2"
 | 
			
		||||
SCRIPT_NAME="$(basename "$0" 2>/dev/null)"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
export PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run trap command on exit
 | 
			
		||||
trap 'retVal=$?;[ "$SERVICE_IS_RUNNING" != "true" ] && [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE";exit $retVal' SIGINT SIGTERM EXIT
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# import the functions file
 | 
			
		||||
if [ -f "/usr/local/etc/docker/functions/entrypoint.sh" ]; then
 | 
			
		||||
  . "/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"
 | 
			
		||||
done
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Custom functions
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Show message before execute
 | 
			
		||||
PRE_EXEC_MESSAGE=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Default predefined variables
 | 
			
		||||
WORKDIR=""                       # set working directory
 | 
			
		||||
DATA_DIR="/data/downloads/aria2" # set data directory
 | 
			
		||||
WWW_DIR="/var/www/aria2ng"       # set the web root
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ETC_DIR="/etc/aria2"     # set etc directory
 | 
			
		||||
CONF_DIR="/config/aria2" # set config directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
RUN_DIR="/run/init.d"      # set scripts pid dir
 | 
			
		||||
LOG_DIR="/data/logs/aria2" # set log directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ROOT_FILE_PREFIX="/config/secure/auth/root" # directory to save username/password for root user
 | 
			
		||||
USER_FILE_PREFIX="/config/secure/auth/user" # directory to save username/password for normal user
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set the database directory
 | 
			
		||||
DATABASE_DIR="${DATABASE_DIR_ARIA2:-/data/db/aria2}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional predefined variables
 | 
			
		||||
DATA_DIR="$(grep -Rs '^dir=' "$ETC_DIR/aria2.conf" | awk -F'=' '{print $2}' | grep '^' || echo "$DATA_DIR")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# port which service is listening on
 | 
			
		||||
SERVICE_PORT="8000"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# execute command variables
 | 
			
		||||
SERVICE_UID="0"                                 # set the user id
 | 
			
		||||
SERVICE_USER="root"                             # execute command as another user
 | 
			
		||||
EXEC_CMD_BIN="aria2c"                           # command to execute
 | 
			
		||||
EXEC_CMD_ARGS="--conf-path=$ETC_DIR/aria2.conf" # command arguments
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a web server
 | 
			
		||||
IS_WEB_SERVER="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a database server
 | 
			
		||||
IS_DATABASE_SERVICE="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional variables
 | 
			
		||||
RPC_SECRET="${RPC_SECRET:-}"
 | 
			
		||||
GET_WEB_CONFIG="$(find "$WWW_DIR/js" -name 'aria-ng*.js' | grep -v '^$')"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# usernames
 | 
			
		||||
user_name="${ARIA2_USER_NAME:-}"           # normal user name
 | 
			
		||||
root_user_name="${ARIA2_ROOT_USER_NAME:-}" # root user name
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# passwords [password/random]
 | 
			
		||||
user_pass="${ARIA2_USER_PASS_WORD:-}"      # normal user password
 | 
			
		||||
root_user_pass="${ARIA2_ROOT_PASS_WORD:-}" # root user password
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Overwrite variables from files
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_name" ] && user_name="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && user_pass="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name" ] && root_user_name="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && root_user_pass="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Specifiy custom directories to be created
 | 
			
		||||
ADD_APPLICATION_FILES=""
 | 
			
		||||
ADD_APPLICATION_DIRS=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
APPLICATION_FILES="$LOG_DIR/aria2.log"
 | 
			
		||||
APPLICATION_DIRS="$RUN_DIR $ETC_DIR $CONF_DIR $LOG_DIR"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__update_conf_files() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  if [ -n "$RPC_SECRET" ]; then
 | 
			
		||||
    RPC_SECRET_BASE64=$(echo -n "${RPC_SECRET}" | base64 -w 0)
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # create default directories
 | 
			
		||||
  for filedirs in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
    if [ -n "$filedirs" ] && [ ! -d "$filedirs" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating directory $filedirs with permissions 777"
 | 
			
		||||
        mkdir -p "$filedirs" && chmod -Rf 777 "$filedirs"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create default files
 | 
			
		||||
  for application_files in $ADD_APPLICATION_FILES $APPLICATION_FILES; do
 | 
			
		||||
    if [ -n "$application_files" ] && [ ! -e "$application_files" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating file $application_files with permissions 777"
 | 
			
		||||
        touch "$application_files" && chmod -Rf 777 "$application_files"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create directories if variable is yes"
 | 
			
		||||
  [ "$IS_WEB_SERVER" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $WWW_DIR" && { [ -d "$WWW_DIR" ] || { (echo "Creating directory $WWW_DIR with permissions 777" && mkdir -p "$WWW_DIR" && chmod -f 777 "$WWW_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  [ "$IS_DATABASE_SERVICE" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $DATABASE_DIR" && { [ -d "$DATABASE_DIR" ] || { (echo "Creating directory $DATABASE_DIR with permissions 777" && mkdir -p "$DATABASE_DIR" && chmod -f 777 "$DATABASE_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  # copy config files to system
 | 
			
		||||
  __file_copy "$CONF_DIR/." "$ETC_DIR/" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  # replace variables
 | 
			
		||||
  __replace "REPLACE_RPC_PORT" "$SERVICE_PORT" "$ETC_DIR/aria2.conf"
 | 
			
		||||
  __replace "6800" "$SERVICE_PORT" $GET_WEB_CONFIG
 | 
			
		||||
  if grep -qs "REPLACE_RPC_SECRET" "$GET_WEB_CONFIG"; then
 | 
			
		||||
    __find_replace "REPLACE_RPC_SECRET" "$RPC_SECRET_BASE64" "$GET_WEB_CONFIG"
 | 
			
		||||
  else
 | 
			
		||||
    sed -i 's,secret:"[^"]*",secret:"'"${RPC_SECRET_BASE64}"'",g' "$GET_WEB_CONFIG"
 | 
			
		||||
  fi
 | 
			
		||||
  if [ -n "$RPC_SECRET" ]; then
 | 
			
		||||
    echo "Changing rpc secret to $RPC_SECRET"
 | 
			
		||||
    if grep -sq "rpc-secret=" "$ETC_DIR/aria2.conf"; then
 | 
			
		||||
      __replace "REPLACE_RPC_SECRET" "$RPC_SECRET" "$ETC_DIR/aria2.conf"
 | 
			
		||||
    else
 | 
			
		||||
      echo "rpc-secret=$RPC_SECRET" >>"$ETC_DIR/aria2.conf"
 | 
			
		||||
    fi
 | 
			
		||||
  else
 | 
			
		||||
    __replace "rpc-secret=" "#rpc-secret=" "$ETC_DIR/aria2.conf"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # custom commands
 | 
			
		||||
  touch "$CONF_DIR/aria2.session"
 | 
			
		||||
  ln -sf "$CONF_DIR/aria2.session" "$ETC_DIR/aria2.session"
 | 
			
		||||
 | 
			
		||||
  # other
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset application_files filedirs
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run before executing
 | 
			
		||||
__pre_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  # define commands
 | 
			
		||||
 | 
			
		||||
  # execute if directories is empty
 | 
			
		||||
  #__is_dir_empty "" &&
 | 
			
		||||
 | 
			
		||||
  # create user if needed
 | 
			
		||||
  # __create_service_user "$user" "/home/$user" "${USER_GID:-${USER_UID:-1000}"
 | 
			
		||||
  # set user on files/folders
 | 
			
		||||
  if [ -n "$user" ] && [ "$user" != "root" ]; then
 | 
			
		||||
    if grep -s -q "$user:" "/etc/passwd"; then
 | 
			
		||||
      for permissions in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
        if [ -n "$permissions" ] && [ -e "$permissions" ]; then
 | 
			
		||||
          (chown -Rf $user:$user "$permissions" && echo "changed ownership on $permissions to $user") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
        fi
 | 
			
		||||
      done
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset filesperms filename
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run after executing
 | 
			
		||||
__post_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  sleep 60                           # how long to wait before executing
 | 
			
		||||
  echo "Running post commands"       # message
 | 
			
		||||
  # execute commands
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__pre_message() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
  [ -n "$user_name" ] && echo "username:               $user_name" && echo "$user_name" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$user_pass" ] && echo "password:               saved to ${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$user_pass" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
  [ -n "$root_user_name" ] && echo "root username:     $root_user_name" && echo "$root_user_name" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$root_user_pass" ] && echo "root password:     saved to ${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$root_user_pass" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to setup ssl support
 | 
			
		||||
__update_ssl_conf() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__create_env() {
 | 
			
		||||
  cat <<EOF | tee "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" &>/dev/null
 | 
			
		||||
# ENV_WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
# ENV_WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
# ENV_ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
# ENV_DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
# ENV_CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
# ENV_DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
# ENV_SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
# ENV_SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
# ENV_SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
# EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
# EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
# EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
# ENV_USER_NAME="${user_name:-$ENV_USER_NAME}"                      #
 | 
			
		||||
# ENV_USER_PASS="${user_pass:-$ENV_USER_PASS}"                      #
 | 
			
		||||
# ENV_ROOT_USER_NAME="${root_user_name:-$ENV_ROOT_USER_NAME}"       #
 | 
			
		||||
# ENV_ROOT_USER_PASS="${root_user_pass:-$ENV_ROOT_USER_PASS}"       #
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
  [ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] || return 1
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# script to start server
 | 
			
		||||
__run_start_script() {
 | 
			
		||||
  local user="${SERVICE_USER:-root}"
 | 
			
		||||
  local workdir="${WORKDIR:-$WORK_DIR}"
 | 
			
		||||
  local cmd="$EXEC_CMD_BIN $EXEC_CMD_ARGS"
 | 
			
		||||
  local lc_type="${LC_ALL:-${LC_CTYPE:-$LANG}}"
 | 
			
		||||
  local home="${workdir//\/root/\/tmp\/docker}"
 | 
			
		||||
  local path="/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
  if [ -z "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
    __post_execute 2>"/dev/stderr" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    echo "Initializing $SCRIPT_NAME has completed"
 | 
			
		||||
  else
 | 
			
		||||
    # ensure the command exists
 | 
			
		||||
    if [ ! -x "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is not a valid executable"
 | 
			
		||||
      exit 2
 | 
			
		||||
    fi
 | 
			
		||||
    # set working directories
 | 
			
		||||
    [ -z "$home" ] && home="${workdir:-/tmp/docker}"
 | 
			
		||||
    [ "$home" = "/root" ] && home="/tmp/docker"
 | 
			
		||||
    [ "$home" = "$workdir" ] && workdir=""
 | 
			
		||||
    # create needed directories
 | 
			
		||||
    [ -n "$home" ] && { [ -d "$home" ] || mkdir -p "$home"; }
 | 
			
		||||
    [ -n "$workdir" ] && { [ -d "$workdir" ] || mkdir -p "$workdir" || workdir="/tmp"; }
 | 
			
		||||
    [ -n "$workdir" ] && __cd "$workdir" || { [ -n "$home" ] && __cd "$home"; } || __cd "/tmp"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$home" ] && chmod -f 777 "$home"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$workdir" ] && chmod -f 777 "$workdir"
 | 
			
		||||
    # check and exit if already running
 | 
			
		||||
    if __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is already running" >&2
 | 
			
		||||
      exit 0
 | 
			
		||||
    else
 | 
			
		||||
      echo "Starting service: $EXEC_CMD_NAME $EXEC_CMD_ARGS"
 | 
			
		||||
      su_cmd touch "$SERVICE_PID_FILE"
 | 
			
		||||
      __post_execute 2>"/dev/stderr" 2>&1 |& tee -a "$LOG_DIR/init.txt" &>/dev/null &
 | 
			
		||||
      su_cmd env -i HOME="$home" LC_CTYPE="$lc_type" PATH="$path" USER="$user" sh -c "$cmd" || return 10
 | 
			
		||||
    fi
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# simple cd function
 | 
			
		||||
__cd() { mkdir -p "$1" && builtin cd "$1" || exit 1; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# process check functions
 | 
			
		||||
__pcheck() { [ -n "$(type -P pgrep 2>/dev/null)" ] && pgrep -x "$1" &>/dev/null && return 0 || return 10; }
 | 
			
		||||
__pgrep() { __pcheck "${1:-$EXEC_CMD_BIN}" || __ps aux 2>/dev/null | grep -Fw " ${1:-$EXEC_CMD_BIN}" | grep -qv ' grep' | grep '^' && return 0 || return 10; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# check if process is already running
 | 
			
		||||
__proc_check() {
 | 
			
		||||
  cmd_bin="$(type -P "${1:-$EXEC_CMD_BIN}")"
 | 
			
		||||
  cmd_name="$(basename "${cmd_bin:-$EXEC_CMD_NAME}")"
 | 
			
		||||
  if __pgrep "$cmd_bin" || __pgrep "$cmd_name"; then
 | 
			
		||||
    SERVICE_IS_RUNNING="true"
 | 
			
		||||
    touch "$SERVICE_PID_FILE"
 | 
			
		||||
    echo "$cmd_name is already running"
 | 
			
		||||
    return 0
 | 
			
		||||
  else
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow ENV_ variable - Import env file
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_EXIT_CODE=0                                           # default exit code
 | 
			
		||||
WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
PRE_EXEC_MESSAGE="${ENV_PRE_EXEC_MESSAGE:-$PRE_EXEC_MESSAGE}" # Show message before execute
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# application specific
 | 
			
		||||
EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
EXEC_CMD_BIN="$(type -P "$EXEC_CMD_BIN" || echo "$EXEC_CMD_BIN")" # set full path
 | 
			
		||||
EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
SERVICE_PID_FILE="/run/init.d/$EXEC_CMD_NAME.pid"                 # set the pid file location
 | 
			
		||||
EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
SERVICE_PID_NUMBER="$(__pgrep)"                                   # check if running
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# create auth directories
 | 
			
		||||
[ -n "$USER_FILE_PREFIX" ] && { [ -d "$USER_FILE_PREFIX" ] || mkdir -p "$USER_FILE_PREFIX"; }
 | 
			
		||||
[ -n "$ROOT_FILE_PREFIX" ] && { [ -d "$ROOT_FILE_PREFIX" ] || mkdir -p "$ROOT_FILE_PREFIX"; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow per init script usernames and passwords
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/name" ] && user_name="$(<"$ETC_DIR/auth/user/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/pass" ] && user_pass="$(<"$ETC_DIR/auth/user/pass")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/name" ] && root_user_name="$(<"$ETC_DIR/auth/root/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/pass" ] && root_user_pass="$(<"$ETC_DIR/auth/root/pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow setting initial users and passwords via environment
 | 
			
		||||
user_name="${user_name:-$ENV_USER_NAME}"
 | 
			
		||||
user_pass="${user_pass:-$ENV_USER_PASS}"
 | 
			
		||||
root_user_name="${root_user_name:-$ENV_ROOT_USER_NAME}"
 | 
			
		||||
root_user_pass="${root_user_pass:-$ENV_ROOT_USER_PASS}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set password to random if variable is random
 | 
			
		||||
if [ "$user_pass" = "random" ]; then
 | 
			
		||||
  user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
if [ "$root_user_pass" = "random" ]; then
 | 
			
		||||
  root_user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow variables via imports - Overwrite existing
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Only run check
 | 
			
		||||
if [ "$1" = "check" ]; then
 | 
			
		||||
  __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"
 | 
			
		||||
  exit $?
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show message if env exists
 | 
			
		||||
if [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  [ -n "$SERVICE_USER" ] && echo "Setting up service to run as $SERVICE_USER" || SERVICE_USER="root"
 | 
			
		||||
  [ -n "$SERVICE_PORT" ] && echo "${EXEC_CMD_NAME:-$EXEC_CMD_BIN} will be running on $SERVICE_PORT" || SERVICE_PORT=""
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set switch user command
 | 
			
		||||
if [ "$SERVICE_USER" = "root" ] || [ -z "$SERVICE_USER" ]; then
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P gosu)" ]; then
 | 
			
		||||
  su_cmd() { gosu $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P runuser)" ]; then
 | 
			
		||||
  su_cmd() { runuser -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P sudo)" ]; then
 | 
			
		||||
  su_cmd() { sudo -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P su)" ]; then
 | 
			
		||||
  su_cmd() { su -s /bin/sh - $SERVICE_USER -c "$@" || return 1; }
 | 
			
		||||
else
 | 
			
		||||
  echo "Can not switch to $SERVICE_USER: attempting to run as root"
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Change to working directory
 | 
			
		||||
[ -n "$WORKDIR" ] && [ -n "$EXEC_CMD_BIN" ] && __cd "$WORKDIR" && echo "Changed to $PWD"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show init message
 | 
			
		||||
__pre_message
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Initialize ssl
 | 
			
		||||
__update_ssl_conf
 | 
			
		||||
__update_ssl_certs
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Updating config files
 | 
			
		||||
__create_env
 | 
			
		||||
__update_conf_files
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run the pre execute commands
 | 
			
		||||
[ -n "$PRE_EXEC_MESSAGE" ] && echo "$PRE_EXEC_MESSAGE"
 | 
			
		||||
__pre_execute
 | 
			
		||||
__run_secure_function
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__run_start_script "$@" |& tee -a "/data/logs/entrypoint.log" &>/dev/null
 | 
			
		||||
if [ "$?" -ne 0 ] && [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  echo "Failed to execute: $EXEC_CMD_BIN $EXEC_CMD_ARGS" |& tee -a "/data/logs/entrypoint.log" "$LOG_DIR/init.txt"
 | 
			
		||||
  SERVICE_EXIT_CODE=10
 | 
			
		||||
  SERVICE_IS_RUNNING="false"
 | 
			
		||||
  rm -Rf "$SERVICE_PID_FILE"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
exit $SERVICE_EXIT_CODE
 | 
			
		||||
							
								
								
									
										398
									
								
								init/done/03-headphones.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										398
									
								
								init/done/03-headphones.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,398 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
 | 
			
		||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -o pipefail -x$DEBUGGER_OPTIONS || set -o pipefail
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
printf '%s\n' "# - - - Initializing headphones - - - #"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_NAME="headphones"
 | 
			
		||||
SCRIPT_NAME="$(basename "$0" 2>/dev/null)"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
export PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run trap command on exit
 | 
			
		||||
trap 'retVal=$?;[ "$SERVICE_IS_RUNNING" != "true" ] && [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE";exit $retVal' SIGINT SIGTERM EXIT
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# import the functions file
 | 
			
		||||
if [ -f "/usr/local/etc/docker/functions/entrypoint.sh" ]; then
 | 
			
		||||
  . "/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"
 | 
			
		||||
done
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Custom functions
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Show message before execute
 | 
			
		||||
PRE_EXEC_MESSAGE=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Default predefined variables
 | 
			
		||||
WORKDIR=""                  # set working directory
 | 
			
		||||
DATA_DIR="/data/headphones" # set data directory
 | 
			
		||||
WWW_DIR="/data/htdocs/www"  # set the web root
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ETC_DIR="/etc/headphones"     # set etc directory
 | 
			
		||||
CONF_DIR="/config/headphones" # set config directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
RUN_DIR="/run/init.d"           # set scripts pid dir
 | 
			
		||||
LOG_DIR="/data/logs/headphones" # set log directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ROOT_FILE_PREFIX="/config/secure/auth/root" # directory to save username/password for root user
 | 
			
		||||
USER_FILE_PREFIX="/config/secure/auth/user" # directory to save username/password for normal user
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set the database directory
 | 
			
		||||
DATABASE_DIR="${DATABASE_DIR_HEADPHONES:-/data/db/headphones}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional predefined variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# port which service is listening on
 | 
			
		||||
SERVICE_PORT="80"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# execute command variables
 | 
			
		||||
SERVICE_UID="0"                                               # set the user id
 | 
			
		||||
SERVICE_USER="root"                                           # execute command as another user
 | 
			
		||||
EXEC_CMD_BIN="python3"                                        # command to execute
 | 
			
		||||
EXEC_CMD_ARGS="/var/lib/headphones/Headphones.py --nolaunch " # command arguments
 | 
			
		||||
EXEC_CMD_ARGS+="--config $CONF_DIR/headphones.ini --datadir $DATA_DIR "
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a web server
 | 
			
		||||
IS_WEB_SERVER="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a database server
 | 
			
		||||
IS_DATABASE_SERVICE="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# usernames
 | 
			
		||||
user_name="${HEADPHONES_USER_NAME:-}"           # normal user name
 | 
			
		||||
root_user_name="${HEADPHONES_ROOT_USER_NAME:-}" # root user name
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# passwords [password/random]
 | 
			
		||||
user_pass="${HEADPHONES_USER_PASS_WORD:-}"      # normal user password
 | 
			
		||||
root_user_pass="${HEADPHONES_ROOT_PASS_WORD:-}" # root user password
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Overwrite variables from files
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_name" ] && user_name="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && user_pass="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name" ] && root_user_name="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && root_user_pass="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Specifiy custom directories to be created
 | 
			
		||||
ADD_APPLICATION_FILES=""
 | 
			
		||||
ADD_APPLICATION_DIRS=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
APPLICATION_FILES="$LOG_DIR/headphones.log"
 | 
			
		||||
APPLICATION_DIRS="$RUN_DIR $ETC_DIR $CONF_DIR $LOG_DIR /data/cache /data/downloads"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__update_conf_files() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
 | 
			
		||||
  # create default directories
 | 
			
		||||
  for filedirs in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
    if [ -n "$filedirs" ] && [ ! -d "$filedirs" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating directory $filedirs with permissions 777"
 | 
			
		||||
        mkdir -p "$filedirs" && chmod -Rf 777 "$filedirs"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create default files
 | 
			
		||||
  for application_files in $ADD_APPLICATION_FILES $APPLICATION_FILES; do
 | 
			
		||||
    if [ -n "$application_files" ] && [ ! -e "$application_files" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating file $application_files with permissions 777"
 | 
			
		||||
        touch "$application_files" && chmod -Rf 777 "$application_files"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create directories if variable is yes"
 | 
			
		||||
  [ "$IS_WEB_SERVER" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $WWW_DIR" && { [ -d "$WWW_DIR" ] || { (echo "Creating directory $WWW_DIR with permissions 777" && mkdir -p "$WWW_DIR" && chmod -f 777 "$WWW_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  [ "$IS_DATABASE_SERVICE" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $DATABASE_DIR" && { [ -d "$DATABASE_DIR" ] || { (echo "Creating directory $DATABASE_DIR with permissions 777" && mkdir -p "$DATABASE_DIR" && chmod -f 777 "$DATABASE_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  # copy config files to system
 | 
			
		||||
  __file_copy "$CONF_DIR/." "$ETC_DIR/" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  # replace variables
 | 
			
		||||
  __replace "REPLACE_USER_NAME" "$user_name" "$ETC_DIR/headphones.ini"
 | 
			
		||||
  __replace "REPLACE_USER_PASS" "$user_pass" "$ETC_DIR/headphones.ini"
 | 
			
		||||
  __replace "REPLACE_SERVER_PORT" "$SERVICE_PORT" "$ETC_DIR/headphones.ini"
 | 
			
		||||
  # other
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset application_files filedirs
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run before executing
 | 
			
		||||
__pre_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  # define commands
 | 
			
		||||
 | 
			
		||||
  # execute if directories is empty
 | 
			
		||||
  #__is_dir_empty "" &&
 | 
			
		||||
 | 
			
		||||
  # create user if needed
 | 
			
		||||
  # __create_service_user "$user" "/home/$user" "${USER_GID:-${USER_UID:-1000}"
 | 
			
		||||
  # set user on files/folders
 | 
			
		||||
  if [ -n "$user" ] && [ "$user" != "root" ]; then
 | 
			
		||||
    if grep -s -q "$user:" "/etc/passwd"; then
 | 
			
		||||
      for permissions in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
        if [ -n "$permissions" ] && [ -e "$permissions" ]; then
 | 
			
		||||
          (chown -Rf $user:$user "$permissions" && echo "changed ownership on $permissions to $user") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
        fi
 | 
			
		||||
      done
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset filesperms filename
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run after executing
 | 
			
		||||
__post_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  sleep 60                           # how long to wait before executing
 | 
			
		||||
  echo "Running post commands"       # message
 | 
			
		||||
  # execute commands
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__pre_message() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
  [ -n "$user_name" ] && echo "username:               $user_name" && echo "$user_name" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$user_pass" ] && echo "password:               saved to ${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$user_pass" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
  [ -n "$root_user_name" ] && echo "root username:     $root_user_name" && echo "$root_user_name" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$root_user_pass" ] && echo "root password:     saved to ${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$root_user_pass" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to setup ssl support
 | 
			
		||||
__update_ssl_conf() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__create_env() {
 | 
			
		||||
  cat <<EOF | tee "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" &>/dev/null
 | 
			
		||||
# ENV_WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
# ENV_WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
# ENV_ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
# ENV_DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
# ENV_CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
# ENV_DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
# ENV_SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
# ENV_SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
# ENV_SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
# EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
# EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
# EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
# ENV_USER_NAME="${user_name:-$ENV_USER_NAME}"                      #
 | 
			
		||||
# ENV_USER_PASS="${user_pass:-$ENV_USER_PASS}"                      #
 | 
			
		||||
# ENV_ROOT_USER_NAME="${root_user_name:-$ENV_ROOT_USER_NAME}"       #
 | 
			
		||||
# ENV_ROOT_USER_PASS="${root_user_pass:-$ENV_ROOT_USER_PASS}"       #
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
  [ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] || return 1
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# script to start server
 | 
			
		||||
__run_start_script() {
 | 
			
		||||
  local user="${SERVICE_USER:-root}"
 | 
			
		||||
  local workdir="${WORKDIR:-$WORK_DIR}"
 | 
			
		||||
  local cmd="$EXEC_CMD_BIN $EXEC_CMD_ARGS"
 | 
			
		||||
  local lc_type="${LC_ALL:-${LC_CTYPE:-$LANG}}"
 | 
			
		||||
  local home="${workdir//\/root/\/tmp\/docker}"
 | 
			
		||||
  local path="/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
  if [ -z "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
    __post_execute 2>"/dev/stderr" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    echo "Initializing $SCRIPT_NAME has completed"
 | 
			
		||||
  else
 | 
			
		||||
    # ensure the command exists
 | 
			
		||||
    if [ ! -x "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is not a valid executable"
 | 
			
		||||
      exit 2
 | 
			
		||||
    fi
 | 
			
		||||
    # set working directories
 | 
			
		||||
    [ -z "$home" ] && home="${workdir:-/tmp/docker}"
 | 
			
		||||
    [ "$home" = "/root" ] && home="/tmp/docker"
 | 
			
		||||
    [ "$home" = "$workdir" ] && workdir=""
 | 
			
		||||
    # create needed directories
 | 
			
		||||
    [ -n "$home" ] && { [ -d "$home" ] || mkdir -p "$home"; }
 | 
			
		||||
    [ -n "$workdir" ] && { [ -d "$workdir" ] || mkdir -p "$workdir" || workdir="/tmp"; }
 | 
			
		||||
    [ -n "$workdir" ] && __cd "$workdir" || { [ -n "$home" ] && __cd "$home"; } || __cd "/tmp"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$home" ] && chmod -f 777 "$home"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$workdir" ] && chmod -f 777 "$workdir"
 | 
			
		||||
    # check and exit if already running
 | 
			
		||||
    if __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is already running" >&2
 | 
			
		||||
      exit 0
 | 
			
		||||
    else
 | 
			
		||||
      echo "Starting service: $EXEC_CMD_NAME $EXEC_CMD_ARGS"
 | 
			
		||||
      su_cmd touch "$SERVICE_PID_FILE"
 | 
			
		||||
      __post_execute 2>"/dev/stderr" 2>&1 |& tee -a "$LOG_DIR/init.txt" &>/dev/null &
 | 
			
		||||
      su_cmd env -i HOME="$home" LC_CTYPE="$lc_type" PATH="$path" USER="$user" sh -c "$cmd" || return 10
 | 
			
		||||
    fi
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# simple cd function
 | 
			
		||||
__cd() { mkdir -p "$1" && builtin cd "$1" || exit 1; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# process check functions
 | 
			
		||||
__pcheck() { [ -n "$(type -P pgrep 2>/dev/null)" ] && pgrep -x "$1" &>/dev/null && return 0 || return 10; }
 | 
			
		||||
__pgrep() { __pcheck "${1:-$EXEC_CMD_BIN}" || __ps aux 2>/dev/null | grep -Fw " ${1:-$EXEC_CMD_BIN}" | grep -qv ' grep' | grep '^' && return 0 || return 10; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# check if process is already running
 | 
			
		||||
__proc_check() {
 | 
			
		||||
  cmd_bin="$(type -P "${1:-$EXEC_CMD_BIN}")"
 | 
			
		||||
  cmd_name="$(basename "${cmd_bin:-$EXEC_CMD_NAME}")"
 | 
			
		||||
  if __pgrep "$cmd_bin" || __pgrep "$cmd_name"; then
 | 
			
		||||
    SERVICE_IS_RUNNING="true"
 | 
			
		||||
    touch "$SERVICE_PID_FILE"
 | 
			
		||||
    echo "$cmd_name is already running"
 | 
			
		||||
    return 0
 | 
			
		||||
  else
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow ENV_ variable - Import env file
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_EXIT_CODE=0                                           # default exit code
 | 
			
		||||
WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
PRE_EXEC_MESSAGE="${ENV_PRE_EXEC_MESSAGE:-$PRE_EXEC_MESSAGE}" # Show message before execute
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# application specific
 | 
			
		||||
EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
EXEC_CMD_BIN="$(type -P "$EXEC_CMD_BIN" || echo "$EXEC_CMD_BIN")" # set full path
 | 
			
		||||
EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
SERVICE_PID_FILE="/run/init.d/$EXEC_CMD_NAME.pid"                 # set the pid file location
 | 
			
		||||
EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
SERVICE_PID_NUMBER="$(__pgrep)"                                   # check if running
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# create auth directories
 | 
			
		||||
[ -n "$USER_FILE_PREFIX" ] && { [ -d "$USER_FILE_PREFIX" ] || mkdir -p "$USER_FILE_PREFIX"; }
 | 
			
		||||
[ -n "$ROOT_FILE_PREFIX" ] && { [ -d "$ROOT_FILE_PREFIX" ] || mkdir -p "$ROOT_FILE_PREFIX"; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow per init script usernames and passwords
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/name" ] && user_name="$(<"$ETC_DIR/auth/user/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/pass" ] && user_pass="$(<"$ETC_DIR/auth/user/pass")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/name" ] && root_user_name="$(<"$ETC_DIR/auth/root/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/pass" ] && root_user_pass="$(<"$ETC_DIR/auth/root/pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow setting initial users and passwords via environment
 | 
			
		||||
user_name="${user_name:-$ENV_USER_NAME}"
 | 
			
		||||
user_pass="${user_pass:-$ENV_USER_PASS}"
 | 
			
		||||
root_user_name="${root_user_name:-$ENV_ROOT_USER_NAME}"
 | 
			
		||||
root_user_pass="${root_user_pass:-$ENV_ROOT_USER_PASS}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set password to random if variable is random
 | 
			
		||||
if [ "$user_pass" = "random" ]; then
 | 
			
		||||
  user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
if [ "$root_user_pass" = "random" ]; then
 | 
			
		||||
  root_user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow variables via imports - Overwrite existing
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Only run check
 | 
			
		||||
if [ "$1" = "check" ]; then
 | 
			
		||||
  __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"
 | 
			
		||||
  exit $?
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show message if env exists
 | 
			
		||||
if [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  [ -n "$SERVICE_USER" ] && echo "Setting up service to run as $SERVICE_USER" || SERVICE_USER="root"
 | 
			
		||||
  [ -n "$SERVICE_PORT" ] && echo "${EXEC_CMD_NAME:-$EXEC_CMD_BIN} will be running on $SERVICE_PORT" || SERVICE_PORT=""
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set switch user command
 | 
			
		||||
if [ "$SERVICE_USER" = "root" ] || [ -z "$SERVICE_USER" ]; then
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P gosu)" ]; then
 | 
			
		||||
  su_cmd() { gosu $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P runuser)" ]; then
 | 
			
		||||
  su_cmd() { runuser -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P sudo)" ]; then
 | 
			
		||||
  su_cmd() { sudo -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P su)" ]; then
 | 
			
		||||
  su_cmd() { su -s /bin/sh - $SERVICE_USER -c "$@" || return 1; }
 | 
			
		||||
else
 | 
			
		||||
  echo "Can not switch to $SERVICE_USER: attempting to run as root"
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Change to working directory
 | 
			
		||||
[ -n "$WORKDIR" ] && [ -n "$EXEC_CMD_BIN" ] && __cd "$WORKDIR" && echo "Changed to $PWD"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show init message
 | 
			
		||||
__pre_message
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Initialize ssl
 | 
			
		||||
__update_ssl_conf
 | 
			
		||||
__update_ssl_certs
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Updating config files
 | 
			
		||||
__create_env
 | 
			
		||||
__update_conf_files
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run the pre execute commands
 | 
			
		||||
[ -n "$PRE_EXEC_MESSAGE" ] && echo "$PRE_EXEC_MESSAGE"
 | 
			
		||||
__pre_execute
 | 
			
		||||
__run_secure_function
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__run_start_script "$@" |& tee -a "/data/logs/entrypoint.log" &>/dev/null
 | 
			
		||||
if [ "$?" -ne 0 ] && [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  echo "Failed to execute: $EXEC_CMD_BIN $EXEC_CMD_ARGS" |& tee -a "/data/logs/entrypoint.log" "$LOG_DIR/init.txt"
 | 
			
		||||
  SERVICE_EXIT_CODE=10
 | 
			
		||||
  SERVICE_IS_RUNNING="false"
 | 
			
		||||
  rm -Rf "$SERVICE_PID_FILE"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
exit $SERVICE_EXIT_CODE
 | 
			
		||||
							
								
								
									
										404
									
								
								init/done/03-homepage.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										404
									
								
								init/done/03-homepage.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,404 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
 | 
			
		||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -o pipefail -x$DEBUGGER_OPTIONS || set -o pipefail
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
printf '%s\n' "# - - - Initializing homepage - - - #"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_NAME="homepage"
 | 
			
		||||
SCRIPT_NAME="$(basename "$0" 2>/dev/null)"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
export PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run trap command on exit
 | 
			
		||||
trap 'retVal=$?;[ "$SERVICE_IS_RUNNING" != "true" ] && [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE";exit $retVal' SIGINT SIGTERM EXIT
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# import the functions file
 | 
			
		||||
if [ -f "/usr/local/etc/docker/functions/entrypoint.sh" ]; then
 | 
			
		||||
  . "/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"
 | 
			
		||||
done
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Custom functions
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Show message before execute
 | 
			
		||||
PRE_EXEC_MESSAGE=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Default predefined variables
 | 
			
		||||
WORKDIR=""                 # set working directory
 | 
			
		||||
DATA_DIR="/data"           # set data directory
 | 
			
		||||
WWW_DIR="/data/htdocs/www" # set the web root
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ETC_DIR="/etc/homepage"     # set etc directory
 | 
			
		||||
CONF_DIR="/config/homepage" # set config directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
RUN_DIR="/run/init.d"         # set scripts pid dir
 | 
			
		||||
LOG_DIR="/data/logs/homepage" # set log directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ROOT_FILE_PREFIX="/config/secure/auth/root" # directory to save username/password for root user
 | 
			
		||||
USER_FILE_PREFIX="/config/secure/auth/user" # directory to save username/password for normal user
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set the database directory
 | 
			
		||||
DATABASE_DIR="${DATABASE_DIR_HOMEPAGE:-/data/db/homepage}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional predefined variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# port which service is listening on
 | 
			
		||||
SERVICE_PORT="3000"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# execute command variables
 | 
			
		||||
SERVICE_UID="0"           # set the user id
 | 
			
		||||
SERVICE_USER="root"       # execute command as another user
 | 
			
		||||
EXEC_CMD_BIN="homepage"   # command to execute
 | 
			
		||||
EXEC_CMD_ARGS="server.js" # command arguments
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a web server
 | 
			
		||||
IS_WEB_SERVER="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a database server
 | 
			
		||||
IS_DATABASE_SERVICE="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# usernames
 | 
			
		||||
user_name="${HOMEPAGE_USER_NAME:-}"           # normal user name
 | 
			
		||||
root_user_name="${HOMEPAGE_ROOT_USER_NAME:-}" # root user name
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# passwords [password/random]
 | 
			
		||||
user_pass="${HOMEPAGE_USER_PASS_WORD:-}"      # normal user password
 | 
			
		||||
root_user_pass="${HOMEPAGE_ROOT_PASS_WORD:-}" # root user password
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Overwrite variables from files
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_name" ] && user_name="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && user_pass="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name" ] && root_user_name="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && root_user_pass="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Specifiy custom directories to be created
 | 
			
		||||
ADD_APPLICATION_FILES=""
 | 
			
		||||
ADD_APPLICATION_DIRS=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
APPLICATION_FILES="$LOG_DIR/homepage.log"
 | 
			
		||||
APPLICATION_DIRS="$RUN_DIR $ETC_DIR $CONF_DIR $LOG_DIR"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__update_conf_files() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
 | 
			
		||||
  # delete files
 | 
			
		||||
  #__rm ""
 | 
			
		||||
 | 
			
		||||
  # define actions
 | 
			
		||||
 | 
			
		||||
  # create default directories
 | 
			
		||||
  for filedirs in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
    if [ -n "$filedirs" ] && [ ! -d "$filedirs" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating directory $filedirs with permissions 777"
 | 
			
		||||
        mkdir -p "$filedirs" && chmod -Rf 777 "$filedirs"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create default files
 | 
			
		||||
  for application_files in $ADD_APPLICATION_FILES $APPLICATION_FILES; do
 | 
			
		||||
    if [ -n "$application_files" ] && [ ! -e "$application_files" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating file $application_files with permissions 777"
 | 
			
		||||
        touch "$application_files" && chmod -Rf 777 "$application_files"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create directories if variable is yes"
 | 
			
		||||
  [ "$IS_WEB_SERVER" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $WWW_DIR" && { [ -d "$WWW_DIR" ] || { (echo "Creating directory $WWW_DIR with permissions 777" && mkdir -p "$WWW_DIR" && chmod -f 777 "$WWW_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  [ "$IS_DATABASE_SERVICE" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $DATABASE_DIR" && { [ -d "$DATABASE_DIR" ] || { (echo "Creating directory $DATABASE_DIR with permissions 777" && mkdir -p "$DATABASE_DIR" && chmod -f 777 "$DATABASE_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  # copy config files to system
 | 
			
		||||
  __file_copy "$CONF_DIR/." "$ETC_DIR/" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  # replace variables
 | 
			
		||||
  # __replace "" "" "$CONF_DIR/homepage.conf"
 | 
			
		||||
  # replace variables recursively
 | 
			
		||||
  # __find_replace "" "" "$CONF_DIR/"
 | 
			
		||||
  # custom commands
 | 
			
		||||
 | 
			
		||||
  # other
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset application_files filedirs
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run before executing
 | 
			
		||||
__pre_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  # define commands
 | 
			
		||||
 | 
			
		||||
  # execute if directories is empty
 | 
			
		||||
  #__is_dir_empty "" &&
 | 
			
		||||
 | 
			
		||||
  # create user if needed
 | 
			
		||||
  # __create_service_user "$user" "/home/$user" "${USER_GID:-${USER_UID:-1000}"
 | 
			
		||||
  # set user on files/folders
 | 
			
		||||
  if [ -n "$user" ] && [ "$user" != "root" ]; then
 | 
			
		||||
    if grep -s -q "$user:" "/etc/passwd"; then
 | 
			
		||||
      for permissions in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
        if [ -n "$permissions" ] && [ -e "$permissions" ]; then
 | 
			
		||||
          (chown -Rf $user:$user "$permissions" && echo "changed ownership on $permissions to $user") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
        fi
 | 
			
		||||
      done
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset filesperms filename
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run after executing
 | 
			
		||||
__post_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  sleep 60                           # how long to wait before executing
 | 
			
		||||
  echo "Running post commands"       # message
 | 
			
		||||
  # execute commands
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__pre_message() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
  [ -n "$user_name" ] && echo "username:               $user_name" && echo "$user_name" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$user_pass" ] && echo "password:               saved to ${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$user_pass" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
  [ -n "$root_user_name" ] && echo "root username:     $root_user_name" && echo "$root_user_name" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$root_user_pass" ] && echo "root password:     saved to ${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$root_user_pass" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to setup ssl support
 | 
			
		||||
__update_ssl_conf() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__create_env() {
 | 
			
		||||
  cat <<EOF | tee "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" &>/dev/null
 | 
			
		||||
# ENV_WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
# ENV_WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
# ENV_ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
# ENV_DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
# ENV_CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
# ENV_DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
# ENV_SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
# ENV_SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
# ENV_SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
# EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
# EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
# EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
# ENV_USER_NAME="${user_name:-$ENV_USER_NAME}"                      #
 | 
			
		||||
# ENV_USER_PASS="${user_pass:-$ENV_USER_PASS}"                      #
 | 
			
		||||
# ENV_ROOT_USER_NAME="${root_user_name:-$ENV_ROOT_USER_NAME}"       #
 | 
			
		||||
# ENV_ROOT_USER_PASS="${root_user_pass:-$ENV_ROOT_USER_PASS}"       #
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
  [ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] || return 1
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# script to start server
 | 
			
		||||
__run_start_script() {
 | 
			
		||||
  local user="${SERVICE_USER:-root}"
 | 
			
		||||
  local workdir="${WORKDIR:-$WORK_DIR}"
 | 
			
		||||
  local cmd="$EXEC_CMD_BIN $EXEC_CMD_ARGS"
 | 
			
		||||
  local lc_type="${LC_ALL:-${LC_CTYPE:-$LANG}}"
 | 
			
		||||
  local home="${workdir//\/root/\/tmp\/docker}"
 | 
			
		||||
  local path="/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
  if [ -z "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
    __post_execute 2>"/dev/stderr" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    echo "Initializing $SCRIPT_NAME has completed"
 | 
			
		||||
  else
 | 
			
		||||
    # ensure the command exists
 | 
			
		||||
    if [ ! -x "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is not a valid executable"
 | 
			
		||||
      exit 2
 | 
			
		||||
    fi
 | 
			
		||||
    # set working directories
 | 
			
		||||
    [ -z "$home" ] && home="${workdir:-/tmp/docker}"
 | 
			
		||||
    [ "$home" = "/root" ] && home="/tmp/docker"
 | 
			
		||||
    [ "$home" = "$workdir" ] && workdir=""
 | 
			
		||||
    # create needed directories
 | 
			
		||||
    [ -n "$home" ] && { [ -d "$home" ] || mkdir -p "$home"; }
 | 
			
		||||
    [ -n "$workdir" ] && { [ -d "$workdir" ] || mkdir -p "$workdir" || workdir="/tmp"; }
 | 
			
		||||
    [ -n "$workdir" ] && __cd "$workdir" || { [ -n "$home" ] && __cd "$home"; } || __cd "/tmp"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$home" ] && chmod -f 777 "$home"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$workdir" ] && chmod -f 777 "$workdir"
 | 
			
		||||
    # check and exit if already running
 | 
			
		||||
    if __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is already running" >&2
 | 
			
		||||
      exit 0
 | 
			
		||||
    else
 | 
			
		||||
      echo "Starting service: $EXEC_CMD_NAME $EXEC_CMD_ARGS"
 | 
			
		||||
      su_cmd touch "$SERVICE_PID_FILE"
 | 
			
		||||
      __post_execute 2>"/dev/stderr" 2>&1 |& tee -a "$LOG_DIR/init.txt" &>/dev/null &
 | 
			
		||||
      su_cmd env -i HOME="$home" LC_CTYPE="$lc_type" PATH="$path" USER="$user" sh -c "$cmd" || return 10
 | 
			
		||||
    fi
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# simple cd function
 | 
			
		||||
__cd() { mkdir -p "$1" && builtin cd "$1" || exit 1; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# process check functions
 | 
			
		||||
__pcheck() { [ -n "$(type -P pgrep 2>/dev/null)" ] && pgrep -x "$1" &>/dev/null && return 0 || return 10; }
 | 
			
		||||
__pgrep() { __pcheck "${1:-$EXEC_CMD_BIN}" || __ps aux 2>/dev/null | grep -Fw " ${1:-$EXEC_CMD_BIN}" | grep -qv ' grep' | grep '^' && return 0 || return 10; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# check if process is already running
 | 
			
		||||
__proc_check() {
 | 
			
		||||
  cmd_bin="$(type -P "${1:-$EXEC_CMD_BIN}")"
 | 
			
		||||
  cmd_name="$(basename "${cmd_bin:-$EXEC_CMD_NAME}")"
 | 
			
		||||
  if __pgrep "$cmd_bin" || __pgrep "$cmd_name"; then
 | 
			
		||||
    SERVICE_IS_RUNNING="true"
 | 
			
		||||
    touch "$SERVICE_PID_FILE"
 | 
			
		||||
    echo "$cmd_name is already running"
 | 
			
		||||
    return 0
 | 
			
		||||
  else
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow ENV_ variable - Import env file
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_EXIT_CODE=0                                           # default exit code
 | 
			
		||||
WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
PRE_EXEC_MESSAGE="${ENV_PRE_EXEC_MESSAGE:-$PRE_EXEC_MESSAGE}" # Show message before execute
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# application specific
 | 
			
		||||
EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
EXEC_CMD_BIN="$(type -P "$EXEC_CMD_BIN" || echo "$EXEC_CMD_BIN")" # set full path
 | 
			
		||||
EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
SERVICE_PID_FILE="/run/init.d/$EXEC_CMD_NAME.pid"                 # set the pid file location
 | 
			
		||||
EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
SERVICE_PID_NUMBER="$(__pgrep)"                                   # check if running
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# create auth directories
 | 
			
		||||
[ -n "$USER_FILE_PREFIX" ] && { [ -d "$USER_FILE_PREFIX" ] || mkdir -p "$USER_FILE_PREFIX"; }
 | 
			
		||||
[ -n "$ROOT_FILE_PREFIX" ] && { [ -d "$ROOT_FILE_PREFIX" ] || mkdir -p "$ROOT_FILE_PREFIX"; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow per init script usernames and passwords
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/name" ] && user_name="$(<"$ETC_DIR/auth/user/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/pass" ] && user_pass="$(<"$ETC_DIR/auth/user/pass")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/name" ] && root_user_name="$(<"$ETC_DIR/auth/root/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/pass" ] && root_user_pass="$(<"$ETC_DIR/auth/root/pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow setting initial users and passwords via environment
 | 
			
		||||
user_name="${user_name:-$ENV_USER_NAME}"
 | 
			
		||||
user_pass="${user_pass:-$ENV_USER_PASS}"
 | 
			
		||||
root_user_name="${root_user_name:-$ENV_ROOT_USER_NAME}"
 | 
			
		||||
root_user_pass="${root_user_pass:-$ENV_ROOT_USER_PASS}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set password to random if variable is random
 | 
			
		||||
if [ "$user_pass" = "random" ]; then
 | 
			
		||||
  user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
if [ "$root_user_pass" = "random" ]; then
 | 
			
		||||
  root_user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow variables via imports - Overwrite existing
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Only run check
 | 
			
		||||
if [ "$1" = "check" ]; then
 | 
			
		||||
  __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"
 | 
			
		||||
  exit $?
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show message if env exists
 | 
			
		||||
if [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  [ -n "$SERVICE_USER" ] && echo "Setting up service to run as $SERVICE_USER" || SERVICE_USER="root"
 | 
			
		||||
  [ -n "$SERVICE_PORT" ] && echo "${EXEC_CMD_NAME:-$EXEC_CMD_BIN} will be running on $SERVICE_PORT" || SERVICE_PORT=""
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set switch user command
 | 
			
		||||
if [ "$SERVICE_USER" = "root" ] || [ -z "$SERVICE_USER" ]; then
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P gosu)" ]; then
 | 
			
		||||
  su_cmd() { gosu $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P runuser)" ]; then
 | 
			
		||||
  su_cmd() { runuser -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P sudo)" ]; then
 | 
			
		||||
  su_cmd() { sudo -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P su)" ]; then
 | 
			
		||||
  su_cmd() { su -s /bin/sh - $SERVICE_USER -c "$@" || return 1; }
 | 
			
		||||
else
 | 
			
		||||
  echo "Can not switch to $SERVICE_USER: attempting to run as root"
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Change to working directory
 | 
			
		||||
[ -n "$WORKDIR" ] && [ -n "$EXEC_CMD_BIN" ] && __cd "$WORKDIR" && echo "Changed to $PWD"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show init message
 | 
			
		||||
__pre_message
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Initialize ssl
 | 
			
		||||
__update_ssl_conf
 | 
			
		||||
__update_ssl_certs
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Updating config files
 | 
			
		||||
__create_env
 | 
			
		||||
__update_conf_files
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run the pre execute commands
 | 
			
		||||
[ -n "$PRE_EXEC_MESSAGE" ] && echo "$PRE_EXEC_MESSAGE"
 | 
			
		||||
__pre_execute
 | 
			
		||||
__run_secure_function
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__run_start_script "$@" |& tee -a "/data/logs/entrypoint.log" &>/dev/null
 | 
			
		||||
if [ "$?" -ne 0 ] && [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  echo "Failed to execute: $EXEC_CMD_BIN $EXEC_CMD_ARGS" |& tee -a "/data/logs/entrypoint.log" "$LOG_DIR/init.txt"
 | 
			
		||||
  SERVICE_EXIT_CODE=10
 | 
			
		||||
  SERVICE_IS_RUNNING="false"
 | 
			
		||||
  rm -Rf "$SERVICE_PID_FILE"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
exit $SERVICE_EXIT_CODE
 | 
			
		||||
							
								
								
									
										405
									
								
								init/done/03-homey.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										405
									
								
								init/done/03-homey.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,405 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
 | 
			
		||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -o pipefail -x$DEBUGGER_OPTIONS || set -o pipefail
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
printf '%s\n' "# - - - Initializing homey - - - #"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_NAME="homey"
 | 
			
		||||
SCRIPT_NAME="$(basename "$0" 2>/dev/null)"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
export PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run trap command on exit
 | 
			
		||||
trap 'retVal=$?;[ "$SERVICE_IS_RUNNING" != "true" ] && [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE";exit $retVal' SIGINT SIGTERM EXIT
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# import the functions file
 | 
			
		||||
if [ -f "/usr/local/etc/docker/functions/entrypoint.sh" ]; then
 | 
			
		||||
  . "/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"
 | 
			
		||||
done
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Custom functions
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Show message before execute
 | 
			
		||||
PRE_EXEC_MESSAGE=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Default predefined variables
 | 
			
		||||
WORKDIR=""                 # set working directory
 | 
			
		||||
DATA_DIR="/data"           # set data directory
 | 
			
		||||
WWW_DIR="/data/htdocs/www" # set the web root
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ETC_DIR="/etc/homey"     # set etc directory
 | 
			
		||||
CONF_DIR="/config/homey" # set config directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
RUN_DIR="/run/init.d"      # set scripts pid dir
 | 
			
		||||
LOG_DIR="/data/logs/homey" # set log directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ROOT_FILE_PREFIX="/config/secure/auth/root" # directory to save username/password for root user
 | 
			
		||||
USER_FILE_PREFIX="/config/secure/auth/user" # directory to save username/password for normal user
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set the database directory
 | 
			
		||||
DATABASE_DIR="${DATABASE_DIR_HOMEY:-/data/db/homey}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional predefined variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# port which service is listening on
 | 
			
		||||
SERVICE_PORT="9101"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# execute command variables
 | 
			
		||||
SERVICE_UID="0"                                                     # set the user id
 | 
			
		||||
SERVICE_USER="root"                                                 # execute command as another user
 | 
			
		||||
EXEC_CMD_BIN="gunicorn"                                             # command to execute
 | 
			
		||||
EXEC_CMD_ARGS="-b 0.0.0.0:$SERVICE_PORT --worker-tmp-dir /dev/shm " # command arguments
 | 
			
		||||
EXEC_CMD_ARGS+="--workers 2 --threads 50 --log-file - app:app"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a web server
 | 
			
		||||
IS_WEB_SERVER="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a database server
 | 
			
		||||
IS_DATABASE_SERVICE="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# usernames
 | 
			
		||||
user_name="${HOMEY_USER_NAME:-}"           # normal user name
 | 
			
		||||
root_user_name="${HOMEY_ROOT_USER_NAME:-}" # root user name
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# passwords [password/random]
 | 
			
		||||
user_pass="${HOMEY_USER_PASS_WORD:-}"      # normal user password
 | 
			
		||||
root_user_pass="${HOMEY_ROOT_PASS_WORD:-}" # root user password
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Overwrite variables from files
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_name" ] && user_name="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && user_pass="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name" ] && root_user_name="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && root_user_pass="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Specifiy custom directories to be created
 | 
			
		||||
ADD_APPLICATION_FILES=""
 | 
			
		||||
ADD_APPLICATION_DIRS=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
APPLICATION_FILES="$LOG_DIR/homey.log"
 | 
			
		||||
APPLICATION_DIRS="$RUN_DIR $ETC_DIR $CONF_DIR $LOG_DIR"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__update_conf_files() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
 | 
			
		||||
  # delete files
 | 
			
		||||
  #__rm ""
 | 
			
		||||
 | 
			
		||||
  # define actions
 | 
			
		||||
 | 
			
		||||
  # create default directories
 | 
			
		||||
  for filedirs in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
    if [ -n "$filedirs" ] && [ ! -d "$filedirs" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating directory $filedirs with permissions 777"
 | 
			
		||||
        mkdir -p "$filedirs" && chmod -Rf 777 "$filedirs"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create default files
 | 
			
		||||
  for application_files in $ADD_APPLICATION_FILES $APPLICATION_FILES; do
 | 
			
		||||
    if [ -n "$application_files" ] && [ ! -e "$application_files" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating file $application_files with permissions 777"
 | 
			
		||||
        touch "$application_files" && chmod -Rf 777 "$application_files"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create directories if variable is yes"
 | 
			
		||||
  [ "$IS_WEB_SERVER" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $WWW_DIR" && { [ -d "$WWW_DIR" ] || { (echo "Creating directory $WWW_DIR with permissions 777" && mkdir -p "$WWW_DIR" && chmod -f 777 "$WWW_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  [ "$IS_DATABASE_SERVICE" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $DATABASE_DIR" && { [ -d "$DATABASE_DIR" ] || { (echo "Creating directory $DATABASE_DIR with permissions 777" && mkdir -p "$DATABASE_DIR" && chmod -f 777 "$DATABASE_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  # copy config files to system
 | 
			
		||||
  __file_copy "$CONF_DIR/." "$ETC_DIR/" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  # replace variables
 | 
			
		||||
  # __replace "" "" "$CONF_DIR/homey.conf"
 | 
			
		||||
  # replace variables recursively
 | 
			
		||||
  # __find_replace "" "" "$CONF_DIR/"
 | 
			
		||||
  # custom commands
 | 
			
		||||
 | 
			
		||||
  # other
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset application_files filedirs
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run before executing
 | 
			
		||||
__pre_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  # define commands
 | 
			
		||||
 | 
			
		||||
  # execute if directories is empty
 | 
			
		||||
  #__is_dir_empty "" &&
 | 
			
		||||
 | 
			
		||||
  # create user if needed
 | 
			
		||||
  # __create_service_user "$user" "/home/$user" "${USER_GID:-${USER_UID:-1000}"
 | 
			
		||||
  # set user on files/folders
 | 
			
		||||
  if [ -n "$user" ] && [ "$user" != "root" ]; then
 | 
			
		||||
    if grep -s -q "$user:" "/etc/passwd"; then
 | 
			
		||||
      for permissions in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
        if [ -n "$permissions" ] && [ -e "$permissions" ]; then
 | 
			
		||||
          (chown -Rf $user:$user "$permissions" && echo "changed ownership on $permissions to $user") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
        fi
 | 
			
		||||
      done
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset filesperms filename
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run after executing
 | 
			
		||||
__post_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  sleep 60                           # how long to wait before executing
 | 
			
		||||
  echo "Running post commands"       # message
 | 
			
		||||
  # execute commands
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__pre_message() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
  [ -n "$user_name" ] && echo "username:               $user_name" && echo "$user_name" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$user_pass" ] && echo "password:               saved to ${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$user_pass" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
  [ -n "$root_user_name" ] && echo "root username:     $root_user_name" && echo "$root_user_name" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$root_user_pass" ] && echo "root password:     saved to ${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$root_user_pass" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to setup ssl support
 | 
			
		||||
__update_ssl_conf() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__create_env() {
 | 
			
		||||
  cat <<EOF | tee "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" &>/dev/null
 | 
			
		||||
# ENV_WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
# ENV_WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
# ENV_ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
# ENV_DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
# ENV_CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
# ENV_DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
# ENV_SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
# ENV_SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
# ENV_SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
# EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
# EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
# EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
# ENV_USER_NAME="${user_name:-$ENV_USER_NAME}"                      #
 | 
			
		||||
# ENV_USER_PASS="${user_pass:-$ENV_USER_PASS}"                      #
 | 
			
		||||
# ENV_ROOT_USER_NAME="${root_user_name:-$ENV_ROOT_USER_NAME}"       #
 | 
			
		||||
# ENV_ROOT_USER_PASS="${root_user_pass:-$ENV_ROOT_USER_PASS}"       #
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
  [ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] || return 1
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# script to start server
 | 
			
		||||
__run_start_script() {
 | 
			
		||||
  local user="${SERVICE_USER:-root}"
 | 
			
		||||
  local workdir="${WORKDIR:-$WORK_DIR}"
 | 
			
		||||
  local cmd="$EXEC_CMD_BIN $EXEC_CMD_ARGS"
 | 
			
		||||
  local lc_type="${LC_ALL:-${LC_CTYPE:-$LANG}}"
 | 
			
		||||
  local home="${workdir//\/root/\/tmp\/docker}"
 | 
			
		||||
  local path="/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
  if [ -z "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
    __post_execute 2>"/dev/stderr" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    echo "Initializing $SCRIPT_NAME has completed"
 | 
			
		||||
  else
 | 
			
		||||
    # ensure the command exists
 | 
			
		||||
    if [ ! -x "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is not a valid executable"
 | 
			
		||||
      exit 2
 | 
			
		||||
    fi
 | 
			
		||||
    # set working directories
 | 
			
		||||
    [ -z "$home" ] && home="${workdir:-/tmp/docker}"
 | 
			
		||||
    [ "$home" = "/root" ] && home="/tmp/docker"
 | 
			
		||||
    [ "$home" = "$workdir" ] && workdir=""
 | 
			
		||||
    # create needed directories
 | 
			
		||||
    [ -n "$home" ] && { [ -d "$home" ] || mkdir -p "$home"; }
 | 
			
		||||
    [ -n "$workdir" ] && { [ -d "$workdir" ] || mkdir -p "$workdir" || workdir="/tmp"; }
 | 
			
		||||
    [ -n "$workdir" ] && __cd "$workdir" || { [ -n "$home" ] && __cd "$home"; } || __cd "/tmp"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$home" ] && chmod -f 777 "$home"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$workdir" ] && chmod -f 777 "$workdir"
 | 
			
		||||
    # check and exit if already running
 | 
			
		||||
    if __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is already running" >&2
 | 
			
		||||
      exit 0
 | 
			
		||||
    else
 | 
			
		||||
      echo "Starting service: $EXEC_CMD_NAME $EXEC_CMD_ARGS"
 | 
			
		||||
      su_cmd touch "$SERVICE_PID_FILE"
 | 
			
		||||
      __post_execute 2>"/dev/stderr" 2>&1 |& tee -a "$LOG_DIR/init.txt" &>/dev/null &
 | 
			
		||||
      su_cmd env -i HOME="$home" LC_CTYPE="$lc_type" PATH="$path" USER="$user" sh -c "$cmd" || return 10
 | 
			
		||||
    fi
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# simple cd function
 | 
			
		||||
__cd() { mkdir -p "$1" && builtin cd "$1" || exit 1; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# process check functions
 | 
			
		||||
__pcheck() { [ -n "$(type -P pgrep 2>/dev/null)" ] && pgrep -x "$1" &>/dev/null && return 0 || return 10; }
 | 
			
		||||
__pgrep() { __pcheck "${1:-$EXEC_CMD_BIN}" || __ps aux 2>/dev/null | grep -Fw " ${1:-$EXEC_CMD_BIN}" | grep -qv ' grep' | grep '^' && return 0 || return 10; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# check if process is already running
 | 
			
		||||
__proc_check() {
 | 
			
		||||
  cmd_bin="$(type -P "${1:-$EXEC_CMD_BIN}")"
 | 
			
		||||
  cmd_name="$(basename "${cmd_bin:-$EXEC_CMD_NAME}")"
 | 
			
		||||
  if __pgrep "$cmd_bin" || __pgrep "$cmd_name"; then
 | 
			
		||||
    SERVICE_IS_RUNNING="true"
 | 
			
		||||
    touch "$SERVICE_PID_FILE"
 | 
			
		||||
    echo "$cmd_name is already running"
 | 
			
		||||
    return 0
 | 
			
		||||
  else
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow ENV_ variable - Import env file
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_EXIT_CODE=0                                           # default exit code
 | 
			
		||||
WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
PRE_EXEC_MESSAGE="${ENV_PRE_EXEC_MESSAGE:-$PRE_EXEC_MESSAGE}" # Show message before execute
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# application specific
 | 
			
		||||
EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
EXEC_CMD_BIN="$(type -P "$EXEC_CMD_BIN" || echo "$EXEC_CMD_BIN")" # set full path
 | 
			
		||||
EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
SERVICE_PID_FILE="/run/init.d/$EXEC_CMD_NAME.pid"                 # set the pid file location
 | 
			
		||||
EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
SERVICE_PID_NUMBER="$(__pgrep)"                                   # check if running
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# create auth directories
 | 
			
		||||
[ -n "$USER_FILE_PREFIX" ] && { [ -d "$USER_FILE_PREFIX" ] || mkdir -p "$USER_FILE_PREFIX"; }
 | 
			
		||||
[ -n "$ROOT_FILE_PREFIX" ] && { [ -d "$ROOT_FILE_PREFIX" ] || mkdir -p "$ROOT_FILE_PREFIX"; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow per init script usernames and passwords
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/name" ] && user_name="$(<"$ETC_DIR/auth/user/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/pass" ] && user_pass="$(<"$ETC_DIR/auth/user/pass")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/name" ] && root_user_name="$(<"$ETC_DIR/auth/root/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/pass" ] && root_user_pass="$(<"$ETC_DIR/auth/root/pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow setting initial users and passwords via environment
 | 
			
		||||
user_name="${user_name:-$ENV_USER_NAME}"
 | 
			
		||||
user_pass="${user_pass:-$ENV_USER_PASS}"
 | 
			
		||||
root_user_name="${root_user_name:-$ENV_ROOT_USER_NAME}"
 | 
			
		||||
root_user_pass="${root_user_pass:-$ENV_ROOT_USER_PASS}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set password to random if variable is random
 | 
			
		||||
if [ "$user_pass" = "random" ]; then
 | 
			
		||||
  user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
if [ "$root_user_pass" = "random" ]; then
 | 
			
		||||
  root_user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow variables via imports - Overwrite existing
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Only run check
 | 
			
		||||
if [ "$1" = "check" ]; then
 | 
			
		||||
  __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"
 | 
			
		||||
  exit $?
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show message if env exists
 | 
			
		||||
if [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  [ -n "$SERVICE_USER" ] && echo "Setting up service to run as $SERVICE_USER" || SERVICE_USER="root"
 | 
			
		||||
  [ -n "$SERVICE_PORT" ] && echo "${EXEC_CMD_NAME:-$EXEC_CMD_BIN} will be running on $SERVICE_PORT" || SERVICE_PORT=""
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set switch user command
 | 
			
		||||
if [ "$SERVICE_USER" = "root" ] || [ -z "$SERVICE_USER" ]; then
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P gosu)" ]; then
 | 
			
		||||
  su_cmd() { gosu $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P runuser)" ]; then
 | 
			
		||||
  su_cmd() { runuser -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P sudo)" ]; then
 | 
			
		||||
  su_cmd() { sudo -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P su)" ]; then
 | 
			
		||||
  su_cmd() { su -s /bin/sh - $SERVICE_USER -c "$@" || return 1; }
 | 
			
		||||
else
 | 
			
		||||
  echo "Can not switch to $SERVICE_USER: attempting to run as root"
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Change to working directory
 | 
			
		||||
[ -n "$WORKDIR" ] && [ -n "$EXEC_CMD_BIN" ] && __cd "$WORKDIR" && echo "Changed to $PWD"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show init message
 | 
			
		||||
__pre_message
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Initialize ssl
 | 
			
		||||
__update_ssl_conf
 | 
			
		||||
__update_ssl_certs
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Updating config files
 | 
			
		||||
__create_env
 | 
			
		||||
__update_conf_files
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run the pre execute commands
 | 
			
		||||
[ -n "$PRE_EXEC_MESSAGE" ] && echo "$PRE_EXEC_MESSAGE"
 | 
			
		||||
__pre_execute
 | 
			
		||||
__run_secure_function
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__run_start_script "$@" |& tee -a "/data/logs/entrypoint.log" &>/dev/null
 | 
			
		||||
if [ "$?" -ne 0 ] && [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  echo "Failed to execute: $EXEC_CMD_BIN $EXEC_CMD_ARGS" |& tee -a "/data/logs/entrypoint.log" "$LOG_DIR/init.txt"
 | 
			
		||||
  SERVICE_EXIT_CODE=10
 | 
			
		||||
  SERVICE_IS_RUNNING="false"
 | 
			
		||||
  rm -Rf "$SERVICE_PID_FILE"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
exit $SERVICE_EXIT_CODE
 | 
			
		||||
							
								
								
									
										456
									
								
								init/done/04-bind.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										456
									
								
								init/done/04-bind.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,456 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
 | 
			
		||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -o pipefail -x$DEBUGGER_OPTIONS || set -o pipefail
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
printf '%s\n' "# - - - Initializing bind - - - #"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_NAME="bind"
 | 
			
		||||
SCRIPT_NAME="$(basename "$0" 2>/dev/null)"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
export PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run trap command on exit
 | 
			
		||||
trap 'retVal=$?;[ "$SERVICE_IS_RUNNING" != "true" ] && [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE";exit $retVal' SIGINT SIGTERM EXIT
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# import the functions file
 | 
			
		||||
if [ -f "/usr/local/etc/docker/functions/entrypoint.sh" ]; then
 | 
			
		||||
  . "/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"
 | 
			
		||||
done
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Custom functions
 | 
			
		||||
__rndc_key() { grep -s 'key "rndc-key" ' "$ETC_DIR/rndc.key" | grep -v 'KEY_RNDC' | sed 's|.*secret ||g;s|"||g;s|;.*||g' | grep '^' || return 1; }
 | 
			
		||||
__tsig_key() { tsig-keygen -a hmac-sha256 | grep 'secret' | sed 's|.*secret "||g;s|"||g;s|;||g' | grep '^' || echo 'wp/HApbthaVPjwqgp6ziLlmnkyLSNbRTehkdARBDcpI='; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Show message before execute
 | 
			
		||||
PRE_EXEC_MESSAGE=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Default predefined variables
 | 
			
		||||
WORKDIR=""                 # set working directory
 | 
			
		||||
DATA_DIR="/data/named"     # set data directory
 | 
			
		||||
WWW_DIR="/data/htdocs/www" # set the web root
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ETC_DIR="/etc/bind"      # set etc directory
 | 
			
		||||
CONF_DIR="/config/named" # set config directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
RUN_DIR="/run/init.d"     # set scripts pid dir
 | 
			
		||||
LOG_DIR="/data/logs/bind" # set log directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ROOT_FILE_PREFIX="/config/secure/auth/root" # directory to save username/password for root user
 | 
			
		||||
USER_FILE_PREFIX="/config/secure/auth/user" # directory to save username/password for normal user
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set the database directory
 | 
			
		||||
DATABASE_DIR="${DATABASE_DIR_BIND:-/data/db/bind}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional predefined variables
 | 
			
		||||
KEY_RNDC="${KEY_RNDC:-$(__tsig_key)}"
 | 
			
		||||
KEY_DHCP="${KEY_DHCP:-$(__tsig_key)}"
 | 
			
		||||
KEY_BACKUP="${KEY_BACKUP:-$(__tsig_key)}"
 | 
			
		||||
KEY_CERTBOT="${KEY_CERTBOT:-$(__tsig_key)}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# port which service is listening on
 | 
			
		||||
SERVICE_PORT="53"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# execute command variables
 | 
			
		||||
SERVICE_UID="0"                           # set the user id
 | 
			
		||||
SERVICE_USER="root"                       # execute command as another user
 | 
			
		||||
EXEC_CMD_BIN="named"                      # command to execute
 | 
			
		||||
EXEC_CMD_ARGS="-f -c $ETC_DIR/named.conf" # command arguments
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a web server
 | 
			
		||||
IS_WEB_SERVER="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a database server
 | 
			
		||||
IS_DATABASE_SERVICE="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional variables
 | 
			
		||||
VAR_DIR="/var/bind"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# usernames
 | 
			
		||||
user_name="${BIND_USER_NAME:-}"           # normal user name
 | 
			
		||||
root_user_name="${BIND_ROOT_USER_NAME:-}" # root user name
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# passwords [password/random]
 | 
			
		||||
user_pass="${BIND_USER_PASS_WORD:-}"      # normal user password
 | 
			
		||||
root_user_pass="${BIND_ROOT_PASS_WORD:-}" # root user password
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Overwrite variables from files
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_name" ] && user_name="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && user_pass="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name" ] && root_user_name="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && root_user_pass="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Specifiy custom directories to be created
 | 
			
		||||
ADD_APPLICATION_FILES=""
 | 
			
		||||
ADD_APPLICATION_DIRS=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
APPLICATION_FILES="$LOG_DIR/xfer.log $LOG_DIR/update.log $LOG_DIR/notify.log $LOG_DIR/querylog.log "
 | 
			
		||||
APPLICATION_FILES+="$LOG_DIR/default.log $LOG_DIR/debug.log $LOG_DIR/security.log "
 | 
			
		||||
APPLICATION_DIRS="$RUN_DIR $ETC_DIR $CONF_DIR $LOG_DIR $CONF_DIR/keys $DATA_DIR/zones $VAR_DIR/zones"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__update_conf_files() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  local zone_files=""
 | 
			
		||||
  serial="$(date +'%Y%m%d%S')"
 | 
			
		||||
  local HOSTNAME="${SERVER_NAME:-$HOSTNAME}"
 | 
			
		||||
  local ip_address="${CONTAINER_IP4_ADDRESS:-127.0.0.1}"
 | 
			
		||||
  if [ -f "$CONF_DIR/set_rndc.key" ]; then
 | 
			
		||||
    GET_RNDC_KEY="$(<"$CONF_DIR/set_rndc.key")"
 | 
			
		||||
  fi
 | 
			
		||||
  # create default directories
 | 
			
		||||
  for filedirs in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
    if [ -n "$filedirs" ] && [ ! -d "$filedirs" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating directory $filedirs with permissions 777"
 | 
			
		||||
        mkdir -p "$filedirs" && chmod -Rf 777 "$filedirs"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create default files
 | 
			
		||||
  for application_files in $ADD_APPLICATION_FILES $APPLICATION_FILES; do
 | 
			
		||||
    if [ -n "$application_files" ] && [ ! -e "$application_files" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating file $application_files with permissions 777"
 | 
			
		||||
        touch "$application_files" && chmod -Rf 777 "$application_files"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create directories if variable is yes"
 | 
			
		||||
  [ "$IS_WEB_SERVER" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $WWW_DIR" && { [ -d "$WWW_DIR" ] || { (echo "Creating directory $WWW_DIR with permissions 777" && mkdir -p "$WWW_DIR" && chmod -f 777 "$WWW_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  [ "$IS_DATABASE_SERVICE" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $DATABASE_DIR" && { [ -d "$DATABASE_DIR" ] || { (echo "Creating directory $DATABASE_DIR with permissions 777" && mkdir -p "$DATABASE_DIR" && chmod -f 777 "$DATABASE_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  # copy config files to system
 | 
			
		||||
  __file_copy "$CONF_DIR/." "$ETC_DIR/" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  [ -f "$ETC_DIR/custom.conf" ] && mv -f "$ETC_DIR/custom.conf" "$ETC_DIR/named.conf"
 | 
			
		||||
 | 
			
		||||
  # replace variables
 | 
			
		||||
  __replace "REPLACE_KEY_DHCP" "$KEY_DHCP" "$ETC_DIR/named.conf"                  #&>/dev/null
 | 
			
		||||
  __replace "REPLACE_KEY_BACKUP" "$KEY_BACKUP" "$ETC_DIR/named.conf"              #&>/dev/null
 | 
			
		||||
  __replace "REPLACE_KEY_CERTBOT" "$KEY_CERTBOT" "$ETC_DIR/named.conf"            #&>/dev/null
 | 
			
		||||
  __replace "REPLACE_KEY_RNDC" "${GET_RNDC_KEY:-$KEY_RNDC}" "$ETC_DIR/rndc.key"   #&>/dev/null
 | 
			
		||||
  __replace "REPLACE_KEY_RNDC" "${GET_RNDC_KEY:-$KEY_RNDC}" "$ETC_DIR/named.conf" #&>/dev/null
 | 
			
		||||
 | 
			
		||||
  GET_RNDC_KEY="${GET_RNDC_KEY:-$(__rndc_key || echo '')}"
 | 
			
		||||
  if [ -n "$GET_RNDC_KEY" ]; then
 | 
			
		||||
    echo "$GET_RNDC_KEY" >"$CONF_DIR/set_rndc.key"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  zone_files="$(find "$DATA_DIR/zones/" -type f | wc -l)"
 | 
			
		||||
  if [ $zone_files = 0 ] && [ ! -f "$DATA_DIR/zones/$HOSTNAME.zone" ]; then
 | 
			
		||||
    cat <<EOF | tee "$DATA_DIR/zones/$HOSTNAME.zone" &>/dev/null
 | 
			
		||||
; config for $HOSTNAME
 | 
			
		||||
@                         IN  SOA     $HOSTNAME. root.$HOSTNAME. ( $serial 10800 3600 1209600 38400)
 | 
			
		||||
                          IN  NS      $HOSTNAME.
 | 
			
		||||
$HOSTNAME.                IN  A       $ip_address
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
  fi
 | 
			
		||||
  #
 | 
			
		||||
  for dns_file in "$DATA_DIR/zones"/*; do
 | 
			
		||||
    file_name="$(basename "$dns_file")"
 | 
			
		||||
    domain_name="$(grep -Rs '\$ORIGIN' "$dns_file" | awk '{print $NF}' | sed 's|.$||g')"
 | 
			
		||||
    if [ -f "$dns_file" ]; then
 | 
			
		||||
      cp -Rf "$dns_file" "$VAR_DIR/zones/$file_name"
 | 
			
		||||
      if [ -n "$domain_name" ] && ! grep -qs "$domain_name" "$ETC_DIR/named.conf"; then
 | 
			
		||||
        cat <<EOF >>"$ETC_DIR/named.conf"
 | 
			
		||||
#  ********** begin $domain_name **********
 | 
			
		||||
zone "$domain_name" {
 | 
			
		||||
    type master;
 | 
			
		||||
    file "$VAR_DIR/zones/$file_name";
 | 
			
		||||
    notify yes;
 | 
			
		||||
    allow-update {key "certbot."; key "dhcp-key"; trusted;};
 | 
			
		||||
    allow-transfer { any; key "backup-key"; };
 | 
			
		||||
};
 | 
			
		||||
#  ********** end $domain_name **********
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
        grep -qs "$domain_name" "$ETC_DIR/named.conf" && echo "Added $domain_name to $ETC_DIR/named.conf"
 | 
			
		||||
      fi
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  if named-checkconf -z "$ETC_DIR/named.conf" &>/dev/null; then
 | 
			
		||||
    echo "named-checkconf has succeeded"
 | 
			
		||||
  else
 | 
			
		||||
    echo "named-checkconf has failed:"
 | 
			
		||||
    named-checkconf -z "$ETC_DIR/named.conf"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset application_files filedirs
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run before executing
 | 
			
		||||
__pre_execute() {
 | 
			
		||||
  local exitCode=0   # default exit code
 | 
			
		||||
  local user="named" # specifiy different user
 | 
			
		||||
  # define commands
 | 
			
		||||
 | 
			
		||||
  # execute if directories is empty
 | 
			
		||||
  #__is_dir_empty "" &&
 | 
			
		||||
 | 
			
		||||
  # create user if needed
 | 
			
		||||
  # __create_service_user "$user" "/home/$user" "${USER_GID:-${USER_UID:-1000}"
 | 
			
		||||
  # set user on files/folders
 | 
			
		||||
  if [ -n "$user" ] && [ "$user" != "root" ]; then
 | 
			
		||||
    if grep -s -q "$user:" "/etc/passwd"; then
 | 
			
		||||
      for permissions in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
        if [ -n "$permissions" ] && [ -e "$permissions" ]; then
 | 
			
		||||
          (chown -Rf $user:$user "$permissions" && echo "changed ownership on $permissions to $user") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
        fi
 | 
			
		||||
      done
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset filesperms filename
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run after executing
 | 
			
		||||
__post_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  sleep 60                           # how long to wait before executing
 | 
			
		||||
  echo "Running post commands"       # message
 | 
			
		||||
  # execute commands
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__pre_message() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
  [ -n "$user_name" ] && echo "username:               $user_name" && echo "$user_name" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$user_pass" ] && echo "password:               saved to ${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$user_pass" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
  [ -n "$root_user_name" ] && echo "root username:     $root_user_name" && echo "$root_user_name" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$root_user_pass" ] && echo "root password:     saved to ${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$root_user_pass" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to setup ssl support
 | 
			
		||||
__update_ssl_conf() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__create_env() {
 | 
			
		||||
  cat <<EOF | tee "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" &>/dev/null
 | 
			
		||||
# ENV_WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
# ENV_WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
# ENV_ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
# ENV_DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
# ENV_CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
# ENV_DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
# ENV_SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
# ENV_SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
# ENV_SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
# EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
# EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
# EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
# ENV_USER_NAME="${user_name:-$ENV_USER_NAME}"                      #
 | 
			
		||||
# ENV_USER_PASS="${user_pass:-$ENV_USER_PASS}"                      #
 | 
			
		||||
# ENV_ROOT_USER_NAME="${root_user_name:-$ENV_ROOT_USER_NAME}"       #
 | 
			
		||||
# ENV_ROOT_USER_PASS="${root_user_pass:-$ENV_ROOT_USER_PASS}"       #
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
  [ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] || return 1
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# script to start server
 | 
			
		||||
__run_start_script() {
 | 
			
		||||
  local user="${SERVICE_USER:-root}"
 | 
			
		||||
  local workdir="${WORKDIR:-$WORK_DIR}"
 | 
			
		||||
  local cmd="$EXEC_CMD_BIN $EXEC_CMD_ARGS"
 | 
			
		||||
  local lc_type="${LC_ALL:-${LC_CTYPE:-$LANG}}"
 | 
			
		||||
  local home="${workdir//\/root/\/tmp\/docker}"
 | 
			
		||||
  local path="/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
  if [ -z "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
    __post_execute 2>"/dev/stderr" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    echo "Initializing $SCRIPT_NAME has completed"
 | 
			
		||||
  else
 | 
			
		||||
    # ensure the command exists
 | 
			
		||||
    if [ ! -x "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is not a valid executable"
 | 
			
		||||
      exit 2
 | 
			
		||||
    fi
 | 
			
		||||
    # set working directories
 | 
			
		||||
    [ -z "$home" ] && home="${workdir:-/tmp/docker}"
 | 
			
		||||
    [ "$home" = "/root" ] && home="/tmp/docker"
 | 
			
		||||
    [ "$home" = "$workdir" ] && workdir=""
 | 
			
		||||
    # create needed directories
 | 
			
		||||
    [ -n "$home" ] && { [ -d "$home" ] || mkdir -p "$home"; }
 | 
			
		||||
    [ -n "$workdir" ] && { [ -d "$workdir" ] || mkdir -p "$workdir" || workdir="/tmp"; }
 | 
			
		||||
    [ -n "$workdir" ] && __cd "$workdir" || { [ -n "$home" ] && __cd "$home"; } || __cd "/tmp"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$home" ] && chmod -f 777 "$home"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$workdir" ] && chmod -f 777 "$workdir"
 | 
			
		||||
    # check and exit if already running
 | 
			
		||||
    if __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is already running" >&2
 | 
			
		||||
      exit 0
 | 
			
		||||
    else
 | 
			
		||||
      echo "Starting service: $EXEC_CMD_NAME $EXEC_CMD_ARGS"
 | 
			
		||||
      su_cmd touch "$SERVICE_PID_FILE"
 | 
			
		||||
      __post_execute 2>"/dev/stderr" 2>&1 |& tee -a "$LOG_DIR/init.txt" &>/dev/null &
 | 
			
		||||
      su_cmd env -i HOME="$home" LC_CTYPE="$lc_type" PATH="$path" USER="$user" sh -c "$cmd" || return 10
 | 
			
		||||
    fi
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# simple cd function
 | 
			
		||||
__cd() { mkdir -p "$1" && builtin cd "$1" || exit 1; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# process check functions
 | 
			
		||||
__pcheck() { [ -n "$(type -P pgrep 2>/dev/null)" ] && pgrep -x "$1" &>/dev/null && return 0 || return 10; }
 | 
			
		||||
__pgrep() { __pcheck "${1:-$EXEC_CMD_BIN}" || __ps aux 2>/dev/null | grep -Fw " ${1:-$EXEC_CMD_BIN}" | grep -qv ' grep' | grep '^' && return 0 || return 10; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# check if process is already running
 | 
			
		||||
__proc_check() {
 | 
			
		||||
  cmd_bin="$(type -P "${1:-$EXEC_CMD_BIN}")"
 | 
			
		||||
  cmd_name="$(basename "${cmd_bin:-$EXEC_CMD_NAME}")"
 | 
			
		||||
  if __pgrep "$cmd_bin" || __pgrep "$cmd_name"; then
 | 
			
		||||
    SERVICE_IS_RUNNING="true"
 | 
			
		||||
    touch "$SERVICE_PID_FILE"
 | 
			
		||||
    echo "$cmd_name is already running"
 | 
			
		||||
    return 0
 | 
			
		||||
  else
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow ENV_ variable - Import env file
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_EXIT_CODE=0                                           # default exit code
 | 
			
		||||
WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
PRE_EXEC_MESSAGE="${ENV_PRE_EXEC_MESSAGE:-$PRE_EXEC_MESSAGE}" # Show message before execute
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# application specific
 | 
			
		||||
EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
EXEC_CMD_BIN="$(type -P "$EXEC_CMD_BIN" || echo "$EXEC_CMD_BIN")" # set full path
 | 
			
		||||
EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
SERVICE_PID_FILE="/run/init.d/$EXEC_CMD_NAME.pid"                 # set the pid file location
 | 
			
		||||
EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
SERVICE_PID_NUMBER="$(__pgrep)"                                   # check if running
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# create auth directories
 | 
			
		||||
[ -n "$USER_FILE_PREFIX" ] && { [ -d "$USER_FILE_PREFIX" ] || mkdir -p "$USER_FILE_PREFIX"; }
 | 
			
		||||
[ -n "$ROOT_FILE_PREFIX" ] && { [ -d "$ROOT_FILE_PREFIX" ] || mkdir -p "$ROOT_FILE_PREFIX"; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow per init script usernames and passwords
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/name" ] && user_name="$(<"$ETC_DIR/auth/user/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/pass" ] && user_pass="$(<"$ETC_DIR/auth/user/pass")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/name" ] && root_user_name="$(<"$ETC_DIR/auth/root/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/pass" ] && root_user_pass="$(<"$ETC_DIR/auth/root/pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow setting initial users and passwords via environment
 | 
			
		||||
user_name="${user_name:-$ENV_USER_NAME}"
 | 
			
		||||
user_pass="${user_pass:-$ENV_USER_PASS}"
 | 
			
		||||
root_user_name="${root_user_name:-$ENV_ROOT_USER_NAME}"
 | 
			
		||||
root_user_pass="${root_user_pass:-$ENV_ROOT_USER_PASS}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set password to random if variable is random
 | 
			
		||||
if [ "$user_pass" = "random" ]; then
 | 
			
		||||
  user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
if [ "$root_user_pass" = "random" ]; then
 | 
			
		||||
  root_user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow variables via imports - Overwrite existing
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Only run check
 | 
			
		||||
if [ "$1" = "check" ]; then
 | 
			
		||||
  __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"
 | 
			
		||||
  exit $?
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show message if env exists
 | 
			
		||||
if [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  [ -n "$SERVICE_USER" ] && echo "Setting up service to run as $SERVICE_USER" || SERVICE_USER="root"
 | 
			
		||||
  [ -n "$SERVICE_PORT" ] && echo "${EXEC_CMD_NAME:-$EXEC_CMD_BIN} will be running on $SERVICE_PORT" || SERVICE_PORT=""
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set switch user command
 | 
			
		||||
if [ "$SERVICE_USER" = "root" ] || [ -z "$SERVICE_USER" ]; then
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P gosu)" ]; then
 | 
			
		||||
  su_cmd() { gosu $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P runuser)" ]; then
 | 
			
		||||
  su_cmd() { runuser -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P sudo)" ]; then
 | 
			
		||||
  su_cmd() { sudo -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P su)" ]; then
 | 
			
		||||
  su_cmd() { su -s /bin/sh - $SERVICE_USER -c "$@" || return 1; }
 | 
			
		||||
else
 | 
			
		||||
  echo "Can not switch to $SERVICE_USER: attempting to run as root"
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Change to working directory
 | 
			
		||||
[ -n "$WORKDIR" ] && [ -n "$EXEC_CMD_BIN" ] && __cd "$WORKDIR" && echo "Changed to $PWD"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show init message
 | 
			
		||||
__pre_message
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Initialize ssl
 | 
			
		||||
__update_ssl_conf
 | 
			
		||||
__update_ssl_certs
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Updating config files
 | 
			
		||||
__create_env
 | 
			
		||||
__update_conf_files
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run the pre execute commands
 | 
			
		||||
[ -n "$PRE_EXEC_MESSAGE" ] && echo "$PRE_EXEC_MESSAGE"
 | 
			
		||||
__pre_execute
 | 
			
		||||
__run_secure_function
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__run_start_script "$@" |& tee -a "/data/logs/entrypoint.log" &>/dev/null
 | 
			
		||||
if [ "$?" -ne 0 ] && [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  echo "Failed to execute: $EXEC_CMD_BIN $EXEC_CMD_ARGS" |& tee -a "/data/logs/entrypoint.log" "$LOG_DIR/init.txt"
 | 
			
		||||
  SERVICE_EXIT_CODE=10
 | 
			
		||||
  SERVICE_IS_RUNNING="false"
 | 
			
		||||
  rm -Rf "$SERVICE_PID_FILE"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
exit $SERVICE_EXIT_CODE
 | 
			
		||||
							
								
								
									
										407
									
								
								init/done/05-ifconfig.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										407
									
								
								init/done/05-ifconfig.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,407 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
 | 
			
		||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -o pipefail -x$DEBUGGER_OPTIONS || set -o pipefail
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
printf '%s\n' "# - - - Initializing ifconfig - - - #"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_NAME="ifconfig"
 | 
			
		||||
SCRIPT_NAME="$(basename "$0" 2>/dev/null)"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
export PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run trap command on exit
 | 
			
		||||
trap 'retVal=$?;[ "$SERVICE_IS_RUNNING" != "true" ] && [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE";exit $retVal' SIGINT SIGTERM EXIT
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# import the functions file
 | 
			
		||||
if [ -f "/usr/local/etc/docker/functions/entrypoint.sh" ]; then
 | 
			
		||||
  . "/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"
 | 
			
		||||
done
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Custom functions
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Show message before execute
 | 
			
		||||
PRE_EXEC_MESSAGE=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Default predefined variables
 | 
			
		||||
WORKDIR=""                 # set working directory
 | 
			
		||||
DATA_DIR="/data"           # set data directory
 | 
			
		||||
WWW_DIR="/data/htdocs/www" # set the web root
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ETC_DIR="/etc/ifconfig"     # set etc directory
 | 
			
		||||
CONF_DIR="/config/ifconfig" # set config directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
RUN_DIR="/run/init.d"         # set scripts pid dir
 | 
			
		||||
LOG_DIR="/data/logs/ifconfig" # set log directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ROOT_FILE_PREFIX="/config/secure/auth/root" # directory to save username/password for root user
 | 
			
		||||
USER_FILE_PREFIX="/config/secure/auth/user" # directory to save username/password for normal user
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set the database directory
 | 
			
		||||
DATABASE_DIR="${DATABASE_DIR_IFCONFIG:-/data/db/ifconfig}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional predefined variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# port which service is listening on
 | 
			
		||||
SERVICE_PORT=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# execute command variables
 | 
			
		||||
SERVICE_UID="0"                                                  # set the user id
 | 
			
		||||
SERVICE_USER="root"                                              # execute command as another user
 | 
			
		||||
EXEC_CMD_BIN="echoip"                                            # command to execute
 | 
			
		||||
EXEC_CMD_ARGS="-t /opt/echoip/html -H x-forwarded-for -r -s -p " # command arguments
 | 
			
		||||
EXEC_CMD_ARGS+="-a /opt/echoip/geoip/GeoLite2-ASN.mmdb "         #
 | 
			
		||||
EXEC_CMD_ARGS+="-c /opt/echoip/geoip/GeoLite2-City.mmdb "        #
 | 
			
		||||
EXEC_CMD_ARGS+=" -f /opt/echoip/geoip/GeoLite2-Country.mmdb "    #
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a web server
 | 
			
		||||
IS_WEB_SERVER="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a database server
 | 
			
		||||
IS_DATABASE_SERVICE="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# usernames
 | 
			
		||||
user_name="${IFCONFIG_USER_NAME:-}"           # normal user name
 | 
			
		||||
root_user_name="${IFCONFIG_ROOT_USER_NAME:-}" # root user name
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# passwords [password/random]
 | 
			
		||||
user_pass="${IFCONFIG_USER_PASS_WORD:-}"      # normal user password
 | 
			
		||||
root_user_pass="${IFCONFIG_ROOT_PASS_WORD:-}" # root user password
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Overwrite variables from files
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_name" ] && user_name="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && user_pass="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name" ] && root_user_name="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && root_user_pass="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Specifiy custom directories to be created
 | 
			
		||||
ADD_APPLICATION_FILES=""
 | 
			
		||||
ADD_APPLICATION_DIRS=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
APPLICATION_FILES="$LOG_DIR/ifconfig.log"
 | 
			
		||||
APPLICATION_DIRS="$RUN_DIR $ETC_DIR $CONF_DIR $LOG_DIR"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__update_conf_files() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
 | 
			
		||||
  # delete files
 | 
			
		||||
  #__rm ""
 | 
			
		||||
 | 
			
		||||
  # define actions
 | 
			
		||||
 | 
			
		||||
  # create default directories
 | 
			
		||||
  for filedirs in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
    if [ -n "$filedirs" ] && [ ! -d "$filedirs" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating directory $filedirs with permissions 777"
 | 
			
		||||
        mkdir -p "$filedirs" && chmod -Rf 777 "$filedirs"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create default files
 | 
			
		||||
  for application_files in $ADD_APPLICATION_FILES $APPLICATION_FILES; do
 | 
			
		||||
    if [ -n "$application_files" ] && [ ! -e "$application_files" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating file $application_files with permissions 777"
 | 
			
		||||
        touch "$application_files" && chmod -Rf 777 "$application_files"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create directories if variable is yes"
 | 
			
		||||
  [ "$IS_WEB_SERVER" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $WWW_DIR" && { [ -d "$WWW_DIR" ] || { (echo "Creating directory $WWW_DIR with permissions 777" && mkdir -p "$WWW_DIR" && chmod -f 777 "$WWW_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  [ "$IS_DATABASE_SERVICE" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $DATABASE_DIR" && { [ -d "$DATABASE_DIR" ] || { (echo "Creating directory $DATABASE_DIR with permissions 777" && mkdir -p "$DATABASE_DIR" && chmod -f 777 "$DATABASE_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  # copy config files to system
 | 
			
		||||
  __file_copy "$CONF_DIR/." "$ETC_DIR/" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  # replace variables
 | 
			
		||||
  # __replace "" "" "$CONF_DIR/ifconfig.conf"
 | 
			
		||||
  # replace variables recursively
 | 
			
		||||
  # __find_replace "" "" "$CONF_DIR/"
 | 
			
		||||
  # custom commands
 | 
			
		||||
 | 
			
		||||
  # other
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset application_files filedirs
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run before executing
 | 
			
		||||
__pre_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  # define commands
 | 
			
		||||
 | 
			
		||||
  # execute if directories is empty
 | 
			
		||||
  #__is_dir_empty "" &&
 | 
			
		||||
 | 
			
		||||
  # create user if needed
 | 
			
		||||
  # __create_service_user "$user" "/home/$user" "${USER_GID:-${USER_UID:-1000}"
 | 
			
		||||
  # set user on files/folders
 | 
			
		||||
  if [ -n "$user" ] && [ "$user" != "root" ]; then
 | 
			
		||||
    if grep -s -q "$user:" "/etc/passwd"; then
 | 
			
		||||
      for permissions in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
        if [ -n "$permissions" ] && [ -e "$permissions" ]; then
 | 
			
		||||
          (chown -Rf $user:$user "$permissions" && echo "changed ownership on $permissions to $user") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
        fi
 | 
			
		||||
      done
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset filesperms filename
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run after executing
 | 
			
		||||
__post_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  sleep 60                           # how long to wait before executing
 | 
			
		||||
  echo "Running post commands"       # message
 | 
			
		||||
  # execute commands
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__pre_message() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
  [ -n "$user_name" ] && echo "username:               $user_name" && echo "$user_name" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$user_pass" ] && echo "password:               saved to ${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$user_pass" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
  [ -n "$root_user_name" ] && echo "root username:     $root_user_name" && echo "$root_user_name" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$root_user_pass" ] && echo "root password:     saved to ${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$root_user_pass" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to setup ssl support
 | 
			
		||||
__update_ssl_conf() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__create_env() {
 | 
			
		||||
  cat <<EOF | tee "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" &>/dev/null
 | 
			
		||||
# ENV_WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
# ENV_WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
# ENV_ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
# ENV_DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
# ENV_CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
# ENV_DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
# ENV_SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
# ENV_SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
# ENV_SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
# EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
# EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
# EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
# ENV_USER_NAME="${user_name:-$ENV_USER_NAME}"                      #
 | 
			
		||||
# ENV_USER_PASS="${user_pass:-$ENV_USER_PASS}"                      #
 | 
			
		||||
# ENV_ROOT_USER_NAME="${root_user_name:-$ENV_ROOT_USER_NAME}"       #
 | 
			
		||||
# ENV_ROOT_USER_PASS="${root_user_pass:-$ENV_ROOT_USER_PASS}"       #
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
  [ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] || return 1
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# script to start server
 | 
			
		||||
__run_start_script() {
 | 
			
		||||
  local user="${SERVICE_USER:-root}"
 | 
			
		||||
  local workdir="${WORKDIR:-$WORK_DIR}"
 | 
			
		||||
  local cmd="$EXEC_CMD_BIN $EXEC_CMD_ARGS"
 | 
			
		||||
  local lc_type="${LC_ALL:-${LC_CTYPE:-$LANG}}"
 | 
			
		||||
  local home="${workdir//\/root/\/tmp\/docker}"
 | 
			
		||||
  local path="/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
  if [ -z "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
    __post_execute 2>"/dev/stderr" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    echo "Initializing $SCRIPT_NAME has completed"
 | 
			
		||||
  else
 | 
			
		||||
    # ensure the command exists
 | 
			
		||||
    if [ ! -x "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is not a valid executable"
 | 
			
		||||
      exit 2
 | 
			
		||||
    fi
 | 
			
		||||
    # set working directories
 | 
			
		||||
    [ -z "$home" ] && home="${workdir:-/tmp/docker}"
 | 
			
		||||
    [ "$home" = "/root" ] && home="/tmp/docker"
 | 
			
		||||
    [ "$home" = "$workdir" ] && workdir=""
 | 
			
		||||
    # create needed directories
 | 
			
		||||
    [ -n "$home" ] && { [ -d "$home" ] || mkdir -p "$home"; }
 | 
			
		||||
    [ -n "$workdir" ] && { [ -d "$workdir" ] || mkdir -p "$workdir" || workdir="/tmp"; }
 | 
			
		||||
    [ -n "$workdir" ] && __cd "$workdir" || { [ -n "$home" ] && __cd "$home"; } || __cd "/tmp"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$home" ] && chmod -f 777 "$home"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$workdir" ] && chmod -f 777 "$workdir"
 | 
			
		||||
    # check and exit if already running
 | 
			
		||||
    if __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is already running" >&2
 | 
			
		||||
      exit 0
 | 
			
		||||
    else
 | 
			
		||||
      echo "Starting service: $EXEC_CMD_NAME $EXEC_CMD_ARGS"
 | 
			
		||||
      su_cmd touch "$SERVICE_PID_FILE"
 | 
			
		||||
      __post_execute 2>"/dev/stderr" 2>&1 |& tee -a "$LOG_DIR/init.txt" &>/dev/null &
 | 
			
		||||
      su_cmd env -i HOME="$home" LC_CTYPE="$lc_type" PATH="$path" USER="$user" sh -c "$cmd" || return 10
 | 
			
		||||
    fi
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# simple cd function
 | 
			
		||||
__cd() { mkdir -p "$1" && builtin cd "$1" || exit 1; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# process check functions
 | 
			
		||||
__pcheck() { [ -n "$(type -P pgrep 2>/dev/null)" ] && pgrep -x "$1" &>/dev/null && return 0 || return 10; }
 | 
			
		||||
__pgrep() { __pcheck "${1:-$EXEC_CMD_BIN}" || __ps aux 2>/dev/null | grep -Fw " ${1:-$EXEC_CMD_BIN}" | grep -qv ' grep' | grep '^' && return 0 || return 10; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# check if process is already running
 | 
			
		||||
__proc_check() {
 | 
			
		||||
  cmd_bin="$(type -P "${1:-$EXEC_CMD_BIN}")"
 | 
			
		||||
  cmd_name="$(basename "${cmd_bin:-$EXEC_CMD_NAME}")"
 | 
			
		||||
  if __pgrep "$cmd_bin" || __pgrep "$cmd_name"; then
 | 
			
		||||
    SERVICE_IS_RUNNING="true"
 | 
			
		||||
    touch "$SERVICE_PID_FILE"
 | 
			
		||||
    echo "$cmd_name is already running"
 | 
			
		||||
    return 0
 | 
			
		||||
  else
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow ENV_ variable - Import env file
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_EXIT_CODE=0                                           # default exit code
 | 
			
		||||
WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
PRE_EXEC_MESSAGE="${ENV_PRE_EXEC_MESSAGE:-$PRE_EXEC_MESSAGE}" # Show message before execute
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# application specific
 | 
			
		||||
EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
EXEC_CMD_BIN="$(type -P "$EXEC_CMD_BIN" || echo "$EXEC_CMD_BIN")" # set full path
 | 
			
		||||
EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
SERVICE_PID_FILE="/run/init.d/$EXEC_CMD_NAME.pid"                 # set the pid file location
 | 
			
		||||
EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
SERVICE_PID_NUMBER="$(__pgrep)"                                   # check if running
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# create auth directories
 | 
			
		||||
[ -n "$USER_FILE_PREFIX" ] && { [ -d "$USER_FILE_PREFIX" ] || mkdir -p "$USER_FILE_PREFIX"; }
 | 
			
		||||
[ -n "$ROOT_FILE_PREFIX" ] && { [ -d "$ROOT_FILE_PREFIX" ] || mkdir -p "$ROOT_FILE_PREFIX"; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow per init script usernames and passwords
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/name" ] && user_name="$(<"$ETC_DIR/auth/user/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/pass" ] && user_pass="$(<"$ETC_DIR/auth/user/pass")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/name" ] && root_user_name="$(<"$ETC_DIR/auth/root/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/pass" ] && root_user_pass="$(<"$ETC_DIR/auth/root/pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow setting initial users and passwords via environment
 | 
			
		||||
user_name="${user_name:-$ENV_USER_NAME}"
 | 
			
		||||
user_pass="${user_pass:-$ENV_USER_PASS}"
 | 
			
		||||
root_user_name="${root_user_name:-$ENV_ROOT_USER_NAME}"
 | 
			
		||||
root_user_pass="${root_user_pass:-$ENV_ROOT_USER_PASS}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set password to random if variable is random
 | 
			
		||||
if [ "$user_pass" = "random" ]; then
 | 
			
		||||
  user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
if [ "$root_user_pass" = "random" ]; then
 | 
			
		||||
  root_user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow variables via imports - Overwrite existing
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Only run check
 | 
			
		||||
if [ "$1" = "check" ]; then
 | 
			
		||||
  __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"
 | 
			
		||||
  exit $?
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show message if env exists
 | 
			
		||||
if [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  [ -n "$SERVICE_USER" ] && echo "Setting up service to run as $SERVICE_USER" || SERVICE_USER="root"
 | 
			
		||||
  [ -n "$SERVICE_PORT" ] && echo "${EXEC_CMD_NAME:-$EXEC_CMD_BIN} will be running on $SERVICE_PORT" || SERVICE_PORT=""
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set switch user command
 | 
			
		||||
if [ "$SERVICE_USER" = "root" ] || [ -z "$SERVICE_USER" ]; then
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P gosu)" ]; then
 | 
			
		||||
  su_cmd() { gosu $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P runuser)" ]; then
 | 
			
		||||
  su_cmd() { runuser -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P sudo)" ]; then
 | 
			
		||||
  su_cmd() { sudo -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P su)" ]; then
 | 
			
		||||
  su_cmd() { su -s /bin/sh - $SERVICE_USER -c "$@" || return 1; }
 | 
			
		||||
else
 | 
			
		||||
  echo "Can not switch to $SERVICE_USER: attempting to run as root"
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Change to working directory
 | 
			
		||||
[ -n "$WORKDIR" ] && [ -n "$EXEC_CMD_BIN" ] && __cd "$WORKDIR" && echo "Changed to $PWD"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show init message
 | 
			
		||||
__pre_message
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Initialize ssl
 | 
			
		||||
__update_ssl_conf
 | 
			
		||||
__update_ssl_certs
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Updating config files
 | 
			
		||||
__create_env
 | 
			
		||||
__update_conf_files
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run the pre execute commands
 | 
			
		||||
[ -n "$PRE_EXEC_MESSAGE" ] && echo "$PRE_EXEC_MESSAGE"
 | 
			
		||||
__pre_execute
 | 
			
		||||
__run_secure_function
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__run_start_script "$@" |& tee -a "/data/logs/entrypoint.log" &>/dev/null
 | 
			
		||||
if [ "$?" -ne 0 ] && [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  echo "Failed to execute: $EXEC_CMD_BIN $EXEC_CMD_ARGS" |& tee -a "/data/logs/entrypoint.log" "$LOG_DIR/init.txt"
 | 
			
		||||
  SERVICE_EXIT_CODE=10
 | 
			
		||||
  SERVICE_IS_RUNNING="false"
 | 
			
		||||
  rm -Rf "$SERVICE_PID_FILE"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
exit $SERVICE_EXIT_CODE
 | 
			
		||||
							
								
								
									
										412
									
								
								init/done/07-dictd.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										412
									
								
								init/done/07-dictd.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,412 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
 | 
			
		||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -o pipefail -x$DEBUGGER_OPTIONS || set -o pipefail
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
printf '%s\n' "# - - - Initializing dictd - - - #"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_NAME="dictd"
 | 
			
		||||
SCRIPT_NAME="$(basename "$0" 2>/dev/null)"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
export PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run trap command on exit
 | 
			
		||||
trap 'retVal=$?;[ "$SERVICE_IS_RUNNING" != "true" ] && [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE";exit $retVal' SIGINT SIGTERM EXIT
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# import the functions file
 | 
			
		||||
if [ -f "/usr/local/etc/docker/functions/entrypoint.sh" ]; then
 | 
			
		||||
  . "/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"
 | 
			
		||||
done
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Custom functions
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Show message before execute
 | 
			
		||||
PRE_EXEC_MESSAGE=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Default predefined variables
 | 
			
		||||
WORKDIR=""                 # set working directory
 | 
			
		||||
DATA_DIR="/data"           # set data directory
 | 
			
		||||
WWW_DIR="/data/htdocs/www" # set the web root
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ETC_DIR="/etc/dictd"     # set etc directory
 | 
			
		||||
CONF_DIR="/config/dictd" # set config directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
RUN_DIR="/run/init.d"      # set scripts pid dir
 | 
			
		||||
LOG_DIR="/data/logs/dictd" # set log directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ROOT_FILE_PREFIX="/config/secure/auth/root" # directory to save username/password for root user
 | 
			
		||||
USER_FILE_PREFIX="/config/secure/auth/user" # directory to save username/password for normal user
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set the database directory
 | 
			
		||||
DATABASE_DIR="${DATABASE_DIR_DICTD:-/data/db/dictd}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional predefined variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# port which service is listening on
 | 
			
		||||
SERVICE_PORT="2628"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# execute command variables
 | 
			
		||||
SERVICE_UID="0"            # set the user id
 | 
			
		||||
SERVICE_USER="root"        # execute command as another user
 | 
			
		||||
EXEC_CMD_BIN="dictd"       # command to execute
 | 
			
		||||
EXEC_CMD_ARGS="-dnodetach" # command arguments
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a web server
 | 
			
		||||
IS_WEB_SERVER="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a database server
 | 
			
		||||
IS_DATABASE_SERVICE="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# usernames
 | 
			
		||||
user_name="${DICTD_USER_NAME:-}"           # normal user name
 | 
			
		||||
root_user_name="${DICTD_ROOT_USER_NAME:-}" # root user name
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# passwords [password/random]
 | 
			
		||||
user_pass="${DICTD_USER_PASS_WORD:-}"      # normal user password
 | 
			
		||||
root_user_pass="${DICTD_ROOT_PASS_WORD:-}" # root user password
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Overwrite variables from files
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_name" ] && user_name="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && user_pass="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name" ] && root_user_name="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && root_user_pass="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Specifiy custom directories to be created
 | 
			
		||||
ADD_APPLICATION_FILES=""
 | 
			
		||||
ADD_APPLICATION_DIRS=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
APPLICATION_FILES="$LOG_DIR/dictd.log"
 | 
			
		||||
APPLICATION_DIRS="$RUN_DIR $ETC_DIR $CONF_DIR $LOG_DIR"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__update_conf_files() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
 | 
			
		||||
  # delete files
 | 
			
		||||
  #__rm ""
 | 
			
		||||
 | 
			
		||||
  # define actions
 | 
			
		||||
 | 
			
		||||
  # create default directories
 | 
			
		||||
  for filedirs in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
    if [ -n "$filedirs" ] && [ ! -d "$filedirs" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating directory $filedirs with permissions 777"
 | 
			
		||||
        mkdir -p "$filedirs" && chmod -Rf 777 "$filedirs"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create default files
 | 
			
		||||
  for application_files in $ADD_APPLICATION_FILES $APPLICATION_FILES; do
 | 
			
		||||
    if [ -n "$application_files" ] && [ ! -e "$application_files" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating file $application_files with permissions 777"
 | 
			
		||||
        touch "$application_files" && chmod -Rf 777 "$application_files"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create directories if variable is yes"
 | 
			
		||||
  [ "$IS_WEB_SERVER" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $WWW_DIR" && { [ -d "$WWW_DIR" ] || { (echo "Creating directory $WWW_DIR with permissions 777" && mkdir -p "$WWW_DIR" && chmod -f 777 "$WWW_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  [ "$IS_DATABASE_SERVICE" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $DATABASE_DIR" && { [ -d "$DATABASE_DIR" ] || { (echo "Creating directory $DATABASE_DIR with permissions 777" && mkdir -p "$DATABASE_DIR" && chmod -f 777 "$DATABASE_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  # copy config files to system
 | 
			
		||||
  __file_copy "$CONF_DIR/." "$ETC_DIR/" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  # replace variables
 | 
			
		||||
  # __replace "" "" "$CONF_DIR/dictd.conf"
 | 
			
		||||
  # custom commands
 | 
			
		||||
  if [ -f "/config/dict.conf" ]; then
 | 
			
		||||
    cp -Rf "/config/dict.conf" "/etc/dictd/dict.conf"
 | 
			
		||||
  else
 | 
			
		||||
    cp -Rf "/etc/dictd/dict.conf" "/config/dict.conf"
 | 
			
		||||
  fi
 | 
			
		||||
  if [ -f "/config/dictd.conf" ]; then
 | 
			
		||||
    cp -Rf "/config/dictd.conf" "/etc/dictd/dictd.conf"
 | 
			
		||||
  else
 | 
			
		||||
    cp -Rf "/etc/dictd/dictd.conf" "/config/dictd.conf"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # other
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset application_files filedirs
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run before executing
 | 
			
		||||
__pre_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  # define commands
 | 
			
		||||
 | 
			
		||||
  # execute if directories is empty
 | 
			
		||||
  #__is_dir_empty "" &&
 | 
			
		||||
 | 
			
		||||
  # create user if needed
 | 
			
		||||
  # __create_service_user "$user" "/home/$user" "${USER_GID:-${USER_UID:-1000}"
 | 
			
		||||
  # set user on files/folders
 | 
			
		||||
  if [ -n "$user" ] && [ "$user" != "root" ]; then
 | 
			
		||||
    if grep -s -q "$user:" "/etc/passwd"; then
 | 
			
		||||
      for permissions in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
        if [ -n "$permissions" ] && [ -e "$permissions" ]; then
 | 
			
		||||
          (chown -Rf $user:$user "$permissions" && echo "changed ownership on $permissions to $user") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
        fi
 | 
			
		||||
      done
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset filesperms filename
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run after executing
 | 
			
		||||
__post_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  sleep 60                           # how long to wait before executing
 | 
			
		||||
  echo "Running post commands"       # message
 | 
			
		||||
  # execute commands
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__pre_message() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
  [ -n "$user_name" ] && echo "username:               $user_name" && echo "$user_name" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$user_pass" ] && echo "password:               saved to ${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$user_pass" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
  [ -n "$root_user_name" ] && echo "root username:     $root_user_name" && echo "$root_user_name" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$root_user_pass" ] && echo "root password:     saved to ${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$root_user_pass" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to setup ssl support
 | 
			
		||||
__update_ssl_conf() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__create_env() {
 | 
			
		||||
  cat <<EOF | tee "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" &>/dev/null
 | 
			
		||||
# ENV_WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
# ENV_WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
# ENV_ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
# ENV_DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
# ENV_CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
# ENV_DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
# ENV_SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
# ENV_SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
# ENV_SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
# EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
# EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
# EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
# ENV_USER_NAME="${user_name:-$ENV_USER_NAME}"                      #
 | 
			
		||||
# ENV_USER_PASS="${user_pass:-$ENV_USER_PASS}"                      #
 | 
			
		||||
# ENV_ROOT_USER_NAME="${root_user_name:-$ENV_ROOT_USER_NAME}"       #
 | 
			
		||||
# ENV_ROOT_USER_PASS="${root_user_pass:-$ENV_ROOT_USER_PASS}"       #
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
  [ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] || return 1
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# script to start server
 | 
			
		||||
__run_start_script() {
 | 
			
		||||
  local user="${SERVICE_USER:-root}"
 | 
			
		||||
  local workdir="${WORKDIR:-$WORK_DIR}"
 | 
			
		||||
  local cmd="$EXEC_CMD_BIN $EXEC_CMD_ARGS"
 | 
			
		||||
  local lc_type="${LC_ALL:-${LC_CTYPE:-$LANG}}"
 | 
			
		||||
  local home="${workdir//\/root/\/tmp\/docker}"
 | 
			
		||||
  local path="/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
  if [ -z "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
    __post_execute 2>"/dev/stderr" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    echo "Initializing $SCRIPT_NAME has completed"
 | 
			
		||||
  else
 | 
			
		||||
    # ensure the command exists
 | 
			
		||||
    if [ ! -x "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is not a valid executable"
 | 
			
		||||
      exit 2
 | 
			
		||||
    fi
 | 
			
		||||
    # set working directories
 | 
			
		||||
    [ -z "$home" ] && home="${workdir:-/tmp/docker}"
 | 
			
		||||
    [ "$home" = "/root" ] && home="/tmp/docker"
 | 
			
		||||
    [ "$home" = "$workdir" ] && workdir=""
 | 
			
		||||
    # create needed directories
 | 
			
		||||
    [ -n "$home" ] && { [ -d "$home" ] || mkdir -p "$home"; }
 | 
			
		||||
    [ -n "$workdir" ] && { [ -d "$workdir" ] || mkdir -p "$workdir" || workdir="/tmp"; }
 | 
			
		||||
    [ -n "$workdir" ] && __cd "$workdir" || { [ -n "$home" ] && __cd "$home"; } || __cd "/tmp"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$home" ] && chmod -f 777 "$home"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$workdir" ] && chmod -f 777 "$workdir"
 | 
			
		||||
    # check and exit if already running
 | 
			
		||||
    if __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is already running" >&2
 | 
			
		||||
      exit 0
 | 
			
		||||
    else
 | 
			
		||||
      echo "Starting service: $EXEC_CMD_NAME $EXEC_CMD_ARGS"
 | 
			
		||||
      su_cmd touch "$SERVICE_PID_FILE"
 | 
			
		||||
      __post_execute 2>"/dev/stderr" 2>&1 |& tee -a "$LOG_DIR/init.txt" &>/dev/null &
 | 
			
		||||
      su_cmd env -i HOME="$home" LC_CTYPE="$lc_type" PATH="$path" USER="$user" sh -c "$cmd" || return 10
 | 
			
		||||
    fi
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# simple cd function
 | 
			
		||||
__cd() { mkdir -p "$1" && builtin cd "$1" || exit 1; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# process check functions
 | 
			
		||||
__pcheck() { [ -n "$(type -P pgrep 2>/dev/null)" ] && pgrep -x "$1" &>/dev/null && return 0 || return 10; }
 | 
			
		||||
__pgrep() { __pcheck "${1:-$EXEC_CMD_BIN}" || __ps aux 2>/dev/null | grep -Fw " ${1:-$EXEC_CMD_BIN}" | grep -qv ' grep' | grep '^' && return 0 || return 10; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# check if process is already running
 | 
			
		||||
__proc_check() {
 | 
			
		||||
  cmd_bin="$(type -P "${1:-$EXEC_CMD_BIN}")"
 | 
			
		||||
  cmd_name="$(basename "${cmd_bin:-$EXEC_CMD_NAME}")"
 | 
			
		||||
  if __pgrep "$cmd_bin" || __pgrep "$cmd_name"; then
 | 
			
		||||
    SERVICE_IS_RUNNING="true"
 | 
			
		||||
    touch "$SERVICE_PID_FILE"
 | 
			
		||||
    echo "$cmd_name is already running"
 | 
			
		||||
    return 0
 | 
			
		||||
  else
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow ENV_ variable - Import env file
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_EXIT_CODE=0                                           # default exit code
 | 
			
		||||
WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
PRE_EXEC_MESSAGE="${ENV_PRE_EXEC_MESSAGE:-$PRE_EXEC_MESSAGE}" # Show message before execute
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# application specific
 | 
			
		||||
EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
EXEC_CMD_BIN="$(type -P "$EXEC_CMD_BIN" || echo "$EXEC_CMD_BIN")" # set full path
 | 
			
		||||
EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
SERVICE_PID_FILE="/run/init.d/$EXEC_CMD_NAME.pid"                 # set the pid file location
 | 
			
		||||
EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
SERVICE_PID_NUMBER="$(__pgrep)"                                   # check if running
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# create auth directories
 | 
			
		||||
[ -n "$USER_FILE_PREFIX" ] && { [ -d "$USER_FILE_PREFIX" ] || mkdir -p "$USER_FILE_PREFIX"; }
 | 
			
		||||
[ -n "$ROOT_FILE_PREFIX" ] && { [ -d "$ROOT_FILE_PREFIX" ] || mkdir -p "$ROOT_FILE_PREFIX"; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow per init script usernames and passwords
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/name" ] && user_name="$(<"$ETC_DIR/auth/user/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/pass" ] && user_pass="$(<"$ETC_DIR/auth/user/pass")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/name" ] && root_user_name="$(<"$ETC_DIR/auth/root/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/pass" ] && root_user_pass="$(<"$ETC_DIR/auth/root/pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow setting initial users and passwords via environment
 | 
			
		||||
user_name="${user_name:-$ENV_USER_NAME}"
 | 
			
		||||
user_pass="${user_pass:-$ENV_USER_PASS}"
 | 
			
		||||
root_user_name="${root_user_name:-$ENV_ROOT_USER_NAME}"
 | 
			
		||||
root_user_pass="${root_user_pass:-$ENV_ROOT_USER_PASS}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set password to random if variable is random
 | 
			
		||||
if [ "$user_pass" = "random" ]; then
 | 
			
		||||
  user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
if [ "$root_user_pass" = "random" ]; then
 | 
			
		||||
  root_user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow variables via imports - Overwrite existing
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Only run check
 | 
			
		||||
if [ "$1" = "check" ]; then
 | 
			
		||||
  __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"
 | 
			
		||||
  exit $?
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show message if env exists
 | 
			
		||||
if [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  [ -n "$SERVICE_USER" ] && echo "Setting up service to run as $SERVICE_USER" || SERVICE_USER="root"
 | 
			
		||||
  [ -n "$SERVICE_PORT" ] && echo "${EXEC_CMD_NAME:-$EXEC_CMD_BIN} will be running on $SERVICE_PORT" || SERVICE_PORT=""
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set switch user command
 | 
			
		||||
if [ "$SERVICE_USER" = "root" ] || [ -z "$SERVICE_USER" ]; then
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P gosu)" ]; then
 | 
			
		||||
  su_cmd() { gosu $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P runuser)" ]; then
 | 
			
		||||
  su_cmd() { runuser -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P sudo)" ]; then
 | 
			
		||||
  su_cmd() { sudo -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P su)" ]; then
 | 
			
		||||
  su_cmd() { su -s /bin/sh - $SERVICE_USER -c "$@" || return 1; }
 | 
			
		||||
else
 | 
			
		||||
  echo "Can not switch to $SERVICE_USER: attempting to run as root"
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Change to working directory
 | 
			
		||||
[ -n "$WORKDIR" ] && [ -n "$EXEC_CMD_BIN" ] && __cd "$WORKDIR" && echo "Changed to $PWD"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show init message
 | 
			
		||||
__pre_message
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Initialize ssl
 | 
			
		||||
__update_ssl_conf
 | 
			
		||||
__update_ssl_certs
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Updating config files
 | 
			
		||||
__create_env
 | 
			
		||||
__update_conf_files
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run the pre execute commands
 | 
			
		||||
[ -n "$PRE_EXEC_MESSAGE" ] && echo "$PRE_EXEC_MESSAGE"
 | 
			
		||||
__pre_execute
 | 
			
		||||
__run_secure_function
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__run_start_script "$@" |& tee -a "/data/logs/entrypoint.log" &>/dev/null
 | 
			
		||||
if [ "$?" -ne 0 ] && [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  echo "Failed to execute: $EXEC_CMD_BIN $EXEC_CMD_ARGS" |& tee -a "/data/logs/entrypoint.log" "$LOG_DIR/init.txt"
 | 
			
		||||
  SERVICE_EXIT_CODE=10
 | 
			
		||||
  SERVICE_IS_RUNNING="false"
 | 
			
		||||
  rm -Rf "$SERVICE_PID_FILE"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
exit $SERVICE_EXIT_CODE
 | 
			
		||||
							
								
								
									
										411
									
								
								init/done/07-docker.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										411
									
								
								init/done/07-docker.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,411 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
 | 
			
		||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -o pipefail -x$DEBUGGER_OPTIONS || set -o pipefail
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
printf '%s\n' "# - - - Initializing docker - - - #"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_NAME="docker"
 | 
			
		||||
SCRIPT_NAME="$(basename "$0" 2>/dev/null)"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
export PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run trap command on exit
 | 
			
		||||
trap 'retVal=$?;[ "$SERVICE_IS_RUNNING" != "true" ] && [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE";exit $retVal' SIGINT SIGTERM EXIT
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# import the functions file
 | 
			
		||||
if [ -f "/usr/local/etc/docker/functions/entrypoint.sh" ]; then
 | 
			
		||||
  . "/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"
 | 
			
		||||
done
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Custom functions
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Show message before execute
 | 
			
		||||
PRE_EXEC_MESSAGE=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Default predefined variables
 | 
			
		||||
WORKDIR=""                 # set working directory
 | 
			
		||||
DATA_DIR="/data"           # set data directory
 | 
			
		||||
WWW_DIR="/data/htdocs/www" # set the web root
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ETC_DIR="/etc/docker"     # set etc directory
 | 
			
		||||
CONF_DIR="/config/docker" # set config directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
RUN_DIR="/run/init.d"       # set scripts pid dir
 | 
			
		||||
LOG_DIR="/data/logs/docker" # set log directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ROOT_FILE_PREFIX="/config/secure/auth/root" # directory to save username/password for root user
 | 
			
		||||
USER_FILE_PREFIX="/config/secure/auth/user" # directory to save username/password for normal user
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set the database directory
 | 
			
		||||
DATABASE_DIR="${DATABASE_DIR_DOCKER:-/data/db/docker}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional predefined variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# port which service is listening on
 | 
			
		||||
SERVICE_PORT="2375"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# execute command variables
 | 
			
		||||
SERVICE_UID="0"                                                                     # set the user id
 | 
			
		||||
SERVICE_USER="root"                                                                 # execute command as another user
 | 
			
		||||
EXEC_CMD_BIN="dockerd"                                                              # command to execute
 | 
			
		||||
EXEC_CMD_ARGS="-H tcp://127.0.0.1:$SERVICE_PORT -H unix:///var/run/docker.sock "    # command arguments
 | 
			
		||||
EXEC_CMD_ARGS+="-H unix:///tmp/docker.sock --config-file $HOME/.docker/daemon.json" #
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a web server
 | 
			
		||||
IS_WEB_SERVER="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a database server
 | 
			
		||||
IS_DATABASE_SERVICE="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional variables
 | 
			
		||||
REGISTERY="${REGISTERY:-REGISTERIES}"
 | 
			
		||||
DOCKER_HUB_TOKEN="${DOCKER_HUB_TOKEN:-DOCKER_TOKEN}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# usernames
 | 
			
		||||
user_name="${DOCKER_USER_NAME:-}"           # normal user name
 | 
			
		||||
root_user_name="${DOCKER_ROOT_USER_NAME:-}" # root user name
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# passwords [password/random]
 | 
			
		||||
user_pass="${DOCKER_USER_PASS_WORD:-}"      # normal user password
 | 
			
		||||
root_user_pass="${DOCKER_ROOT_PASS_WORD:-}" # root user password
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Overwrite variables from files
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_name" ] && user_name="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && user_pass="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name" ] && root_user_name="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && root_user_pass="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Specifiy custom directories to be created
 | 
			
		||||
ADD_APPLICATION_FILES=""
 | 
			
		||||
ADD_APPLICATION_DIRS=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
APPLICATION_FILES="$LOG_DIR/docker.log"
 | 
			
		||||
APPLICATION_DIRS="$RUN_DIR $ETC_DIR $CONF_DIR $LOG_DIR $HOME/.docker"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__update_conf_files() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  local reg=""
 | 
			
		||||
  [ -n "$REGISTERY" ] && registries="$REGISTERY,localhost:5000" || registries="localhost:5000"
 | 
			
		||||
  registries="${registries//,/ }"
 | 
			
		||||
  # define actions
 | 
			
		||||
  for registry in $registries; do [ -n "$registry" ] && [ "$registry" != " " ] && reg+="\"$registry\","; done
 | 
			
		||||
  registries="${reg%,}"
 | 
			
		||||
 | 
			
		||||
  # create default directories
 | 
			
		||||
  for filedirs in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
    if [ -n "$filedirs" ] && [ ! -d "$filedirs" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating directory $filedirs with permissions 777"
 | 
			
		||||
        mkdir -p "$filedirs" && chmod -Rf 777 "$filedirs"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create default files
 | 
			
		||||
  for application_files in $ADD_APPLICATION_FILES $APPLICATION_FILES; do
 | 
			
		||||
    if [ -n "$application_files" ] && [ ! -e "$application_files" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating file $application_files with permissions 777"
 | 
			
		||||
        touch "$application_files" && chmod -Rf 777 "$application_files"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create directories if variable is yes"
 | 
			
		||||
  [ "$IS_WEB_SERVER" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $WWW_DIR" && { [ -d "$WWW_DIR" ] || { (echo "Creating directory $WWW_DIR with permissions 777" && mkdir -p "$WWW_DIR" && chmod -f 777 "$WWW_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  [ "$IS_DATABASE_SERVICE" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $DATABASE_DIR" && { [ -d "$DATABASE_DIR" ] || { (echo "Creating directory $DATABASE_DIR with permissions 777" && mkdir -p "$DATABASE_DIR" && chmod -f 777 "$DATABASE_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  # copy config files to system
 | 
			
		||||
  __file_copy "$CONF_DIR/." "$ETC_DIR/" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  __file_copy "$CONF_DIR/daemon.json" "$HOME/.docker/" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  # custom commands
 | 
			
		||||
  if [ ! -f "$HOME/.docker/config.json" ]; then
 | 
			
		||||
    cat <<EOF | tee "$HOME/.docker/config.json" &>/dev/null
 | 
			
		||||
{
 | 
			
		||||
  "auths": { "https://index.docker.io/v1/": { "auth": "$DOCKER_HUB_TOKEN" } },
 | 
			
		||||
  "HttpHeaders": { "User-Agent": "Docker-Client/23.0.1 (linux)" },
 | 
			
		||||
  "insecure-registries" : [$registries]
 | 
			
		||||
}
 | 
			
		||||
EOF
 | 
			
		||||
  fi
 | 
			
		||||
  [ -f "$CONF_DIR/daemon.json" ] || cp -Rf "$HOME/.docker/config.json" "$CONF_DIR/daemon.json"
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset application_files filedirs
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run before executing
 | 
			
		||||
__pre_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  # define commands
 | 
			
		||||
 | 
			
		||||
  # execute if directories is empty
 | 
			
		||||
  #__is_dir_empty "" &&
 | 
			
		||||
 | 
			
		||||
  # create user if needed
 | 
			
		||||
  # __create_service_user "$user" "/home/$user" "${USER_GID:-${USER_UID:-1000}"
 | 
			
		||||
  # set user on files/folders
 | 
			
		||||
  if [ -n "$user" ] && [ "$user" != "root" ]; then
 | 
			
		||||
    if grep -s -q "$user:" "/etc/passwd"; then
 | 
			
		||||
      for permissions in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
        if [ -n "$permissions" ] && [ -e "$permissions" ]; then
 | 
			
		||||
          (chown -Rf $user:$user "$permissions" && echo "changed ownership on $permissions to $user") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
        fi
 | 
			
		||||
      done
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset filesperms filename
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run after executing
 | 
			
		||||
__post_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  sleep 60                           # how long to wait before executing
 | 
			
		||||
  echo "Running post commands"       # message
 | 
			
		||||
  # execute commands
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__pre_message() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
  [ -n "$user_name" ] && echo "username:               $user_name" && echo "$user_name" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$user_pass" ] && echo "password:               saved to ${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$user_pass" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
  [ -n "$root_user_name" ] && echo "root username:     $root_user_name" && echo "$root_user_name" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$root_user_pass" ] && echo "root password:     saved to ${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$root_user_pass" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to setup ssl support
 | 
			
		||||
__update_ssl_conf() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__create_env() {
 | 
			
		||||
  cat <<EOF | tee "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" &>/dev/null
 | 
			
		||||
# ENV_WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
# ENV_WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
# ENV_ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
# ENV_DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
# ENV_CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
# ENV_DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
# ENV_SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
# ENV_SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
# ENV_SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
# EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
# EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
# EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
# ENV_USER_NAME="${user_name:-$ENV_USER_NAME}"                      #
 | 
			
		||||
# ENV_USER_PASS="${user_pass:-$ENV_USER_PASS}"                      #
 | 
			
		||||
# ENV_ROOT_USER_NAME="${root_user_name:-$ENV_ROOT_USER_NAME}"       #
 | 
			
		||||
# ENV_ROOT_USER_PASS="${root_user_pass:-$ENV_ROOT_USER_PASS}"       #
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
  [ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] || return 1
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# script to start server
 | 
			
		||||
__run_start_script() {
 | 
			
		||||
  local user="${SERVICE_USER:-root}"
 | 
			
		||||
  local workdir="${WORKDIR:-$WORK_DIR}"
 | 
			
		||||
  local cmd="$EXEC_CMD_BIN $EXEC_CMD_ARGS"
 | 
			
		||||
  local lc_type="${LC_ALL:-${LC_CTYPE:-$LANG}}"
 | 
			
		||||
  local home="${workdir//\/root/\/tmp\/docker}"
 | 
			
		||||
  local path="/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
  if [ -z "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
    __post_execute 2>"/dev/stderr" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    echo "Initializing $SCRIPT_NAME has completed"
 | 
			
		||||
  else
 | 
			
		||||
    # ensure the command exists
 | 
			
		||||
    if [ ! -x "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is not a valid executable"
 | 
			
		||||
      exit 2
 | 
			
		||||
    fi
 | 
			
		||||
    # set working directories
 | 
			
		||||
    [ -z "$home" ] && home="${workdir:-/tmp/docker}"
 | 
			
		||||
    [ "$home" = "/root" ] && home="/tmp/docker"
 | 
			
		||||
    [ "$home" = "$workdir" ] && workdir=""
 | 
			
		||||
    # create needed directories
 | 
			
		||||
    [ -n "$home" ] && { [ -d "$home" ] || mkdir -p "$home"; }
 | 
			
		||||
    [ -n "$workdir" ] && { [ -d "$workdir" ] || mkdir -p "$workdir" || workdir="/tmp"; }
 | 
			
		||||
    [ -n "$workdir" ] && __cd "$workdir" || { [ -n "$home" ] && __cd "$home"; } || __cd "/tmp"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$home" ] && chmod -f 777 "$home"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$workdir" ] && chmod -f 777 "$workdir"
 | 
			
		||||
    # check and exit if already running
 | 
			
		||||
    if __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is already running" >&2
 | 
			
		||||
      exit 0
 | 
			
		||||
    else
 | 
			
		||||
      echo "Starting service: $EXEC_CMD_NAME $EXEC_CMD_ARGS"
 | 
			
		||||
      su_cmd touch "$SERVICE_PID_FILE"
 | 
			
		||||
      __post_execute 2>"/dev/stderr" 2>&1 |& tee -a "$LOG_DIR/init.txt" &>/dev/null &
 | 
			
		||||
      su_cmd env -i HOME="$home" LC_CTYPE="$lc_type" PATH="$path" USER="$user" sh -c "$cmd" || return 10
 | 
			
		||||
    fi
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# simple cd function
 | 
			
		||||
__cd() { mkdir -p "$1" && builtin cd "$1" || exit 1; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# process check functions
 | 
			
		||||
__pcheck() { [ -n "$(type -P pgrep 2>/dev/null)" ] && pgrep -x "$1" &>/dev/null && return 0 || return 10; }
 | 
			
		||||
__pgrep() { __pcheck "${1:-$EXEC_CMD_BIN}" || __ps aux 2>/dev/null | grep -Fw " ${1:-$EXEC_CMD_BIN}" | grep -qv ' grep' | grep '^' && return 0 || return 10; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# check if process is already running
 | 
			
		||||
__proc_check() {
 | 
			
		||||
  cmd_bin="$(type -P "${1:-$EXEC_CMD_BIN}")"
 | 
			
		||||
  cmd_name="$(basename "${cmd_bin:-$EXEC_CMD_NAME}")"
 | 
			
		||||
  if __pgrep "$cmd_bin" || __pgrep "$cmd_name"; then
 | 
			
		||||
    SERVICE_IS_RUNNING="true"
 | 
			
		||||
    touch "$SERVICE_PID_FILE"
 | 
			
		||||
    echo "$cmd_name is already running"
 | 
			
		||||
    return 0
 | 
			
		||||
  else
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow ENV_ variable - Import env file
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_EXIT_CODE=0                                           # default exit code
 | 
			
		||||
WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
PRE_EXEC_MESSAGE="${ENV_PRE_EXEC_MESSAGE:-$PRE_EXEC_MESSAGE}" # Show message before execute
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# application specific
 | 
			
		||||
EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
EXEC_CMD_BIN="$(type -P "$EXEC_CMD_BIN" || echo "$EXEC_CMD_BIN")" # set full path
 | 
			
		||||
EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
SERVICE_PID_FILE="/run/init.d/$EXEC_CMD_NAME.pid"                 # set the pid file location
 | 
			
		||||
EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
SERVICE_PID_NUMBER="$(__pgrep)"                                   # check if running
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# create auth directories
 | 
			
		||||
[ -n "$USER_FILE_PREFIX" ] && { [ -d "$USER_FILE_PREFIX" ] || mkdir -p "$USER_FILE_PREFIX"; }
 | 
			
		||||
[ -n "$ROOT_FILE_PREFIX" ] && { [ -d "$ROOT_FILE_PREFIX" ] || mkdir -p "$ROOT_FILE_PREFIX"; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow per init script usernames and passwords
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/name" ] && user_name="$(<"$ETC_DIR/auth/user/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/pass" ] && user_pass="$(<"$ETC_DIR/auth/user/pass")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/name" ] && root_user_name="$(<"$ETC_DIR/auth/root/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/pass" ] && root_user_pass="$(<"$ETC_DIR/auth/root/pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow setting initial users and passwords via environment
 | 
			
		||||
user_name="${user_name:-$ENV_USER_NAME}"
 | 
			
		||||
user_pass="${user_pass:-$ENV_USER_PASS}"
 | 
			
		||||
root_user_name="${root_user_name:-$ENV_ROOT_USER_NAME}"
 | 
			
		||||
root_user_pass="${root_user_pass:-$ENV_ROOT_USER_PASS}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set password to random if variable is random
 | 
			
		||||
if [ "$user_pass" = "random" ]; then
 | 
			
		||||
  user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
if [ "$root_user_pass" = "random" ]; then
 | 
			
		||||
  root_user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow variables via imports - Overwrite existing
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Only run check
 | 
			
		||||
if [ "$1" = "check" ]; then
 | 
			
		||||
  __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"
 | 
			
		||||
  exit $?
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show message if env exists
 | 
			
		||||
if [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  [ -n "$SERVICE_USER" ] && echo "Setting up service to run as $SERVICE_USER" || SERVICE_USER="root"
 | 
			
		||||
  [ -n "$SERVICE_PORT" ] && echo "${EXEC_CMD_NAME:-$EXEC_CMD_BIN} will be running on $SERVICE_PORT" || SERVICE_PORT=""
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set switch user command
 | 
			
		||||
if [ "$SERVICE_USER" = "root" ] || [ -z "$SERVICE_USER" ]; then
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P gosu)" ]; then
 | 
			
		||||
  su_cmd() { gosu $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P runuser)" ]; then
 | 
			
		||||
  su_cmd() { runuser -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P sudo)" ]; then
 | 
			
		||||
  su_cmd() { sudo -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P su)" ]; then
 | 
			
		||||
  su_cmd() { su -s /bin/sh - $SERVICE_USER -c "$@" || return 1; }
 | 
			
		||||
else
 | 
			
		||||
  echo "Can not switch to $SERVICE_USER: attempting to run as root"
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Change to working directory
 | 
			
		||||
[ -n "$WORKDIR" ] && [ -n "$EXEC_CMD_BIN" ] && __cd "$WORKDIR" && echo "Changed to $PWD"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show init message
 | 
			
		||||
__pre_message
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Initialize ssl
 | 
			
		||||
__update_ssl_conf
 | 
			
		||||
__update_ssl_certs
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Updating config files
 | 
			
		||||
__create_env
 | 
			
		||||
__update_conf_files
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run the pre execute commands
 | 
			
		||||
[ -n "$PRE_EXEC_MESSAGE" ] && echo "$PRE_EXEC_MESSAGE"
 | 
			
		||||
__pre_execute
 | 
			
		||||
__run_secure_function
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__run_start_script "$@" |& tee -a "/data/logs/entrypoint.log" &>/dev/null
 | 
			
		||||
if [ "$?" -ne 0 ] && [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  echo "Failed to execute: $EXEC_CMD_BIN $EXEC_CMD_ARGS" |& tee -a "/data/logs/entrypoint.log" "$LOG_DIR/init.txt"
 | 
			
		||||
  SERVICE_EXIT_CODE=10
 | 
			
		||||
  SERVICE_IS_RUNNING="false"
 | 
			
		||||
  rm -Rf "$SERVICE_PID_FILE"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
exit $SERVICE_EXIT_CODE
 | 
			
		||||
							
								
								
									
										397
									
								
								init/done/08-apache.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										397
									
								
								init/done/08-apache.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,397 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
 | 
			
		||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -o pipefail -x$DEBUGGER_OPTIONS || set -o pipefail
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
printf '%s\n' "# - - - Initializing apache2 - - - #"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_NAME="apache2"
 | 
			
		||||
SCRIPT_NAME="$(basename "$0" 2>/dev/null)"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
export PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run trap command on exit
 | 
			
		||||
trap 'retVal=$?;[ "$SERVICE_IS_RUNNING" != "true" ] && [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE";exit $retVal' SIGINT SIGTERM EXIT
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# import the functions file
 | 
			
		||||
if [ -f "/usr/local/etc/docker/functions/entrypoint.sh" ]; then
 | 
			
		||||
  . "/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"
 | 
			
		||||
done
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Custom functions
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Show message before execute
 | 
			
		||||
PRE_EXEC_MESSAGE=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Default predefined variables
 | 
			
		||||
WORKDIR=""                 # set working directory
 | 
			
		||||
DATA_DIR="/data"           # set data directory
 | 
			
		||||
WWW_DIR="/data/htdocs/www" # set the web root
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ETC_DIR="/etc/apache2"     # set etc directory
 | 
			
		||||
CONF_DIR="/config/apache2" # set config directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
RUN_DIR="/run/init.d"        # set scripts pid dir
 | 
			
		||||
LOG_DIR="/data/logs/apache2" # set log directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ROOT_FILE_PREFIX="/config/secure/auth/root" # directory to save username/password for root user
 | 
			
		||||
USER_FILE_PREFIX="/config/secure/auth/user" # directory to save username/password for normal user
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set the database directory
 | 
			
		||||
DATABASE_DIR="${DATABASE_DIR_APACHE:-/data/db/apache2}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional predefined variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# port which service is listening on
 | 
			
		||||
SERVICE_PORT=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# execute command variables
 | 
			
		||||
SERVICE_UID="0"                                     # set the user id
 | 
			
		||||
SERVICE_USER="root"                                 # execute command as another user
 | 
			
		||||
EXEC_CMD_BIN="httpd"                                # command to execute
 | 
			
		||||
EXEC_CMD_ARGS="-f $ETC_DIR/httpd.conf -DFOREGROUND" # command arguments
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a web server
 | 
			
		||||
IS_WEB_SERVER="yes"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a database server
 | 
			
		||||
IS_DATABASE_SERVICE="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# usernames
 | 
			
		||||
user_name="${APACHE_USER_NAME:-}"           # normal user name
 | 
			
		||||
root_user_name="${APACHE_ROOT_USER_NAME:-}" # root user name
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# passwords [password/random]
 | 
			
		||||
user_pass="${APACHE_USER_PASS_WORD:-}"      # normal user password
 | 
			
		||||
root_user_pass="${APACHE_ROOT_PASS_WORD:-}" # root user password
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Overwrite variables from files
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_name" ] && user_name="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && user_pass="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name" ] && root_user_name="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && root_user_pass="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Specifiy custom directories to be created
 | 
			
		||||
ADD_APPLICATION_FILES=""
 | 
			
		||||
ADD_APPLICATION_DIRS=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
APPLICATION_FILES="$LOG_DIR/apache.log"
 | 
			
		||||
APPLICATION_DIRS="$RUN_DIR $ETC_DIR $CONF_DIR $LOG_DIR"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__update_conf_files() {
 | 
			
		||||
  local exitCode=0                          # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-apache}"      # specifiy different user
 | 
			
		||||
  local sysname="${SERVER_NAME:-$HOSTNAME}" # set hostname
 | 
			
		||||
 | 
			
		||||
  # create default directories
 | 
			
		||||
  for filedirs in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
    if [ -n "$filedirs" ] && [ ! -d "$filedirs" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating directory $filedirs with permissions 777"
 | 
			
		||||
        mkdir -p "$filedirs" && chmod -Rf 777 "$filedirs"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create default files
 | 
			
		||||
  for application_files in $ADD_APPLICATION_FILES $APPLICATION_FILES; do
 | 
			
		||||
    if [ -n "$application_files" ] && [ ! -e "$application_files" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating file $application_files with permissions 777"
 | 
			
		||||
        touch "$application_files" && chmod -Rf 777 "$application_files"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create directories if variable is yes"
 | 
			
		||||
  [ "$IS_WEB_SERVER" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $WWW_DIR" && { [ -d "$WWW_DIR" ] || { (echo "Creating directory $WWW_DIR with permissions 777" && mkdir -p "$WWW_DIR" && chmod -f 777 "$WWW_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  [ "$IS_DATABASE_SERVICE" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $DATABASE_DIR" && { [ -d "$DATABASE_DIR" ] || { (echo "Creating directory $DATABASE_DIR with permissions 777" && mkdir -p "$DATABASE_DIR" && chmod -f 777 "$DATABASE_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  # copy config files to system
 | 
			
		||||
  __file_copy "$CONF_DIR/." "$ETC_DIR/" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  # replace variables
 | 
			
		||||
  __replace "REPLACE_SERVER_DIR" "$WWW_DIR" "$ETC_DIR/httpd.conf"
 | 
			
		||||
  __replace "REPLACE_SERVER_NAME" "$sysname" "$ETC_DIR/httpd.conf"
 | 
			
		||||
  __replace "REPLACE_SERVER_PORT" "${SERVICE_PORT:-80}" "$ETC_DIR/httpd.conf"
 | 
			
		||||
  __replace "REPLACE_SERVER_DIR" "$WWW_DIR" "$ETC_DIR/vhosts.d/default.conf"
 | 
			
		||||
  __replace "REPLACE_SERVER_NAME" "$sysname" "$ETC_DIR/vhosts.d/default.conf"
 | 
			
		||||
  __replace "REPLACE_SERVER_PORT" "${SERVICE_PORT:-80}" "$ETC_DIR/vhosts.d/default.conf"
 | 
			
		||||
  __replace "REPLACE_SERVER_ADMIN" "${SERVER_ADMIN:-root@$sysname}" "$ETC_DIR/httpd.conf"
 | 
			
		||||
  [ -f "$WWW_DIR/index.php" ] && __replace "REPLACE_SERVER_SOFTWARE" "apache" "$WWW_DIR/index.php"
 | 
			
		||||
  [ -f "$WWW_DIR/index.html" ] && __replace "REPLACE_SERVER_SOFTWARE" "apache" "$WWW_DIR/index.html"
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset application_files filedirs
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run before executing
 | 
			
		||||
__pre_execute() {
 | 
			
		||||
  local exitCode=0                     # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-apache}" # specifiy different user
 | 
			
		||||
 | 
			
		||||
  # set user on files/folders
 | 
			
		||||
  if [ -n "$user" ] && [ "$user" != "root" ]; then
 | 
			
		||||
    if grep -s -q "$user:" "/etc/passwd"; then
 | 
			
		||||
      for permissions in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
        if [ -n "$permissions" ] && [ -e "$permissions" ]; then
 | 
			
		||||
          (chown -Rf $user:$user "$permissions" && echo "changed ownership on $permissions to $user") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
        fi
 | 
			
		||||
      done
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset filesperms filename
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run after executing
 | 
			
		||||
__post_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  sleep 60                           # how long to wait before executing
 | 
			
		||||
  echo "Running post commands"       # message
 | 
			
		||||
  # execute commands
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__pre_message() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
  [ -n "$user_name" ] && echo "username:               $user_name" && echo "$user_name" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$user_pass" ] && echo "password:               saved to ${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$user_pass" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
  [ -n "$root_user_name" ] && echo "root username:     $root_user_name" && echo "$root_user_name" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$root_user_pass" ] && echo "root password:     saved to ${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$root_user_pass" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to setup ssl support
 | 
			
		||||
__update_ssl_conf() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__create_env() {
 | 
			
		||||
  cat <<EOF | tee "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" &>/dev/null
 | 
			
		||||
# ENV_WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
# ENV_WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
# ENV_ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
# ENV_DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
# ENV_CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
# ENV_DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
# ENV_SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
# ENV_SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
# ENV_SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
# EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
# EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
# EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
# ENV_USER_NAME="${user_name:-$ENV_USER_NAME}"                      #
 | 
			
		||||
# ENV_USER_PASS="${user_pass:-$ENV_USER_PASS}"                      #
 | 
			
		||||
# ENV_ROOT_USER_NAME="${root_user_name:-$ENV_ROOT_USER_NAME}"       #
 | 
			
		||||
# ENV_ROOT_USER_PASS="${root_user_pass:-$ENV_ROOT_USER_PASS}"       #
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
  [ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] || return 1
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# script to start server
 | 
			
		||||
__run_start_script() {
 | 
			
		||||
  local user="${SERVICE_USER:-root}"
 | 
			
		||||
  local workdir="${WORKDIR:-$WORK_DIR}"
 | 
			
		||||
  local cmd="$EXEC_CMD_BIN $EXEC_CMD_ARGS"
 | 
			
		||||
  local lc_type="${LC_ALL:-${LC_CTYPE:-$LANG}}"
 | 
			
		||||
  local home="${workdir//\/root/\/tmp\/docker}"
 | 
			
		||||
  local path="/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
  if [ -z "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
    __post_execute 2>"/dev/stderr" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    echo "Initializing $SCRIPT_NAME has completed"
 | 
			
		||||
  else
 | 
			
		||||
    # ensure the command exists
 | 
			
		||||
    if [ ! -x "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is not a valid executable"
 | 
			
		||||
      exit 2
 | 
			
		||||
    fi
 | 
			
		||||
    # set working directories
 | 
			
		||||
    [ -z "$home" ] && home="${workdir:-/tmp/docker}"
 | 
			
		||||
    [ "$home" = "/root" ] && home="/tmp/docker"
 | 
			
		||||
    [ "$home" = "$workdir" ] && workdir=""
 | 
			
		||||
    # create needed directories
 | 
			
		||||
    [ -n "$home" ] && { [ -d "$home" ] || mkdir -p "$home"; }
 | 
			
		||||
    [ -n "$workdir" ] && { [ -d "$workdir" ] || mkdir -p "$workdir" || workdir="/tmp"; }
 | 
			
		||||
    [ -n "$workdir" ] && __cd "$workdir" || { [ -n "$home" ] && __cd "$home"; } || __cd "/tmp"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$home" ] && chmod -f 777 "$home"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$workdir" ] && chmod -f 777 "$workdir"
 | 
			
		||||
    # check and exit if already running
 | 
			
		||||
    if __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is already running" >&2
 | 
			
		||||
      exit 0
 | 
			
		||||
    else
 | 
			
		||||
      echo "Starting service: $EXEC_CMD_NAME $EXEC_CMD_ARGS"
 | 
			
		||||
      su_cmd touch "$SERVICE_PID_FILE"
 | 
			
		||||
      __post_execute 2>"/dev/stderr" 2>&1 |& tee -a "$LOG_DIR/init.txt" &>/dev/null &
 | 
			
		||||
      su_cmd env -i HOME="$home" LC_CTYPE="$lc_type" PATH="$path" USER="$user" sh -c "$cmd" || return 10
 | 
			
		||||
    fi
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# simple cd function
 | 
			
		||||
__cd() { mkdir -p "$1" && builtin cd "$1" || exit 1; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# process check functions
 | 
			
		||||
__pcheck() { [ -n "$(type -P pgrep 2>/dev/null)" ] && pgrep -x "$1" &>/dev/null && return 0 || return 10; }
 | 
			
		||||
__pgrep() { __pcheck "${1:-$EXEC_CMD_BIN}" || __ps aux 2>/dev/null | grep -Fw " ${1:-$EXEC_CMD_BIN}" | grep -qv ' grep' | grep '^' && return 0 || return 10; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# check if process is already running
 | 
			
		||||
__proc_check() {
 | 
			
		||||
  cmd_bin="$(type -P "${1:-$EXEC_CMD_BIN}")"
 | 
			
		||||
  cmd_name="$(basename "${cmd_bin:-$EXEC_CMD_NAME}")"
 | 
			
		||||
  if __pgrep "$cmd_bin" || __pgrep "$cmd_name"; then
 | 
			
		||||
    SERVICE_IS_RUNNING="true"
 | 
			
		||||
    touch "$SERVICE_PID_FILE"
 | 
			
		||||
    echo "$cmd_name is already running"
 | 
			
		||||
    return 0
 | 
			
		||||
  else
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow ENV_ variable - Import env file
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_EXIT_CODE=0                                           # default exit code
 | 
			
		||||
WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
PRE_EXEC_MESSAGE="${ENV_PRE_EXEC_MESSAGE:-$PRE_EXEC_MESSAGE}" # Show message before execute
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# application specific
 | 
			
		||||
EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
EXEC_CMD_BIN="$(type -P "$EXEC_CMD_BIN" || echo "$EXEC_CMD_BIN")" # set full path
 | 
			
		||||
EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
SERVICE_PID_FILE="/run/init.d/$EXEC_CMD_NAME.pid"                 # set the pid file location
 | 
			
		||||
EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
SERVICE_PID_NUMBER="$(__pgrep)"                                   # check if running
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# create auth directories
 | 
			
		||||
[ -n "$USER_FILE_PREFIX" ] && { [ -d "$USER_FILE_PREFIX" ] || mkdir -p "$USER_FILE_PREFIX"; }
 | 
			
		||||
[ -n "$ROOT_FILE_PREFIX" ] && { [ -d "$ROOT_FILE_PREFIX" ] || mkdir -p "$ROOT_FILE_PREFIX"; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow per init script usernames and passwords
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/name" ] && user_name="$(<"$ETC_DIR/auth/user/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/pass" ] && user_pass="$(<"$ETC_DIR/auth/user/pass")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/name" ] && root_user_name="$(<"$ETC_DIR/auth/root/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/pass" ] && root_user_pass="$(<"$ETC_DIR/auth/root/pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow setting initial users and passwords via environment
 | 
			
		||||
user_name="${user_name:-$ENV_USER_NAME}"
 | 
			
		||||
user_pass="${user_pass:-$ENV_USER_PASS}"
 | 
			
		||||
root_user_name="${root_user_name:-$ENV_ROOT_USER_NAME}"
 | 
			
		||||
root_user_pass="${root_user_pass:-$ENV_ROOT_USER_PASS}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set password to random if variable is random
 | 
			
		||||
if [ "$user_pass" = "random" ]; then
 | 
			
		||||
  user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
if [ "$root_user_pass" = "random" ]; then
 | 
			
		||||
  root_user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow variables via imports - Overwrite existing
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Only run check
 | 
			
		||||
if [ "$1" = "check" ]; then
 | 
			
		||||
  __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"
 | 
			
		||||
  exit $?
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show message if env exists
 | 
			
		||||
if [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  [ -n "$SERVICE_USER" ] && echo "Setting up service to run as $SERVICE_USER" || SERVICE_USER="root"
 | 
			
		||||
  [ -n "$SERVICE_PORT" ] && echo "${EXEC_CMD_NAME:-$EXEC_CMD_BIN} will be running on $SERVICE_PORT" || SERVICE_PORT=""
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set switch user command
 | 
			
		||||
if [ "$SERVICE_USER" = "root" ] || [ -z "$SERVICE_USER" ]; then
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P gosu)" ]; then
 | 
			
		||||
  su_cmd() { gosu $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P runuser)" ]; then
 | 
			
		||||
  su_cmd() { runuser -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P sudo)" ]; then
 | 
			
		||||
  su_cmd() { sudo -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P su)" ]; then
 | 
			
		||||
  su_cmd() { su -s /bin/sh - $SERVICE_USER -c "$@" || return 1; }
 | 
			
		||||
else
 | 
			
		||||
  echo "Can not switch to $SERVICE_USER: attempting to run as root"
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Change to working directory
 | 
			
		||||
[ -n "$WORKDIR" ] && [ -n "$EXEC_CMD_BIN" ] && __cd "$WORKDIR" && echo "Changed to $PWD"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show init message
 | 
			
		||||
__pre_message
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Initialize ssl
 | 
			
		||||
__update_ssl_conf
 | 
			
		||||
__update_ssl_certs
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Updating config files
 | 
			
		||||
__create_env
 | 
			
		||||
__update_conf_files
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run the pre execute commands
 | 
			
		||||
[ -n "$PRE_EXEC_MESSAGE" ] && echo "$PRE_EXEC_MESSAGE"
 | 
			
		||||
__pre_execute
 | 
			
		||||
__run_secure_function
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__run_start_script "$@" |& tee -a "/data/logs/entrypoint.log" &>/dev/null
 | 
			
		||||
if [ "$?" -ne 0 ] && [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  echo "Failed to execute: $EXEC_CMD_BIN $EXEC_CMD_ARGS" |& tee -a "/data/logs/entrypoint.log" "$LOG_DIR/init.txt"
 | 
			
		||||
  SERVICE_EXIT_CODE=10
 | 
			
		||||
  SERVICE_IS_RUNNING="false"
 | 
			
		||||
  rm -Rf "$SERVICE_PID_FILE"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
exit $SERVICE_EXIT_CODE
 | 
			
		||||
							
								
								
									
										399
									
								
								init/done/08-caddy.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										399
									
								
								init/done/08-caddy.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,399 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
 | 
			
		||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -o pipefail -x$DEBUGGER_OPTIONS || set -o pipefail
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
printf '%s\n' "# - - - Initializing caddy - - - #"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_NAME="caddy"
 | 
			
		||||
SCRIPT_NAME="$(basename "$0" 2>/dev/null)"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
export PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run trap command on exit
 | 
			
		||||
trap 'retVal=$?;[ "$SERVICE_IS_RUNNING" != "true" ] && [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE";exit $retVal' SIGINT SIGTERM EXIT
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# import the functions file
 | 
			
		||||
if [ -f "/usr/local/etc/docker/functions/entrypoint.sh" ]; then
 | 
			
		||||
  . "/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"
 | 
			
		||||
done
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Custom functions
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Show message before execute
 | 
			
		||||
PRE_EXEC_MESSAGE=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Default predefined variables
 | 
			
		||||
WORKDIR=""                 # set working directory
 | 
			
		||||
DATA_DIR="/data"           # set data directory
 | 
			
		||||
WWW_DIR="/data/htdocs/www" # set the web root
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ETC_DIR="/etc/caddy"     # set etc directory
 | 
			
		||||
CONF_DIR="/config/caddy" # set config directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
RUN_DIR="/run/init.d"      # set scripts pid dir
 | 
			
		||||
LOG_DIR="/data/logs/caddy" # set log directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ROOT_FILE_PREFIX="/config/secure/auth/root" # directory to save username/password for root user
 | 
			
		||||
USER_FILE_PREFIX="/config/secure/auth/user" # directory to save username/password for normal user
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set the database directory
 | 
			
		||||
DATABASE_DIR="${DATABASE_DIR_CADDY:-/data/db/caddy}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional predefined variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# port which service is listening on
 | 
			
		||||
SERVICE_PORT=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# execute command variables
 | 
			
		||||
SERVICE_UID="0"                                 # set the user id
 | 
			
		||||
SERVICE_USER="root"                             # execute command as another user
 | 
			
		||||
EXEC_CMD_BIN="caddy"                            # command to execute
 | 
			
		||||
EXEC_CMD_ARGS="run --config $ETC_DIR/Caddyfile" # command arguments
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a web server
 | 
			
		||||
IS_WEB_SERVER="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a database server
 | 
			
		||||
IS_DATABASE_SERVICE="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# usernames
 | 
			
		||||
user_name="${CADDY_USER_NAME:-}"           # normal user name
 | 
			
		||||
root_user_name="${CADDY_ROOT_USER_NAME:-}" # root user name
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# passwords [password/random]
 | 
			
		||||
user_pass="${CADDY_USER_PASS_WORD:-}"      # normal user password
 | 
			
		||||
root_user_pass="${CADDY_ROOT_PASS_WORD:-}" # root user password
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Overwrite variables from files
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_name" ] && user_name="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && user_pass="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name" ] && root_user_name="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && root_user_pass="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Specifiy custom directories to be created
 | 
			
		||||
ADD_APPLICATION_FILES=""
 | 
			
		||||
ADD_APPLICATION_DIRS=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
APPLICATION_FILES="$LOG_DIR/caddy.log"
 | 
			
		||||
APPLICATION_DIRS="$RUN_DIR $ETC_DIR $CONF_DIR $LOG_DIR"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__update_conf_files() {
 | 
			
		||||
  local exitCode=0                                          # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}"                        # specifiy different user
 | 
			
		||||
  local hostname="${SERVER_NAME:-${DOMAINNAME:-$hostname}}" # set hostname
 | 
			
		||||
  # create default directories
 | 
			
		||||
  for filedirs in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
    if [ -n "$filedirs" ] && [ ! -d "$filedirs" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating directory $filedirs with permissions 777"
 | 
			
		||||
        mkdir -p "$filedirs" && chmod -Rf 777 "$filedirs"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create default files
 | 
			
		||||
  for application_files in $ADD_APPLICATION_FILES $APPLICATION_FILES; do
 | 
			
		||||
    if [ -n "$application_files" ] && [ ! -e "$application_files" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating file $application_files with permissions 777"
 | 
			
		||||
        touch "$application_files" && chmod -Rf 777 "$application_files"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create directories if variable is yes"
 | 
			
		||||
  [ "$IS_WEB_SERVER" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $WWW_DIR" && { [ -d "$WWW_DIR" ] || { (echo "Creating directory $WWW_DIR with permissions 777" && mkdir -p "$WWW_DIR" && chmod -f 777 "$WWW_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  [ "$IS_DATABASE_SERVICE" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $DATABASE_DIR" && { [ -d "$DATABASE_DIR" ] || { (echo "Creating directory $DATABASE_DIR with permissions 777" && mkdir -p "$DATABASE_DIR" && chmod -f 777 "$DATABASE_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  # copy config files to system
 | 
			
		||||
  __file_copy "$CONF_DIR/." "$ETC_DIR/" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  # replace variables
 | 
			
		||||
  __replace "REPLACE_SERVER_PORT" "${SERVICE_PORT:-80}" "$ETC_DIR/Caddyfile"
 | 
			
		||||
  __replace "REPLACE_SERVER_NAME" "${SERVER_NAME:-$hostname}" "$ETC_DIR/Caddyfile"
 | 
			
		||||
  __replace "REPLACE_SERVER_ADMIN" "${SERVER_ADMIN:-root@$hostname}" "$ETC_DIR/Caddyfile"
 | 
			
		||||
  __replace "REPLACE_SERVER_SOFTWARE" "caddy" "$WWW_DIR/index.php"
 | 
			
		||||
  # custom commands
 | 
			
		||||
  [ -d "$WWW_DIR/health" ] || mkdir -p "$WWW_DIR/health"
 | 
			
		||||
  [ -f "$WWW_DIR/health/index.txt" ] || echo 'ok' >"$WWW_DIR/health/index.txt"
 | 
			
		||||
  [ -f "$WWW_DIR/health/index.json" ] || echo '{ "status": "ok" }' >"$WWW_DIR/health/index.json"
 | 
			
		||||
 | 
			
		||||
  # other
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset application_files filedirs
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run before executing
 | 
			
		||||
__pre_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
 | 
			
		||||
  # create user if needed
 | 
			
		||||
  # __create_service_user "$user" "/home/$user" "${USER_GID:-${USER_UID:-1000}"
 | 
			
		||||
  # set user on files/folders
 | 
			
		||||
  if [ -n "$user" ] && [ "$user" != "root" ]; then
 | 
			
		||||
    if grep -s -q "$user:" "/etc/passwd"; then
 | 
			
		||||
      for permissions in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
        if [ -n "$permissions" ] && [ -e "$permissions" ]; then
 | 
			
		||||
          (chown -Rf $user:$user "$permissions" && echo "changed ownership on $permissions to $user") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
        fi
 | 
			
		||||
      done
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset filesperms filename
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run after executing
 | 
			
		||||
__post_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  sleep 60                           # how long to wait before executing
 | 
			
		||||
  echo "Running post commands"       # message
 | 
			
		||||
  # execute commands
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__pre_message() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
  [ -n "$user_name" ] && echo "username:               $user_name" && echo "$user_name" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$user_pass" ] && echo "password:               saved to ${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$user_pass" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
  [ -n "$root_user_name" ] && echo "root username:     $root_user_name" && echo "$root_user_name" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$root_user_pass" ] && echo "root password:     saved to ${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$root_user_pass" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to setup ssl support
 | 
			
		||||
__update_ssl_conf() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__create_env() {
 | 
			
		||||
  cat <<EOF | tee "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" &>/dev/null
 | 
			
		||||
# ENV_WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
# ENV_WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
# ENV_ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
# ENV_DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
# ENV_CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
# ENV_DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
# ENV_SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
# ENV_SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
# ENV_SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
# EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
# EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
# EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
# ENV_USER_NAME="${user_name:-$ENV_USER_NAME}"                      #
 | 
			
		||||
# ENV_USER_PASS="${user_pass:-$ENV_USER_PASS}"                      #
 | 
			
		||||
# ENV_ROOT_USER_NAME="${root_user_name:-$ENV_ROOT_USER_NAME}"       #
 | 
			
		||||
# ENV_ROOT_USER_PASS="${root_user_pass:-$ENV_ROOT_USER_PASS}"       #
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
  [ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] || return 1
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# script to start server
 | 
			
		||||
__run_start_script() {
 | 
			
		||||
  local user="${SERVICE_USER:-root}"
 | 
			
		||||
  local workdir="${WORKDIR:-$WORK_DIR}"
 | 
			
		||||
  local cmd="$EXEC_CMD_BIN $EXEC_CMD_ARGS"
 | 
			
		||||
  local lc_type="${LC_ALL:-${LC_CTYPE:-$LANG}}"
 | 
			
		||||
  local home="${workdir//\/root/\/tmp\/docker}"
 | 
			
		||||
  local path="/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
  if [ -z "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
    __post_execute 2>"/dev/stderr" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    echo "Initializing $SCRIPT_NAME has completed"
 | 
			
		||||
  else
 | 
			
		||||
    # ensure the command exists
 | 
			
		||||
    if [ ! -x "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is not a valid executable"
 | 
			
		||||
      exit 2
 | 
			
		||||
    fi
 | 
			
		||||
    # set working directories
 | 
			
		||||
    [ -z "$home" ] && home="${workdir:-/tmp/docker}"
 | 
			
		||||
    [ "$home" = "/root" ] && home="/tmp/docker"
 | 
			
		||||
    [ "$home" = "$workdir" ] && workdir=""
 | 
			
		||||
    # create needed directories
 | 
			
		||||
    [ -n "$home" ] && { [ -d "$home" ] || mkdir -p "$home"; }
 | 
			
		||||
    [ -n "$workdir" ] && { [ -d "$workdir" ] || mkdir -p "$workdir" || workdir="/tmp"; }
 | 
			
		||||
    [ -n "$workdir" ] && __cd "$workdir" || { [ -n "$home" ] && __cd "$home"; } || __cd "/tmp"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$home" ] && chmod -f 777 "$home"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$workdir" ] && chmod -f 777 "$workdir"
 | 
			
		||||
    # check and exit if already running
 | 
			
		||||
    if __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is already running" >&2
 | 
			
		||||
      exit 0
 | 
			
		||||
    else
 | 
			
		||||
      echo "Starting service: $EXEC_CMD_NAME $EXEC_CMD_ARGS"
 | 
			
		||||
      su_cmd touch "$SERVICE_PID_FILE"
 | 
			
		||||
      __post_execute 2>"/dev/stderr" 2>&1 |& tee -a "$LOG_DIR/init.txt" &>/dev/null &
 | 
			
		||||
      su_cmd env -i HOME="$home" LC_CTYPE="$lc_type" PATH="$path" USER="$user" sh -c "$cmd" || return 10
 | 
			
		||||
    fi
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# simple cd function
 | 
			
		||||
__cd() { mkdir -p "$1" && builtin cd "$1" || exit 1; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# process check functions
 | 
			
		||||
__pcheck() { [ -n "$(type -P pgrep 2>/dev/null)" ] && pgrep -x "$1" &>/dev/null && return 0 || return 10; }
 | 
			
		||||
__pgrep() { __pcheck "${1:-$EXEC_CMD_BIN}" || __ps aux 2>/dev/null | grep -Fw " ${1:-$EXEC_CMD_BIN}" | grep -qv ' grep' | grep '^' && return 0 || return 10; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# check if process is already running
 | 
			
		||||
__proc_check() {
 | 
			
		||||
  cmd_bin="$(type -P "${1:-$EXEC_CMD_BIN}")"
 | 
			
		||||
  cmd_name="$(basename "${cmd_bin:-$EXEC_CMD_NAME}")"
 | 
			
		||||
  if __pgrep "$cmd_bin" || __pgrep "$cmd_name"; then
 | 
			
		||||
    SERVICE_IS_RUNNING="true"
 | 
			
		||||
    touch "$SERVICE_PID_FILE"
 | 
			
		||||
    echo "$cmd_name is already running"
 | 
			
		||||
    return 0
 | 
			
		||||
  else
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow ENV_ variable - Import env file
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_EXIT_CODE=0                                           # default exit code
 | 
			
		||||
WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
PRE_EXEC_MESSAGE="${ENV_PRE_EXEC_MESSAGE:-$PRE_EXEC_MESSAGE}" # Show message before execute
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# application specific
 | 
			
		||||
EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
EXEC_CMD_BIN="$(type -P "$EXEC_CMD_BIN" || echo "$EXEC_CMD_BIN")" # set full path
 | 
			
		||||
EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
SERVICE_PID_FILE="/run/init.d/$EXEC_CMD_NAME.pid"                 # set the pid file location
 | 
			
		||||
EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
SERVICE_PID_NUMBER="$(__pgrep)"                                   # check if running
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# create auth directories
 | 
			
		||||
[ -n "$USER_FILE_PREFIX" ] && { [ -d "$USER_FILE_PREFIX" ] || mkdir -p "$USER_FILE_PREFIX"; }
 | 
			
		||||
[ -n "$ROOT_FILE_PREFIX" ] && { [ -d "$ROOT_FILE_PREFIX" ] || mkdir -p "$ROOT_FILE_PREFIX"; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow per init script usernames and passwords
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/name" ] && user_name="$(<"$ETC_DIR/auth/user/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/pass" ] && user_pass="$(<"$ETC_DIR/auth/user/pass")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/name" ] && root_user_name="$(<"$ETC_DIR/auth/root/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/pass" ] && root_user_pass="$(<"$ETC_DIR/auth/root/pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow setting initial users and passwords via environment
 | 
			
		||||
user_name="${user_name:-$ENV_USER_NAME}"
 | 
			
		||||
user_pass="${user_pass:-$ENV_USER_PASS}"
 | 
			
		||||
root_user_name="${root_user_name:-$ENV_ROOT_USER_NAME}"
 | 
			
		||||
root_user_pass="${root_user_pass:-$ENV_ROOT_USER_PASS}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set password to random if variable is random
 | 
			
		||||
if [ "$user_pass" = "random" ]; then
 | 
			
		||||
  user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
if [ "$root_user_pass" = "random" ]; then
 | 
			
		||||
  root_user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow variables via imports - Overwrite existing
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Only run check
 | 
			
		||||
if [ "$1" = "check" ]; then
 | 
			
		||||
  __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"
 | 
			
		||||
  exit $?
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show message if env exists
 | 
			
		||||
if [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  [ -n "$SERVICE_USER" ] && echo "Setting up service to run as $SERVICE_USER" || SERVICE_USER="root"
 | 
			
		||||
  [ -n "$SERVICE_PORT" ] && echo "${EXEC_CMD_NAME:-$EXEC_CMD_BIN} will be running on $SERVICE_PORT" || SERVICE_PORT=""
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set switch user command
 | 
			
		||||
if [ "$SERVICE_USER" = "root" ] || [ -z "$SERVICE_USER" ]; then
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P gosu)" ]; then
 | 
			
		||||
  su_cmd() { gosu $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P runuser)" ]; then
 | 
			
		||||
  su_cmd() { runuser -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P sudo)" ]; then
 | 
			
		||||
  su_cmd() { sudo -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P su)" ]; then
 | 
			
		||||
  su_cmd() { su -s /bin/sh - $SERVICE_USER -c "$@" || return 1; }
 | 
			
		||||
else
 | 
			
		||||
  echo "Can not switch to $SERVICE_USER: attempting to run as root"
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Change to working directory
 | 
			
		||||
[ -n "$WORKDIR" ] && [ -n "$EXEC_CMD_BIN" ] && __cd "$WORKDIR" && echo "Changed to $PWD"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show init message
 | 
			
		||||
__pre_message
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Initialize ssl
 | 
			
		||||
__update_ssl_conf
 | 
			
		||||
__update_ssl_certs
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Updating config files
 | 
			
		||||
__create_env
 | 
			
		||||
__update_conf_files
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run the pre execute commands
 | 
			
		||||
[ -n "$PRE_EXEC_MESSAGE" ] && echo "$PRE_EXEC_MESSAGE"
 | 
			
		||||
__pre_execute
 | 
			
		||||
__run_secure_function
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__run_start_script "$@" |& tee -a "/data/logs/entrypoint.log" &>/dev/null
 | 
			
		||||
if [ "$?" -ne 0 ] && [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  echo "Failed to execute: $EXEC_CMD_BIN $EXEC_CMD_ARGS" |& tee -a "/data/logs/entrypoint.log" "$LOG_DIR/init.txt"
 | 
			
		||||
  SERVICE_EXIT_CODE=10
 | 
			
		||||
  SERVICE_IS_RUNNING="false"
 | 
			
		||||
  rm -Rf "$SERVICE_PID_FILE"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
exit $SERVICE_EXIT_CODE
 | 
			
		||||
							
								
								
									
										402
									
								
								init/done/08-cherokee.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										402
									
								
								init/done/08-cherokee.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,402 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
 | 
			
		||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -o pipefail -x$DEBUGGER_OPTIONS || set -o pipefail
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
printf '%s\n' "# - - - Initializing cherokee - - - #"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_NAME="cherokee"
 | 
			
		||||
SCRIPT_NAME="$(basename "$0" 2>/dev/null)"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
export PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run trap command on exit
 | 
			
		||||
trap 'retVal=$?;[ "$SERVICE_IS_RUNNING" != "true" ] && [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE";exit $retVal' SIGINT SIGTERM EXIT
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# import the functions file
 | 
			
		||||
if [ -f "/usr/local/etc/docker/functions/entrypoint.sh" ]; then
 | 
			
		||||
  . "/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"
 | 
			
		||||
done
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Custom functions
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Show message before execute
 | 
			
		||||
PRE_EXEC_MESSAGE=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Default predefined variables
 | 
			
		||||
WORKDIR=""                 # set working directory
 | 
			
		||||
DATA_DIR="/data"           # set data directory
 | 
			
		||||
WWW_DIR="/data/htdocs/www" # set the web root
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ETC_DIR="/etc/cherokee"     # set etc directory
 | 
			
		||||
CONF_DIR="/config/cherokee" # set config directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
RUN_DIR="/run/init.d"         # set scripts pid dir
 | 
			
		||||
LOG_DIR="/data/logs/cherokee" # set log directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ROOT_FILE_PREFIX="/config/secure/auth/root" # directory to save username/password for root user
 | 
			
		||||
USER_FILE_PREFIX="/config/secure/auth/user" # directory to save username/password for normal user
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set the database directory
 | 
			
		||||
DATABASE_DIR="${DATABASE_DIR_CHEROKEE:-/data/db/cherokee}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional predefined variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# port which service is listening on
 | 
			
		||||
SERVICE_PORT="80"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# execute command variables
 | 
			
		||||
SERVICE_UID="0"                           # set the user id
 | 
			
		||||
SERVICE_USER="root"                       # execute command as another user
 | 
			
		||||
EXEC_CMD_BIN="cherokee"                   # command to execute
 | 
			
		||||
EXEC_CMD_ARGS="-C $ETC_DIR/cherokee.conf" # command arguments
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a web server
 | 
			
		||||
IS_WEB_SERVER="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a database server
 | 
			
		||||
IS_DATABASE_SERVICE="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# usernames
 | 
			
		||||
user_name="${CHEROKEE_USER_NAME:-}"           # normal user name
 | 
			
		||||
root_user_name="${CHEROKEE_ROOT_USER_NAME:-}" # root user name
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# passwords [password/random]
 | 
			
		||||
user_pass="${CHEROKEE_USER_PASS_WORD:-}"      # normal user password
 | 
			
		||||
root_user_pass="${CHEROKEE_ROOT_PASS_WORD:-}" # root user password
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Overwrite variables from files
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_name" ] && user_name="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && user_pass="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name" ] && root_user_name="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && root_user_pass="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Specifiy custom directories to be created
 | 
			
		||||
ADD_APPLICATION_FILES=""
 | 
			
		||||
ADD_APPLICATION_DIRS=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
APPLICATION_FILES="$LOG_DIR/cherokee.log"
 | 
			
		||||
APPLICATION_DIRS="$RUN_DIR $ETC_DIR $CONF_DIR $LOG_DIR"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__update_conf_files() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
 | 
			
		||||
  # create default directories
 | 
			
		||||
  for filedirs in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
    if [ -n "$filedirs" ] && [ ! -d "$filedirs" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating directory $filedirs with permissions 777"
 | 
			
		||||
        mkdir -p "$filedirs" && chmod -Rf 777 "$filedirs"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create default files
 | 
			
		||||
  for application_files in $ADD_APPLICATION_FILES $APPLICATION_FILES; do
 | 
			
		||||
    if [ -n "$application_files" ] && [ ! -e "$application_files" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating file $application_files with permissions 777"
 | 
			
		||||
        touch "$application_files" && chmod -Rf 777 "$application_files"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create directories if variable is yes"
 | 
			
		||||
  [ "$IS_WEB_SERVER" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $WWW_DIR" && { [ -d "$WWW_DIR" ] || { (echo "Creating directory $WWW_DIR with permissions 777" && mkdir -p "$WWW_DIR" && chmod -f 777 "$WWW_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  [ "$IS_DATABASE_SERVICE" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $DATABASE_DIR" && { [ -d "$DATABASE_DIR" ] || { (echo "Creating directory $DATABASE_DIR with permissions 777" && mkdir -p "$DATABASE_DIR" && chmod -f 777 "$DATABASE_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  # copy config files to system
 | 
			
		||||
  __file_copy "$CONF_DIR/." "$ETC_DIR/" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  # replace variables
 | 
			
		||||
  __replace "REPLACE_WWW_DIR" "$WWW_DIR" "$ETC_DIR/cherokee.conf"
 | 
			
		||||
  __replace "REPLACE_SERVER_PORT" "$SERVICE_PORT" "$ETC_DIR/cherokee.conf"
 | 
			
		||||
  # replace variables recursively
 | 
			
		||||
  # __find_replace "" "" "$CONF_DIR/"
 | 
			
		||||
  # custom commands
 | 
			
		||||
 | 
			
		||||
  # other
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset application_files filedirs
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run before executing
 | 
			
		||||
__pre_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  # define commands
 | 
			
		||||
 | 
			
		||||
  # execute if directories is empty
 | 
			
		||||
  #__is_dir_empty "" &&
 | 
			
		||||
 | 
			
		||||
  # create user if needed
 | 
			
		||||
  # __create_service_user "$user" "/home/$user" "${USER_GID:-${USER_UID:-1000}"
 | 
			
		||||
  # set user on files/folders
 | 
			
		||||
  if [ -n "$user" ] && [ "$user" != "root" ]; then
 | 
			
		||||
    if grep -s -q "$user:" "/etc/passwd"; then
 | 
			
		||||
      for permissions in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
        if [ -n "$permissions" ] && [ -e "$permissions" ]; then
 | 
			
		||||
          (chown -Rf $user:$user "$permissions" && echo "changed ownership on $permissions to $user") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
        fi
 | 
			
		||||
      done
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset filesperms filename
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run after executing
 | 
			
		||||
__post_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  sleep 60                           # how long to wait before executing
 | 
			
		||||
  echo "Running post commands"       # message
 | 
			
		||||
  # execute commands
 | 
			
		||||
 | 
			
		||||
  (echo "Starting cherokee-admin on port 9090" && cherokee-admin -b -p 9090 -C $ETC_DIR/cherokee.conf) &
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__pre_message() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
  [ -n "$user_name" ] && echo "username:               $user_name" && echo "$user_name" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$user_pass" ] && echo "password:               saved to ${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$user_pass" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
  [ -n "$root_user_name" ] && echo "root username:     $root_user_name" && echo "$root_user_name" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$root_user_pass" ] && echo "root password:     saved to ${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$root_user_pass" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to setup ssl support
 | 
			
		||||
__update_ssl_conf() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__create_env() {
 | 
			
		||||
  cat <<EOF | tee "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" &>/dev/null
 | 
			
		||||
# ENV_WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
# ENV_WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
# ENV_ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
# ENV_DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
# ENV_CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
# ENV_DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
# ENV_SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
# ENV_SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
# ENV_SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
# EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
# EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
# EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
# ENV_USER_NAME="${user_name:-$ENV_USER_NAME}"                      #
 | 
			
		||||
# ENV_USER_PASS="${user_pass:-$ENV_USER_PASS}"                      #
 | 
			
		||||
# ENV_ROOT_USER_NAME="${root_user_name:-$ENV_ROOT_USER_NAME}"       #
 | 
			
		||||
# ENV_ROOT_USER_PASS="${root_user_pass:-$ENV_ROOT_USER_PASS}"       #
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
  [ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] || return 1
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# script to start server
 | 
			
		||||
__run_start_script() {
 | 
			
		||||
  local user="${SERVICE_USER:-root}"
 | 
			
		||||
  local workdir="${WORKDIR:-$WORK_DIR}"
 | 
			
		||||
  local cmd="$EXEC_CMD_BIN $EXEC_CMD_ARGS"
 | 
			
		||||
  local lc_type="${LC_ALL:-${LC_CTYPE:-$LANG}}"
 | 
			
		||||
  local home="${workdir//\/root/\/tmp\/docker}"
 | 
			
		||||
  local path="/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
  if [ -z "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
    __post_execute 2>"/dev/stderr" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    echo "Initializing $SCRIPT_NAME has completed"
 | 
			
		||||
  else
 | 
			
		||||
    # ensure the command exists
 | 
			
		||||
    if [ ! -x "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is not a valid executable"
 | 
			
		||||
      exit 2
 | 
			
		||||
    fi
 | 
			
		||||
    # set working directories
 | 
			
		||||
    [ -z "$home" ] && home="${workdir:-/tmp/docker}"
 | 
			
		||||
    [ "$home" = "/root" ] && home="/tmp/docker"
 | 
			
		||||
    [ "$home" = "$workdir" ] && workdir=""
 | 
			
		||||
    # create needed directories
 | 
			
		||||
    [ -n "$home" ] && { [ -d "$home" ] || mkdir -p "$home"; }
 | 
			
		||||
    [ -n "$workdir" ] && { [ -d "$workdir" ] || mkdir -p "$workdir" || workdir="/tmp"; }
 | 
			
		||||
    [ -n "$workdir" ] && __cd "$workdir" || { [ -n "$home" ] && __cd "$home"; } || __cd "/tmp"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$home" ] && chmod -f 777 "$home"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$workdir" ] && chmod -f 777 "$workdir"
 | 
			
		||||
    # check and exit if already running
 | 
			
		||||
    if __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is already running" >&2
 | 
			
		||||
      exit 0
 | 
			
		||||
    else
 | 
			
		||||
      echo "Starting service: $EXEC_CMD_NAME $EXEC_CMD_ARGS"
 | 
			
		||||
      su_cmd touch "$SERVICE_PID_FILE"
 | 
			
		||||
      __post_execute 2>"/dev/stderr" 2>&1 |& tee -a "$LOG_DIR/init.txt" &>/dev/null &
 | 
			
		||||
      su_cmd env -i HOME="$home" LC_CTYPE="$lc_type" PATH="$path" USER="$user" sh -c "$cmd" || return 10
 | 
			
		||||
    fi
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# simple cd function
 | 
			
		||||
__cd() { mkdir -p "$1" && builtin cd "$1" || exit 1; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# process check functions
 | 
			
		||||
__pcheck() { [ -n "$(type -P pgrep 2>/dev/null)" ] && pgrep -x "$1" &>/dev/null && return 0 || return 10; }
 | 
			
		||||
__pgrep() { __pcheck "${1:-$EXEC_CMD_BIN}" || __ps aux 2>/dev/null | grep -Fw " ${1:-$EXEC_CMD_BIN}" | grep -qv ' grep' | grep '^' && return 0 || return 10; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# check if process is already running
 | 
			
		||||
__proc_check() {
 | 
			
		||||
  cmd_bin="$(type -P "${1:-$EXEC_CMD_BIN}")"
 | 
			
		||||
  cmd_name="$(basename "${cmd_bin:-$EXEC_CMD_NAME}")"
 | 
			
		||||
  if __pgrep "$cmd_bin" || __pgrep "$cmd_name"; then
 | 
			
		||||
    SERVICE_IS_RUNNING="true"
 | 
			
		||||
    touch "$SERVICE_PID_FILE"
 | 
			
		||||
    echo "$cmd_name is already running"
 | 
			
		||||
    return 0
 | 
			
		||||
  else
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow ENV_ variable - Import env file
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_EXIT_CODE=0                                           # default exit code
 | 
			
		||||
WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
PRE_EXEC_MESSAGE="${ENV_PRE_EXEC_MESSAGE:-$PRE_EXEC_MESSAGE}" # Show message before execute
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# application specific
 | 
			
		||||
EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
EXEC_CMD_BIN="$(type -P "$EXEC_CMD_BIN" || echo "$EXEC_CMD_BIN")" # set full path
 | 
			
		||||
EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
SERVICE_PID_FILE="/run/init.d/$EXEC_CMD_NAME.pid"                 # set the pid file location
 | 
			
		||||
EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
SERVICE_PID_NUMBER="$(__pgrep)"                                   # check if running
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# create auth directories
 | 
			
		||||
[ -n "$USER_FILE_PREFIX" ] && { [ -d "$USER_FILE_PREFIX" ] || mkdir -p "$USER_FILE_PREFIX"; }
 | 
			
		||||
[ -n "$ROOT_FILE_PREFIX" ] && { [ -d "$ROOT_FILE_PREFIX" ] || mkdir -p "$ROOT_FILE_PREFIX"; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow per init script usernames and passwords
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/name" ] && user_name="$(<"$ETC_DIR/auth/user/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/pass" ] && user_pass="$(<"$ETC_DIR/auth/user/pass")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/name" ] && root_user_name="$(<"$ETC_DIR/auth/root/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/pass" ] && root_user_pass="$(<"$ETC_DIR/auth/root/pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow setting initial users and passwords via environment
 | 
			
		||||
user_name="${user_name:-$ENV_USER_NAME}"
 | 
			
		||||
user_pass="${user_pass:-$ENV_USER_PASS}"
 | 
			
		||||
root_user_name="${root_user_name:-$ENV_ROOT_USER_NAME}"
 | 
			
		||||
root_user_pass="${root_user_pass:-$ENV_ROOT_USER_PASS}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set password to random if variable is random
 | 
			
		||||
if [ "$user_pass" = "random" ]; then
 | 
			
		||||
  user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
if [ "$root_user_pass" = "random" ]; then
 | 
			
		||||
  root_user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow variables via imports - Overwrite existing
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Only run check
 | 
			
		||||
if [ "$1" = "check" ]; then
 | 
			
		||||
  __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"
 | 
			
		||||
  exit $?
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show message if env exists
 | 
			
		||||
if [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  [ -n "$SERVICE_USER" ] && echo "Setting up service to run as $SERVICE_USER" || SERVICE_USER="root"
 | 
			
		||||
  [ -n "$SERVICE_PORT" ] && echo "${EXEC_CMD_NAME:-$EXEC_CMD_BIN} will be running on $SERVICE_PORT" || SERVICE_PORT=""
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set switch user command
 | 
			
		||||
if [ "$SERVICE_USER" = "root" ] || [ -z "$SERVICE_USER" ]; then
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P gosu)" ]; then
 | 
			
		||||
  su_cmd() { gosu $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P runuser)" ]; then
 | 
			
		||||
  su_cmd() { runuser -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P sudo)" ]; then
 | 
			
		||||
  su_cmd() { sudo -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P su)" ]; then
 | 
			
		||||
  su_cmd() { su -s /bin/sh - $SERVICE_USER -c "$@" || return 1; }
 | 
			
		||||
else
 | 
			
		||||
  echo "Can not switch to $SERVICE_USER: attempting to run as root"
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Change to working directory
 | 
			
		||||
[ -n "$WORKDIR" ] && [ -n "$EXEC_CMD_BIN" ] && __cd "$WORKDIR" && echo "Changed to $PWD"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show init message
 | 
			
		||||
__pre_message
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Initialize ssl
 | 
			
		||||
__update_ssl_conf
 | 
			
		||||
__update_ssl_certs
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Updating config files
 | 
			
		||||
__create_env
 | 
			
		||||
__update_conf_files
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run the pre execute commands
 | 
			
		||||
[ -n "$PRE_EXEC_MESSAGE" ] && echo "$PRE_EXEC_MESSAGE"
 | 
			
		||||
__pre_execute
 | 
			
		||||
__run_secure_function
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__run_start_script "$@" |& tee -a "/data/logs/entrypoint.log" &>/dev/null
 | 
			
		||||
if [ "$?" -ne 0 ] && [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  echo "Failed to execute: $EXEC_CMD_BIN $EXEC_CMD_ARGS" |& tee -a "/data/logs/entrypoint.log" "$LOG_DIR/init.txt"
 | 
			
		||||
  SERVICE_EXIT_CODE=10
 | 
			
		||||
  SERVICE_IS_RUNNING="false"
 | 
			
		||||
  rm -Rf "$SERVICE_PID_FILE"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
exit $SERVICE_EXIT_CODE
 | 
			
		||||
							
								
								
									
										440
									
								
								init/done/08-gitea.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										440
									
								
								init/done/08-gitea.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,440 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
 | 
			
		||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -o pipefail -x$DEBUGGER_OPTIONS || set -o pipefail
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
printf '%s\n' "# - - - Initializing gitea - - - #"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_NAME="gitea"
 | 
			
		||||
SCRIPT_NAME="$(basename "$0" 2>/dev/null)"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
export PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run trap command on exit
 | 
			
		||||
trap 'retVal=$?;[ "$SERVICE_IS_RUNNING" != "true" ] && [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE";exit $retVal' SIGINT SIGTERM EXIT
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# import the functions file
 | 
			
		||||
if [ -f "/usr/local/etc/docker/functions/entrypoint.sh" ]; then
 | 
			
		||||
  . "/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"
 | 
			
		||||
done
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Custom functions
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Show message before execute
 | 
			
		||||
PRE_EXEC_MESSAGE=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Default predefined variables
 | 
			
		||||
WORKDIR=""                 # set working directory
 | 
			
		||||
DATA_DIR="/data"           # set data directory
 | 
			
		||||
WWW_DIR="/data/htdocs/www" # set the web root
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ETC_DIR="/etc/gitea"     # set etc directory
 | 
			
		||||
CONF_DIR="/config/gitea" # set config directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
RUN_DIR="/run/init.d"      # set scripts pid dir
 | 
			
		||||
LOG_DIR="/data/logs/gitea" # set log directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ROOT_FILE_PREFIX="/config/secure/auth/root" # directory to save username/password for root user
 | 
			
		||||
USER_FILE_PREFIX="/config/secure/auth/user" # directory to save username/password for normal user
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set the database directory
 | 
			
		||||
DATABASE_DIR="${DATABASE_DIR_GITEA:-/data/db/gitea}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional predefined variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# port which service is listening on
 | 
			
		||||
SERVICE_PORT=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# execute command variables
 | 
			
		||||
SERVICE_UID="0"                                                             # set the user id
 | 
			
		||||
SERVICE_USER="root"                                                         # execute command as another user
 | 
			
		||||
EXEC_CMD_BIN="gitea"                                                        # command to execute
 | 
			
		||||
EXEC_CMD_ARGS="--port $SERVICE_PORT --config $ETC_DIR/app.ini "             # command arguments
 | 
			
		||||
EXEC_CMD_ARGS+="--custom-path $ETC_DIR/custom --work-path $DATA_DIR/gitea " # continued
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a web server
 | 
			
		||||
IS_WEB_SERVER="yes"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a database server
 | 
			
		||||
IS_DATABASE_SERVICE="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional variables
 | 
			
		||||
GITEA_USER="$SERVICE_USER"
 | 
			
		||||
GITEA_TZ="${TZ:-America/New_York}"
 | 
			
		||||
GITEA_PROTO="${GITEA_PROTO:-http}"
 | 
			
		||||
GITEA_EMAIL_CONFIRM="${GITEA_EMAIL_CONFIRM:-false}"
 | 
			
		||||
GITEA_DB_TYPE="${GITEA_DB_TYPE:-sqlite3}"
 | 
			
		||||
GITEA_HOSTNAME="${DOMAINNAME:-$HOSTNAME}"
 | 
			
		||||
GITEA_PORT="${GITEA_PORT:-$SERVICE_PORT}"
 | 
			
		||||
GITEA_NAME="${GITEA_NAME:-Gitea - GIT Server}"
 | 
			
		||||
GITEA_SQL_DB_HOST="${GITEA_SQL_DB_HOST:-localhost}"
 | 
			
		||||
GITEA_ADMIN="${GITEA_ADMIN:-gitea@${DOMAINNAME:-$HOSTNAME}}"
 | 
			
		||||
GITEA_EMAIL_RELAY="${GITEA_EMAIL_RELAY:-${EMAIL_RELAY:-localhost}}"
 | 
			
		||||
GITEA_LFS_JWT_SECRET="${GITEA_LFS_JWT_SECRET:-$($EXEC_CMD_BIN generate secret LFS_JWT_SECRET)}"
 | 
			
		||||
GITEA_INTERNAL_TOKEN="${GITEA_INTERNAL_TOKEN:-$($EXEC_CMD_BIN generate secret INTERNAL_TOKEN)}"
 | 
			
		||||
[ "$GITEA_EMAIL_CONFIRM" = "yes" ] && GITEA_EMAIL_CONFIRM="true"
 | 
			
		||||
export CUSTOM_PATH="$ETC_DIR"
 | 
			
		||||
export WORK_DIR="$DATA_DIR/gitea"
 | 
			
		||||
export GITEA_WORK_DIR="$WORK_DIR"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# usernames
 | 
			
		||||
user_name="${GITEA_USER_NAME:-}"           # normal user name
 | 
			
		||||
root_user_name="${GITEA_ROOT_USER_NAME:-}" # root user name
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# passwords [password/random]
 | 
			
		||||
user_pass="${GITEA_USER_PASS_WORD:-}"      # normal user password
 | 
			
		||||
root_user_pass="${GITEA_ROOT_PASS_WORD:-}" # root user password
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Overwrite variables from files
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_name" ] && user_name="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && user_pass="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name" ] && root_user_name="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && root_user_pass="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Specifiy custom directories to be created
 | 
			
		||||
ADD_APPLICATION_FILES=""
 | 
			
		||||
ADD_APPLICATION_DIRS=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
APPLICATION_FILES="$LOG_DIR/gitea.log"
 | 
			
		||||
APPLICATION_DIRS="$RUN_DIR $ETC_DIR $CONF_DIR $LOG_DIR $ETC_DIR/custom"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__update_conf_files() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
 | 
			
		||||
  # define actions
 | 
			
		||||
  if [ -n "$GITEA_SERVER" ]; then
 | 
			
		||||
    if echo "$GITEA_SERVER" | grep -q 'http.*://'; then
 | 
			
		||||
      GITEA_PROTO="${GITEA_PROTO:-${GITEA_SERVER//:\/\/*/}}"
 | 
			
		||||
    fi
 | 
			
		||||
  else
 | 
			
		||||
    GITEA_SERVER="${GITEA_SERVER:-$GITEA_HOSTNAME}"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # create default directories
 | 
			
		||||
  for filedirs in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
    if [ -n "$filedirs" ] && [ ! -d "$filedirs" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating directory $filedirs with permissions 777"
 | 
			
		||||
        mkdir -p "$filedirs" && chmod -Rf 777 "$filedirs"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create default files
 | 
			
		||||
  for application_files in $ADD_APPLICATION_FILES $APPLICATION_FILES; do
 | 
			
		||||
    if [ -n "$application_files" ] && [ ! -e "$application_files" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating file $application_files with permissions 777"
 | 
			
		||||
        touch "$application_files" && chmod -Rf 777 "$application_files"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create directories if variable is yes"
 | 
			
		||||
  [ "$IS_WEB_SERVER" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $WWW_DIR" && { [ -d "$WWW_DIR" ] || { (echo "Creating directory $WWW_DIR with permissions 777" && mkdir -p "$WWW_DIR" && chmod -f 777 "$WWW_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  [ "$IS_DATABASE_SERVICE" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $DATABASE_DIR" && { [ -d "$DATABASE_DIR" ] || { (echo "Creating directory $DATABASE_DIR with permissions 777" && mkdir -p "$DATABASE_DIR" && chmod -f 777 "$DATABASE_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  # copy config files to system
 | 
			
		||||
  __file_copy "$CONF_DIR/." "$ETC_DIR/" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  # replace variables
 | 
			
		||||
  sed -i "s|REPLACE_GITEA_NAME|$GITEA_NAME|g" "$ETC_DIR/app.ini"
 | 
			
		||||
  #
 | 
			
		||||
  __replace "REPLACE_GITEA_TZ" "$GITEA_TZ" "$ETC_DIR/app.ini"
 | 
			
		||||
  __replace "REPLACE_GITEA_PORT" "$GITEA_PORT" "$ETC_DIR/app.ini"
 | 
			
		||||
  __replace "REPLACE_GITEA_USER" "$GITEA_USER" "$ETC_DIR/app.ini"
 | 
			
		||||
  __replace "REPLACE_GITEA_PROTO" "$GITEA_PROTO" "$ETC_DIR/app.ini"
 | 
			
		||||
  __replace "REPLACE_GITEA_ADMIN" "$GITEA_ADMIN" "$ETC_DIR/app.ini"
 | 
			
		||||
  __replace "REPLACE_GITEA_SERVER" "$GITEA_SERVER" "$ETC_DIR/app.ini"
 | 
			
		||||
  __replace "REPLACE_GITEA_EMAIL_RELAY" "$GITEA_EMAIL_RELAY" "$ETC_DIR/app.ini"
 | 
			
		||||
  __replace "REPLACE_GITEA_EMAIL_CONFIRM" "$GITEA_EMAIL_CONFIRM" "$ETC_DIR/app.ini"
 | 
			
		||||
  __replace "REPLACE_GITEA_INTERNAL_TOKEN" "$GITEA_INTERNAL_TOKEN" "$ETC_DIR/app.ini"
 | 
			
		||||
  __replace "REPLACE_GITEA_LFS_JWT_SECRET" "$GITEA_LFS_JWT_SECRET" "$ETC_DIR/app.ini"
 | 
			
		||||
  # database settings
 | 
			
		||||
  __replace "REPLACE_DB_TYPE" "$GITEA_DB_TYPE" "$ETC_DIR/app.ini"
 | 
			
		||||
  [ -n "$GITEA_SQL_DB" ] && __replace "REPLACE_SQL_DB" "$GITEA_SQL_DB" "$ETC_DIR/app.ini"
 | 
			
		||||
  [ -n "$GITEA_SQL_USER" ] && __replace "REPLACE_SQL_USER" "$GITEA_SQL_USER" "$ETC_DIR/app.ini"
 | 
			
		||||
  [ -n "$GITEA_SQL_PASS" ] && __replace "REPLACE_SQL_PASS" "$GITEA_SQL_PASS" "$ETC_DIR/app.ini"
 | 
			
		||||
  [ -n "$GITEA_SQL_DB_HOST" ] && __replace "REPLACE_SQL_HOST" "$GITEA_SQL_DB_HOST" "$ETC_DIR/app.ini"
 | 
			
		||||
  # custom commands
 | 
			
		||||
 | 
			
		||||
  # other
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset application_files filedirs
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run before executing
 | 
			
		||||
__pre_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  # define commands
 | 
			
		||||
 | 
			
		||||
  # create user if needed
 | 
			
		||||
  # __create_service_user "$user" "/home/$user" "${USER_GID:-${USER_UID:-1000}"
 | 
			
		||||
  # set user on files/folders
 | 
			
		||||
  if [ -n "$user" ] && [ "$user" != "root" ]; then
 | 
			
		||||
    if grep -s -q "$user:" "/etc/passwd"; then
 | 
			
		||||
      for permissions in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
        if [ -n "$permissions" ] && [ -e "$permissions" ]; then
 | 
			
		||||
          (chown -Rf $user:$user "$permissions" && echo "changed ownership on $permissions to $user") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
        fi
 | 
			
		||||
      done
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  [ -f "$CONF_DIR/app.ini" ] || cp -Rf "$ETC_DIR/app.ini" "$CONF_DIR/app.ini"
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset filesperms filename
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run after executing
 | 
			
		||||
__post_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  sleep 60                           # how long to wait before executing
 | 
			
		||||
  echo "Running post commands"       # message
 | 
			
		||||
  # execute commands
 | 
			
		||||
 | 
			
		||||
  act-runner
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__pre_message() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
  [ -n "$user_name" ] && echo "username:               $user_name" && echo "$user_name" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$user_pass" ] && echo "password:               saved to ${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$user_pass" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
  [ -n "$root_user_name" ] && echo "root username:     $root_user_name" && echo "$root_user_name" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$root_user_pass" ] && echo "root password:     saved to ${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$root_user_pass" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to setup ssl support
 | 
			
		||||
__update_ssl_conf() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__create_env() {
 | 
			
		||||
  cat <<EOF | tee "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" &>/dev/null
 | 
			
		||||
# ENV_WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
# ENV_WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
# ENV_ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
# ENV_DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
# ENV_CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
# ENV_DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
# ENV_SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
# ENV_SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
# ENV_SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
# EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
# EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
# EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
# ENV_USER_NAME="${user_name:-$ENV_USER_NAME}"                      #
 | 
			
		||||
# ENV_USER_PASS="${user_pass:-$ENV_USER_PASS}"                      #
 | 
			
		||||
# ENV_ROOT_USER_NAME="${root_user_name:-$ENV_ROOT_USER_NAME}"       #
 | 
			
		||||
# ENV_ROOT_USER_PASS="${root_user_pass:-$ENV_ROOT_USER_PASS}"       #
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
  [ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] || return 1
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# script to start server
 | 
			
		||||
__run_start_script() {
 | 
			
		||||
  local user="${SERVICE_USER:-root}"
 | 
			
		||||
  local workdir="${WORKDIR:-$WORK_DIR}"
 | 
			
		||||
  local cmd="$EXEC_CMD_BIN $EXEC_CMD_ARGS"
 | 
			
		||||
  local lc_type="${LC_ALL:-${LC_CTYPE:-$LANG}}"
 | 
			
		||||
  local home="${workdir//\/root/\/tmp\/docker}"
 | 
			
		||||
  local path="/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
  if [ -z "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
    __post_execute 2>"/dev/stderr" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    echo "Initializing $SCRIPT_NAME has completed"
 | 
			
		||||
  else
 | 
			
		||||
    # ensure the command exists
 | 
			
		||||
    if [ ! -x "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is not a valid executable"
 | 
			
		||||
      exit 2
 | 
			
		||||
    fi
 | 
			
		||||
    # set working directories
 | 
			
		||||
    [ -z "$home" ] && home="${workdir:-/tmp/docker}"
 | 
			
		||||
    [ "$home" = "/root" ] && home="/tmp/docker"
 | 
			
		||||
    [ "$home" = "$workdir" ] && workdir=""
 | 
			
		||||
    # create needed directories
 | 
			
		||||
    [ -n "$home" ] && { [ -d "$home" ] || mkdir -p "$home"; }
 | 
			
		||||
    [ -n "$workdir" ] && { [ -d "$workdir" ] || mkdir -p "$workdir" || workdir="/tmp"; }
 | 
			
		||||
    [ -n "$workdir" ] && __cd "$workdir" || { [ -n "$home" ] && __cd "$home"; } || __cd "/tmp"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$home" ] && chmod -f 777 "$home"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$workdir" ] && chmod -f 777 "$workdir"
 | 
			
		||||
    # check and exit if already running
 | 
			
		||||
    if __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is already running" >&2
 | 
			
		||||
      exit 0
 | 
			
		||||
    else
 | 
			
		||||
      echo "Starting service: $EXEC_CMD_NAME $EXEC_CMD_ARGS"
 | 
			
		||||
      su_cmd touch "$SERVICE_PID_FILE"
 | 
			
		||||
      __post_execute 2>"/dev/stderr" 2>&1 |& tee -a "$LOG_DIR/init.txt" &>/dev/null &
 | 
			
		||||
      su_cmd env -i HOME="$home" LC_CTYPE="$lc_type" PATH="$path" USER="$user" sh -c "$cmd" || return 10
 | 
			
		||||
    fi
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# simple cd function
 | 
			
		||||
__cd() { mkdir -p "$1" && builtin cd "$1" || exit 1; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# process check functions
 | 
			
		||||
__pcheck() { [ -n "$(type -P pgrep 2>/dev/null)" ] && pgrep -x "$1" &>/dev/null && return 0 || return 10; }
 | 
			
		||||
__pgrep() { __pcheck "${1:-$EXEC_CMD_BIN}" || __ps aux 2>/dev/null | grep -Fw " ${1:-$EXEC_CMD_BIN}" | grep -qv ' grep' | grep '^' && return 0 || return 10; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# check if process is already running
 | 
			
		||||
__proc_check() {
 | 
			
		||||
  cmd_bin="$(type -P "${1:-$EXEC_CMD_BIN}")"
 | 
			
		||||
  cmd_name="$(basename "${cmd_bin:-$EXEC_CMD_NAME}")"
 | 
			
		||||
  if __pgrep "$cmd_bin" || __pgrep "$cmd_name"; then
 | 
			
		||||
    SERVICE_IS_RUNNING="true"
 | 
			
		||||
    touch "$SERVICE_PID_FILE"
 | 
			
		||||
    echo "$cmd_name is already running"
 | 
			
		||||
    return 0
 | 
			
		||||
  else
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow ENV_ variable - Import env file
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_EXIT_CODE=0                                           # default exit code
 | 
			
		||||
WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
PRE_EXEC_MESSAGE="${ENV_PRE_EXEC_MESSAGE:-$PRE_EXEC_MESSAGE}" # Show message before execute
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# application specific
 | 
			
		||||
EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
EXEC_CMD_BIN="$(type -P "$EXEC_CMD_BIN" || echo "$EXEC_CMD_BIN")" # set full path
 | 
			
		||||
EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
SERVICE_PID_FILE="/run/init.d/$EXEC_CMD_NAME.pid"                 # set the pid file location
 | 
			
		||||
EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
SERVICE_PID_NUMBER="$(__pgrep)"                                   # check if running
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# create auth directories
 | 
			
		||||
[ -n "$USER_FILE_PREFIX" ] && { [ -d "$USER_FILE_PREFIX" ] || mkdir -p "$USER_FILE_PREFIX"; }
 | 
			
		||||
[ -n "$ROOT_FILE_PREFIX" ] && { [ -d "$ROOT_FILE_PREFIX" ] || mkdir -p "$ROOT_FILE_PREFIX"; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow per init script usernames and passwords
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/name" ] && user_name="$(<"$ETC_DIR/auth/user/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/pass" ] && user_pass="$(<"$ETC_DIR/auth/user/pass")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/name" ] && root_user_name="$(<"$ETC_DIR/auth/root/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/pass" ] && root_user_pass="$(<"$ETC_DIR/auth/root/pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow setting initial users and passwords via environment
 | 
			
		||||
user_name="${user_name:-$ENV_USER_NAME}"
 | 
			
		||||
user_pass="${user_pass:-$ENV_USER_PASS}"
 | 
			
		||||
root_user_name="${root_user_name:-$ENV_ROOT_USER_NAME}"
 | 
			
		||||
root_user_pass="${root_user_pass:-$ENV_ROOT_USER_PASS}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set password to random if variable is random
 | 
			
		||||
if [ "$user_pass" = "random" ]; then
 | 
			
		||||
  user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
if [ "$root_user_pass" = "random" ]; then
 | 
			
		||||
  root_user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow variables via imports - Overwrite existing
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Only run check
 | 
			
		||||
if [ "$1" = "check" ]; then
 | 
			
		||||
  __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"
 | 
			
		||||
  exit $?
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show message if env exists
 | 
			
		||||
if [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  [ -n "$SERVICE_USER" ] && echo "Setting up service to run as $SERVICE_USER" || SERVICE_USER="root"
 | 
			
		||||
  [ -n "$SERVICE_PORT" ] && echo "${EXEC_CMD_NAME:-$EXEC_CMD_BIN} will be running on $SERVICE_PORT" || SERVICE_PORT=""
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set switch user command
 | 
			
		||||
if [ "$SERVICE_USER" = "root" ] || [ -z "$SERVICE_USER" ]; then
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P gosu)" ]; then
 | 
			
		||||
  su_cmd() { gosu $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P runuser)" ]; then
 | 
			
		||||
  su_cmd() { runuser -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P sudo)" ]; then
 | 
			
		||||
  su_cmd() { sudo -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P su)" ]; then
 | 
			
		||||
  su_cmd() { su -s /bin/sh - $SERVICE_USER -c "$@" || return 1; }
 | 
			
		||||
else
 | 
			
		||||
  echo "Can not switch to $SERVICE_USER: attempting to run as root"
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Change to working directory
 | 
			
		||||
[ -n "$WORKDIR" ] && [ -n "$EXEC_CMD_BIN" ] && __cd "$WORKDIR" && echo "Changed to $PWD"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show init message
 | 
			
		||||
__pre_message
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Initialize ssl
 | 
			
		||||
__update_ssl_conf
 | 
			
		||||
__update_ssl_certs
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Updating config files
 | 
			
		||||
__create_env
 | 
			
		||||
__update_conf_files
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run the pre execute commands
 | 
			
		||||
[ -n "$PRE_EXEC_MESSAGE" ] && echo "$PRE_EXEC_MESSAGE"
 | 
			
		||||
__pre_execute
 | 
			
		||||
__run_secure_function
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__run_start_script "$@" |& tee -a "/data/logs/entrypoint.log" &>/dev/null
 | 
			
		||||
if [ "$?" -ne 0 ] && [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  echo "Failed to execute: $EXEC_CMD_BIN $EXEC_CMD_ARGS" |& tee -a "/data/logs/entrypoint.log" "$LOG_DIR/init.txt"
 | 
			
		||||
  SERVICE_EXIT_CODE=10
 | 
			
		||||
  SERVICE_IS_RUNNING="false"
 | 
			
		||||
  rm -Rf "$SERVICE_PID_FILE"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
exit $SERVICE_EXIT_CODE
 | 
			
		||||
							
								
								
									
										405
									
								
								init/done/08-gohttpserver.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										405
									
								
								init/done/08-gohttpserver.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,405 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
 | 
			
		||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -o pipefail -x$DEBUGGER_OPTIONS || set -o pipefail
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
printf '%s\n' "# - - - Initializing gohttpserver - - - #"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_NAME="gohttpserver"
 | 
			
		||||
SCRIPT_NAME="$(basename "$0" 2>/dev/null)"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
export PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run trap command on exit
 | 
			
		||||
trap 'retVal=$?;[ "$SERVICE_IS_RUNNING" != "true" ] && [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE";exit $retVal' SIGINT SIGTERM EXIT
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# import the functions file
 | 
			
		||||
if [ -f "/usr/local/etc/docker/functions/entrypoint.sh" ]; then
 | 
			
		||||
  . "/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"
 | 
			
		||||
done
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Custom functions
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Show message before execute
 | 
			
		||||
PRE_EXEC_MESSAGE=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Default predefined variables
 | 
			
		||||
WORKDIR=""                 # set working directory
 | 
			
		||||
DATA_DIR="/data"           # set data directory
 | 
			
		||||
WWW_DIR="/data/htdocs/www" # set the web root
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ETC_DIR="/etc/gohttpserver"     # set etc directory
 | 
			
		||||
CONF_DIR="/config/gohttpserver" # set config directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
RUN_DIR="/run/init.d"             # set scripts pid dir
 | 
			
		||||
LOG_DIR="/data/logs/gohttpserver" # set log directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ROOT_FILE_PREFIX="/config/secure/auth/root" # directory to save username/password for root user
 | 
			
		||||
USER_FILE_PREFIX="/config/secure/auth/user" # directory to save username/password for normal user
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set the database directory
 | 
			
		||||
DATABASE_DIR="${DATABASE_DIR_GOHTTPSERVER:-/data/db/gohttpserver}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional predefined variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# port which service is listening on
 | 
			
		||||
SERVICE_PORT="80"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# execute command variables
 | 
			
		||||
SERVICE_UID="0"                                                       # set the user id
 | 
			
		||||
SERVICE_USER="root"                                                   # execute command as another user
 | 
			
		||||
EXEC_CMD_BIN="gohttpserver"                                           # command to execute
 | 
			
		||||
EXEC_CMD_ARGS="--title=DevSystem --cors --xheaders --theme=black "    # command arguments
 | 
			
		||||
EXEC_CMD_ARGS+="--addr=0.0.0.0 --port=$SERVICE_PORT --root=$WWW_DIR " #
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a web server
 | 
			
		||||
IS_WEB_SERVER="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a database server
 | 
			
		||||
IS_DATABASE_SERVICE="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# usernames
 | 
			
		||||
user_name="${GOHTTPSERVER_USER_NAME:-}"           # normal user name
 | 
			
		||||
root_user_name="${GOHTTPSERVER_ROOT_USER_NAME:-}" # root user name
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# passwords [password/random]
 | 
			
		||||
user_pass="${GOHTTPSERVER_USER_PASS_WORD:-}"      # normal user password
 | 
			
		||||
root_user_pass="${GOHTTPSERVER_ROOT_PASS_WORD:-}" # root user password
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Overwrite variables from files
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_name" ] && user_name="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && user_pass="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name" ] && root_user_name="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && root_user_pass="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Specifiy custom directories to be created
 | 
			
		||||
ADD_APPLICATION_FILES=""
 | 
			
		||||
ADD_APPLICATION_DIRS=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
APPLICATION_FILES="$LOG_DIR/gohttpserver.log"
 | 
			
		||||
APPLICATION_DIRS="$RUN_DIR $ETC_DIR $CONF_DIR $LOG_DIR"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__update_conf_files() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
 | 
			
		||||
  # delete files
 | 
			
		||||
  #__rm ""
 | 
			
		||||
 | 
			
		||||
  # define actions
 | 
			
		||||
 | 
			
		||||
  # create default directories
 | 
			
		||||
  for filedirs in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
    if [ -n "$filedirs" ] && [ ! -d "$filedirs" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating directory $filedirs with permissions 777"
 | 
			
		||||
        mkdir -p "$filedirs" && chmod -Rf 777 "$filedirs"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create default files
 | 
			
		||||
  for application_files in $ADD_APPLICATION_FILES $APPLICATION_FILES; do
 | 
			
		||||
    if [ -n "$application_files" ] && [ ! -e "$application_files" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating file $application_files with permissions 777"
 | 
			
		||||
        touch "$application_files" && chmod -Rf 777 "$application_files"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create directories if variable is yes"
 | 
			
		||||
  [ "$IS_WEB_SERVER" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $WWW_DIR" && { [ -d "$WWW_DIR" ] || { (echo "Creating directory $WWW_DIR with permissions 777" && mkdir -p "$WWW_DIR" && chmod -f 777 "$WWW_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  [ "$IS_DATABASE_SERVICE" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $DATABASE_DIR" && { [ -d "$DATABASE_DIR" ] || { (echo "Creating directory $DATABASE_DIR with permissions 777" && mkdir -p "$DATABASE_DIR" && chmod -f 777 "$DATABASE_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  # copy config files to system
 | 
			
		||||
  __file_copy "$CONF_DIR/." "$ETC_DIR/" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  # replace variables
 | 
			
		||||
  # __replace "" "" "$CONF_DIR/gohttpserver.conf"
 | 
			
		||||
  # replace variables recursively
 | 
			
		||||
  # __find_replace "" "" "$CONF_DIR/"
 | 
			
		||||
  # custom commands
 | 
			
		||||
 | 
			
		||||
  # other
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset application_files filedirs
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run before executing
 | 
			
		||||
__pre_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  # define commands
 | 
			
		||||
 | 
			
		||||
  # execute if directories is empty
 | 
			
		||||
  #__is_dir_empty "" &&
 | 
			
		||||
 | 
			
		||||
  # create user if needed
 | 
			
		||||
  # __create_service_user "$user" "/home/$user" "${USER_GID:-${USER_UID:-1000}"
 | 
			
		||||
  # set user on files/folders
 | 
			
		||||
  if [ -n "$user" ] && [ "$user" != "root" ]; then
 | 
			
		||||
    if grep -s -q "$user:" "/etc/passwd"; then
 | 
			
		||||
      for permissions in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
        if [ -n "$permissions" ] && [ -e "$permissions" ]; then
 | 
			
		||||
          (chown -Rf $user:$user "$permissions" && echo "changed ownership on $permissions to $user") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
        fi
 | 
			
		||||
      done
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset filesperms filename
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run after executing
 | 
			
		||||
__post_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  sleep 60                           # how long to wait before executing
 | 
			
		||||
  echo "Running post commands"       # message
 | 
			
		||||
  # execute commands
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__pre_message() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
  [ -n "$user_name" ] && echo "username:               $user_name" && echo "$user_name" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$user_pass" ] && echo "password:               saved to ${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$user_pass" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
  [ -n "$root_user_name" ] && echo "root username:     $root_user_name" && echo "$root_user_name" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$root_user_pass" ] && echo "root password:     saved to ${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$root_user_pass" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to setup ssl support
 | 
			
		||||
__update_ssl_conf() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__create_env() {
 | 
			
		||||
  cat <<EOF | tee "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" &>/dev/null
 | 
			
		||||
# ENV_WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
# ENV_WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
# ENV_ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
# ENV_DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
# ENV_CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
# ENV_DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
# ENV_SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
# ENV_SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
# ENV_SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
# EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
# EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
# EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
# ENV_USER_NAME="${user_name:-$ENV_USER_NAME}"                      #
 | 
			
		||||
# ENV_USER_PASS="${user_pass:-$ENV_USER_PASS}"                      #
 | 
			
		||||
# ENV_ROOT_USER_NAME="${root_user_name:-$ENV_ROOT_USER_NAME}"       #
 | 
			
		||||
# ENV_ROOT_USER_PASS="${root_user_pass:-$ENV_ROOT_USER_PASS}"       #
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
  [ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] || return 1
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# script to start server
 | 
			
		||||
__run_start_script() {
 | 
			
		||||
  local user="${SERVICE_USER:-root}"
 | 
			
		||||
  local workdir="${WORKDIR:-$WORK_DIR}"
 | 
			
		||||
  local cmd="$EXEC_CMD_BIN $EXEC_CMD_ARGS"
 | 
			
		||||
  local lc_type="${LC_ALL:-${LC_CTYPE:-$LANG}}"
 | 
			
		||||
  local home="${workdir//\/root/\/tmp\/docker}"
 | 
			
		||||
  local path="/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
  if [ -z "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
    __post_execute 2>"/dev/stderr" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    echo "Initializing $SCRIPT_NAME has completed"
 | 
			
		||||
  else
 | 
			
		||||
    # ensure the command exists
 | 
			
		||||
    if [ ! -x "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is not a valid executable"
 | 
			
		||||
      exit 2
 | 
			
		||||
    fi
 | 
			
		||||
    # set working directories
 | 
			
		||||
    [ -z "$home" ] && home="${workdir:-/tmp/docker}"
 | 
			
		||||
    [ "$home" = "/root" ] && home="/tmp/docker"
 | 
			
		||||
    [ "$home" = "$workdir" ] && workdir=""
 | 
			
		||||
    # create needed directories
 | 
			
		||||
    [ -n "$home" ] && { [ -d "$home" ] || mkdir -p "$home"; }
 | 
			
		||||
    [ -n "$workdir" ] && { [ -d "$workdir" ] || mkdir -p "$workdir" || workdir="/tmp"; }
 | 
			
		||||
    [ -n "$workdir" ] && __cd "$workdir" || { [ -n "$home" ] && __cd "$home"; } || __cd "/tmp"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$home" ] && chmod -f 777 "$home"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$workdir" ] && chmod -f 777 "$workdir"
 | 
			
		||||
    # check and exit if already running
 | 
			
		||||
    if __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is already running" >&2
 | 
			
		||||
      exit 0
 | 
			
		||||
    else
 | 
			
		||||
      echo "Starting service: $EXEC_CMD_NAME $EXEC_CMD_ARGS"
 | 
			
		||||
      su_cmd touch "$SERVICE_PID_FILE"
 | 
			
		||||
      __post_execute 2>"/dev/stderr" 2>&1 |& tee -a "$LOG_DIR/init.txt" &>/dev/null &
 | 
			
		||||
      su_cmd env -i HOME="$home" LC_CTYPE="$lc_type" PATH="$path" USER="$user" sh -c "$cmd" || return 10
 | 
			
		||||
    fi
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# simple cd function
 | 
			
		||||
__cd() { mkdir -p "$1" && builtin cd "$1" || exit 1; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# process check functions
 | 
			
		||||
__pcheck() { [ -n "$(type -P pgrep 2>/dev/null)" ] && pgrep -x "$1" &>/dev/null && return 0 || return 10; }
 | 
			
		||||
__pgrep() { __pcheck "${1:-$EXEC_CMD_BIN}" || __ps aux 2>/dev/null | grep -Fw " ${1:-$EXEC_CMD_BIN}" | grep -qv ' grep' | grep '^' && return 0 || return 10; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# check if process is already running
 | 
			
		||||
__proc_check() {
 | 
			
		||||
  cmd_bin="$(type -P "${1:-$EXEC_CMD_BIN}")"
 | 
			
		||||
  cmd_name="$(basename "${cmd_bin:-$EXEC_CMD_NAME}")"
 | 
			
		||||
  if __pgrep "$cmd_bin" || __pgrep "$cmd_name"; then
 | 
			
		||||
    SERVICE_IS_RUNNING="true"
 | 
			
		||||
    touch "$SERVICE_PID_FILE"
 | 
			
		||||
    echo "$cmd_name is already running"
 | 
			
		||||
    return 0
 | 
			
		||||
  else
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow ENV_ variable - Import env file
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_EXIT_CODE=0                                           # default exit code
 | 
			
		||||
WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
PRE_EXEC_MESSAGE="${ENV_PRE_EXEC_MESSAGE:-$PRE_EXEC_MESSAGE}" # Show message before execute
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# application specific
 | 
			
		||||
EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
EXEC_CMD_BIN="$(type -P "$EXEC_CMD_BIN" || echo "$EXEC_CMD_BIN")" # set full path
 | 
			
		||||
EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
SERVICE_PID_FILE="/run/init.d/$EXEC_CMD_NAME.pid"                 # set the pid file location
 | 
			
		||||
EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
SERVICE_PID_NUMBER="$(__pgrep)"                                   # check if running
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# create auth directories
 | 
			
		||||
[ -n "$USER_FILE_PREFIX" ] && { [ -d "$USER_FILE_PREFIX" ] || mkdir -p "$USER_FILE_PREFIX"; }
 | 
			
		||||
[ -n "$ROOT_FILE_PREFIX" ] && { [ -d "$ROOT_FILE_PREFIX" ] || mkdir -p "$ROOT_FILE_PREFIX"; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow per init script usernames and passwords
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/name" ] && user_name="$(<"$ETC_DIR/auth/user/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/pass" ] && user_pass="$(<"$ETC_DIR/auth/user/pass")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/name" ] && root_user_name="$(<"$ETC_DIR/auth/root/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/pass" ] && root_user_pass="$(<"$ETC_DIR/auth/root/pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow setting initial users and passwords via environment
 | 
			
		||||
user_name="${user_name:-$ENV_USER_NAME}"
 | 
			
		||||
user_pass="${user_pass:-$ENV_USER_PASS}"
 | 
			
		||||
root_user_name="${root_user_name:-$ENV_ROOT_USER_NAME}"
 | 
			
		||||
root_user_pass="${root_user_pass:-$ENV_ROOT_USER_PASS}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set password to random if variable is random
 | 
			
		||||
if [ "$user_pass" = "random" ]; then
 | 
			
		||||
  user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
if [ "$root_user_pass" = "random" ]; then
 | 
			
		||||
  root_user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow variables via imports - Overwrite existing
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Only run check
 | 
			
		||||
if [ "$1" = "check" ]; then
 | 
			
		||||
  __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"
 | 
			
		||||
  exit $?
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show message if env exists
 | 
			
		||||
if [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  [ -n "$SERVICE_USER" ] && echo "Setting up service to run as $SERVICE_USER" || SERVICE_USER="root"
 | 
			
		||||
  [ -n "$SERVICE_PORT" ] && echo "${EXEC_CMD_NAME:-$EXEC_CMD_BIN} will be running on $SERVICE_PORT" || SERVICE_PORT=""
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set switch user command
 | 
			
		||||
if [ "$SERVICE_USER" = "root" ] || [ -z "$SERVICE_USER" ]; then
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P gosu)" ]; then
 | 
			
		||||
  su_cmd() { gosu $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P runuser)" ]; then
 | 
			
		||||
  su_cmd() { runuser -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P sudo)" ]; then
 | 
			
		||||
  su_cmd() { sudo -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P su)" ]; then
 | 
			
		||||
  su_cmd() { su -s /bin/sh - $SERVICE_USER -c "$@" || return 1; }
 | 
			
		||||
else
 | 
			
		||||
  echo "Can not switch to $SERVICE_USER: attempting to run as root"
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Change to working directory
 | 
			
		||||
[ -n "$WORKDIR" ] && [ -n "$EXEC_CMD_BIN" ] && __cd "$WORKDIR" && echo "Changed to $PWD"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show init message
 | 
			
		||||
__pre_message
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Initialize ssl
 | 
			
		||||
__update_ssl_conf
 | 
			
		||||
__update_ssl_certs
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Updating config files
 | 
			
		||||
__create_env
 | 
			
		||||
__update_conf_files
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run the pre execute commands
 | 
			
		||||
[ -n "$PRE_EXEC_MESSAGE" ] && echo "$PRE_EXEC_MESSAGE"
 | 
			
		||||
__pre_execute
 | 
			
		||||
__run_secure_function
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__run_start_script "$@" |& tee -a "/data/logs/entrypoint.log" &>/dev/null
 | 
			
		||||
if [ "$?" -ne 0 ] && [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  echo "Failed to execute: $EXEC_CMD_BIN $EXEC_CMD_ARGS" |& tee -a "/data/logs/entrypoint.log" "$LOG_DIR/init.txt"
 | 
			
		||||
  SERVICE_EXIT_CODE=10
 | 
			
		||||
  SERVICE_IS_RUNNING="false"
 | 
			
		||||
  rm -Rf "$SERVICE_PID_FILE"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
exit $SERVICE_EXIT_CODE
 | 
			
		||||
							
								
								
									
										414
									
								
								init/done/08-jekyll.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										414
									
								
								init/done/08-jekyll.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,414 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
 | 
			
		||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -o pipefail -x$DEBUGGER_OPTIONS || set -o pipefail
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
printf '%s\n' "# - - - Initializing jekyll - - - #"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_NAME="jekyll"
 | 
			
		||||
SCRIPT_NAME="$(basename "$0" 2>/dev/null)"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
export PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run trap command on exit
 | 
			
		||||
trap 'retVal=$?;[ "$SERVICE_IS_RUNNING" != "true" ] && [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE";exit $retVal' SIGINT SIGTERM EXIT
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# import the functions file
 | 
			
		||||
if [ -f "/usr/local/etc/docker/functions/entrypoint.sh" ]; then
 | 
			
		||||
  . "/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"
 | 
			
		||||
done
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Custom functions
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Show message before execute
 | 
			
		||||
PRE_EXEC_MESSAGE=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Default predefined variables
 | 
			
		||||
WORKDIR=""                # set working directory
 | 
			
		||||
DATA_DIR="/data"          # set data directory
 | 
			
		||||
WWW_DIR="/var/www/htdocs" # set the web root
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ETC_DIR="/etc/jekyll"     # set etc directory
 | 
			
		||||
CONF_DIR="/config/jekyll" # set config directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
RUN_DIR="/run/init.d"       # set scripts pid dir
 | 
			
		||||
LOG_DIR="/data/logs/jekyll" # set log directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ROOT_FILE_PREFIX="/config/secure/auth/root" # directory to save username/password for root user
 | 
			
		||||
USER_FILE_PREFIX="/config/secure/auth/user" # directory to save username/password for normal user
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set the database directory
 | 
			
		||||
DATABASE_DIR="${DATABASE_DIR_JEKYLL:-/data/db/jekyll}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional predefined variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# port which service is listening on
 | 
			
		||||
SERVICE_PORT="80"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# execute command variables
 | 
			
		||||
SERVICE_UID="0"                                                   # set the user id
 | 
			
		||||
SERVICE_USER="root"                                               # execute command as another user
 | 
			
		||||
EXEC_CMD_BIN="jekyll"                                             # command to execute
 | 
			
		||||
EXEC_CMD_ARGS="serve --force_polling -H 0.0.0.0 -P $SERVICE_PORT" # command arguments
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a web server
 | 
			
		||||
IS_WEB_SERVER="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a database server
 | 
			
		||||
IS_DATABASE_SERVICE="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# usernames
 | 
			
		||||
user_name="${JEKYLL_USER_NAME:-}"           # normal user name
 | 
			
		||||
root_user_name="${JEKYLL_ROOT_USER_NAME:-}" # root user name
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# passwords [password/random]
 | 
			
		||||
user_pass="${JEKYLL_USER_PASS_WORD:-}"      # normal user password
 | 
			
		||||
root_user_pass="${JEKYLL_ROOT_PASS_WORD:-}" # root user password
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Overwrite variables from files
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_name" ] && user_name="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && user_pass="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name" ] && root_user_name="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && root_user_pass="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Specifiy custom directories to be created
 | 
			
		||||
ADD_APPLICATION_FILES=""
 | 
			
		||||
ADD_APPLICATION_DIRS=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
APPLICATION_FILES="$LOG_DIR/jekyll.log"
 | 
			
		||||
APPLICATION_DIRS="$RUN_DIR $ETC_DIR $CONF_DIR $LOG_DIR"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__update_conf_files() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
 | 
			
		||||
  # delete files
 | 
			
		||||
  #__rm ""
 | 
			
		||||
 | 
			
		||||
  # define actions
 | 
			
		||||
 | 
			
		||||
  # create default directories
 | 
			
		||||
  for filedirs in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
    if [ -n "$filedirs" ] && [ ! -d "$filedirs" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating directory $filedirs with permissions 777"
 | 
			
		||||
        mkdir -p "$filedirs" && chmod -Rf 777 "$filedirs"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create default files
 | 
			
		||||
  for application_files in $ADD_APPLICATION_FILES $APPLICATION_FILES; do
 | 
			
		||||
    if [ -n "$application_files" ] && [ ! -e "$application_files" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating file $application_files with permissions 777"
 | 
			
		||||
        touch "$application_files" && chmod -Rf 777 "$application_files"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create directories if variable is yes"
 | 
			
		||||
  [ "$IS_WEB_SERVER" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $WWW_DIR" && { [ -d "$WWW_DIR" ] || { (echo "Creating directory $WWW_DIR with permissions 777" && mkdir -p "$WWW_DIR" && chmod -f 777 "$WWW_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  [ "$IS_DATABASE_SERVICE" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $DATABASE_DIR" && { [ -d "$DATABASE_DIR" ] || { (echo "Creating directory $DATABASE_DIR with permissions 777" && mkdir -p "$DATABASE_DIR" && chmod -f 777 "$DATABASE_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  # copy config files to system
 | 
			
		||||
  __file_copy "$CONF_DIR/." "$ETC_DIR/" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  # replace variables
 | 
			
		||||
  # __replace "" "" "$CONF_DIR/jekyll.conf"
 | 
			
		||||
  # replace variables recursively
 | 
			
		||||
  # __find_replace "" "" "$CONF_DIR/"
 | 
			
		||||
  # custom commands
 | 
			
		||||
 | 
			
		||||
  # other
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset application_files filedirs
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run before executing
 | 
			
		||||
__pre_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  [ -d "/app" ] && WORK_DIR="/app" || WORK_DIR="${WORKDIR:-$WWW_DIR}"
 | 
			
		||||
 | 
			
		||||
  # set user on files/folders
 | 
			
		||||
  if [ -n "$user" ] && [ "$user" != "root" ]; then
 | 
			
		||||
    if grep -s -q "$user:" "/etc/passwd"; then
 | 
			
		||||
      for permissions in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
        if [ -n "$permissions" ] && [ -e "$permissions" ]; then
 | 
			
		||||
          (chown -Rf $user:$user "$permissions" && echo "changed ownership on $permissions to $user") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
        fi
 | 
			
		||||
      done
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  [ -f "$WORK_DIR/.env" ] && . "$WORK_DIR/.env"
 | 
			
		||||
  if [ ! -f "$WORK_DIR/.nojekyll" ] || [ ! -f "$WORK_DIR/Gemfile" ] || [ ! -f "$WORK_DIR/_config.yml" ]; then
 | 
			
		||||
    echo "NOTE: I don't see a Gemfile so I don't think there's a jekyll site here"
 | 
			
		||||
    echo "Either you didn't mount a volume, or you mounted it incorrectly."
 | 
			
		||||
    echo "Be sure you're in your jekyll site root and use something like this to launch"
 | 
			
		||||
    echo ""
 | 
			
		||||
    echo "docker run --name jekyll --rm -p 15999:$SERVICE_PORT -v \$PWD:/app casjaysdevdocker/jekyll"
 | 
			
		||||
    exit 1
 | 
			
		||||
  else
 | 
			
		||||
    mkdir -p "$WORK_DIR" && cd "$WORK_DIR" || exit 1
 | 
			
		||||
    if [ ! -f "$workdir/.nojekyll" ]; then
 | 
			
		||||
      bundle install --retry 5 --jobs 20
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset filesperms filename
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run after executing
 | 
			
		||||
__post_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  sleep 60                           # how long to wait before executing
 | 
			
		||||
  echo "Running post commands"       # message
 | 
			
		||||
  # execute commands
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__pre_message() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
  [ -n "$user_name" ] && echo "username:               $user_name" && echo "$user_name" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$user_pass" ] && echo "password:               saved to ${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$user_pass" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
  [ -n "$root_user_name" ] && echo "root username:     $root_user_name" && echo "$root_user_name" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$root_user_pass" ] && echo "root password:     saved to ${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$root_user_pass" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to setup ssl support
 | 
			
		||||
__update_ssl_conf() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__create_env() {
 | 
			
		||||
  cat <<EOF | tee "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" &>/dev/null
 | 
			
		||||
# ENV_WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
# ENV_WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
# ENV_ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
# ENV_DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
# ENV_CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
# ENV_DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
# ENV_SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
# ENV_SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
# ENV_SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
# EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
# EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
# EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
# ENV_USER_NAME="${user_name:-$ENV_USER_NAME}"                      #
 | 
			
		||||
# ENV_USER_PASS="${user_pass:-$ENV_USER_PASS}"                      #
 | 
			
		||||
# ENV_ROOT_USER_NAME="${root_user_name:-$ENV_ROOT_USER_NAME}"       #
 | 
			
		||||
# ENV_ROOT_USER_PASS="${root_user_pass:-$ENV_ROOT_USER_PASS}"       #
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
  [ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] || return 1
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# script to start server
 | 
			
		||||
__run_start_script() {
 | 
			
		||||
  local user="${SERVICE_USER:-root}"
 | 
			
		||||
  local workdir="${WORKDIR:-$WORK_DIR}"
 | 
			
		||||
  local cmd="$EXEC_CMD_BIN $EXEC_CMD_ARGS"
 | 
			
		||||
  local lc_type="${LC_ALL:-${LC_CTYPE:-$LANG}}"
 | 
			
		||||
  local home="${workdir//\/root/\/tmp\/docker}"
 | 
			
		||||
  local path="/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
  if [ -z "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
    __post_execute 2>"/dev/stderr" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    echo "Initializing $SCRIPT_NAME has completed"
 | 
			
		||||
  else
 | 
			
		||||
    # ensure the command exists
 | 
			
		||||
    if [ ! -x "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is not a valid executable"
 | 
			
		||||
      exit 2
 | 
			
		||||
    fi
 | 
			
		||||
    # set working directories
 | 
			
		||||
    [ -z "$home" ] && home="${workdir:-/tmp/docker}"
 | 
			
		||||
    [ "$home" = "/root" ] && home="/tmp/docker"
 | 
			
		||||
    [ "$home" = "$workdir" ] && workdir=""
 | 
			
		||||
    # create needed directories
 | 
			
		||||
    [ -n "$home" ] && { [ -d "$home" ] || mkdir -p "$home"; }
 | 
			
		||||
    [ -n "$workdir" ] && { [ -d "$workdir" ] || mkdir -p "$workdir" || workdir="/tmp"; }
 | 
			
		||||
    [ -n "$workdir" ] && __cd "$workdir" || { [ -n "$home" ] && __cd "$home"; } || __cd "/tmp"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$home" ] && chmod -f 777 "$home"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$workdir" ] && chmod -f 777 "$workdir"
 | 
			
		||||
    # check and exit if already running
 | 
			
		||||
    if __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is already running" >&2
 | 
			
		||||
      exit 0
 | 
			
		||||
    else
 | 
			
		||||
      echo "Starting service: $EXEC_CMD_NAME $EXEC_CMD_ARGS"
 | 
			
		||||
      su_cmd touch "$SERVICE_PID_FILE"
 | 
			
		||||
      __post_execute 2>"/dev/stderr" 2>&1 |& tee -a "$LOG_DIR/init.txt" &>/dev/null &
 | 
			
		||||
      su_cmd env -i HOME="$home" LC_CTYPE="$lc_type" PATH="$path" USER="$user" sh -c "$cmd" || return 10
 | 
			
		||||
    fi
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# simple cd function
 | 
			
		||||
__cd() { mkdir -p "$1" && builtin cd "$1" || exit 1; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# process check functions
 | 
			
		||||
__pcheck() { [ -n "$(type -P pgrep 2>/dev/null)" ] && pgrep -x "$1" &>/dev/null && return 0 || return 10; }
 | 
			
		||||
__pgrep() { __pcheck "${1:-$EXEC_CMD_BIN}" || __ps aux 2>/dev/null | grep -Fw " ${1:-$EXEC_CMD_BIN}" | grep -qv ' grep' | grep '^' && return 0 || return 10; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# check if process is already running
 | 
			
		||||
__proc_check() {
 | 
			
		||||
  cmd_bin="$(type -P "${1:-$EXEC_CMD_BIN}")"
 | 
			
		||||
  cmd_name="$(basename "${cmd_bin:-$EXEC_CMD_NAME}")"
 | 
			
		||||
  if __pgrep "$cmd_bin" || __pgrep "$cmd_name"; then
 | 
			
		||||
    SERVICE_IS_RUNNING="true"
 | 
			
		||||
    touch "$SERVICE_PID_FILE"
 | 
			
		||||
    echo "$cmd_name is already running"
 | 
			
		||||
    return 0
 | 
			
		||||
  else
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow ENV_ variable - Import env file
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_EXIT_CODE=0                                           # default exit code
 | 
			
		||||
WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
PRE_EXEC_MESSAGE="${ENV_PRE_EXEC_MESSAGE:-$PRE_EXEC_MESSAGE}" # Show message before execute
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# application specific
 | 
			
		||||
EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
EXEC_CMD_BIN="$(type -P "$EXEC_CMD_BIN" || echo "$EXEC_CMD_BIN")" # set full path
 | 
			
		||||
EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
SERVICE_PID_FILE="/run/init.d/$EXEC_CMD_NAME.pid"                 # set the pid file location
 | 
			
		||||
EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
SERVICE_PID_NUMBER="$(__pgrep)"                                   # check if running
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# create auth directories
 | 
			
		||||
[ -n "$USER_FILE_PREFIX" ] && { [ -d "$USER_FILE_PREFIX" ] || mkdir -p "$USER_FILE_PREFIX"; }
 | 
			
		||||
[ -n "$ROOT_FILE_PREFIX" ] && { [ -d "$ROOT_FILE_PREFIX" ] || mkdir -p "$ROOT_FILE_PREFIX"; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow per init script usernames and passwords
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/name" ] && user_name="$(<"$ETC_DIR/auth/user/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/pass" ] && user_pass="$(<"$ETC_DIR/auth/user/pass")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/name" ] && root_user_name="$(<"$ETC_DIR/auth/root/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/pass" ] && root_user_pass="$(<"$ETC_DIR/auth/root/pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow setting initial users and passwords via environment
 | 
			
		||||
user_name="${user_name:-$ENV_USER_NAME}"
 | 
			
		||||
user_pass="${user_pass:-$ENV_USER_PASS}"
 | 
			
		||||
root_user_name="${root_user_name:-$ENV_ROOT_USER_NAME}"
 | 
			
		||||
root_user_pass="${root_user_pass:-$ENV_ROOT_USER_PASS}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set password to random if variable is random
 | 
			
		||||
if [ "$user_pass" = "random" ]; then
 | 
			
		||||
  user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
if [ "$root_user_pass" = "random" ]; then
 | 
			
		||||
  root_user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow variables via imports - Overwrite existing
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Only run check
 | 
			
		||||
if [ "$1" = "check" ]; then
 | 
			
		||||
  __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"
 | 
			
		||||
  exit $?
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show message if env exists
 | 
			
		||||
if [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  [ -n "$SERVICE_USER" ] && echo "Setting up service to run as $SERVICE_USER" || SERVICE_USER="root"
 | 
			
		||||
  [ -n "$SERVICE_PORT" ] && echo "${EXEC_CMD_NAME:-$EXEC_CMD_BIN} will be running on $SERVICE_PORT" || SERVICE_PORT=""
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set switch user command
 | 
			
		||||
if [ "$SERVICE_USER" = "root" ] || [ -z "$SERVICE_USER" ]; then
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P gosu)" ]; then
 | 
			
		||||
  su_cmd() { gosu $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P runuser)" ]; then
 | 
			
		||||
  su_cmd() { runuser -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P sudo)" ]; then
 | 
			
		||||
  su_cmd() { sudo -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P su)" ]; then
 | 
			
		||||
  su_cmd() { su -s /bin/sh - $SERVICE_USER -c "$@" || return 1; }
 | 
			
		||||
else
 | 
			
		||||
  echo "Can not switch to $SERVICE_USER: attempting to run as root"
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Change to working directory
 | 
			
		||||
[ -n "$WORKDIR" ] && [ -n "$EXEC_CMD_BIN" ] && __cd "$WORKDIR" && echo "Changed to $PWD"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show init message
 | 
			
		||||
__pre_message
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Initialize ssl
 | 
			
		||||
__update_ssl_conf
 | 
			
		||||
__update_ssl_certs
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Updating config files
 | 
			
		||||
__create_env
 | 
			
		||||
__update_conf_files
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run the pre execute commands
 | 
			
		||||
[ -n "$PRE_EXEC_MESSAGE" ] && echo "$PRE_EXEC_MESSAGE"
 | 
			
		||||
__pre_execute
 | 
			
		||||
__run_secure_function
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__run_start_script "$@" |& tee -a "/data/logs/entrypoint.log" &>/dev/null
 | 
			
		||||
if [ "$?" -ne 0 ] && [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  echo "Failed to execute: $EXEC_CMD_BIN $EXEC_CMD_ARGS" |& tee -a "/data/logs/entrypoint.log" "$LOG_DIR/init.txt"
 | 
			
		||||
  SERVICE_EXIT_CODE=10
 | 
			
		||||
  SERVICE_IS_RUNNING="false"
 | 
			
		||||
  rm -Rf "$SERVICE_PID_FILE"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
exit $SERVICE_EXIT_CODE
 | 
			
		||||
							
								
								
									
										401
									
								
								init/done/09-ampache.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										401
									
								
								init/done/09-ampache.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,401 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
 | 
			
		||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -o pipefail -x$DEBUGGER_OPTIONS || set -o pipefail
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
printf '%s\n' "# - - - Initializing ampache - - - #"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_NAME="ampache"
 | 
			
		||||
SCRIPT_NAME="$(basename "$0" 2>/dev/null)"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
export PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run trap command on exit
 | 
			
		||||
trap 'retVal=$?;[ "$SERVICE_IS_RUNNING" != "true" ] && [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE";exit $retVal' SIGINT SIGTERM EXIT
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# import the functions file
 | 
			
		||||
if [ -f "/usr/local/etc/docker/functions/entrypoint.sh" ]; then
 | 
			
		||||
  . "/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"
 | 
			
		||||
done
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Custom functions
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Show message before execute
 | 
			
		||||
PRE_EXEC_MESSAGE=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Default predefined variables
 | 
			
		||||
WORKDIR=""                 # set working directory
 | 
			
		||||
DATA_DIR="/data"           # set data directory
 | 
			
		||||
WWW_DIR="/var/www/ampache" # set the web root
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ETC_DIR="$WWW_DIR/config"  # set etc directory
 | 
			
		||||
CONF_DIR="/config/ampache" # set config directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
RUN_DIR="/run/init.d"        # set scripts pid dir
 | 
			
		||||
LOG_DIR="/data/logs/ampache" # set log directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ROOT_FILE_PREFIX="/config/secure/auth/root" # directory to save username/password for root user
 | 
			
		||||
USER_FILE_PREFIX="/config/secure/auth/user" # directory to save username/password for normal user
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set the database directory
 | 
			
		||||
DATABASE_DIR="${DATABASE_DIR_AMPACHE:-/data/db/ampache}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional predefined variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# port which service is listening on
 | 
			
		||||
SERVICE_PORT=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# execute command variables
 | 
			
		||||
SERVICE_UID="0"     # set the user id
 | 
			
		||||
SERVICE_USER="root" # execute command as another user
 | 
			
		||||
EXEC_CMD_BIN=""     # command to execute
 | 
			
		||||
EXEC_CMD_ARGS=""    # command arguments
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a web server
 | 
			
		||||
IS_WEB_SERVER="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a database server
 | 
			
		||||
IS_DATABASE_SERVICE="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# import database password
 | 
			
		||||
[ -z "$root_user_pass" ] && [ -f "${ROOT_FILE_PREFIX}/mariadb_pass" ] && root_user_pass="$(<"${ROOT_FILE_PREFIX}/mariadb_pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Specifiy custom directories to be created
 | 
			
		||||
ADD_APPLICATION_FILES=""
 | 
			
		||||
ADD_APPLICATION_DIRS=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
APPLICATION_FILES="$LOG_DIR/ampache.log"
 | 
			
		||||
APPLICATION_DIRS="$RUN_DIR $ETC_DIR $CONF_DIR $LOG_DIR $DATA_DIR/art $DATA_DIR/metadata"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__update_conf_files() {
 | 
			
		||||
  local exitCode=0                          # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}"        # specifiy different user
 | 
			
		||||
  local sysname="${SERVER_NAME:-$HOSTNAME}" # set hostname
 | 
			
		||||
 | 
			
		||||
  if [ -f "/config/secure/ampache_secret.key" ]; then
 | 
			
		||||
    secret_key="$(<"/config/secure/ampache_secret.key")"
 | 
			
		||||
  else
 | 
			
		||||
    secret_key="$(__random_password 32)"
 | 
			
		||||
    echo "$secret_key" >"/config/secure/ampache_secret.key"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # create default directories
 | 
			
		||||
  for filedirs in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
    if [ -n "$filedirs" ] && [ ! -d "$filedirs" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating directory $filedirs with permissions 777"
 | 
			
		||||
        mkdir -p "$filedirs" && chmod -Rf 777 "$filedirs"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create default files
 | 
			
		||||
  for application_files in $ADD_APPLICATION_FILES $APPLICATION_FILES; do
 | 
			
		||||
    if [ -n "$application_files" ] && [ ! -e "$application_files" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating file $application_files with permissions 777"
 | 
			
		||||
        touch "$application_files" && chmod -Rf 777 "$application_files"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create directories if variable is yes"
 | 
			
		||||
  [ "$IS_WEB_SERVER" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $WWW_DIR" && { [ -d "$WWW_DIR" ] || { (echo "Creating directory $WWW_DIR with permissions 777" && mkdir -p "$WWW_DIR" && chmod -f 777 "$WWW_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  [ "$IS_DATABASE_SERVICE" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $DATABASE_DIR" && { [ -d "$DATABASE_DIR" ] || { (echo "Creating directory $DATABASE_DIR with permissions 777" && mkdir -p "$DATABASE_DIR" && chmod -f 777 "$DATABASE_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  # replace variables
 | 
			
		||||
  if [ -f "$CONF_DIR/ampache.cfg.php" ]; then
 | 
			
		||||
    __sed "s|REPLACE_DB_HOST|127.0.0.1|g" "$CONF_DIR/ampache.cfg.php"
 | 
			
		||||
    __sed "s|REPLACE_SECURITY_CODE|$secret_key|" "$CONF_DIR/ampache.cfg.php"
 | 
			
		||||
    [ -n "$root_user_pass" ] && __sed 's|REPLACE_PASSWORD|'$root_user_pass'|g' "$CONF_DIR/ampache.cfg.php"
 | 
			
		||||
  else
 | 
			
		||||
    __sed "s|REPLACE_DB_HOST|127.0.0.1|g" "$ETC_DIR/ampache.cfg.php.dist"
 | 
			
		||||
    __sed "s|REPLACE_SECURITY_CODE|$secret_key|" "$ETC_DIR/ampache.cfg.php.dist"
 | 
			
		||||
    [ -n "$root_user_pass" ] && __sed 's|REPLACE_PASSWORD|'$root_user_pass'|g' "$ETC_DIR/ampache.cfg.php.dist"
 | 
			
		||||
  fi
 | 
			
		||||
  # copy config files to system
 | 
			
		||||
  __file_copy "$CONF_DIR/." "$ETC_DIR/" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  # custom commands
 | 
			
		||||
 | 
			
		||||
  # other
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset application_files filedirs
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run before executing
 | 
			
		||||
__pre_execute() {
 | 
			
		||||
  local exitCode=0                     # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-apache}" # specifiy different user
 | 
			
		||||
 | 
			
		||||
  # set user on files/folders
 | 
			
		||||
  if [ -n "$user" ] && [ "$user" != "root" ]; then
 | 
			
		||||
    if grep -s -q "$user:" "/etc/passwd"; then
 | 
			
		||||
      for permissions in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
        if [ -n "$permissions" ] && [ -e "$permissions" ]; then
 | 
			
		||||
          (chown -Rf $user:$user "$permissions" && echo "changed ownership on $permissions to $user") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
        fi
 | 
			
		||||
      done
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset filesperms filename
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run after executing
 | 
			
		||||
__post_execute() {
 | 
			
		||||
  local exitCode=0                     # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-apache}" # specifiy different user
 | 
			
		||||
  sleep 60                             # how long to wait before executing
 | 
			
		||||
  echo "Running post commands"         # message
 | 
			
		||||
 | 
			
		||||
  (
 | 
			
		||||
    while :; do [ -f "$ETC_DIR/ampache.cfg.php" ] && cp -Rf "$ETC_DIR/ampache.cfg.php" "$CONF_DIR/ampache.cfg.php" && break || sleep 120; done
 | 
			
		||||
    secret_key="$(grep --no-filename -s "secret_key = " "$ETC_DIR/ampache.cfg.php" | awk -F ' = ' '{print $2}' | sed 's| ||g;s|"||g')"
 | 
			
		||||
    [ -n "$secret_key" ] && echo "$secret_key" >"/config/secure/ampache_secret.key"
 | 
			
		||||
  )
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__pre_message() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
  [ -n "$user_name" ] && echo "username:               $user_name" && echo "$user_name" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$user_pass" ] && echo "password:               saved to ${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$user_pass" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
  [ -n "$root_user_name" ] && echo "root username:     $root_user_name" && echo "$root_user_name" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$root_user_pass" ] && echo "root password:     saved to ${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$root_user_pass" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to setup ssl support
 | 
			
		||||
__update_ssl_conf() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__create_env() {
 | 
			
		||||
  cat <<EOF | tee "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" &>/dev/null
 | 
			
		||||
# ENV_WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
# ENV_WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
# ENV_ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
# ENV_DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
# ENV_CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
# ENV_DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
# ENV_SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
# ENV_SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
# ENV_SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
# EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
# EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
# EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
# ENV_USER_NAME="${user_name:-$ENV_USER_NAME}"                      #
 | 
			
		||||
# ENV_USER_PASS="${user_pass:-$ENV_USER_PASS}"                      #
 | 
			
		||||
# ENV_ROOT_USER_NAME="${root_user_name:-$ENV_ROOT_USER_NAME}"       #
 | 
			
		||||
# ENV_ROOT_USER_PASS="${root_user_pass:-$ENV_ROOT_USER_PASS}"       #
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
  [ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] || return 1
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# script to start server
 | 
			
		||||
__run_start_script() {
 | 
			
		||||
  local user="${SERVICE_USER:-root}"
 | 
			
		||||
  local workdir="${WORKDIR:-$WORK_DIR}"
 | 
			
		||||
  local cmd="$EXEC_CMD_BIN $EXEC_CMD_ARGS"
 | 
			
		||||
  local lc_type="${LC_ALL:-${LC_CTYPE:-$LANG}}"
 | 
			
		||||
  local home="${workdir//\/root/\/tmp\/docker}"
 | 
			
		||||
  local path="/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
  if [ -z "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
    __post_execute 2>"/dev/stderr" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    echo "Initializing $SCRIPT_NAME has completed"
 | 
			
		||||
  else
 | 
			
		||||
    # ensure the command exists
 | 
			
		||||
    if [ ! -x "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is not a valid executable"
 | 
			
		||||
      exit 2
 | 
			
		||||
    fi
 | 
			
		||||
    # set working directories
 | 
			
		||||
    [ -z "$home" ] && home="${workdir:-/tmp/docker}"
 | 
			
		||||
    [ "$home" = "/root" ] && home="/tmp/docker"
 | 
			
		||||
    [ "$home" = "$workdir" ] && workdir=""
 | 
			
		||||
    # create needed directories
 | 
			
		||||
    [ -n "$home" ] && { [ -d "$home" ] || mkdir -p "$home"; }
 | 
			
		||||
    [ -n "$workdir" ] && { [ -d "$workdir" ] || mkdir -p "$workdir" || workdir="/tmp"; }
 | 
			
		||||
    [ -n "$workdir" ] && __cd "$workdir" || { [ -n "$home" ] && __cd "$home"; } || __cd "/tmp"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$home" ] && chmod -f 777 "$home"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$workdir" ] && chmod -f 777 "$workdir"
 | 
			
		||||
    # check and exit if already running
 | 
			
		||||
    if __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is already running" >&2
 | 
			
		||||
      exit 0
 | 
			
		||||
    else
 | 
			
		||||
      echo "Starting service: $EXEC_CMD_NAME $EXEC_CMD_ARGS"
 | 
			
		||||
      su_cmd touch "$SERVICE_PID_FILE"
 | 
			
		||||
      __post_execute 2>"/dev/stderr" 2>&1 |& tee -a "$LOG_DIR/init.txt" &>/dev/null &
 | 
			
		||||
      su_cmd env -i HOME="$home" LC_CTYPE="$lc_type" PATH="$path" USER="$user" sh -c "$cmd" || return 10
 | 
			
		||||
    fi
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# simple cd function
 | 
			
		||||
__cd() { mkdir -p "$1" && builtin cd "$1" || exit 1; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# process check functions
 | 
			
		||||
__pcheck() { [ -n "$(type -P pgrep 2>/dev/null)" ] && pgrep -x "$1" &>/dev/null && return 0 || return 10; }
 | 
			
		||||
__pgrep() { __pcheck "${1:-$EXEC_CMD_BIN}" || __ps aux 2>/dev/null | grep -Fw " ${1:-$EXEC_CMD_BIN}" | grep -qv ' grep' | grep '^' && return 0 || return 10; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# check if process is already running
 | 
			
		||||
__proc_check() {
 | 
			
		||||
  cmd_bin="$(type -P "${1:-$EXEC_CMD_BIN}")"
 | 
			
		||||
  cmd_name="$(basename "${cmd_bin:-$EXEC_CMD_NAME}")"
 | 
			
		||||
  if __pgrep "$cmd_bin" || __pgrep "$cmd_name"; then
 | 
			
		||||
    SERVICE_IS_RUNNING="true"
 | 
			
		||||
    touch "$SERVICE_PID_FILE"
 | 
			
		||||
    echo "$cmd_name is already running"
 | 
			
		||||
    return 0
 | 
			
		||||
  else
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow ENV_ variable - Import env file
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_EXIT_CODE=0                                           # default exit code
 | 
			
		||||
WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
PRE_EXEC_MESSAGE="${ENV_PRE_EXEC_MESSAGE:-$PRE_EXEC_MESSAGE}" # Show message before execute
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# application specific
 | 
			
		||||
EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
EXEC_CMD_BIN="$(type -P "$EXEC_CMD_BIN" || echo "$EXEC_CMD_BIN")" # set full path
 | 
			
		||||
EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
SERVICE_PID_FILE="/run/init.d/$EXEC_CMD_NAME.pid"                 # set the pid file location
 | 
			
		||||
EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
SERVICE_PID_NUMBER="$(__pgrep)"                                   # check if running
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# create auth directories
 | 
			
		||||
[ -n "$USER_FILE_PREFIX" ] && { [ -d "$USER_FILE_PREFIX" ] || mkdir -p "$USER_FILE_PREFIX"; }
 | 
			
		||||
[ -n "$ROOT_FILE_PREFIX" ] && { [ -d "$ROOT_FILE_PREFIX" ] || mkdir -p "$ROOT_FILE_PREFIX"; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow per init script usernames and passwords
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/name" ] && user_name="$(<"$ETC_DIR/auth/user/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/pass" ] && user_pass="$(<"$ETC_DIR/auth/user/pass")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/name" ] && root_user_name="$(<"$ETC_DIR/auth/root/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/pass" ] && root_user_pass="$(<"$ETC_DIR/auth/root/pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow setting initial users and passwords via environment
 | 
			
		||||
user_name="${user_name:-$ENV_USER_NAME}"
 | 
			
		||||
user_pass="${user_pass:-$ENV_USER_PASS}"
 | 
			
		||||
root_user_name="${root_user_name:-$ENV_ROOT_USER_NAME}"
 | 
			
		||||
root_user_pass="${root_user_pass:-$ENV_ROOT_USER_PASS}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set password to random if variable is random
 | 
			
		||||
if [ "$user_pass" = "random" ]; then
 | 
			
		||||
  user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
if [ "$root_user_pass" = "random" ]; then
 | 
			
		||||
  root_user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow variables via imports - Overwrite existing
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Only run check
 | 
			
		||||
if [ "$1" = "check" ]; then
 | 
			
		||||
  __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"
 | 
			
		||||
  exit $?
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show message if env exists
 | 
			
		||||
if [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  [ -n "$SERVICE_USER" ] && echo "Setting up service to run as $SERVICE_USER" || SERVICE_USER="root"
 | 
			
		||||
  [ -n "$SERVICE_PORT" ] && echo "${EXEC_CMD_NAME:-$EXEC_CMD_BIN} will be running on $SERVICE_PORT" || SERVICE_PORT=""
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set switch user command
 | 
			
		||||
if [ "$SERVICE_USER" = "root" ] || [ -z "$SERVICE_USER" ]; then
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P gosu)" ]; then
 | 
			
		||||
  su_cmd() { gosu $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P runuser)" ]; then
 | 
			
		||||
  su_cmd() { runuser -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P sudo)" ]; then
 | 
			
		||||
  su_cmd() { sudo -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P su)" ]; then
 | 
			
		||||
  su_cmd() { su -s /bin/sh - $SERVICE_USER -c "$@" || return 1; }
 | 
			
		||||
else
 | 
			
		||||
  echo "Can not switch to $SERVICE_USER: attempting to run as root"
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Change to working directory
 | 
			
		||||
[ -n "$WORKDIR" ] && [ -n "$EXEC_CMD_BIN" ] && __cd "$WORKDIR" && echo "Changed to $PWD"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show init message
 | 
			
		||||
__pre_message
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Initialize ssl
 | 
			
		||||
__update_ssl_conf
 | 
			
		||||
__update_ssl_certs
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Updating config files
 | 
			
		||||
__create_env
 | 
			
		||||
__update_conf_files
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run the pre execute commands
 | 
			
		||||
[ -n "$PRE_EXEC_MESSAGE" ] && echo "$PRE_EXEC_MESSAGE"
 | 
			
		||||
__pre_execute
 | 
			
		||||
__run_secure_function
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__run_start_script "$@" |& tee -a "/data/logs/entrypoint.log" &>/dev/null
 | 
			
		||||
if [ "$?" -ne 0 ] && [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  echo "Failed to execute: $EXEC_CMD_BIN $EXEC_CMD_ARGS" |& tee -a "/data/logs/entrypoint.log" "$LOG_DIR/init.txt"
 | 
			
		||||
  SERVICE_EXIT_CODE=10
 | 
			
		||||
  SERVICE_IS_RUNNING="false"
 | 
			
		||||
  rm -Rf "$SERVICE_PID_FILE"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
exit $SERVICE_EXIT_CODE
 | 
			
		||||
							
								
								
									
										406
									
								
								init/done/09-apprise.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										406
									
								
								init/done/09-apprise.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,406 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
 | 
			
		||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -o pipefail -x$DEBUGGER_OPTIONS || set -o pipefail
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
printf '%s\n' "# - - - Initializing apprise - - - #"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_NAME="apprise"
 | 
			
		||||
SCRIPT_NAME="$(basename "$0" 2>/dev/null)"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
export PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run trap command on exit
 | 
			
		||||
trap 'retVal=$?;[ "$SERVICE_IS_RUNNING" != "true" ] && [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE";exit $retVal' SIGINT SIGTERM EXIT
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# import the functions file
 | 
			
		||||
if [ -f "/usr/local/etc/docker/functions/entrypoint.sh" ]; then
 | 
			
		||||
  . "/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"
 | 
			
		||||
done
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Custom functions
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Show message before execute
 | 
			
		||||
PRE_EXEC_MESSAGE=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Default predefined variables
 | 
			
		||||
WORKDIR=""                 # set working directory
 | 
			
		||||
DATA_DIR="/data"           # set data directory
 | 
			
		||||
WWW_DIR="/data/htdocs/www" # set the web root
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ETC_DIR="/etc/apprise"     # set etc directory
 | 
			
		||||
CONF_DIR="/config/apprise" # set config directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
RUN_DIR="/run/init.d"        # set scripts pid dir
 | 
			
		||||
LOG_DIR="/data/logs/apprise" # set log directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ROOT_FILE_PREFIX="/config/secure/auth/root" # directory to save username/password for root user
 | 
			
		||||
USER_FILE_PREFIX="/config/secure/auth/user" # directory to save username/password for normal user
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set the database directory
 | 
			
		||||
DATABASE_DIR="${DATABASE_DIR_APPRISE:-/data/db/apprise}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional predefined variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# port which service is listening on
 | 
			
		||||
SERVICE_PORT=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# execute command variables
 | 
			
		||||
SERVICE_UID="0"                                                                                               # set the user id
 | 
			
		||||
SERVICE_USER="root"                                                                                           # execute command as another user
 | 
			
		||||
EXEC_CMD_BIN="apprise"                                                                                        # command to execute
 | 
			
		||||
EXEC_CMD_ARGS="gunicorn -c /opt/apprise/webapp/gunicorn.conf.py -b :8080 --worker-tmp-dir /dev/shm core.wsgi" # command arguments
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a web server
 | 
			
		||||
IS_WEB_SERVER="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a database server
 | 
			
		||||
IS_DATABASE_SERVICE="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# usernames
 | 
			
		||||
user_name="${APPRISE_USER_NAME:-}"           # normal user name
 | 
			
		||||
root_user_name="${APPRISE_ROOT_USER_NAME:-}" # root user name
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# passwords [password/random]
 | 
			
		||||
user_pass="${APPRISE_USER_PASS_WORD:-}"      # normal user password
 | 
			
		||||
root_user_pass="${APPRISE_ROOT_PASS_WORD:-}" # root user password
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Overwrite variables from files
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_name" ] && user_name="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && user_pass="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name" ] && root_user_name="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && root_user_pass="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Specifiy custom directories to be created
 | 
			
		||||
ADD_APPLICATION_FILES=""
 | 
			
		||||
ADD_APPLICATION_DIRS=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
APPLICATION_FILES="$LOG_DIR/apprise.log"
 | 
			
		||||
APPLICATION_DIRS="$RUN_DIR $ETC_DIR $CONF_DIR $LOG_DIR"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__update_conf_files() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
 | 
			
		||||
  # delete files
 | 
			
		||||
  #__rm ""
 | 
			
		||||
 | 
			
		||||
  # define actions
 | 
			
		||||
 | 
			
		||||
  # create default directories
 | 
			
		||||
  for filedirs in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
    if [ -n "$filedirs" ] && [ ! -d "$filedirs" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating directory $filedirs with permissions 777"
 | 
			
		||||
        mkdir -p "$filedirs" && chmod -Rf 777 "$filedirs"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create default files
 | 
			
		||||
  for application_files in $ADD_APPLICATION_FILES $APPLICATION_FILES; do
 | 
			
		||||
    if [ -n "$application_files" ] && [ ! -e "$application_files" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating file $application_files with permissions 777"
 | 
			
		||||
        touch "$application_files" && chmod -Rf 777 "$application_files"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create directories if variable is yes"
 | 
			
		||||
  [ "$IS_WEB_SERVER" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $WWW_DIR" && { [ -d "$WWW_DIR" ] || { (echo "Creating directory $WWW_DIR with permissions 777" && mkdir -p "$WWW_DIR" && chmod -f 777 "$WWW_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  [ "$IS_DATABASE_SERVICE" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $DATABASE_DIR" && { [ -d "$DATABASE_DIR" ] || { (echo "Creating directory $DATABASE_DIR with permissions 777" && mkdir -p "$DATABASE_DIR" && chmod -f 777 "$DATABASE_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  # copy config files to system
 | 
			
		||||
  __file_copy "$CONF_DIR/." "$ETC_DIR/" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  # replace variables
 | 
			
		||||
  # __replace "" "" "$CONF_DIR/apprise.conf"
 | 
			
		||||
  # replace variables recursively
 | 
			
		||||
  # __find_replace "" "" "$CONF_DIR/"
 | 
			
		||||
  # custom commands
 | 
			
		||||
 | 
			
		||||
  # other
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset application_files filedirs
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run before executing
 | 
			
		||||
__pre_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  # define commands
 | 
			
		||||
 | 
			
		||||
  # execute if directories is empty
 | 
			
		||||
  #__is_dir_empty "" &&
 | 
			
		||||
 | 
			
		||||
  # create user if needed
 | 
			
		||||
  # __create_service_user "$user" "/home/$user" "${USER_GID:-${USER_UID:-1000}"
 | 
			
		||||
  # set user on files/folders
 | 
			
		||||
  if [ -n "$user" ] && [ "$user" != "root" ]; then
 | 
			
		||||
    if grep -s -q "$user:" "/etc/passwd"; then
 | 
			
		||||
      for permissions in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
        if [ -n "$permissions" ] && [ -e "$permissions" ]; then
 | 
			
		||||
          (chown -Rf $user:$user "$permissions" && echo "changed ownership on $permissions to $user") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
        fi
 | 
			
		||||
      done
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset filesperms filename
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run after executing
 | 
			
		||||
__post_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  sleep 60                           # how long to wait before executing
 | 
			
		||||
  echo "Running post commands"       # message
 | 
			
		||||
  # execute commands
 | 
			
		||||
 | 
			
		||||
  mailrise /config/mailrise.conf &
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__pre_message() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
  [ -n "$user_name" ] && echo "username:               $user_name" && echo "$user_name" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$user_pass" ] && echo "password:               saved to ${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$user_pass" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
  [ -n "$root_user_name" ] && echo "root username:     $root_user_name" && echo "$root_user_name" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$root_user_pass" ] && echo "root password:     saved to ${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$root_user_pass" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to setup ssl support
 | 
			
		||||
__update_ssl_conf() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__create_env() {
 | 
			
		||||
  cat <<EOF | tee "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" &>/dev/null
 | 
			
		||||
# ENV_WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
# ENV_WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
# ENV_ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
# ENV_DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
# ENV_CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
# ENV_DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
# ENV_SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
# ENV_SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
# ENV_SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
# EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
# EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
# EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
# ENV_USER_NAME="${user_name:-$ENV_USER_NAME}"                      #
 | 
			
		||||
# ENV_USER_PASS="${user_pass:-$ENV_USER_PASS}"                      #
 | 
			
		||||
# ENV_ROOT_USER_NAME="${root_user_name:-$ENV_ROOT_USER_NAME}"       #
 | 
			
		||||
# ENV_ROOT_USER_PASS="${root_user_pass:-$ENV_ROOT_USER_PASS}"       #
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
  [ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] || return 1
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# script to start server
 | 
			
		||||
__run_start_script() {
 | 
			
		||||
  local user="${SERVICE_USER:-root}"
 | 
			
		||||
  local workdir="${WORKDIR:-$WORK_DIR}"
 | 
			
		||||
  local cmd="$EXEC_CMD_BIN $EXEC_CMD_ARGS"
 | 
			
		||||
  local lc_type="${LC_ALL:-${LC_CTYPE:-$LANG}}"
 | 
			
		||||
  local home="${workdir//\/root/\/tmp\/docker}"
 | 
			
		||||
  local path="/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
  if [ -z "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
    __post_execute 2>"/dev/stderr" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    echo "Initializing $SCRIPT_NAME has completed"
 | 
			
		||||
  else
 | 
			
		||||
    # ensure the command exists
 | 
			
		||||
    if [ ! -x "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is not a valid executable"
 | 
			
		||||
      exit 2
 | 
			
		||||
    fi
 | 
			
		||||
    # set working directories
 | 
			
		||||
    [ -z "$home" ] && home="${workdir:-/tmp/docker}"
 | 
			
		||||
    [ "$home" = "/root" ] && home="/tmp/docker"
 | 
			
		||||
    [ "$home" = "$workdir" ] && workdir=""
 | 
			
		||||
    # create needed directories
 | 
			
		||||
    [ -n "$home" ] && { [ -d "$home" ] || mkdir -p "$home"; }
 | 
			
		||||
    [ -n "$workdir" ] && { [ -d "$workdir" ] || mkdir -p "$workdir" || workdir="/tmp"; }
 | 
			
		||||
    [ -n "$workdir" ] && __cd "$workdir" || { [ -n "$home" ] && __cd "$home"; } || __cd "/tmp"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$home" ] && chmod -f 777 "$home"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$workdir" ] && chmod -f 777 "$workdir"
 | 
			
		||||
    # check and exit if already running
 | 
			
		||||
    if __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is already running" >&2
 | 
			
		||||
      exit 0
 | 
			
		||||
    else
 | 
			
		||||
      echo "Starting service: $EXEC_CMD_NAME $EXEC_CMD_ARGS"
 | 
			
		||||
      su_cmd touch "$SERVICE_PID_FILE"
 | 
			
		||||
      __post_execute 2>"/dev/stderr" 2>&1 |& tee -a "$LOG_DIR/init.txt" &>/dev/null &
 | 
			
		||||
      su_cmd env -i HOME="$home" LC_CTYPE="$lc_type" PATH="$path" USER="$user" sh -c "$cmd" || return 10
 | 
			
		||||
    fi
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# simple cd function
 | 
			
		||||
__cd() { mkdir -p "$1" && builtin cd "$1" || exit 1; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# process check functions
 | 
			
		||||
__pcheck() { [ -n "$(type -P pgrep 2>/dev/null)" ] && pgrep -x "$1" &>/dev/null && return 0 || return 10; }
 | 
			
		||||
__pgrep() { __pcheck "${1:-$EXEC_CMD_BIN}" || __ps aux 2>/dev/null | grep -Fw " ${1:-$EXEC_CMD_BIN}" | grep -qv ' grep' | grep '^' && return 0 || return 10; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# check if process is already running
 | 
			
		||||
__proc_check() {
 | 
			
		||||
  cmd_bin="$(type -P "${1:-$EXEC_CMD_BIN}")"
 | 
			
		||||
  cmd_name="$(basename "${cmd_bin:-$EXEC_CMD_NAME}")"
 | 
			
		||||
  if __pgrep "$cmd_bin" || __pgrep "$cmd_name"; then
 | 
			
		||||
    SERVICE_IS_RUNNING="true"
 | 
			
		||||
    touch "$SERVICE_PID_FILE"
 | 
			
		||||
    echo "$cmd_name is already running"
 | 
			
		||||
    return 0
 | 
			
		||||
  else
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow ENV_ variable - Import env file
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_EXIT_CODE=0                                           # default exit code
 | 
			
		||||
WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
PRE_EXEC_MESSAGE="${ENV_PRE_EXEC_MESSAGE:-$PRE_EXEC_MESSAGE}" # Show message before execute
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# application specific
 | 
			
		||||
EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
EXEC_CMD_BIN="$(type -P "$EXEC_CMD_BIN" || echo "$EXEC_CMD_BIN")" # set full path
 | 
			
		||||
EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
SERVICE_PID_FILE="/run/init.d/$EXEC_CMD_NAME.pid"                 # set the pid file location
 | 
			
		||||
EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
SERVICE_PID_NUMBER="$(__pgrep)"                                   # check if running
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# create auth directories
 | 
			
		||||
[ -n "$USER_FILE_PREFIX" ] && { [ -d "$USER_FILE_PREFIX" ] || mkdir -p "$USER_FILE_PREFIX"; }
 | 
			
		||||
[ -n "$ROOT_FILE_PREFIX" ] && { [ -d "$ROOT_FILE_PREFIX" ] || mkdir -p "$ROOT_FILE_PREFIX"; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow per init script usernames and passwords
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/name" ] && user_name="$(<"$ETC_DIR/auth/user/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/pass" ] && user_pass="$(<"$ETC_DIR/auth/user/pass")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/name" ] && root_user_name="$(<"$ETC_DIR/auth/root/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/pass" ] && root_user_pass="$(<"$ETC_DIR/auth/root/pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow setting initial users and passwords via environment
 | 
			
		||||
user_name="${user_name:-$ENV_USER_NAME}"
 | 
			
		||||
user_pass="${user_pass:-$ENV_USER_PASS}"
 | 
			
		||||
root_user_name="${root_user_name:-$ENV_ROOT_USER_NAME}"
 | 
			
		||||
root_user_pass="${root_user_pass:-$ENV_ROOT_USER_PASS}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set password to random if variable is random
 | 
			
		||||
if [ "$user_pass" = "random" ]; then
 | 
			
		||||
  user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
if [ "$root_user_pass" = "random" ]; then
 | 
			
		||||
  root_user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow variables via imports - Overwrite existing
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Only run check
 | 
			
		||||
if [ "$1" = "check" ]; then
 | 
			
		||||
  __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"
 | 
			
		||||
  exit $?
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show message if env exists
 | 
			
		||||
if [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  [ -n "$SERVICE_USER" ] && echo "Setting up service to run as $SERVICE_USER" || SERVICE_USER="root"
 | 
			
		||||
  [ -n "$SERVICE_PORT" ] && echo "${EXEC_CMD_NAME:-$EXEC_CMD_BIN} will be running on $SERVICE_PORT" || SERVICE_PORT=""
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set switch user command
 | 
			
		||||
if [ "$SERVICE_USER" = "root" ] || [ -z "$SERVICE_USER" ]; then
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P gosu)" ]; then
 | 
			
		||||
  su_cmd() { gosu $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P runuser)" ]; then
 | 
			
		||||
  su_cmd() { runuser -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P sudo)" ]; then
 | 
			
		||||
  su_cmd() { sudo -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P su)" ]; then
 | 
			
		||||
  su_cmd() { su -s /bin/sh - $SERVICE_USER -c "$@" || return 1; }
 | 
			
		||||
else
 | 
			
		||||
  echo "Can not switch to $SERVICE_USER: attempting to run as root"
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Change to working directory
 | 
			
		||||
[ -n "$WORKDIR" ] && [ -n "$EXEC_CMD_BIN" ] && __cd "$WORKDIR" && echo "Changed to $PWD"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show init message
 | 
			
		||||
__pre_message
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Initialize ssl
 | 
			
		||||
__update_ssl_conf
 | 
			
		||||
__update_ssl_certs
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Updating config files
 | 
			
		||||
__create_env
 | 
			
		||||
__update_conf_files
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run the pre execute commands
 | 
			
		||||
[ -n "$PRE_EXEC_MESSAGE" ] && echo "$PRE_EXEC_MESSAGE"
 | 
			
		||||
__pre_execute
 | 
			
		||||
__run_secure_function
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__run_start_script "$@" |& tee -a "/data/logs/entrypoint.log" &>/dev/null
 | 
			
		||||
if [ "$?" -ne 0 ] && [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  echo "Failed to execute: $EXEC_CMD_BIN $EXEC_CMD_ARGS" |& tee -a "/data/logs/entrypoint.log" "$LOG_DIR/init.txt"
 | 
			
		||||
  SERVICE_EXIT_CODE=10
 | 
			
		||||
  SERVICE_IS_RUNNING="false"
 | 
			
		||||
  rm -Rf "$SERVICE_PID_FILE"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
exit $SERVICE_EXIT_CODE
 | 
			
		||||
							
								
								
									
										404
									
								
								init/done/98-ddns.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										404
									
								
								init/done/98-ddns.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,404 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
 | 
			
		||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -o pipefail -x$DEBUGGER_OPTIONS || set -o pipefail
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
printf '%s\n' "# - - - Initializing ddns - - - #"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_NAME="ddns"
 | 
			
		||||
SCRIPT_NAME="$(basename "$0" 2>/dev/null)"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
export PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run trap command on exit
 | 
			
		||||
trap 'retVal=$?;[ "$SERVICE_IS_RUNNING" != "true" ] && [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE";exit $retVal' SIGINT SIGTERM EXIT
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# import the functions file
 | 
			
		||||
if [ -f "/usr/local/etc/docker/functions/entrypoint.sh" ]; then
 | 
			
		||||
  . "/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"
 | 
			
		||||
done
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Custom functions
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Show message before execute
 | 
			
		||||
PRE_EXEC_MESSAGE=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Default predefined variables
 | 
			
		||||
WORKDIR=""                 # set working directory
 | 
			
		||||
DATA_DIR="/data"           # set data directory
 | 
			
		||||
WWW_DIR="/data/htdocs/www" # set the web root
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ETC_DIR="/etc"     # set etc directory
 | 
			
		||||
CONF_DIR="/config" # set config directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
RUN_DIR="/run/init.d" # set scripts pid dir
 | 
			
		||||
LOG_DIR="/data/logs"  # set log directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ROOT_FILE_PREFIX="/config/secure/auth/root" # directory to save username/password for root user
 | 
			
		||||
USER_FILE_PREFIX="/config/secure/auth/user" # directory to save username/password for normal user
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set the database directory
 | 
			
		||||
DATABASE_DIR="${DATABASE_DIR_DDNS:-/data/db/ddns}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional predefined variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# port which service is listening on
 | 
			
		||||
SERVICE_PORT=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# execute command variables
 | 
			
		||||
SERVICE_UID="0"     # set the user id
 | 
			
		||||
SERVICE_USER="root" # execute command as another user
 | 
			
		||||
EXEC_CMD_BIN="ddns" # command to execute
 | 
			
		||||
EXEC_CMD_ARGS=""    # command arguments
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a web server
 | 
			
		||||
IS_WEB_SERVER="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a database server
 | 
			
		||||
IS_DATABASE_SERVICE="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# usernames
 | 
			
		||||
user_name="${DDNS_USER_NAME:-}"           # normal user name
 | 
			
		||||
root_user_name="${DDNS_ROOT_USER_NAME:-}" # root user name
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# passwords [password/random]
 | 
			
		||||
user_pass="${DDNS_USER_PASS_WORD:-}"      # normal user password
 | 
			
		||||
root_user_pass="${DDNS_ROOT_PASS_WORD:-}" # root user password
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Overwrite variables from files
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_name" ] && user_name="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && user_pass="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name" ] && root_user_name="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && root_user_pass="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Specifiy custom directories to be created
 | 
			
		||||
ADD_APPLICATION_FILES=""
 | 
			
		||||
ADD_APPLICATION_DIRS=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
APPLICATION_FILES="$LOG_DIR/ddns.log"
 | 
			
		||||
APPLICATION_DIRS="$RUN_DIR $ETC_DIR $CONF_DIR $LOG_DIR"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__update_conf_files() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
 | 
			
		||||
  # delete files
 | 
			
		||||
  #__rm ""
 | 
			
		||||
 | 
			
		||||
  # define actions
 | 
			
		||||
 | 
			
		||||
  # create default directories
 | 
			
		||||
  for filedirs in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
    if [ -n "$filedirs" ] && [ ! -d "$filedirs" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating directory $filedirs with permissions 777"
 | 
			
		||||
        mkdir -p "$filedirs" && chmod -Rf 777 "$filedirs"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create default files
 | 
			
		||||
  for application_files in $ADD_APPLICATION_FILES $APPLICATION_FILES; do
 | 
			
		||||
    if [ -n "$application_files" ] && [ ! -e "$application_files" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating file $application_files with permissions 777"
 | 
			
		||||
        touch "$application_files" && chmod -Rf 777 "$application_files"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create directories if variable is yes"
 | 
			
		||||
  [ "$IS_WEB_SERVER" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $WWW_DIR" && { [ -d "$WWW_DIR" ] || { (echo "Creating directory $WWW_DIR with permissions 777" && mkdir -p "$WWW_DIR" && chmod -f 777 "$WWW_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  [ "$IS_DATABASE_SERVICE" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $DATABASE_DIR" && { [ -d "$DATABASE_DIR" ] || { (echo "Creating directory $DATABASE_DIR with permissions 777" && mkdir -p "$DATABASE_DIR" && chmod -f 777 "$DATABASE_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  # copy config files to system
 | 
			
		||||
  __file_copy "$CONF_DIR/." "$ETC_DIR/" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  # replace variables
 | 
			
		||||
  # __replace "" "" "$CONF_DIR/ddns.conf"
 | 
			
		||||
  # replace variables recursively
 | 
			
		||||
  # __find_replace "" "" "$CONF_DIR/"
 | 
			
		||||
  # custom commands
 | 
			
		||||
 | 
			
		||||
  # other
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset application_files filedirs
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run before executing
 | 
			
		||||
__pre_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  # define commands
 | 
			
		||||
 | 
			
		||||
  # execute if directories is empty
 | 
			
		||||
  #__is_dir_empty "" &&
 | 
			
		||||
 | 
			
		||||
  # create user if needed
 | 
			
		||||
  # __create_service_user "$user" "/home/$user" "${USER_GID:-${USER_UID:-1000}"
 | 
			
		||||
  # set user on files/folders
 | 
			
		||||
  if [ -n "$user" ] && [ "$user" != "root" ]; then
 | 
			
		||||
    if grep -s -q "$user:" "/etc/passwd"; then
 | 
			
		||||
      for permissions in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
        if [ -n "$permissions" ] && [ -e "$permissions" ]; then
 | 
			
		||||
          (chown -Rf $user:$user "$permissions" && echo "changed ownership on $permissions to $user") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
        fi
 | 
			
		||||
      done
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset filesperms filename
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run after executing
 | 
			
		||||
__post_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  sleep 60                           # how long to wait before executing
 | 
			
		||||
  echo "Running post commands"       # message
 | 
			
		||||
  # execute commands
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__pre_message() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
  [ -n "$user_name" ] && echo "username:               $user_name" && echo "$user_name" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$user_pass" ] && echo "password:               saved to ${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$user_pass" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
  [ -n "$root_user_name" ] && echo "root username:     $root_user_name" && echo "$root_user_name" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$root_user_pass" ] && echo "root password:     saved to ${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$root_user_pass" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to setup ssl support
 | 
			
		||||
__update_ssl_conf() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__create_env() {
 | 
			
		||||
  cat <<EOF | tee "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" &>/dev/null
 | 
			
		||||
# ENV_WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
# ENV_WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
# ENV_ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
# ENV_DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
# ENV_CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
# ENV_DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
# ENV_SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
# ENV_SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
# ENV_SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
# EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
# EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
# EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
# ENV_USER_NAME="${user_name:-$ENV_USER_NAME}"                      #
 | 
			
		||||
# ENV_USER_PASS="${user_pass:-$ENV_USER_PASS}"                      #
 | 
			
		||||
# ENV_ROOT_USER_NAME="${root_user_name:-$ENV_ROOT_USER_NAME}"       #
 | 
			
		||||
# ENV_ROOT_USER_PASS="${root_user_pass:-$ENV_ROOT_USER_PASS}"       #
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
  [ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] || return 1
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# script to start server
 | 
			
		||||
__run_start_script() {
 | 
			
		||||
  local user="${SERVICE_USER:-root}"
 | 
			
		||||
  local workdir="${WORKDIR:-$WORK_DIR}"
 | 
			
		||||
  local cmd="$EXEC_CMD_BIN $EXEC_CMD_ARGS"
 | 
			
		||||
  local lc_type="${LC_ALL:-${LC_CTYPE:-$LANG}}"
 | 
			
		||||
  local home="${workdir//\/root/\/tmp\/docker}"
 | 
			
		||||
  local path="/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
  if [ -z "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
    __post_execute 2>"/dev/stderr" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    echo "Initializing $SCRIPT_NAME has completed"
 | 
			
		||||
  else
 | 
			
		||||
    # ensure the command exists
 | 
			
		||||
    if [ ! -x "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is not a valid executable"
 | 
			
		||||
      exit 2
 | 
			
		||||
    fi
 | 
			
		||||
    # set working directories
 | 
			
		||||
    [ -z "$home" ] && home="${workdir:-/tmp/docker}"
 | 
			
		||||
    [ "$home" = "/root" ] && home="/tmp/docker"
 | 
			
		||||
    [ "$home" = "$workdir" ] && workdir=""
 | 
			
		||||
    # create needed directories
 | 
			
		||||
    [ -n "$home" ] && { [ -d "$home" ] || mkdir -p "$home"; }
 | 
			
		||||
    [ -n "$workdir" ] && { [ -d "$workdir" ] || mkdir -p "$workdir" || workdir="/tmp"; }
 | 
			
		||||
    [ -n "$workdir" ] && __cd "$workdir" || { [ -n "$home" ] && __cd "$home"; } || __cd "/tmp"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$home" ] && chmod -f 777 "$home"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$workdir" ] && chmod -f 777 "$workdir"
 | 
			
		||||
    # check and exit if already running
 | 
			
		||||
    if __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is already running" >&2
 | 
			
		||||
      exit 0
 | 
			
		||||
    else
 | 
			
		||||
      echo "Starting service: $EXEC_CMD_NAME $EXEC_CMD_ARGS"
 | 
			
		||||
      su_cmd touch "$SERVICE_PID_FILE"
 | 
			
		||||
      __post_execute 2>"/dev/stderr" 2>&1 |& tee -a "$LOG_DIR/init.txt" &>/dev/null &
 | 
			
		||||
      su_cmd env -i HOME="$home" LC_CTYPE="$lc_type" PATH="$path" USER="$user" sh -c "$cmd" || return 10
 | 
			
		||||
    fi
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# simple cd function
 | 
			
		||||
__cd() { mkdir -p "$1" && builtin cd "$1" || exit 1; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# process check functions
 | 
			
		||||
__pcheck() { [ -n "$(type -P pgrep 2>/dev/null)" ] && pgrep -x "$1" &>/dev/null && return 0 || return 10; }
 | 
			
		||||
__pgrep() { __pcheck "${1:-$EXEC_CMD_BIN}" || __ps aux 2>/dev/null | grep -Fw " ${1:-$EXEC_CMD_BIN}" | grep -qv ' grep' | grep '^' && return 0 || return 10; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# check if process is already running
 | 
			
		||||
__proc_check() {
 | 
			
		||||
  cmd_bin="$(type -P "${1:-$EXEC_CMD_BIN}")"
 | 
			
		||||
  cmd_name="$(basename "${cmd_bin:-$EXEC_CMD_NAME}")"
 | 
			
		||||
  if __pgrep "$cmd_bin" || __pgrep "$cmd_name"; then
 | 
			
		||||
    SERVICE_IS_RUNNING="true"
 | 
			
		||||
    touch "$SERVICE_PID_FILE"
 | 
			
		||||
    echo "$cmd_name is already running"
 | 
			
		||||
    return 0
 | 
			
		||||
  else
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow ENV_ variable - Import env file
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_EXIT_CODE=0                                           # default exit code
 | 
			
		||||
WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
PRE_EXEC_MESSAGE="${ENV_PRE_EXEC_MESSAGE:-$PRE_EXEC_MESSAGE}" # Show message before execute
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# application specific
 | 
			
		||||
EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
EXEC_CMD_BIN="$(type -P "$EXEC_CMD_BIN" || echo "$EXEC_CMD_BIN")" # set full path
 | 
			
		||||
EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
SERVICE_PID_FILE="/run/init.d/$EXEC_CMD_NAME.pid"                 # set the pid file location
 | 
			
		||||
EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
SERVICE_PID_NUMBER="$(__pgrep)"                                   # check if running
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# create auth directories
 | 
			
		||||
[ -n "$USER_FILE_PREFIX" ] && { [ -d "$USER_FILE_PREFIX" ] || mkdir -p "$USER_FILE_PREFIX"; }
 | 
			
		||||
[ -n "$ROOT_FILE_PREFIX" ] && { [ -d "$ROOT_FILE_PREFIX" ] || mkdir -p "$ROOT_FILE_PREFIX"; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow per init script usernames and passwords
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/name" ] && user_name="$(<"$ETC_DIR/auth/user/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/pass" ] && user_pass="$(<"$ETC_DIR/auth/user/pass")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/name" ] && root_user_name="$(<"$ETC_DIR/auth/root/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/pass" ] && root_user_pass="$(<"$ETC_DIR/auth/root/pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow setting initial users and passwords via environment
 | 
			
		||||
user_name="${user_name:-$ENV_USER_NAME}"
 | 
			
		||||
user_pass="${user_pass:-$ENV_USER_PASS}"
 | 
			
		||||
root_user_name="${root_user_name:-$ENV_ROOT_USER_NAME}"
 | 
			
		||||
root_user_pass="${root_user_pass:-$ENV_ROOT_USER_PASS}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set password to random if variable is random
 | 
			
		||||
if [ "$user_pass" = "random" ]; then
 | 
			
		||||
  user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
if [ "$root_user_pass" = "random" ]; then
 | 
			
		||||
  root_user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow variables via imports - Overwrite existing
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Only run check
 | 
			
		||||
if [ "$1" = "check" ]; then
 | 
			
		||||
  __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"
 | 
			
		||||
  exit $?
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show message if env exists
 | 
			
		||||
if [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  [ -n "$SERVICE_USER" ] && echo "Setting up service to run as $SERVICE_USER" || SERVICE_USER="root"
 | 
			
		||||
  [ -n "$SERVICE_PORT" ] && echo "${EXEC_CMD_NAME:-$EXEC_CMD_BIN} will be running on $SERVICE_PORT" || SERVICE_PORT=""
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set switch user command
 | 
			
		||||
if [ "$SERVICE_USER" = "root" ] || [ -z "$SERVICE_USER" ]; then
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P gosu)" ]; then
 | 
			
		||||
  su_cmd() { gosu $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P runuser)" ]; then
 | 
			
		||||
  su_cmd() { runuser -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P sudo)" ]; then
 | 
			
		||||
  su_cmd() { sudo -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P su)" ]; then
 | 
			
		||||
  su_cmd() { su -s /bin/sh - $SERVICE_USER -c "$@" || return 1; }
 | 
			
		||||
else
 | 
			
		||||
  echo "Can not switch to $SERVICE_USER: attempting to run as root"
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Change to working directory
 | 
			
		||||
[ -n "$WORKDIR" ] && [ -n "$EXEC_CMD_BIN" ] && __cd "$WORKDIR" && echo "Changed to $PWD"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show init message
 | 
			
		||||
__pre_message
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Initialize ssl
 | 
			
		||||
__update_ssl_conf
 | 
			
		||||
__update_ssl_certs
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Updating config files
 | 
			
		||||
__create_env
 | 
			
		||||
__update_conf_files
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run the pre execute commands
 | 
			
		||||
[ -n "$PRE_EXEC_MESSAGE" ] && echo "$PRE_EXEC_MESSAGE"
 | 
			
		||||
__pre_execute
 | 
			
		||||
__run_secure_function
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__run_start_script "$@" |& tee -a "/data/logs/entrypoint.log" &>/dev/null
 | 
			
		||||
if [ "$?" -ne 0 ] && [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  echo "Failed to execute: $EXEC_CMD_BIN $EXEC_CMD_ARGS" |& tee -a "/data/logs/entrypoint.log" "$LOG_DIR/init.txt"
 | 
			
		||||
  SERVICE_EXIT_CODE=10
 | 
			
		||||
  SERVICE_IS_RUNNING="false"
 | 
			
		||||
  rm -Rf "$SERVICE_PID_FILE"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
exit $SERVICE_EXIT_CODE
 | 
			
		||||
							
								
								
									
										404
									
								
								init/done/99-bash.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										404
									
								
								init/done/99-bash.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,404 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
 | 
			
		||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -o pipefail -x$DEBUGGER_OPTIONS || set -o pipefail
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
printf '%s\n' "# - - - Initializing bash - - - #"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_NAME="bash"
 | 
			
		||||
SCRIPT_NAME="$(basename "$0" 2>/dev/null)"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
export PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run trap command on exit
 | 
			
		||||
trap 'retVal=$?;[ "$SERVICE_IS_RUNNING" != "true" ] && [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE";exit $retVal' SIGINT SIGTERM EXIT
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# import the functions file
 | 
			
		||||
if [ -f "/usr/local/etc/docker/functions/entrypoint.sh" ]; then
 | 
			
		||||
  . "/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"
 | 
			
		||||
done
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Custom functions
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Show message before execute
 | 
			
		||||
PRE_EXEC_MESSAGE=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Default predefined variables
 | 
			
		||||
WORKDIR=""                 # set working directory
 | 
			
		||||
DATA_DIR="/data"           # set data directory
 | 
			
		||||
WWW_DIR="/data/htdocs/www" # set the web root
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ETC_DIR="/etc/bash"     # set etc directory
 | 
			
		||||
CONF_DIR="/config/bash" # set config directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
RUN_DIR="/run/init.d"     # set scripts pid dir
 | 
			
		||||
LOG_DIR="/data/logs/bash" # set log directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ROOT_FILE_PREFIX="/config/secure/auth/root" # directory to save username/password for root user
 | 
			
		||||
USER_FILE_PREFIX="/config/secure/auth/user" # directory to save username/password for normal user
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set the database directory
 | 
			
		||||
DATABASE_DIR="${DATABASE_DIR_BASH:-/data/db/bash}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional predefined variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# port which service is listening on
 | 
			
		||||
SERVICE_PORT=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# execute command variables
 | 
			
		||||
SERVICE_UID="0"                        # set the user id
 | 
			
		||||
SERVICE_USER="root"                    # execute command as another user
 | 
			
		||||
EXEC_CMD_BIN="tmux"                    # command to execute
 | 
			
		||||
EXEC_CMD_ARGS="new-session -A -s main" # command arguments
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a web server
 | 
			
		||||
IS_WEB_SERVER="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a database server
 | 
			
		||||
IS_DATABASE_SERVICE="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# usernames
 | 
			
		||||
user_name="${BASH_USER_NAME:-}"           # normal user name
 | 
			
		||||
root_user_name="${BASH_ROOT_USER_NAME:-}" # root user name
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# passwords [password/random]
 | 
			
		||||
user_pass="${BASH_USER_PASS_WORD:-}"      # normal user password
 | 
			
		||||
root_user_pass="${BASH_ROOT_PASS_WORD:-}" # root user password
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Overwrite variables from files
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_name" ] && user_name="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && user_pass="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name" ] && root_user_name="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && root_user_pass="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Specifiy custom directories to be created
 | 
			
		||||
ADD_APPLICATION_FILES=""
 | 
			
		||||
ADD_APPLICATION_DIRS=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
APPLICATION_FILES="$LOG_DIR/bash.log"
 | 
			
		||||
APPLICATION_DIRS="$RUN_DIR $ETC_DIR $CONF_DIR $LOG_DIR"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__update_conf_files() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
 | 
			
		||||
  # delete files
 | 
			
		||||
  #__rm ""
 | 
			
		||||
 | 
			
		||||
  # define actions
 | 
			
		||||
 | 
			
		||||
  # create default directories
 | 
			
		||||
  for filedirs in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
    if [ -n "$filedirs" ] && [ ! -d "$filedirs" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating directory $filedirs with permissions 777"
 | 
			
		||||
        mkdir -p "$filedirs" && chmod -Rf 777 "$filedirs"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create default files
 | 
			
		||||
  for application_files in $ADD_APPLICATION_FILES $APPLICATION_FILES; do
 | 
			
		||||
    if [ -n "$application_files" ] && [ ! -e "$application_files" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating file $application_files with permissions 777"
 | 
			
		||||
        touch "$application_files" && chmod -Rf 777 "$application_files"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create directories if variable is yes"
 | 
			
		||||
  [ "$IS_WEB_SERVER" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $WWW_DIR" && { [ -d "$WWW_DIR" ] || { (echo "Creating directory $WWW_DIR with permissions 777" && mkdir -p "$WWW_DIR" && chmod -f 777 "$WWW_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  [ "$IS_DATABASE_SERVICE" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $DATABASE_DIR" && { [ -d "$DATABASE_DIR" ] || { (echo "Creating directory $DATABASE_DIR with permissions 777" && mkdir -p "$DATABASE_DIR" && chmod -f 777 "$DATABASE_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  # copy config files to system
 | 
			
		||||
  __file_copy "$CONF_DIR/." "$ETC_DIR/" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  # replace variables
 | 
			
		||||
  # __replace "" "" "$CONF_DIR/bash.conf"
 | 
			
		||||
  # replace variables recursively
 | 
			
		||||
  # __find_replace "" "" "$CONF_DIR/"
 | 
			
		||||
  # custom commands
 | 
			
		||||
 | 
			
		||||
  # other
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset application_files filedirs
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run before executing
 | 
			
		||||
__pre_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  # define commands
 | 
			
		||||
 | 
			
		||||
  # execute if directories is empty
 | 
			
		||||
  #__is_dir_empty "" &&
 | 
			
		||||
 | 
			
		||||
  # create user if needed
 | 
			
		||||
  # __create_service_user "$user" "/home/$user" "${USER_GID:-${USER_UID:-1000}"
 | 
			
		||||
  # set user on files/folders
 | 
			
		||||
  if [ -n "$user" ] && [ "$user" != "root" ]; then
 | 
			
		||||
    if grep -s -q "$user:" "/etc/passwd"; then
 | 
			
		||||
      for permissions in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
        if [ -n "$permissions" ] && [ -e "$permissions" ]; then
 | 
			
		||||
          (chown -Rf $user:$user "$permissions" && echo "changed ownership on $permissions to $user") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
        fi
 | 
			
		||||
      done
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset filesperms filename
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run after executing
 | 
			
		||||
__post_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  sleep 60                           # how long to wait before executing
 | 
			
		||||
  echo "Running post commands"       # message
 | 
			
		||||
  # execute commands
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__pre_message() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
  [ -n "$user_name" ] && echo "username:               $user_name" && echo "$user_name" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$user_pass" ] && echo "password:               saved to ${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$user_pass" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
  [ -n "$root_user_name" ] && echo "root username:     $root_user_name" && echo "$root_user_name" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$root_user_pass" ] && echo "root password:     saved to ${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$root_user_pass" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to setup ssl support
 | 
			
		||||
__update_ssl_conf() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__create_env() {
 | 
			
		||||
  cat <<EOF | tee "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" &>/dev/null
 | 
			
		||||
# ENV_WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
# ENV_WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
# ENV_ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
# ENV_DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
# ENV_CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
# ENV_DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
# ENV_SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
# ENV_SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
# ENV_SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
# EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
# EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
# EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
# ENV_USER_NAME="${user_name:-$ENV_USER_NAME}"                      #
 | 
			
		||||
# ENV_USER_PASS="${user_pass:-$ENV_USER_PASS}"                      #
 | 
			
		||||
# ENV_ROOT_USER_NAME="${root_user_name:-$ENV_ROOT_USER_NAME}"       #
 | 
			
		||||
# ENV_ROOT_USER_PASS="${root_user_pass:-$ENV_ROOT_USER_PASS}"       #
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
  [ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] || return 1
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# script to start server
 | 
			
		||||
__run_start_script() {
 | 
			
		||||
  local user="${SERVICE_USER:-root}"
 | 
			
		||||
  local workdir="${WORKDIR:-$WORK_DIR}"
 | 
			
		||||
  local cmd="$EXEC_CMD_BIN $EXEC_CMD_ARGS"
 | 
			
		||||
  local lc_type="${LC_ALL:-${LC_CTYPE:-$LANG}}"
 | 
			
		||||
  local home="${workdir//\/root/\/tmp\/docker}"
 | 
			
		||||
  local path="/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
  if [ -z "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
    __post_execute 2>"/dev/stderr" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    echo "Initializing $SCRIPT_NAME has completed"
 | 
			
		||||
  else
 | 
			
		||||
    # ensure the command exists
 | 
			
		||||
    if [ ! -x "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is not a valid executable"
 | 
			
		||||
      exit 2
 | 
			
		||||
    fi
 | 
			
		||||
    # set working directories
 | 
			
		||||
    [ -z "$home" ] && home="${workdir:-/tmp/docker}"
 | 
			
		||||
    [ "$home" = "/root" ] && home="/tmp/docker"
 | 
			
		||||
    [ "$home" = "$workdir" ] && workdir=""
 | 
			
		||||
    # create needed directories
 | 
			
		||||
    [ -n "$home" ] && { [ -d "$home" ] || mkdir -p "$home"; }
 | 
			
		||||
    [ -n "$workdir" ] && { [ -d "$workdir" ] || mkdir -p "$workdir" || workdir="/tmp"; }
 | 
			
		||||
    [ -n "$workdir" ] && __cd "$workdir" || { [ -n "$home" ] && __cd "$home"; } || __cd "/tmp"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$home" ] && chmod -f 777 "$home"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$workdir" ] && chmod -f 777 "$workdir"
 | 
			
		||||
    # check and exit if already running
 | 
			
		||||
    if __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is already running" >&2
 | 
			
		||||
      exit 0
 | 
			
		||||
    else
 | 
			
		||||
      echo "Starting service: $EXEC_CMD_NAME $EXEC_CMD_ARGS"
 | 
			
		||||
      su_cmd touch "$SERVICE_PID_FILE"
 | 
			
		||||
      __post_execute 2>"/dev/stderr" 2>&1 |& tee -a "$LOG_DIR/init.txt" &>/dev/null &
 | 
			
		||||
      su_cmd env -i HOME="$home" LC_CTYPE="$lc_type" PATH="$path" USER="$user" sh -c "$cmd" || return 10
 | 
			
		||||
    fi
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# simple cd function
 | 
			
		||||
__cd() { mkdir -p "$1" && builtin cd "$1" || exit 1; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# process check functions
 | 
			
		||||
__pcheck() { [ -n "$(type -P pgrep 2>/dev/null)" ] && pgrep -x "$1" &>/dev/null && return 0 || return 10; }
 | 
			
		||||
__pgrep() { __pcheck "${1:-$EXEC_CMD_BIN}" || __ps aux 2>/dev/null | grep -Fw " ${1:-$EXEC_CMD_BIN}" | grep -qv ' grep' | grep '^' && return 0 || return 10; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# check if process is already running
 | 
			
		||||
__proc_check() {
 | 
			
		||||
  cmd_bin="$(type -P "${1:-$EXEC_CMD_BIN}")"
 | 
			
		||||
  cmd_name="$(basename "${cmd_bin:-$EXEC_CMD_NAME}")"
 | 
			
		||||
  if __pgrep "$cmd_bin" || __pgrep "$cmd_name"; then
 | 
			
		||||
    SERVICE_IS_RUNNING="true"
 | 
			
		||||
    touch "$SERVICE_PID_FILE"
 | 
			
		||||
    echo "$cmd_name is already running"
 | 
			
		||||
    return 0
 | 
			
		||||
  else
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow ENV_ variable - Import env file
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_EXIT_CODE=0                                           # default exit code
 | 
			
		||||
WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
PRE_EXEC_MESSAGE="${ENV_PRE_EXEC_MESSAGE:-$PRE_EXEC_MESSAGE}" # Show message before execute
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# application specific
 | 
			
		||||
EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
EXEC_CMD_BIN="$(type -P "$EXEC_CMD_BIN" || echo "$EXEC_CMD_BIN")" # set full path
 | 
			
		||||
EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
SERVICE_PID_FILE="/run/init.d/$EXEC_CMD_NAME.pid"                 # set the pid file location
 | 
			
		||||
EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
SERVICE_PID_NUMBER="$(__pgrep)"                                   # check if running
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# create auth directories
 | 
			
		||||
[ -n "$USER_FILE_PREFIX" ] && { [ -d "$USER_FILE_PREFIX" ] || mkdir -p "$USER_FILE_PREFIX"; }
 | 
			
		||||
[ -n "$ROOT_FILE_PREFIX" ] && { [ -d "$ROOT_FILE_PREFIX" ] || mkdir -p "$ROOT_FILE_PREFIX"; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow per init script usernames and passwords
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/name" ] && user_name="$(<"$ETC_DIR/auth/user/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/pass" ] && user_pass="$(<"$ETC_DIR/auth/user/pass")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/name" ] && root_user_name="$(<"$ETC_DIR/auth/root/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/pass" ] && root_user_pass="$(<"$ETC_DIR/auth/root/pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow setting initial users and passwords via environment
 | 
			
		||||
user_name="${user_name:-$ENV_USER_NAME}"
 | 
			
		||||
user_pass="${user_pass:-$ENV_USER_PASS}"
 | 
			
		||||
root_user_name="${root_user_name:-$ENV_ROOT_USER_NAME}"
 | 
			
		||||
root_user_pass="${root_user_pass:-$ENV_ROOT_USER_PASS}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set password to random if variable is random
 | 
			
		||||
if [ "$user_pass" = "random" ]; then
 | 
			
		||||
  user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
if [ "$root_user_pass" = "random" ]; then
 | 
			
		||||
  root_user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow variables via imports - Overwrite existing
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Only run check
 | 
			
		||||
if [ "$1" = "check" ]; then
 | 
			
		||||
  __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"
 | 
			
		||||
  exit $?
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show message if env exists
 | 
			
		||||
if [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  [ -n "$SERVICE_USER" ] && echo "Setting up service to run as $SERVICE_USER" || SERVICE_USER="root"
 | 
			
		||||
  [ -n "$SERVICE_PORT" ] && echo "${EXEC_CMD_NAME:-$EXEC_CMD_BIN} will be running on $SERVICE_PORT" || SERVICE_PORT=""
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set switch user command
 | 
			
		||||
if [ "$SERVICE_USER" = "root" ] || [ -z "$SERVICE_USER" ]; then
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P gosu)" ]; then
 | 
			
		||||
  su_cmd() { gosu $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P runuser)" ]; then
 | 
			
		||||
  su_cmd() { runuser -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P sudo)" ]; then
 | 
			
		||||
  su_cmd() { sudo -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P su)" ]; then
 | 
			
		||||
  su_cmd() { su -s /bin/sh - $SERVICE_USER -c "$@" || return 1; }
 | 
			
		||||
else
 | 
			
		||||
  echo "Can not switch to $SERVICE_USER: attempting to run as root"
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Change to working directory
 | 
			
		||||
[ -n "$WORKDIR" ] && [ -n "$EXEC_CMD_BIN" ] && __cd "$WORKDIR" && echo "Changed to $PWD"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show init message
 | 
			
		||||
__pre_message
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Initialize ssl
 | 
			
		||||
__update_ssl_conf
 | 
			
		||||
__update_ssl_certs
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Updating config files
 | 
			
		||||
__create_env
 | 
			
		||||
__update_conf_files
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run the pre execute commands
 | 
			
		||||
[ -n "$PRE_EXEC_MESSAGE" ] && echo "$PRE_EXEC_MESSAGE"
 | 
			
		||||
__pre_execute
 | 
			
		||||
__run_secure_function
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__run_start_script "$@" |& tee -a "/data/logs/entrypoint.log" &>/dev/null
 | 
			
		||||
if [ "$?" -ne 0 ] && [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  echo "Failed to execute: $EXEC_CMD_BIN $EXEC_CMD_ARGS" |& tee -a "/data/logs/entrypoint.log" "$LOG_DIR/init.txt"
 | 
			
		||||
  SERVICE_EXIT_CODE=10
 | 
			
		||||
  SERVICE_IS_RUNNING="false"
 | 
			
		||||
  rm -Rf "$SERVICE_PID_FILE"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
exit $SERVICE_EXIT_CODE
 | 
			
		||||
							
								
								
									
										404
									
								
								init/done/99-buildah.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										404
									
								
								init/done/99-buildah.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,404 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
 | 
			
		||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -o pipefail -x$DEBUGGER_OPTIONS || set -o pipefail
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
printf '%s\n' "# - - - Initializing buildah - - - #"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_NAME="buildah"
 | 
			
		||||
SCRIPT_NAME="$(basename "$0" 2>/dev/null)"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
export PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run trap command on exit
 | 
			
		||||
trap 'retVal=$?;[ "$SERVICE_IS_RUNNING" != "true" ] && [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE";exit $retVal' SIGINT SIGTERM EXIT
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# import the functions file
 | 
			
		||||
if [ -f "/usr/local/etc/docker/functions/entrypoint.sh" ]; then
 | 
			
		||||
  . "/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"
 | 
			
		||||
done
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Custom functions
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Show message before execute
 | 
			
		||||
PRE_EXEC_MESSAGE=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Default predefined variables
 | 
			
		||||
WORKDIR=""                 # set working directory
 | 
			
		||||
DATA_DIR="/data/build"     # set data directory
 | 
			
		||||
WWW_DIR="/data/htdocs/www" # set the web root
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ETC_DIR="/etc/buildah"     # set etc directory
 | 
			
		||||
CONF_DIR="/config/buildah" # set config directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
RUN_DIR="/run/init.d"        # set scripts pid dir
 | 
			
		||||
LOG_DIR="/data/logs/buildah" # set log directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ROOT_FILE_PREFIX="/config/secure/auth/root" # directory to save username/password for root user
 | 
			
		||||
USER_FILE_PREFIX="/config/secure/auth/user" # directory to save username/password for normal user
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set the database directory
 | 
			
		||||
DATABASE_DIR="${DATABASE_DIR_BUILDAH:-/data/db/buildah}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional predefined variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# port which service is listening on
 | 
			
		||||
SERVICE_PORT=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# execute command variables
 | 
			
		||||
SERVICE_UID="0"        # set the user id
 | 
			
		||||
SERVICE_USER="root"    # execute command as another user
 | 
			
		||||
EXEC_CMD_BIN="buildah" # command to execute
 | 
			
		||||
EXEC_CMD_ARGS=""       # command arguments
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a web server
 | 
			
		||||
IS_WEB_SERVER="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a database server
 | 
			
		||||
IS_DATABASE_SERVICE="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# usernames
 | 
			
		||||
user_name="${BUILDAH_USER_NAME:-}"           # normal user name
 | 
			
		||||
root_user_name="${BUILDAH_ROOT_USER_NAME:-}" # root user name
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# passwords [password/random]
 | 
			
		||||
user_pass="${BUILDAH_USER_PASS_WORD:-}"      # normal user password
 | 
			
		||||
root_user_pass="${BUILDAH_ROOT_PASS_WORD:-}" # root user password
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Overwrite variables from files
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_name" ] && user_name="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && user_pass="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name" ] && root_user_name="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && root_user_pass="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Specifiy custom directories to be created
 | 
			
		||||
ADD_APPLICATION_FILES=""
 | 
			
		||||
ADD_APPLICATION_DIRS=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
APPLICATION_FILES="$LOG_DIR/buildah.log"
 | 
			
		||||
APPLICATION_DIRS="$RUN_DIR $ETC_DIR $CONF_DIR $LOG_DIR"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__update_conf_files() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
 | 
			
		||||
  # create default directories
 | 
			
		||||
  for filedirs in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
    if [ -n "$filedirs" ] && [ ! -d "$filedirs" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating directory $filedirs with permissions 777"
 | 
			
		||||
        mkdir -p "$filedirs" && chmod -Rf 777 "$filedirs"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create default files
 | 
			
		||||
  for application_files in $ADD_APPLICATION_FILES $APPLICATION_FILES; do
 | 
			
		||||
    if [ -n "$application_files" ] && [ ! -e "$application_files" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating file $application_files with permissions 777"
 | 
			
		||||
        touch "$application_files" && chmod -Rf 777 "$application_files"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create directories if variable is yes"
 | 
			
		||||
  [ "$IS_WEB_SERVER" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $WWW_DIR" && { [ -d "$WWW_DIR" ] || { (echo "Creating directory $WWW_DIR with permissions 777" && mkdir -p "$WWW_DIR" && chmod -f 777 "$WWW_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  [ "$IS_DATABASE_SERVICE" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $DATABASE_DIR" && { [ -d "$DATABASE_DIR" ] || { (echo "Creating directory $DATABASE_DIR with permissions 777" && mkdir -p "$DATABASE_DIR" && chmod -f 777 "$DATABASE_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  # copy config files to system
 | 
			
		||||
  __file_copy "$CONF_DIR/." "$ETC_DIR/" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  # replace variables
 | 
			
		||||
  # __replace "" "" "$CONF_DIR/buildah.conf"
 | 
			
		||||
  # replace variables recursively
 | 
			
		||||
  # __find_replace "" "" "$CONF_DIR/"
 | 
			
		||||
  # custom commands
 | 
			
		||||
 | 
			
		||||
  if [ ! -L "/var/lib/containers" ]; then
 | 
			
		||||
    __rm "/var/lib/containers"
 | 
			
		||||
    ln -sf "$DATA_DIR" "/var/lib/containers"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # other
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset application_files filedirs
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run before executing
 | 
			
		||||
__pre_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  # define commands
 | 
			
		||||
 | 
			
		||||
  # execute if directories is empty
 | 
			
		||||
  #__is_dir_empty "" &&
 | 
			
		||||
 | 
			
		||||
  # create user if needed
 | 
			
		||||
  # __create_service_user "$user" "/home/$user" "${USER_GID:-${USER_UID:-1000}"
 | 
			
		||||
  # set user on files/folders
 | 
			
		||||
  if [ -n "$user" ] && [ "$user" != "root" ]; then
 | 
			
		||||
    if grep -s -q "$user:" "/etc/passwd"; then
 | 
			
		||||
      for permissions in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
        if [ -n "$permissions" ] && [ -e "$permissions" ]; then
 | 
			
		||||
          (chown -Rf $user:$user "$permissions" && echo "changed ownership on $permissions to $user") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
        fi
 | 
			
		||||
      done
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset filesperms filename
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run after executing
 | 
			
		||||
__post_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  sleep 60                           # how long to wait before executing
 | 
			
		||||
  echo "Running post commands"       # message
 | 
			
		||||
  # execute commands
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__pre_message() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
  [ -n "$user_name" ] && echo "username:               $user_name" && echo "$user_name" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$user_pass" ] && echo "password:               saved to ${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$user_pass" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
  [ -n "$root_user_name" ] && echo "root username:     $root_user_name" && echo "$root_user_name" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$root_user_pass" ] && echo "root password:     saved to ${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$root_user_pass" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to setup ssl support
 | 
			
		||||
__update_ssl_conf() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__create_env() {
 | 
			
		||||
  cat <<EOF | tee "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" &>/dev/null
 | 
			
		||||
# ENV_WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
# ENV_WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
# ENV_ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
# ENV_DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
# ENV_CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
# ENV_DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
# ENV_SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
# ENV_SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
# ENV_SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
# EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
# EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
# EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
# ENV_USER_NAME="${user_name:-$ENV_USER_NAME}"                      #
 | 
			
		||||
# ENV_USER_PASS="${user_pass:-$ENV_USER_PASS}"                      #
 | 
			
		||||
# ENV_ROOT_USER_NAME="${root_user_name:-$ENV_ROOT_USER_NAME}"       #
 | 
			
		||||
# ENV_ROOT_USER_PASS="${root_user_pass:-$ENV_ROOT_USER_PASS}"       #
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
  [ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] || return 1
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# script to start server
 | 
			
		||||
__run_start_script() {
 | 
			
		||||
  local user="${SERVICE_USER:-root}"
 | 
			
		||||
  local workdir="${WORKDIR:-$WORK_DIR}"
 | 
			
		||||
  local cmd="$EXEC_CMD_BIN $EXEC_CMD_ARGS"
 | 
			
		||||
  local lc_type="${LC_ALL:-${LC_CTYPE:-$LANG}}"
 | 
			
		||||
  local home="${workdir//\/root/\/tmp\/docker}"
 | 
			
		||||
  local path="/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
  if [ -z "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
    __post_execute 2>"/dev/stderr" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    echo "Initializing $SCRIPT_NAME has completed"
 | 
			
		||||
  else
 | 
			
		||||
    # ensure the command exists
 | 
			
		||||
    if [ ! -x "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is not a valid executable"
 | 
			
		||||
      exit 2
 | 
			
		||||
    fi
 | 
			
		||||
    # set working directories
 | 
			
		||||
    [ -z "$home" ] && home="${workdir:-/tmp/docker}"
 | 
			
		||||
    [ "$home" = "/root" ] && home="/tmp/docker"
 | 
			
		||||
    [ "$home" = "$workdir" ] && workdir=""
 | 
			
		||||
    # create needed directories
 | 
			
		||||
    [ -n "$home" ] && { [ -d "$home" ] || mkdir -p "$home"; }
 | 
			
		||||
    [ -n "$workdir" ] && { [ -d "$workdir" ] || mkdir -p "$workdir" || workdir="/tmp"; }
 | 
			
		||||
    [ -n "$workdir" ] && __cd "$workdir" || { [ -n "$home" ] && __cd "$home"; } || __cd "/tmp"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$home" ] && chmod -f 777 "$home"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$workdir" ] && chmod -f 777 "$workdir"
 | 
			
		||||
    # check and exit if already running
 | 
			
		||||
    if __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is already running" >&2
 | 
			
		||||
      exit 0
 | 
			
		||||
    else
 | 
			
		||||
      echo "Starting service: $EXEC_CMD_NAME $EXEC_CMD_ARGS"
 | 
			
		||||
      su_cmd touch "$SERVICE_PID_FILE"
 | 
			
		||||
      __post_execute 2>"/dev/stderr" 2>&1 |& tee -a "$LOG_DIR/init.txt" &>/dev/null &
 | 
			
		||||
      su_cmd env -i HOME="$home" LC_CTYPE="$lc_type" PATH="$path" USER="$user" sh -c "$cmd" || return 10
 | 
			
		||||
    fi
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# simple cd function
 | 
			
		||||
__cd() { mkdir -p "$1" && builtin cd "$1" || exit 1; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# process check functions
 | 
			
		||||
__pcheck() { [ -n "$(type -P pgrep 2>/dev/null)" ] && pgrep -x "$1" &>/dev/null && return 0 || return 10; }
 | 
			
		||||
__pgrep() { __pcheck "${1:-$EXEC_CMD_BIN}" || __ps aux 2>/dev/null | grep -Fw " ${1:-$EXEC_CMD_BIN}" | grep -qv ' grep' | grep '^' && return 0 || return 10; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# check if process is already running
 | 
			
		||||
__proc_check() {
 | 
			
		||||
  cmd_bin="$(type -P "${1:-$EXEC_CMD_BIN}")"
 | 
			
		||||
  cmd_name="$(basename "${cmd_bin:-$EXEC_CMD_NAME}")"
 | 
			
		||||
  if __pgrep "$cmd_bin" || __pgrep "$cmd_name"; then
 | 
			
		||||
    SERVICE_IS_RUNNING="true"
 | 
			
		||||
    touch "$SERVICE_PID_FILE"
 | 
			
		||||
    echo "$cmd_name is already running"
 | 
			
		||||
    return 0
 | 
			
		||||
  else
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow ENV_ variable - Import env file
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_EXIT_CODE=0                                           # default exit code
 | 
			
		||||
WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
PRE_EXEC_MESSAGE="${ENV_PRE_EXEC_MESSAGE:-$PRE_EXEC_MESSAGE}" # Show message before execute
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# application specific
 | 
			
		||||
EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
EXEC_CMD_BIN="$(type -P "$EXEC_CMD_BIN" || echo "$EXEC_CMD_BIN")" # set full path
 | 
			
		||||
EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
SERVICE_PID_FILE="/run/init.d/$EXEC_CMD_NAME.pid"                 # set the pid file location
 | 
			
		||||
EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
SERVICE_PID_NUMBER="$(__pgrep)"                                   # check if running
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# create auth directories
 | 
			
		||||
[ -n "$USER_FILE_PREFIX" ] && { [ -d "$USER_FILE_PREFIX" ] || mkdir -p "$USER_FILE_PREFIX"; }
 | 
			
		||||
[ -n "$ROOT_FILE_PREFIX" ] && { [ -d "$ROOT_FILE_PREFIX" ] || mkdir -p "$ROOT_FILE_PREFIX"; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow per init script usernames and passwords
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/name" ] && user_name="$(<"$ETC_DIR/auth/user/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/pass" ] && user_pass="$(<"$ETC_DIR/auth/user/pass")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/name" ] && root_user_name="$(<"$ETC_DIR/auth/root/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/pass" ] && root_user_pass="$(<"$ETC_DIR/auth/root/pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow setting initial users and passwords via environment
 | 
			
		||||
user_name="${user_name:-$ENV_USER_NAME}"
 | 
			
		||||
user_pass="${user_pass:-$ENV_USER_PASS}"
 | 
			
		||||
root_user_name="${root_user_name:-$ENV_ROOT_USER_NAME}"
 | 
			
		||||
root_user_pass="${root_user_pass:-$ENV_ROOT_USER_PASS}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set password to random if variable is random
 | 
			
		||||
if [ "$user_pass" = "random" ]; then
 | 
			
		||||
  user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
if [ "$root_user_pass" = "random" ]; then
 | 
			
		||||
  root_user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow variables via imports - Overwrite existing
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Only run check
 | 
			
		||||
if [ "$1" = "check" ]; then
 | 
			
		||||
  __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"
 | 
			
		||||
  exit $?
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show message if env exists
 | 
			
		||||
if [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  [ -n "$SERVICE_USER" ] && echo "Setting up service to run as $SERVICE_USER" || SERVICE_USER="root"
 | 
			
		||||
  [ -n "$SERVICE_PORT" ] && echo "${EXEC_CMD_NAME:-$EXEC_CMD_BIN} will be running on $SERVICE_PORT" || SERVICE_PORT=""
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set switch user command
 | 
			
		||||
if [ "$SERVICE_USER" = "root" ] || [ -z "$SERVICE_USER" ]; then
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P gosu)" ]; then
 | 
			
		||||
  su_cmd() { gosu $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P runuser)" ]; then
 | 
			
		||||
  su_cmd() { runuser -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P sudo)" ]; then
 | 
			
		||||
  su_cmd() { sudo -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P su)" ]; then
 | 
			
		||||
  su_cmd() { su -s /bin/sh - $SERVICE_USER -c "$@" || return 1; }
 | 
			
		||||
else
 | 
			
		||||
  echo "Can not switch to $SERVICE_USER: attempting to run as root"
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Change to working directory
 | 
			
		||||
[ -n "$WORKDIR" ] && [ -n "$EXEC_CMD_BIN" ] && __cd "$WORKDIR" && echo "Changed to $PWD"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show init message
 | 
			
		||||
__pre_message
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Initialize ssl
 | 
			
		||||
__update_ssl_conf
 | 
			
		||||
__update_ssl_certs
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Updating config files
 | 
			
		||||
__create_env
 | 
			
		||||
__update_conf_files
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run the pre execute commands
 | 
			
		||||
[ -n "$PRE_EXEC_MESSAGE" ] && echo "$PRE_EXEC_MESSAGE"
 | 
			
		||||
__pre_execute
 | 
			
		||||
__run_secure_function
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__run_start_script "$@" |& tee -a "/data/logs/entrypoint.log" &>/dev/null
 | 
			
		||||
if [ "$?" -ne 0 ] && [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  echo "Failed to execute: $EXEC_CMD_BIN $EXEC_CMD_ARGS" |& tee -a "/data/logs/entrypoint.log" "$LOG_DIR/init.txt"
 | 
			
		||||
  SERVICE_EXIT_CODE=10
 | 
			
		||||
  SERVICE_IS_RUNNING="false"
 | 
			
		||||
  rm -Rf "$SERVICE_PID_FILE"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
exit $SERVICE_EXIT_CODE
 | 
			
		||||
							
								
								
									
										408
									
								
								init/done/99-bun.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										408
									
								
								init/done/99-bun.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,408 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
 | 
			
		||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -o pipefail -x$DEBUGGER_OPTIONS || set -o pipefail
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
printf '%s\n' "# - - - Initializing bun - - - #"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_NAME="bun"
 | 
			
		||||
SCRIPT_NAME="$(basename "$0" 2>/dev/null)"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
export PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run trap command on exit
 | 
			
		||||
trap 'retVal=$?;[ "$SERVICE_IS_RUNNING" != "true" ] && [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE";exit $retVal' SIGINT SIGTERM EXIT
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# import the functions file
 | 
			
		||||
if [ -f "/usr/local/etc/docker/functions/entrypoint.sh" ]; then
 | 
			
		||||
  . "/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"
 | 
			
		||||
done
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Custom functions
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Show message before execute
 | 
			
		||||
PRE_EXEC_MESSAGE=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Default predefined variables
 | 
			
		||||
WORKDIR=""             # set working directory
 | 
			
		||||
DATA_DIR="/data/app"   # set data directory
 | 
			
		||||
WWW_DIR="/var/www/bun" # set the web root
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ETC_DIR="/etc/bun"     # set etc directory
 | 
			
		||||
CONF_DIR="/config/bun" # set config directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
RUN_DIR="/run/init.d"    # set scripts pid dir
 | 
			
		||||
LOG_DIR="/data/logs/bun" # set log directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ROOT_FILE_PREFIX="/config/secure/auth/root" # directory to save username/password for root user
 | 
			
		||||
USER_FILE_PREFIX="/config/secure/auth/user" # directory to save username/password for normal user
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set the database directory
 | 
			
		||||
DATABASE_DIR="${DATABASE_DIR_BUN:-/data/db/bun}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional predefined variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# port which service is listening on
 | 
			
		||||
SERVICE_PORT="${PORT:-3000}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# execute command variables
 | 
			
		||||
SERVICE_UID="0"                        # set the user id
 | 
			
		||||
SERVICE_USER="root"                    # execute command as another user
 | 
			
		||||
EXEC_CMD_BIN="bun"                     # command to execute
 | 
			
		||||
EXEC_CMD_ARGS="dev $DATA_DIR/index.ts" # command arguments
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a web server
 | 
			
		||||
IS_WEB_SERVER="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a database server
 | 
			
		||||
IS_DATABASE_SERVICE="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional variables
 | 
			
		||||
START_SCRIPT="${START_SCRIPT:-}"
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# usernames
 | 
			
		||||
user_name="${BUN_USER_NAME:-}"           # normal user name
 | 
			
		||||
root_user_name="${BUN_ROOT_USER_NAME:-}" # root user name
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# passwords [password/random]
 | 
			
		||||
user_pass="${BUN_USER_PASS_WORD:-}"      # normal user password
 | 
			
		||||
root_user_pass="${BUN_ROOT_PASS_WORD:-}" # root user password
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Overwrite variables from files
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_name" ] && user_name="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && user_pass="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name" ] && root_user_name="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && root_user_pass="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Specifiy custom directories to be created
 | 
			
		||||
ADD_APPLICATION_FILES=""
 | 
			
		||||
ADD_APPLICATION_DIRS=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
APPLICATION_FILES="$LOG_DIR/bun.log"
 | 
			
		||||
APPLICATION_DIRS="$RUN_DIR $ETC_DIR $CONF_DIR $LOG_DIR $DATA_DIR"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__update_conf_files() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
 | 
			
		||||
  # create default directories
 | 
			
		||||
  for filedirs in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
    if [ -n "$filedirs" ] && [ ! -d "$filedirs" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating directory $filedirs with permissions 777"
 | 
			
		||||
        mkdir -p "$filedirs" && chmod -Rf 777 "$filedirs"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create default files
 | 
			
		||||
  for application_files in $ADD_APPLICATION_FILES $APPLICATION_FILES; do
 | 
			
		||||
    if [ -n "$application_files" ] && [ ! -e "$application_files" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating file $application_files with permissions 777"
 | 
			
		||||
        touch "$application_files" && chmod -Rf 777 "$application_files"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create directories if variable is yes"
 | 
			
		||||
  [ "$IS_WEB_SERVER" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $WWW_DIR" && { [ -d "$WWW_DIR" ] || { (echo "Creating directory $WWW_DIR with permissions 777" && mkdir -p "$WWW_DIR" && chmod -f 777 "$WWW_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  [ "$IS_DATABASE_SERVICE" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $DATABASE_DIR" && { [ -d "$DATABASE_DIR" ] || { (echo "Creating directory $DATABASE_DIR with permissions 777" && mkdir -p "$DATABASE_DIR" && chmod -f 777 "$DATABASE_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset application_files filedirs
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run before executing
 | 
			
		||||
__pre_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
 | 
			
		||||
  # execute if directories is empty
 | 
			
		||||
  __is_dir_empty "$DATA_DIR" && DATA_DIR="$WWW_DIR"
 | 
			
		||||
 | 
			
		||||
  # create user if needed
 | 
			
		||||
  # __create_service_user "$user" "/home/$user" "${USER_GID:-${USER_UID:-1000}"
 | 
			
		||||
  # set user on files/folders
 | 
			
		||||
  if [ -n "$user" ] && [ "$user" != "root" ]; then
 | 
			
		||||
    if grep -s -q "$user:" "/etc/passwd"; then
 | 
			
		||||
      for permissions in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
        if [ -n "$permissions" ] && [ -e "$permissions" ]; then
 | 
			
		||||
          (chown -Rf $user:$user "$permissions" && echo "changed ownership on $permissions to $user") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
        fi
 | 
			
		||||
      done
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # define commands
 | 
			
		||||
  [ -d "$DATA_DIR" ] && cd "$DATA_DIR" || exit 1
 | 
			
		||||
  if [ -n "$START_SCRIPT" ]; then
 | 
			
		||||
    RUN_SCRIPT="$START_SCRIPT"
 | 
			
		||||
  elif [ -f "./src/index.ts" ]; then
 | 
			
		||||
    RUN_SCRIPT="./index.ts"
 | 
			
		||||
  elif [ -f "./index.ts" ]; then
 | 
			
		||||
    RUN_SCRIPT="./index.ts"
 | 
			
		||||
  elif [ -f "./app.ts" ]; then
 | 
			
		||||
    RUN_SCRIPT="./app.ts"
 | 
			
		||||
  elif [ -f "./server.ts" ]; then
 | 
			
		||||
    RUN_SCRIPT="./server.ts"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # Run bun install
 | 
			
		||||
  __exec_command $EXEC_CMD_BIN install
 | 
			
		||||
  EXEC_CMD_ARGS="dev $RUN_SCRIPT"
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset filesperms filename
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run after executing
 | 
			
		||||
__post_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  sleep 60                           # how long to wait before executing
 | 
			
		||||
  echo "Running post commands"       # message
 | 
			
		||||
  # execute commands
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__pre_message() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
  [ -n "$user_name" ] && echo "username:               $user_name" && echo "$user_name" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$user_pass" ] && echo "password:               saved to ${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$user_pass" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
  [ -n "$root_user_name" ] && echo "root username:     $root_user_name" && echo "$root_user_name" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$root_user_pass" ] && echo "root password:     saved to ${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$root_user_pass" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to setup ssl support
 | 
			
		||||
__update_ssl_conf() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__create_env() {
 | 
			
		||||
  cat <<EOF | tee "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" &>/dev/null
 | 
			
		||||
# ENV_WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
# ENV_WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
# ENV_ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
# ENV_DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
# ENV_CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
# ENV_DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
# ENV_SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
# ENV_SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
# ENV_SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
# EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
# EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
# EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
# ENV_USER_NAME="${user_name:-$ENV_USER_NAME}"                      #
 | 
			
		||||
# ENV_USER_PASS="${user_pass:-$ENV_USER_PASS}"                      #
 | 
			
		||||
# ENV_ROOT_USER_NAME="${root_user_name:-$ENV_ROOT_USER_NAME}"       #
 | 
			
		||||
# ENV_ROOT_USER_PASS="${root_user_pass:-$ENV_ROOT_USER_PASS}"       #
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
  [ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] || return 1
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# script to start server
 | 
			
		||||
__run_start_script() {
 | 
			
		||||
  local user="${SERVICE_USER:-root}"
 | 
			
		||||
  local workdir="${WORKDIR:-$WORK_DIR}"
 | 
			
		||||
  local cmd="$EXEC_CMD_BIN $EXEC_CMD_ARGS"
 | 
			
		||||
  local lc_type="${LC_ALL:-${LC_CTYPE:-$LANG}}"
 | 
			
		||||
  local home="${workdir//\/root/\/tmp\/docker}"
 | 
			
		||||
  local path="/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
  if [ -z "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
    __post_execute 2>"/dev/stderr" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    echo "Initializing $SCRIPT_NAME has completed"
 | 
			
		||||
  else
 | 
			
		||||
    # ensure the command exists
 | 
			
		||||
    if [ ! -x "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is not a valid executable"
 | 
			
		||||
      exit 2
 | 
			
		||||
    fi
 | 
			
		||||
    # set working directories
 | 
			
		||||
    [ -z "$home" ] && home="${workdir:-/tmp/docker}"
 | 
			
		||||
    [ "$home" = "/root" ] && home="/tmp/docker"
 | 
			
		||||
    [ "$home" = "$workdir" ] && workdir=""
 | 
			
		||||
    # create needed directories
 | 
			
		||||
    [ -n "$home" ] && { [ -d "$home" ] || mkdir -p "$home"; }
 | 
			
		||||
    [ -n "$workdir" ] && { [ -d "$workdir" ] || mkdir -p "$workdir" || workdir="/tmp"; }
 | 
			
		||||
    [ -n "$workdir" ] && __cd "$workdir" || { [ -n "$home" ] && __cd "$home"; } || __cd "/tmp"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$home" ] && chmod -f 777 "$home"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$workdir" ] && chmod -f 777 "$workdir"
 | 
			
		||||
    # check and exit if already running
 | 
			
		||||
    if __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is already running" >&2
 | 
			
		||||
      exit 0
 | 
			
		||||
    else
 | 
			
		||||
      echo "Starting service: $EXEC_CMD_NAME $EXEC_CMD_ARGS"
 | 
			
		||||
      su_cmd touch "$SERVICE_PID_FILE"
 | 
			
		||||
      __post_execute 2>"/dev/stderr" 2>&1 |& tee -a "$LOG_DIR/init.txt" &>/dev/null &
 | 
			
		||||
      su_cmd env -i HOME="$home" LC_CTYPE="$lc_type" PATH="$path" USER="$user" sh -c "$cmd" || return 10
 | 
			
		||||
    fi
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# simple cd function
 | 
			
		||||
__cd() { mkdir -p "$1" && builtin cd "$1" || exit 1; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# process check functions
 | 
			
		||||
__pcheck() { [ -n "$(type -P pgrep 2>/dev/null)" ] && pgrep -x "$1" &>/dev/null && return 0 || return 10; }
 | 
			
		||||
__pgrep() { __pcheck "${1:-$EXEC_CMD_BIN}" || __ps aux 2>/dev/null | grep -Fw " ${1:-$EXEC_CMD_BIN}" | grep -qv ' grep' | grep '^' && return 0 || return 10; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# check if process is already running
 | 
			
		||||
__proc_check() {
 | 
			
		||||
  cmd_bin="$(type -P "${1:-$EXEC_CMD_BIN}")"
 | 
			
		||||
  cmd_name="$(basename "${cmd_bin:-$EXEC_CMD_NAME}")"
 | 
			
		||||
  if __pgrep "$cmd_bin" || __pgrep "$cmd_name"; then
 | 
			
		||||
    SERVICE_IS_RUNNING="true"
 | 
			
		||||
    touch "$SERVICE_PID_FILE"
 | 
			
		||||
    echo "$cmd_name is already running"
 | 
			
		||||
    return 0
 | 
			
		||||
  else
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow ENV_ variable - Import env file
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_EXIT_CODE=0                                           # default exit code
 | 
			
		||||
WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
PRE_EXEC_MESSAGE="${ENV_PRE_EXEC_MESSAGE:-$PRE_EXEC_MESSAGE}" # Show message before execute
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# application specific
 | 
			
		||||
EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
EXEC_CMD_BIN="$(type -P "$EXEC_CMD_BIN" || echo "$EXEC_CMD_BIN")" # set full path
 | 
			
		||||
EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
SERVICE_PID_FILE="/run/init.d/$EXEC_CMD_NAME.pid"                 # set the pid file location
 | 
			
		||||
EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
SERVICE_PID_NUMBER="$(__pgrep)"                                   # check if running
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# create auth directories
 | 
			
		||||
[ -n "$USER_FILE_PREFIX" ] && { [ -d "$USER_FILE_PREFIX" ] || mkdir -p "$USER_FILE_PREFIX"; }
 | 
			
		||||
[ -n "$ROOT_FILE_PREFIX" ] && { [ -d "$ROOT_FILE_PREFIX" ] || mkdir -p "$ROOT_FILE_PREFIX"; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow per init script usernames and passwords
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/name" ] && user_name="$(<"$ETC_DIR/auth/user/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/pass" ] && user_pass="$(<"$ETC_DIR/auth/user/pass")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/name" ] && root_user_name="$(<"$ETC_DIR/auth/root/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/pass" ] && root_user_pass="$(<"$ETC_DIR/auth/root/pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow setting initial users and passwords via environment
 | 
			
		||||
user_name="${user_name:-$ENV_USER_NAME}"
 | 
			
		||||
user_pass="${user_pass:-$ENV_USER_PASS}"
 | 
			
		||||
root_user_name="${root_user_name:-$ENV_ROOT_USER_NAME}"
 | 
			
		||||
root_user_pass="${root_user_pass:-$ENV_ROOT_USER_PASS}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set password to random if variable is random
 | 
			
		||||
if [ "$user_pass" = "random" ]; then
 | 
			
		||||
  user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
if [ "$root_user_pass" = "random" ]; then
 | 
			
		||||
  root_user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow variables via imports - Overwrite existing
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Only run check
 | 
			
		||||
if [ "$1" = "check" ]; then
 | 
			
		||||
  __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"
 | 
			
		||||
  exit $?
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show message if env exists
 | 
			
		||||
if [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  [ -n "$SERVICE_USER" ] && echo "Setting up service to run as $SERVICE_USER" || SERVICE_USER="root"
 | 
			
		||||
  [ -n "$SERVICE_PORT" ] && echo "${EXEC_CMD_NAME:-$EXEC_CMD_BIN} will be running on $SERVICE_PORT" || SERVICE_PORT=""
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set switch user command
 | 
			
		||||
if [ "$SERVICE_USER" = "root" ] || [ -z "$SERVICE_USER" ]; then
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P gosu)" ]; then
 | 
			
		||||
  su_cmd() { gosu $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P runuser)" ]; then
 | 
			
		||||
  su_cmd() { runuser -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P sudo)" ]; then
 | 
			
		||||
  su_cmd() { sudo -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P su)" ]; then
 | 
			
		||||
  su_cmd() { su -s /bin/sh - $SERVICE_USER -c "$@" || return 1; }
 | 
			
		||||
else
 | 
			
		||||
  echo "Can not switch to $SERVICE_USER: attempting to run as root"
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Change to working directory
 | 
			
		||||
[ -n "$WORKDIR" ] && [ -n "$EXEC_CMD_BIN" ] && __cd "$WORKDIR" && echo "Changed to $PWD"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show init message
 | 
			
		||||
__pre_message
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Initialize ssl
 | 
			
		||||
__update_ssl_conf
 | 
			
		||||
__update_ssl_certs
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Updating config files
 | 
			
		||||
__create_env
 | 
			
		||||
__update_conf_files
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run the pre execute commands
 | 
			
		||||
[ -n "$PRE_EXEC_MESSAGE" ] && echo "$PRE_EXEC_MESSAGE"
 | 
			
		||||
__pre_execute
 | 
			
		||||
__run_secure_function
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__run_start_script "$@" |& tee -a "/data/logs/entrypoint.log" &>/dev/null
 | 
			
		||||
if [ "$?" -ne 0 ] && [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  echo "Failed to execute: $EXEC_CMD_BIN $EXEC_CMD_ARGS" |& tee -a "/data/logs/entrypoint.log" "$LOG_DIR/init.txt"
 | 
			
		||||
  SERVICE_EXIT_CODE=10
 | 
			
		||||
  SERVICE_IS_RUNNING="false"
 | 
			
		||||
  rm -Rf "$SERVICE_PID_FILE"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
exit $SERVICE_EXIT_CODE
 | 
			
		||||
							
								
								
									
										404
									
								
								init/done/99-code.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										404
									
								
								init/done/99-code.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,404 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
 | 
			
		||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -o pipefail -x$DEBUGGER_OPTIONS || set -o pipefail
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
printf '%s\n' "# - - - Initializing code - - - #"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_NAME="code"
 | 
			
		||||
SCRIPT_NAME="$(basename "$0" 2>/dev/null)"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
export PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run trap command on exit
 | 
			
		||||
trap 'retVal=$?;[ "$SERVICE_IS_RUNNING" != "true" ] && [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE";exit $retVal' SIGINT SIGTERM EXIT
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# import the functions file
 | 
			
		||||
if [ -f "/usr/local/etc/docker/functions/entrypoint.sh" ]; then
 | 
			
		||||
  . "/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"
 | 
			
		||||
done
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Custom functions
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Show message before execute
 | 
			
		||||
PRE_EXEC_MESSAGE=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Default predefined variables
 | 
			
		||||
WORKDIR=""                 # set working directory
 | 
			
		||||
DATA_DIR="/data"           # set data directory
 | 
			
		||||
WWW_DIR="/data/htdocs/www" # set the web root
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ETC_DIR="$HOME/.config/Code/User" # set etc directory
 | 
			
		||||
CONF_DIR="/config/code"           # set config directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
RUN_DIR="/run/init.d"     # set scripts pid dir
 | 
			
		||||
LOG_DIR="/data/logs/code" # set log directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ROOT_FILE_PREFIX="/config/secure/auth/root" # directory to save username/password for root user
 | 
			
		||||
USER_FILE_PREFIX="/config/secure/auth/user" # directory to save username/password for normal user
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set the database directory
 | 
			
		||||
DATABASE_DIR="${DATABASE_DIR_CODE:-/data/db/code}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional predefined variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# port which service is listening on
 | 
			
		||||
SERVICE_PORT=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# execute command variables
 | 
			
		||||
SERVICE_UID="0"               # set the user id
 | 
			
		||||
SERVICE_USER="x11user"        # execute command as another user
 | 
			
		||||
EXEC_CMD_BIN="code"           # command to execute
 | 
			
		||||
EXEC_CMD_ARGS="-wn $DATA_DIR" # command arguments
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a web server
 | 
			
		||||
IS_WEB_SERVER="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a database server
 | 
			
		||||
IS_DATABASE_SERVICE="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# usernames
 | 
			
		||||
user_name="${CODE_USER_NAME:-}"           # normal user name
 | 
			
		||||
root_user_name="${CODE_ROOT_USER_NAME:-}" # root user name
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# passwords [password/random]
 | 
			
		||||
user_pass="${CODE_USER_PASS_WORD:-}"      # normal user password
 | 
			
		||||
root_user_pass="${CODE_ROOT_PASS_WORD:-}" # root user password
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Overwrite variables from files
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_name" ] && user_name="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && user_pass="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name" ] && root_user_name="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && root_user_pass="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Specifiy custom directories to be created
 | 
			
		||||
ADD_APPLICATION_FILES=""
 | 
			
		||||
ADD_APPLICATION_DIRS=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
APPLICATION_FILES="$LOG_DIR/code.log"
 | 
			
		||||
APPLICATION_DIRS="$RUN_DIR $ETC_DIR $CONF_DIR $LOG_DIR"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__update_conf_files() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
 | 
			
		||||
  # delete files
 | 
			
		||||
  #__rm ""
 | 
			
		||||
 | 
			
		||||
  # define actions
 | 
			
		||||
 | 
			
		||||
  # create default directories
 | 
			
		||||
  for filedirs in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
    if [ -n "$filedirs" ] && [ ! -d "$filedirs" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating directory $filedirs with permissions 777"
 | 
			
		||||
        mkdir -p "$filedirs" && chmod -Rf 777 "$filedirs"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create default files
 | 
			
		||||
  for application_files in $ADD_APPLICATION_FILES $APPLICATION_FILES; do
 | 
			
		||||
    if [ -n "$application_files" ] && [ ! -e "$application_files" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating file $application_files with permissions 777"
 | 
			
		||||
        touch "$application_files" && chmod -Rf 777 "$application_files"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create directories if variable is yes"
 | 
			
		||||
  [ "$IS_WEB_SERVER" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $WWW_DIR" && { [ -d "$WWW_DIR" ] || { (echo "Creating directory $WWW_DIR with permissions 777" && mkdir -p "$WWW_DIR" && chmod -f 777 "$WWW_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  [ "$IS_DATABASE_SERVICE" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $DATABASE_DIR" && { [ -d "$DATABASE_DIR" ] || { (echo "Creating directory $DATABASE_DIR with permissions 777" && mkdir -p "$DATABASE_DIR" && chmod -f 777 "$DATABASE_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  # copy config files to system
 | 
			
		||||
  __file_copy "$CONF_DIR/." "$ETC_DIR/" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  # replace variables
 | 
			
		||||
  # __replace "" "" "$CONF_DIR/code.conf"
 | 
			
		||||
  # replace variables recursively
 | 
			
		||||
  # __find_replace "" "" "$CONF_DIR/"
 | 
			
		||||
  # custom commands
 | 
			
		||||
 | 
			
		||||
  # other
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset application_files filedirs
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run before executing
 | 
			
		||||
__pre_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  # define commands
 | 
			
		||||
 | 
			
		||||
  # execute if directories is empty
 | 
			
		||||
  #__is_dir_empty "" &&
 | 
			
		||||
 | 
			
		||||
  # create user if needed
 | 
			
		||||
  # __create_service_user "$user" "/home/$user" "${USER_GID:-${USER_UID:-1000}"
 | 
			
		||||
  # set user on files/folders
 | 
			
		||||
  if [ -n "$user" ] && [ "$user" != "root" ]; then
 | 
			
		||||
    if grep -s -q "$user:" "/etc/passwd"; then
 | 
			
		||||
      for permissions in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
        if [ -n "$permissions" ] && [ -e "$permissions" ]; then
 | 
			
		||||
          (chown -Rf $user:$user "$permissions" && echo "changed ownership on $permissions to $user") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
        fi
 | 
			
		||||
      done
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset filesperms filename
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run after executing
 | 
			
		||||
__post_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  sleep 60                           # how long to wait before executing
 | 
			
		||||
  echo "Running post commands"       # message
 | 
			
		||||
  # execute commands
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__pre_message() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
  [ -n "$user_name" ] && echo "username:               $user_name" && echo "$user_name" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$user_pass" ] && echo "password:               saved to ${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$user_pass" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
  [ -n "$root_user_name" ] && echo "root username:     $root_user_name" && echo "$root_user_name" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$root_user_pass" ] && echo "root password:     saved to ${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$root_user_pass" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to setup ssl support
 | 
			
		||||
__update_ssl_conf() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__create_env() {
 | 
			
		||||
  cat <<EOF | tee "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" &>/dev/null
 | 
			
		||||
# ENV_WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
# ENV_WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
# ENV_ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
# ENV_DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
# ENV_CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
# ENV_DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
# ENV_SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
# ENV_SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
# ENV_SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
# EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
# EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
# EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
# ENV_USER_NAME="${user_name:-$ENV_USER_NAME}"                      #
 | 
			
		||||
# ENV_USER_PASS="${user_pass:-$ENV_USER_PASS}"                      #
 | 
			
		||||
# ENV_ROOT_USER_NAME="${root_user_name:-$ENV_ROOT_USER_NAME}"       #
 | 
			
		||||
# ENV_ROOT_USER_PASS="${root_user_pass:-$ENV_ROOT_USER_PASS}"       #
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
  [ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] || return 1
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# script to start server
 | 
			
		||||
__run_start_script() {
 | 
			
		||||
  local user="${SERVICE_USER:-root}"
 | 
			
		||||
  local workdir="${WORKDIR:-$WORK_DIR}"
 | 
			
		||||
  local cmd="$EXEC_CMD_BIN $EXEC_CMD_ARGS"
 | 
			
		||||
  local lc_type="${LC_ALL:-${LC_CTYPE:-$LANG}}"
 | 
			
		||||
  local home="${workdir//\/root/\/tmp\/docker}"
 | 
			
		||||
  local path="/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
  if [ -z "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
    __post_execute 2>"/dev/stderr" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    echo "Initializing $SCRIPT_NAME has completed"
 | 
			
		||||
  else
 | 
			
		||||
    # ensure the command exists
 | 
			
		||||
    if [ ! -x "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is not a valid executable"
 | 
			
		||||
      exit 2
 | 
			
		||||
    fi
 | 
			
		||||
    # set working directories
 | 
			
		||||
    [ -z "$home" ] && home="${workdir:-/tmp/docker}"
 | 
			
		||||
    [ "$home" = "/root" ] && home="/tmp/docker"
 | 
			
		||||
    [ "$home" = "$workdir" ] && workdir=""
 | 
			
		||||
    # create needed directories
 | 
			
		||||
    [ -n "$home" ] && { [ -d "$home" ] || mkdir -p "$home"; }
 | 
			
		||||
    [ -n "$workdir" ] && { [ -d "$workdir" ] || mkdir -p "$workdir" || workdir="/tmp"; }
 | 
			
		||||
    [ -n "$workdir" ] && __cd "$workdir" || { [ -n "$home" ] && __cd "$home"; } || __cd "/tmp"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$home" ] && chmod -f 777 "$home"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$workdir" ] && chmod -f 777 "$workdir"
 | 
			
		||||
    # check and exit if already running
 | 
			
		||||
    if __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is already running" >&2
 | 
			
		||||
      exit 0
 | 
			
		||||
    else
 | 
			
		||||
      echo "Starting service: $EXEC_CMD_NAME $EXEC_CMD_ARGS"
 | 
			
		||||
      su_cmd touch "$SERVICE_PID_FILE"
 | 
			
		||||
      __post_execute 2>"/dev/stderr" 2>&1 |& tee -a "$LOG_DIR/init.txt" &>/dev/null &
 | 
			
		||||
      su_cmd env -i HOME="$home" LC_CTYPE="$lc_type" PATH="$path" USER="$user" sh -c "$cmd" || return 10
 | 
			
		||||
    fi
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# simple cd function
 | 
			
		||||
__cd() { mkdir -p "$1" && builtin cd "$1" || exit 1; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# process check functions
 | 
			
		||||
__pcheck() { [ -n "$(type -P pgrep 2>/dev/null)" ] && pgrep -x "$1" &>/dev/null && return 0 || return 10; }
 | 
			
		||||
__pgrep() { __pcheck "${1:-$EXEC_CMD_BIN}" || __ps aux 2>/dev/null | grep -Fw " ${1:-$EXEC_CMD_BIN}" | grep -qv ' grep' | grep '^' && return 0 || return 10; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# check if process is already running
 | 
			
		||||
__proc_check() {
 | 
			
		||||
  cmd_bin="$(type -P "${1:-$EXEC_CMD_BIN}")"
 | 
			
		||||
  cmd_name="$(basename "${cmd_bin:-$EXEC_CMD_NAME}")"
 | 
			
		||||
  if __pgrep "$cmd_bin" || __pgrep "$cmd_name"; then
 | 
			
		||||
    SERVICE_IS_RUNNING="true"
 | 
			
		||||
    touch "$SERVICE_PID_FILE"
 | 
			
		||||
    echo "$cmd_name is already running"
 | 
			
		||||
    return 0
 | 
			
		||||
  else
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow ENV_ variable - Import env file
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_EXIT_CODE=0                                           # default exit code
 | 
			
		||||
WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
PRE_EXEC_MESSAGE="${ENV_PRE_EXEC_MESSAGE:-$PRE_EXEC_MESSAGE}" # Show message before execute
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# application specific
 | 
			
		||||
EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
EXEC_CMD_BIN="$(type -P "$EXEC_CMD_BIN" || echo "$EXEC_CMD_BIN")" # set full path
 | 
			
		||||
EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
SERVICE_PID_FILE="/run/init.d/$EXEC_CMD_NAME.pid"                 # set the pid file location
 | 
			
		||||
EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
SERVICE_PID_NUMBER="$(__pgrep)"                                   # check if running
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# create auth directories
 | 
			
		||||
[ -n "$USER_FILE_PREFIX" ] && { [ -d "$USER_FILE_PREFIX" ] || mkdir -p "$USER_FILE_PREFIX"; }
 | 
			
		||||
[ -n "$ROOT_FILE_PREFIX" ] && { [ -d "$ROOT_FILE_PREFIX" ] || mkdir -p "$ROOT_FILE_PREFIX"; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow per init script usernames and passwords
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/name" ] && user_name="$(<"$ETC_DIR/auth/user/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/pass" ] && user_pass="$(<"$ETC_DIR/auth/user/pass")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/name" ] && root_user_name="$(<"$ETC_DIR/auth/root/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/pass" ] && root_user_pass="$(<"$ETC_DIR/auth/root/pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow setting initial users and passwords via environment
 | 
			
		||||
user_name="${user_name:-$ENV_USER_NAME}"
 | 
			
		||||
user_pass="${user_pass:-$ENV_USER_PASS}"
 | 
			
		||||
root_user_name="${root_user_name:-$ENV_ROOT_USER_NAME}"
 | 
			
		||||
root_user_pass="${root_user_pass:-$ENV_ROOT_USER_PASS}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set password to random if variable is random
 | 
			
		||||
if [ "$user_pass" = "random" ]; then
 | 
			
		||||
  user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
if [ "$root_user_pass" = "random" ]; then
 | 
			
		||||
  root_user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow variables via imports - Overwrite existing
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Only run check
 | 
			
		||||
if [ "$1" = "check" ]; then
 | 
			
		||||
  __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"
 | 
			
		||||
  exit $?
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show message if env exists
 | 
			
		||||
if [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  [ -n "$SERVICE_USER" ] && echo "Setting up service to run as $SERVICE_USER" || SERVICE_USER="root"
 | 
			
		||||
  [ -n "$SERVICE_PORT" ] && echo "${EXEC_CMD_NAME:-$EXEC_CMD_BIN} will be running on $SERVICE_PORT" || SERVICE_PORT=""
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set switch user command
 | 
			
		||||
if [ "$SERVICE_USER" = "root" ] || [ -z "$SERVICE_USER" ]; then
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P gosu)" ]; then
 | 
			
		||||
  su_cmd() { gosu $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P runuser)" ]; then
 | 
			
		||||
  su_cmd() { runuser -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P sudo)" ]; then
 | 
			
		||||
  su_cmd() { sudo -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P su)" ]; then
 | 
			
		||||
  su_cmd() { su -s /bin/sh - $SERVICE_USER -c "$@" || return 1; }
 | 
			
		||||
else
 | 
			
		||||
  echo "Can not switch to $SERVICE_USER: attempting to run as root"
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Change to working directory
 | 
			
		||||
[ -n "$WORKDIR" ] && [ -n "$EXEC_CMD_BIN" ] && __cd "$WORKDIR" && echo "Changed to $PWD"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show init message
 | 
			
		||||
__pre_message
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Initialize ssl
 | 
			
		||||
__update_ssl_conf
 | 
			
		||||
__update_ssl_certs
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Updating config files
 | 
			
		||||
__create_env
 | 
			
		||||
__update_conf_files
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run the pre execute commands
 | 
			
		||||
[ -n "$PRE_EXEC_MESSAGE" ] && echo "$PRE_EXEC_MESSAGE"
 | 
			
		||||
__pre_execute
 | 
			
		||||
__run_secure_function
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__run_start_script "$@" |& tee -a "/data/logs/entrypoint.log" &>/dev/null
 | 
			
		||||
if [ "$?" -ne 0 ] && [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  echo "Failed to execute: $EXEC_CMD_BIN $EXEC_CMD_ARGS" |& tee -a "/data/logs/entrypoint.log" "$LOG_DIR/init.txt"
 | 
			
		||||
  SERVICE_EXIT_CODE=10
 | 
			
		||||
  SERVICE_IS_RUNNING="false"
 | 
			
		||||
  rm -Rf "$SERVICE_PID_FILE"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
exit $SERVICE_EXIT_CODE
 | 
			
		||||
							
								
								
									
										398
									
								
								init/done/99-commitment.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										398
									
								
								init/done/99-commitment.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,398 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
 | 
			
		||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -o pipefail -x$DEBUGGER_OPTIONS || set -o pipefail
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
printf '%s\n' "# - - - Initializing commitment - - - #"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_NAME="commitment"
 | 
			
		||||
SCRIPT_NAME="$(basename "$0" 2>/dev/null)"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
export PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run trap command on exit
 | 
			
		||||
trap 'retVal=$?;[ "$SERVICE_IS_RUNNING" != "true" ] && [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE";exit $retVal' SIGINT SIGTERM EXIT
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# import the functions file
 | 
			
		||||
if [ -f "/usr/local/etc/docker/functions/entrypoint.sh" ]; then
 | 
			
		||||
  . "/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"
 | 
			
		||||
done
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Custom functions
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Show message before execute
 | 
			
		||||
PRE_EXEC_MESSAGE=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Default predefined variables
 | 
			
		||||
WORKDIR=""                    # set working directory
 | 
			
		||||
DATA_DIR="/data"              # set data directory
 | 
			
		||||
WWW_DIR="/var/www/commitment" # set the web root
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ETC_DIR="/etc/commitment"     # set etc directory
 | 
			
		||||
CONF_DIR="/config/commitment" # set config directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
RUN_DIR="/run/init.d"           # set scripts pid dir
 | 
			
		||||
LOG_DIR="/data/logs/commitment" # set log directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ROOT_FILE_PREFIX="/config/secure/auth/root" # directory to save username/password for root user
 | 
			
		||||
USER_FILE_PREFIX="/config/secure/auth/user" # directory to save username/password for normal user
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set the database directory
 | 
			
		||||
DATABASE_DIR="${DATABASE_DIR_COMMITMENT:-/data/db/commitment}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional predefined variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# port which service is listening on
 | 
			
		||||
SERVICE_PORT="80"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# execute command variables
 | 
			
		||||
SERVICE_UID="0"                    # set the user id
 | 
			
		||||
SERVICE_USER="commitment"          # execute command as another user
 | 
			
		||||
EXEC_CMD_BIN="python3"             # command to execute
 | 
			
		||||
EXEC_CMD_ARGS="$WWW_DIR/commit.py" # command arguments
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a web server
 | 
			
		||||
IS_WEB_SERVER="yes"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a database server
 | 
			
		||||
IS_DATABASE_SERVICE="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# usernames
 | 
			
		||||
user_name="${COMMITMENT_USER_NAME:-}"           # normal user name
 | 
			
		||||
root_user_name="${COMMITMENT_ROOT_USER_NAME:-}" # root user name
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# passwords [password/random]
 | 
			
		||||
user_pass="${COMMITMENT_USER_PASS_WORD:-}"      # normal user password
 | 
			
		||||
root_user_pass="${COMMITMENT_ROOT_PASS_WORD:-}" # root user password
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Overwrite variables from files
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_name" ] && user_name="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && user_pass="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name" ] && root_user_name="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && root_user_pass="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Specifiy custom directories to be created
 | 
			
		||||
ADD_APPLICATION_FILES=""
 | 
			
		||||
ADD_APPLICATION_DIRS=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
APPLICATION_FILES="$LOG_DIR/commitment.log"
 | 
			
		||||
APPLICATION_DIRS="$RUN_DIR $ETC_DIR $CONF_DIR $LOG_DIR"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__update_conf_files() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
 | 
			
		||||
  # create default directories
 | 
			
		||||
  for filedirs in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
    if [ -n "$filedirs" ] && [ ! -d "$filedirs" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating directory $filedirs with permissions 777"
 | 
			
		||||
        mkdir -p "$filedirs" && chmod -Rf 777 "$filedirs"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create default files
 | 
			
		||||
  for application_files in $ADD_APPLICATION_FILES $APPLICATION_FILES; do
 | 
			
		||||
    if [ -n "$application_files" ] && [ ! -e "$application_files" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating file $application_files with permissions 777"
 | 
			
		||||
        touch "$application_files" && chmod -Rf 777 "$application_files"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create directories if variable is yes"
 | 
			
		||||
  [ "$IS_WEB_SERVER" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $WWW_DIR" && { [ -d "$WWW_DIR" ] || { (echo "Creating directory $WWW_DIR with permissions 777" && mkdir -p "$WWW_DIR" && chmod -f 777 "$WWW_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  [ "$IS_DATABASE_SERVICE" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $DATABASE_DIR" && { [ -d "$DATABASE_DIR" ] || { (echo "Creating directory $DATABASE_DIR with permissions 777" && mkdir -p "$DATABASE_DIR" && chmod -f 777 "$DATABASE_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  # copy config files to system
 | 
			
		||||
  __file_copy "$CONF_DIR/." "$ETC_DIR/" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  # replace variables
 | 
			
		||||
  __replace "5000" "$SERVICE_PORT" "$WWW_DIR/commit.py"
 | 
			
		||||
  # custom commands
 | 
			
		||||
  if [ -f "$CONF_DIR/messages.local" ]; then
 | 
			
		||||
    cat "$CONF_DIR/messages.local" "$WWW_DIR/commit_messages.txt" 2>/dev/null | sort -u >"$WWW_DIR/commit_messages.txt.tmp"
 | 
			
		||||
    mv -f "$WWW_DIR/commit_messages.txt.tmp" "$WWW_DIR/commit_messages.txt"
 | 
			
		||||
  fi
 | 
			
		||||
  if [ -f "$CONF_DIR/humans.local" ]; then
 | 
			
		||||
    mv -f "$CONF_DIR/humans.local" "$WWW_DIR/main/static/humans.txt"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset application_files filedirs
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run before executing
 | 
			
		||||
__pre_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
 | 
			
		||||
  # create user if needed
 | 
			
		||||
  __create_service_user "$user" "/home/$user" "${USER_GID:-${USER_UID:-1000}}"
 | 
			
		||||
  # set user on files/folders
 | 
			
		||||
  if [ -n "$user" ] && [ "$user" != "root" ]; then
 | 
			
		||||
    if grep -s -q "$user:" "/etc/passwd"; then
 | 
			
		||||
      for permissions in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
        if [ -n "$permissions" ] && [ -e "$permissions" ]; then
 | 
			
		||||
          (chown -Rf $user:$user "$permissions" && echo "changed ownership on $permissions to $user") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
        fi
 | 
			
		||||
      done
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset filesperms filename
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run after executing
 | 
			
		||||
__post_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  sleep 60                           # how long to wait before executing
 | 
			
		||||
  echo "Running post commands"       # message
 | 
			
		||||
  # execute commands
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__pre_message() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
  [ -n "$user_name" ] && echo "username:               $user_name" && echo "$user_name" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$user_pass" ] && echo "password:               saved to ${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$user_pass" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
  [ -n "$root_user_name" ] && echo "root username:     $root_user_name" && echo "$root_user_name" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$root_user_pass" ] && echo "root password:     saved to ${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$root_user_pass" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to setup ssl support
 | 
			
		||||
__update_ssl_conf() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__create_env() {
 | 
			
		||||
  cat <<EOF | tee "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" &>/dev/null
 | 
			
		||||
# ENV_WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
# ENV_WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
# ENV_ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
# ENV_DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
# ENV_CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
# ENV_DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
# ENV_SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
# ENV_SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
# ENV_SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
# EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
# EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
# EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
# ENV_USER_NAME="${user_name:-$ENV_USER_NAME}"                      #
 | 
			
		||||
# ENV_USER_PASS="${user_pass:-$ENV_USER_PASS}"                      #
 | 
			
		||||
# ENV_ROOT_USER_NAME="${root_user_name:-$ENV_ROOT_USER_NAME}"       #
 | 
			
		||||
# ENV_ROOT_USER_PASS="${root_user_pass:-$ENV_ROOT_USER_PASS}"       #
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
  [ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] || return 1
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# script to start server
 | 
			
		||||
__run_start_script() {
 | 
			
		||||
  local user="${SERVICE_USER:-root}"
 | 
			
		||||
  local workdir="${WORKDIR:-$WORK_DIR}"
 | 
			
		||||
  local cmd="$EXEC_CMD_BIN $EXEC_CMD_ARGS"
 | 
			
		||||
  local lc_type="${LC_ALL:-${LC_CTYPE:-$LANG}}"
 | 
			
		||||
  local home="${workdir//\/root/\/tmp\/docker}"
 | 
			
		||||
  local path="/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
  if [ -z "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
    __post_execute 2>"/dev/stderr" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    echo "Initializing $SCRIPT_NAME has completed"
 | 
			
		||||
  else
 | 
			
		||||
    # ensure the command exists
 | 
			
		||||
    if [ ! -x "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is not a valid executable"
 | 
			
		||||
      exit 2
 | 
			
		||||
    fi
 | 
			
		||||
    # set working directories
 | 
			
		||||
    [ -z "$home" ] && home="${workdir:-/tmp/docker}"
 | 
			
		||||
    [ "$home" = "/root" ] && home="/tmp/docker"
 | 
			
		||||
    [ "$home" = "$workdir" ] && workdir=""
 | 
			
		||||
    # create needed directories
 | 
			
		||||
    [ -n "$home" ] && { [ -d "$home" ] || mkdir -p "$home"; }
 | 
			
		||||
    [ -n "$workdir" ] && { [ -d "$workdir" ] || mkdir -p "$workdir" || workdir="/tmp"; }
 | 
			
		||||
    [ -n "$workdir" ] && __cd "$workdir" || { [ -n "$home" ] && __cd "$home"; } || __cd "/tmp"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$home" ] && chmod -f 777 "$home"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$workdir" ] && chmod -f 777 "$workdir"
 | 
			
		||||
    # check and exit if already running
 | 
			
		||||
    if __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is already running" >&2
 | 
			
		||||
      exit 0
 | 
			
		||||
    else
 | 
			
		||||
      echo "Starting service: $EXEC_CMD_NAME $EXEC_CMD_ARGS"
 | 
			
		||||
      su_cmd touch "$SERVICE_PID_FILE"
 | 
			
		||||
      __post_execute 2>"/dev/stderr" 2>&1 |& tee -a "$LOG_DIR/init.txt" &>/dev/null &
 | 
			
		||||
      su_cmd env -i HOME="$home" LC_CTYPE="$lc_type" PATH="$path" USER="$user" sh -c "$cmd" || return 10
 | 
			
		||||
    fi
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# simple cd function
 | 
			
		||||
__cd() { mkdir -p "$1" && builtin cd "$1" || exit 1; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# process check functions
 | 
			
		||||
__pcheck() { [ -n "$(type -P pgrep 2>/dev/null)" ] && pgrep -x "$1" &>/dev/null && return 0 || return 10; }
 | 
			
		||||
__pgrep() { __pcheck "${1:-$EXEC_CMD_BIN}" || __ps aux 2>/dev/null | grep -Fw " ${1:-$EXEC_CMD_BIN}" | grep -qv ' grep' | grep '^' && return 0 || return 10; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# check if process is already running
 | 
			
		||||
__proc_check() {
 | 
			
		||||
  cmd_bin="$(type -P "${1:-$EXEC_CMD_BIN}")"
 | 
			
		||||
  cmd_name="$(basename "${cmd_bin:-$EXEC_CMD_NAME}")"
 | 
			
		||||
  if __pgrep "$cmd_bin" || __pgrep "$cmd_name"; then
 | 
			
		||||
    SERVICE_IS_RUNNING="true"
 | 
			
		||||
    touch "$SERVICE_PID_FILE"
 | 
			
		||||
    echo "$cmd_name is already running"
 | 
			
		||||
    return 0
 | 
			
		||||
  else
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow ENV_ variable - Import env file
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_EXIT_CODE=0                                           # default exit code
 | 
			
		||||
WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
PRE_EXEC_MESSAGE="${ENV_PRE_EXEC_MESSAGE:-$PRE_EXEC_MESSAGE}" # Show message before execute
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# application specific
 | 
			
		||||
EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
EXEC_CMD_BIN="$(type -P "$EXEC_CMD_BIN" || echo "$EXEC_CMD_BIN")" # set full path
 | 
			
		||||
EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
SERVICE_PID_FILE="/run/init.d/$EXEC_CMD_NAME.pid"                 # set the pid file location
 | 
			
		||||
EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
SERVICE_PID_NUMBER="$(__pgrep)"                                   # check if running
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# create auth directories
 | 
			
		||||
[ -n "$USER_FILE_PREFIX" ] && { [ -d "$USER_FILE_PREFIX" ] || mkdir -p "$USER_FILE_PREFIX"; }
 | 
			
		||||
[ -n "$ROOT_FILE_PREFIX" ] && { [ -d "$ROOT_FILE_PREFIX" ] || mkdir -p "$ROOT_FILE_PREFIX"; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow per init script usernames and passwords
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/name" ] && user_name="$(<"$ETC_DIR/auth/user/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/pass" ] && user_pass="$(<"$ETC_DIR/auth/user/pass")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/name" ] && root_user_name="$(<"$ETC_DIR/auth/root/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/pass" ] && root_user_pass="$(<"$ETC_DIR/auth/root/pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow setting initial users and passwords via environment
 | 
			
		||||
user_name="${user_name:-$ENV_USER_NAME}"
 | 
			
		||||
user_pass="${user_pass:-$ENV_USER_PASS}"
 | 
			
		||||
root_user_name="${root_user_name:-$ENV_ROOT_USER_NAME}"
 | 
			
		||||
root_user_pass="${root_user_pass:-$ENV_ROOT_USER_PASS}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set password to random if variable is random
 | 
			
		||||
if [ "$user_pass" = "random" ]; then
 | 
			
		||||
  user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
if [ "$root_user_pass" = "random" ]; then
 | 
			
		||||
  root_user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow variables via imports - Overwrite existing
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Only run check
 | 
			
		||||
if [ "$1" = "check" ]; then
 | 
			
		||||
  __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"
 | 
			
		||||
  exit $?
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show message if env exists
 | 
			
		||||
if [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  [ -n "$SERVICE_USER" ] && echo "Setting up service to run as $SERVICE_USER" || SERVICE_USER="root"
 | 
			
		||||
  [ -n "$SERVICE_PORT" ] && echo "${EXEC_CMD_NAME:-$EXEC_CMD_BIN} will be running on $SERVICE_PORT" || SERVICE_PORT=""
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set switch user command
 | 
			
		||||
if [ "$SERVICE_USER" = "root" ] || [ -z "$SERVICE_USER" ]; then
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P gosu)" ]; then
 | 
			
		||||
  su_cmd() { gosu $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P runuser)" ]; then
 | 
			
		||||
  su_cmd() { runuser -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P sudo)" ]; then
 | 
			
		||||
  su_cmd() { sudo -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P su)" ]; then
 | 
			
		||||
  su_cmd() { su -s /bin/sh - $SERVICE_USER -c "$@" || return 1; }
 | 
			
		||||
else
 | 
			
		||||
  echo "Can not switch to $SERVICE_USER: attempting to run as root"
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Change to working directory
 | 
			
		||||
[ -n "$WORKDIR" ] && [ -n "$EXEC_CMD_BIN" ] && __cd "$WORKDIR" && echo "Changed to $PWD"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show init message
 | 
			
		||||
__pre_message
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Initialize ssl
 | 
			
		||||
__update_ssl_conf
 | 
			
		||||
__update_ssl_certs
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Updating config files
 | 
			
		||||
__create_env
 | 
			
		||||
__update_conf_files
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run the pre execute commands
 | 
			
		||||
[ -n "$PRE_EXEC_MESSAGE" ] && echo "$PRE_EXEC_MESSAGE"
 | 
			
		||||
__pre_execute
 | 
			
		||||
__run_secure_function
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__run_start_script "$@" |& tee -a "/data/logs/entrypoint.log" &>/dev/null
 | 
			
		||||
if [ "$?" -ne 0 ] && [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  echo "Failed to execute: $EXEC_CMD_BIN $EXEC_CMD_ARGS" |& tee -a "/data/logs/entrypoint.log" "$LOG_DIR/init.txt"
 | 
			
		||||
  SERVICE_EXIT_CODE=10
 | 
			
		||||
  SERVICE_IS_RUNNING="false"
 | 
			
		||||
  rm -Rf "$SERVICE_PID_FILE"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
exit $SERVICE_EXIT_CODE
 | 
			
		||||
							
								
								
									
										407
									
								
								init/done/99-deno.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										407
									
								
								init/done/99-deno.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,407 @@
 | 
			
		||||
#!/usr/bin/env bash
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html
 | 
			
		||||
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -o pipefail -x$DEBUGGER_OPTIONS || set -o pipefail
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
printf '%s\n' "# - - - Initializing deno - - - #"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_NAME="deno"
 | 
			
		||||
SCRIPT_NAME="$(basename "$0" 2>/dev/null)"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
export PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run trap command on exit
 | 
			
		||||
trap 'retVal=$?;[ "$SERVICE_IS_RUNNING" != "true" ] && [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE";exit $retVal' SIGINT SIGTERM EXIT
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# import the functions file
 | 
			
		||||
if [ -f "/usr/local/etc/docker/functions/entrypoint.sh" ]; then
 | 
			
		||||
  . "/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"
 | 
			
		||||
done
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Custom functions
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Show message before execute
 | 
			
		||||
PRE_EXEC_MESSAGE=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Default predefined variables
 | 
			
		||||
WORKDIR=""              # set working directory
 | 
			
		||||
DATA_DIR="/data/app"    # set data directory
 | 
			
		||||
WWW_DIR="/var/www/deno" # set the web root
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ETC_DIR="/etc/deno"     # set etc directory
 | 
			
		||||
CONF_DIR="/config/deno" # set config directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
RUN_DIR="/run/init.d"     # set scripts pid dir
 | 
			
		||||
LOG_DIR="/data/logs/deno" # set log directory
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
ROOT_FILE_PREFIX="/config/secure/auth/root" # directory to save username/password for root user
 | 
			
		||||
USER_FILE_PREFIX="/config/secure/auth/user" # directory to save username/password for normal user
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set the database directory
 | 
			
		||||
DATABASE_DIR="${DATABASE_DIR_DENO:-/data/db/deno}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional predefined variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# port which service is listening on
 | 
			
		||||
SERVICE_PORT="${PORT:-3000}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# execute command variables
 | 
			
		||||
SERVICE_UID="0"            # set the user id
 | 
			
		||||
SERVICE_USER="root"        # execute command as another user
 | 
			
		||||
EXEC_CMD_BIN="deno"        # command to execute
 | 
			
		||||
EXEC_CMD_ARGS="task start" # command arguments
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a web server
 | 
			
		||||
IS_WEB_SERVER="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Is this service a database server
 | 
			
		||||
IS_DATABASE_SERVICE="no"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Additional variables
 | 
			
		||||
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# usernames
 | 
			
		||||
user_name="${DENO_USER_NAME:-}"           # normal user name
 | 
			
		||||
root_user_name="${DENO_ROOT_USER_NAME:-}" # root user name
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# passwords [password/random]
 | 
			
		||||
user_pass="${DENO_USER_PASS_WORD:-}"      # normal user password
 | 
			
		||||
root_user_pass="${DENO_ROOT_PASS_WORD:-}" # root user password
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Overwrite variables from files
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_name" ] && user_name="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && user_pass="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name" ] && root_user_name="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name")"
 | 
			
		||||
[ -f "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" ] && root_user_pass="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Specifiy custom directories to be created
 | 
			
		||||
ADD_APPLICATION_FILES=""
 | 
			
		||||
ADD_APPLICATION_DIRS=""
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
APPLICATION_FILES="$LOG_DIR/deno.log"
 | 
			
		||||
APPLICATION_DIRS="$RUN_DIR $ETC_DIR $CONF_DIR $LOG_DIR"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__update_conf_files() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
 | 
			
		||||
  # create default directories
 | 
			
		||||
  for filedirs in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
    if [ -n "$filedirs" ] && [ ! -d "$filedirs" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating directory $filedirs with permissions 777"
 | 
			
		||||
        mkdir -p "$filedirs" && chmod -Rf 777 "$filedirs"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create default files
 | 
			
		||||
  for application_files in $ADD_APPLICATION_FILES $APPLICATION_FILES; do
 | 
			
		||||
    if [ -n "$application_files" ] && [ ! -e "$application_files" ]; then
 | 
			
		||||
      (
 | 
			
		||||
        echo "Creating file $application_files with permissions 777"
 | 
			
		||||
        touch "$application_files" && chmod -Rf 777 "$application_files"
 | 
			
		||||
      ) |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    fi
 | 
			
		||||
  done
 | 
			
		||||
  # create directories if variable is yes"
 | 
			
		||||
  [ "$IS_WEB_SERVER" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $WWW_DIR" && { [ -d "$WWW_DIR" ] || { (echo "Creating directory $WWW_DIR with permissions 777" && mkdir -p "$WWW_DIR" && chmod -f 777 "$WWW_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  [ "$IS_DATABASE_SERVICE" = "yes" ] && APPLICATION_DIRS="$APPLICATION_DIRS $DATABASE_DIR" && { [ -d "$DATABASE_DIR" ] || { (echo "Creating directory $DATABASE_DIR with permissions 777" && mkdir -p "$DATABASE_DIR" && chmod -f 777 "$DATABASE_DIR") |& tee -a "$LOG_DIR/init.txt" &>/dev/null; }; }
 | 
			
		||||
  # copy config files to system
 | 
			
		||||
  __file_copy "$CONF_DIR/." "$ETC_DIR/" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  # replace variables
 | 
			
		||||
  # __replace "" "" "$CONF_DIR/deno.conf"
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset application_files filedirs
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run before executing
 | 
			
		||||
__pre_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
 | 
			
		||||
  # execute if directories is empty
 | 
			
		||||
  __is_dir_empty "$DATA_DIR" && DATA_DIR="$WWW_DIR"
 | 
			
		||||
 | 
			
		||||
  # create user if needed
 | 
			
		||||
  # __create_service_user "$user" "/home/$user" "${USER_GID:-${USER_UID:-1000}"
 | 
			
		||||
  # set user on files/folders
 | 
			
		||||
  if [ -n "$user" ] && [ "$user" != "root" ]; then
 | 
			
		||||
    if grep -s -q "$user:" "/etc/passwd"; then
 | 
			
		||||
      for permissions in $ADD_APPLICATION_DIRS $APPLICATION_DIRS; do
 | 
			
		||||
        if [ -n "$permissions" ] && [ -e "$permissions" ]; then
 | 
			
		||||
          (chown -Rf $user:$user "$permissions" && echo "changed ownership on $permissions to $user") |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
        fi
 | 
			
		||||
      done
 | 
			
		||||
    fi
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # define commands
 | 
			
		||||
  [ -d "$DATA_DIR" ] && cd "$DATA_DIR" || exit 1
 | 
			
		||||
  if [ -n "$START_SCRIPT" ]; then
 | 
			
		||||
    EXEC_CMD_BIN="$START_SCRIPT"
 | 
			
		||||
  elif [ -f "src/index.ts" ]; then
 | 
			
		||||
    EXEC_CMD_ARGS="src/index.ts"
 | 
			
		||||
  elif [ -f "index.ts" ]; then
 | 
			
		||||
    EXEC_CMD_ARGS="index.ts"
 | 
			
		||||
  elif [ -f "app.ts" ]; then
 | 
			
		||||
    EXEC_CMD_ARGS="app.ts"
 | 
			
		||||
  elif [ -f "server.ts" ]; then
 | 
			
		||||
    EXEC_CMD_ARGS="server.ts"
 | 
			
		||||
  fi
 | 
			
		||||
 | 
			
		||||
  # unset unneeded variables
 | 
			
		||||
  unset filesperms filename
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# function to run after executing
 | 
			
		||||
__post_execute() {
 | 
			
		||||
  local exitCode=0                   # default exit code
 | 
			
		||||
  local user="${SERVICE_USER:-root}" # specifiy different user
 | 
			
		||||
  sleep 60                           # how long to wait before executing
 | 
			
		||||
  echo "Running post commands"       # message
 | 
			
		||||
  # execute commands
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to update config files - IE: change port
 | 
			
		||||
__pre_message() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
  [ -n "$user_name" ] && echo "username:               $user_name" && echo "$user_name" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$user_pass" ] && echo "password:               saved to ${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$user_pass" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
  [ -n "$root_user_name" ] && echo "root username:     $root_user_name" && echo "$root_user_name" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name"
 | 
			
		||||
  [ -n "$root_user_pass" ] && echo "root password:     saved to ${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$root_user_pass" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass"
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# use this function to setup ssl support
 | 
			
		||||
__update_ssl_conf() {
 | 
			
		||||
  local exitCode=0
 | 
			
		||||
 | 
			
		||||
  return $exitCode
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__create_env() {
 | 
			
		||||
  cat <<EOF | tee "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" &>/dev/null
 | 
			
		||||
# ENV_WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
# ENV_WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
# ENV_ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
# ENV_DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
# ENV_CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
# ENV_DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
# ENV_SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
# ENV_SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
# ENV_SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
# EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
# EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
# EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
# ENV_USER_NAME="${user_name:-$ENV_USER_NAME}"                      #
 | 
			
		||||
# ENV_USER_PASS="${user_pass:-$ENV_USER_PASS}"                      #
 | 
			
		||||
# ENV_ROOT_USER_NAME="${root_user_name:-$ENV_ROOT_USER_NAME}"       #
 | 
			
		||||
# ENV_ROOT_USER_PASS="${root_user_pass:-$ENV_ROOT_USER_PASS}"       #
 | 
			
		||||
 | 
			
		||||
EOF
 | 
			
		||||
  [ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] || return 1
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# script to start server
 | 
			
		||||
__run_start_script() {
 | 
			
		||||
  local user="${SERVICE_USER:-root}"
 | 
			
		||||
  local workdir="${WORKDIR:-$WORK_DIR}"
 | 
			
		||||
  local cmd="$EXEC_CMD_BIN $EXEC_CMD_ARGS"
 | 
			
		||||
  local lc_type="${LC_ALL:-${LC_CTYPE:-$LANG}}"
 | 
			
		||||
  local home="${workdir//\/root/\/tmp\/docker}"
 | 
			
		||||
  local path="/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
 | 
			
		||||
  if [ -z "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
    __post_execute 2>"/dev/stderr" |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
    echo "Initializing $SCRIPT_NAME has completed"
 | 
			
		||||
  else
 | 
			
		||||
    # ensure the command exists
 | 
			
		||||
    if [ ! -x "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is not a valid executable"
 | 
			
		||||
      exit 2
 | 
			
		||||
    fi
 | 
			
		||||
    # set working directories
 | 
			
		||||
    [ -z "$home" ] && home="${workdir:-/tmp/docker}"
 | 
			
		||||
    [ "$home" = "/root" ] && home="/tmp/docker"
 | 
			
		||||
    [ "$home" = "$workdir" ] && workdir=""
 | 
			
		||||
    # create needed directories
 | 
			
		||||
    [ -n "$home" ] && { [ -d "$home" ] || mkdir -p "$home"; }
 | 
			
		||||
    [ -n "$workdir" ] && { [ -d "$workdir" ] || mkdir -p "$workdir" || workdir="/tmp"; }
 | 
			
		||||
    [ -n "$workdir" ] && __cd "$workdir" || { [ -n "$home" ] && __cd "$home"; } || __cd "/tmp"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$home" ] && chmod -f 777 "$home"
 | 
			
		||||
    [ "$user" != "root " ] && [ -d "$workdir" ] && chmod -f 777 "$workdir"
 | 
			
		||||
    # check and exit if already running
 | 
			
		||||
    if __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"; then
 | 
			
		||||
      echo "$EXEC_CMD_NAME is already running" >&2
 | 
			
		||||
      exit 0
 | 
			
		||||
    else
 | 
			
		||||
      echo "Starting service: $EXEC_CMD_NAME $EXEC_CMD_ARGS"
 | 
			
		||||
      su_cmd touch "$SERVICE_PID_FILE"
 | 
			
		||||
      __post_execute 2>"/dev/stderr" 2>&1 |& tee -a "$LOG_DIR/init.txt" &>/dev/null &
 | 
			
		||||
      su_cmd env -i HOME="$home" LC_CTYPE="$lc_type" PATH="$path" USER="$user" sh -c "$cmd" || return 10
 | 
			
		||||
    fi
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  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 root:root "$filesperms"
 | 
			
		||||
      fi
 | 
			
		||||
    done |& tee -a "$LOG_DIR/init.txt" &>/dev/null
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# simple cd function
 | 
			
		||||
__cd() { mkdir -p "$1" && builtin cd "$1" || exit 1; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# process check functions
 | 
			
		||||
__pcheck() { [ -n "$(type -P pgrep 2>/dev/null)" ] && pgrep -x "$1" &>/dev/null && return 0 || return 10; }
 | 
			
		||||
__pgrep() { __pcheck "${1:-$EXEC_CMD_BIN}" || __ps aux 2>/dev/null | grep -Fw " ${1:-$EXEC_CMD_BIN}" | grep -qv ' grep' | grep '^' && return 0 || return 10; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# check if process is already running
 | 
			
		||||
__proc_check() {
 | 
			
		||||
  cmd_bin="$(type -P "${1:-$EXEC_CMD_BIN}")"
 | 
			
		||||
  cmd_name="$(basename "${cmd_bin:-$EXEC_CMD_NAME}")"
 | 
			
		||||
  if __pgrep "$cmd_bin" || __pgrep "$cmd_name"; then
 | 
			
		||||
    SERVICE_IS_RUNNING="true"
 | 
			
		||||
    touch "$SERVICE_PID_FILE"
 | 
			
		||||
    echo "$cmd_name is already running"
 | 
			
		||||
    return 0
 | 
			
		||||
  else
 | 
			
		||||
    return 1
 | 
			
		||||
  fi
 | 
			
		||||
}
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow ENV_ variable - Import env file
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
SERVICE_EXIT_CODE=0                                           # default exit code
 | 
			
		||||
WORKDIR="${ENV_WORKDIR:-$WORKDIR}"                            # change to directory
 | 
			
		||||
WWW_DIR="${ENV_WWW_DIR:-$WWW_DIR}"                            # set default web dir
 | 
			
		||||
ETC_DIR="${ENV_ETC_DIR:-$ETC_DIR}"                            # set default etc dir
 | 
			
		||||
DATA_DIR="${ENV_DATA_DIR:-$DATA_DIR}"                         # set default data dir
 | 
			
		||||
CONF_DIR="${ENV_CONF_DIR:-$CONF_DIR}"                         # set default config dir
 | 
			
		||||
DATABASE_DIR="${ENV_DATABASE_DIR:-$DATABASE_DIR}"             # set database dir
 | 
			
		||||
SERVICE_USER="${ENV_SERVICE_USER:-$SERVICE_USER}"             # execute command as another user
 | 
			
		||||
SERVICE_UID="${ENV_SERVICE_UID:-$SERVICE_UID}"                # set the user id
 | 
			
		||||
SERVICE_PORT="${ENV_SERVICE_PORT:-$SERVICE_PORT}"             # port which service is listening on
 | 
			
		||||
PRE_EXEC_MESSAGE="${ENV_PRE_EXEC_MESSAGE:-$PRE_EXEC_MESSAGE}" # Show message before execute
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# application specific
 | 
			
		||||
EXEC_CMD_BIN="${ENV_EXEC_CMD_BIN:-$EXEC_CMD_BIN}"                 # command to execute
 | 
			
		||||
EXEC_CMD_BIN="$(type -P "$EXEC_CMD_BIN" || echo "$EXEC_CMD_BIN")" # set full path
 | 
			
		||||
EXEC_CMD_NAME="$(basename "$EXEC_CMD_BIN")"                       # set the binary name
 | 
			
		||||
SERVICE_PID_FILE="/run/init.d/$EXEC_CMD_NAME.pid"                 # set the pid file location
 | 
			
		||||
EXEC_CMD_ARGS="${ENV_EXEC_CMD_ARGS:-$EXEC_CMD_ARGS}"              # command arguments
 | 
			
		||||
SERVICE_PID_NUMBER="$(__pgrep)"                                   # check if running
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# create auth directories
 | 
			
		||||
[ -n "$USER_FILE_PREFIX" ] && { [ -d "$USER_FILE_PREFIX" ] || mkdir -p "$USER_FILE_PREFIX"; }
 | 
			
		||||
[ -n "$ROOT_FILE_PREFIX" ] && { [ -d "$ROOT_FILE_PREFIX" ] || mkdir -p "$ROOT_FILE_PREFIX"; }
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow per init script usernames and passwords
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/name" ] && user_name="$(<"$ETC_DIR/auth/user/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/user/pass" ] && user_pass="$(<"$ETC_DIR/auth/user/pass")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/name" ] && root_user_name="$(<"$ETC_DIR/auth/root/name")"
 | 
			
		||||
[ -f "$ETC_DIR/auth/root/pass" ] && root_user_pass="$(<"$ETC_DIR/auth/root/pass")"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow setting initial users and passwords via environment
 | 
			
		||||
user_name="${user_name:-$ENV_USER_NAME}"
 | 
			
		||||
user_pass="${user_pass:-$ENV_USER_PASS}"
 | 
			
		||||
root_user_name="${root_user_name:-$ENV_ROOT_USER_NAME}"
 | 
			
		||||
root_user_pass="${root_user_pass:-$ENV_ROOT_USER_PASS}"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set password to random if variable is random
 | 
			
		||||
if [ "$user_pass" = "random" ]; then
 | 
			
		||||
  user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
if [ "$root_user_pass" = "random" ]; then
 | 
			
		||||
  root_user_pass="$(__random_password)"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Allow variables via imports - Overwrite existing
 | 
			
		||||
[ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Only run check
 | 
			
		||||
if [ "$1" = "check" ]; then
 | 
			
		||||
  __proc_check "$EXEC_CMD_NAME" || __proc_check "$EXEC_CMD_BIN"
 | 
			
		||||
  exit $?
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show message if env exists
 | 
			
		||||
if [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  [ -n "$SERVICE_USER" ] && echo "Setting up service to run as $SERVICE_USER" || SERVICE_USER="root"
 | 
			
		||||
  [ -n "$SERVICE_PORT" ] && echo "${EXEC_CMD_NAME:-$EXEC_CMD_BIN} will be running on $SERVICE_PORT" || SERVICE_PORT=""
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# set switch user command
 | 
			
		||||
if [ "$SERVICE_USER" = "root" ] || [ -z "$SERVICE_USER" ]; then
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P gosu)" ]; then
 | 
			
		||||
  su_cmd() { gosu $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P runuser)" ]; then
 | 
			
		||||
  su_cmd() { runuser -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P sudo)" ]; then
 | 
			
		||||
  su_cmd() { sudo -u $SERVICE_USER "$@" || return 1; }
 | 
			
		||||
elif [ "$(builtin type -P su)" ]; then
 | 
			
		||||
  su_cmd() { su -s /bin/sh - $SERVICE_USER -c "$@" || return 1; }
 | 
			
		||||
else
 | 
			
		||||
  echo "Can not switch to $SERVICE_USER: attempting to run as root"
 | 
			
		||||
  su_cmd() { eval "$*" || return 1; }
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Change to working directory
 | 
			
		||||
[ -n "$WORKDIR" ] && [ -n "$EXEC_CMD_BIN" ] && __cd "$WORKDIR" && echo "Changed to $PWD"
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# show init message
 | 
			
		||||
__pre_message
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Initialize ssl
 | 
			
		||||
__update_ssl_conf
 | 
			
		||||
__update_ssl_certs
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# Updating config files
 | 
			
		||||
__create_env
 | 
			
		||||
__update_conf_files
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
# run the pre execute commands
 | 
			
		||||
[ -n "$PRE_EXEC_MESSAGE" ] && echo "$PRE_EXEC_MESSAGE"
 | 
			
		||||
__pre_execute
 | 
			
		||||
__run_secure_function
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
__run_start_script "$@" |& tee -a "/data/logs/entrypoint.log" &>/dev/null
 | 
			
		||||
if [ "$?" -ne 0 ] && [ -n "$EXEC_CMD_BIN" ]; then
 | 
			
		||||
  echo "Failed to execute: $EXEC_CMD_BIN $EXEC_CMD_ARGS" |& tee -a "/data/logs/entrypoint.log" "$LOG_DIR/init.txt"
 | 
			
		||||
  SERVICE_EXIT_CODE=10
 | 
			
		||||
  SERVICE_IS_RUNNING="false"
 | 
			
		||||
  rm -Rf "$SERVICE_PID_FILE"
 | 
			
		||||
fi
 | 
			
		||||
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 | 
			
		||||
exit $SERVICE_EXIT_CODE
 | 
			
		||||
		Reference in New Issue
	
	Block a user