| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | #!/usr/bin/env bash
 | 
					
						
							|  |  |  | # shellcheck shell=bash | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | ##@Version           :  202501060902-git | 
					
						
							|  |  |  | # @@Author           :  Jason Hempstead | 
					
						
							|  |  |  | # @@Contact          :  jason@casjaysdev.pro | 
					
						
							|  |  |  | # @@License          :  LICENSE.md | 
					
						
							|  |  |  | # @@ReadME           :  tor.sh --help | 
					
						
							|  |  |  | # @@Copyright        :  Copyright: (c) 2025 Jason Hempstead, Casjays Developments | 
					
						
							|  |  |  | # @@Created          :  Monday, Jan 06, 2025 09:02 EST | 
					
						
							|  |  |  | # @@File             :  tor.sh | 
					
						
							|  |  |  | # @@Description      : | 
					
						
							|  |  |  | # @@Changelog        :  New script | 
					
						
							|  |  |  | # @@TODO             :  Better documentation | 
					
						
							|  |  |  | # @@Other            : | 
					
						
							|  |  |  | # @@Resource         : | 
					
						
							|  |  |  | # @@Terminal App     :  no | 
					
						
							|  |  |  | # @@sudo/root        :  no | 
					
						
							|  |  |  | # @@Template         :  other/start-service | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | # shellcheck disable=SC1001,SC1003,SC2001,SC2003,SC2016,SC2031,SC2120,SC2155,SC2199,SC2317,SC2329 | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # run trap command on exit | 
					
						
							| 
									
										
										
										
											2025-06-11 15:44:48 -04:00
										 |  |  | trap 'retVal=$?;[ "$SERVICE_IS_RUNNING" != "yes" ] && [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE";exit $retVal' SIGINT SIGTERM | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # setup debugging - https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html | 
					
						
							|  |  |  | [ -f "/config/.debug" ] && [ -z "$DEBUGGER_OPTIONS" ] && export DEBUGGER_OPTIONS="$(<"/config/.debug")" || DEBUGGER_OPTIONS="${DEBUGGER_OPTIONS:-}" | 
					
						
							|  |  |  | { [ "$DEBUGGER" = "on" ] || [ -f "/config/.debug" ]; } && echo "Enabling debugging" && set -xo pipefail -x$DEBUGGER_OPTIONS && export DEBUGGER="on" || set -o pipefail | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | export PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin" | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | SCRIPT_FILE="$0" | 
					
						
							| 
									
										
										
										
											2025-01-06 14:02:40 -05:00
										 |  |  | SERVICE_NAME="tor-server" | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | SCRIPT_NAME="$(basename -- "$SCRIPT_FILE" 2>/dev/null)" | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # exit if __start_init_scripts function hasn't been Initialized | 
					
						
							|  |  |  | if [ ! -f "/run/__start_init_scripts.pid" ]; then | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	echo "__start_init_scripts function hasn't been Initialized" >&2 | 
					
						
							|  |  |  | 	SERVICE_IS_RUNNING="no" | 
					
						
							|  |  |  | 	exit 1 | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | fi | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # import the functions file | 
					
						
							|  |  |  | if [ -f "/usr/local/etc/docker/functions/entrypoint.sh" ]; then | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	. "/usr/local/etc/docker/functions/entrypoint.sh" | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | fi | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # import variables | 
					
						
							|  |  |  | for set_env in "/root/env.sh" "/usr/local/etc/docker/env"/*.sh "/config/env"/*.sh; do | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	[ -f "$set_env" ] && . "$set_env" | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | done | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | printf '%s\n' "# - - - Initializing $SERVICE_NAME - - - #" | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Custom functions | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Script to execute | 
					
						
							|  |  |  | START_SCRIPT="/usr/local/etc/docker/exec/$SERVICE_NAME" | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Reset environment before executing service | 
					
						
							| 
									
										
										
										
											2025-01-06 13:48:49 -05:00
										 |  |  | RESET_ENV="yes" | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Set webroot | 
					
						
							| 
									
										
										
										
											2025-02-03 15:20:20 -05:00
										 |  |  | WWW_ROOT_DIR="/usr/local/share/httpd/default" | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Default predefined variables | 
					
						
							| 
									
										
										
										
											2025-01-06 15:55:39 -05:00
										 |  |  | DATA_DIR="/data/tor/server"   # set data directory | 
					
						
							| 
									
										
										
										
											2025-01-06 15:04:47 -05:00
										 |  |  | CONF_DIR="/config/tor/server" # set config directory | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # set the containers etc directory | 
					
						
							| 
									
										
										
										
											2025-01-06 15:04:47 -05:00
										 |  |  | ETC_DIR="/etc/tor/server" | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # set the var dir | 
					
						
							|  |  |  | VAR_DIR="" | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							| 
									
										
										
										
											2025-01-06 15:55:39 -05:00
										 |  |  | TMP_DIR="/tmp/tor/server" # set the temp dir | 
					
						
							|  |  |  | RUN_DIR="/run/tor/server" # set scripts pid dir | 
					
						
							|  |  |  | LOG_DIR="/data/logs/tor"  # set log directory | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Set the working dir | 
					
						
							|  |  |  | WORK_DIR="" | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # port which service is listening on | 
					
						
							|  |  |  | SERVICE_PORT="" | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # User to use to launch service - IE: postgres | 
					
						
							|  |  |  | RUNAS_USER="root" # normally root | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # User and group in which the service switches to - IE: nginx,apache,mysql,postgres | 
					
						
							|  |  |  | #SERVICE_USER="tor"  # execute command as another user | 
					
						
							|  |  |  | #SERVICE_GROUP="tor" # Set the service group | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Set password length | 
					
						
							|  |  |  | RANDOM_PASS_USER="" | 
					
						
							|  |  |  | RANDOM_PASS_ROOT="" | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Set user and group ID | 
					
						
							|  |  |  | SERVICE_UID="0" # set the user id | 
					
						
							|  |  |  | SERVICE_GID="0" # set the group id | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # execute command variables - keep single quotes variables will be expanded later | 
					
						
							| 
									
										
										
										
											2025-01-06 14:32:40 -05:00
										 |  |  | EXEC_CMD_BIN='tor-server'                # command to execute | 
					
						
							|  |  |  | EXEC_CMD_ARGS='-f $CONF_DIR/server.conf' # command arguments | 
					
						
							|  |  |  | EXEC_PRE_SCRIPT=''                       # execute script before | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Is this service a web server | 
					
						
							|  |  |  | IS_WEB_SERVER="no" | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Is this service a database server | 
					
						
							|  |  |  | IS_DATABASE_SERVICE="no" | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Does this service use a database server | 
					
						
							|  |  |  | USES_DATABASE_SERVICE="no" | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Set defualt type - [custom,sqlite,redis,postgres,mariadb,mysql,couchdb,mongodb,supabase] | 
					
						
							|  |  |  | DATABASE_SERVICE_TYPE="sqlite" | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Show message before execute | 
					
						
							|  |  |  | PRE_EXEC_MESSAGE="" | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Set the wait time to execute __post_execute function - minutes | 
					
						
							| 
									
										
										
										
											2025-01-09 02:31:46 -05:00
										 |  |  | POST_EXECUTE_WAIT_TIME="5" | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Update path var | 
					
						
							|  |  |  | PATH="$PATH:." | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Lets get containers ip address | 
					
						
							|  |  |  | IP4_ADDRESS="$(__get_ip4)" | 
					
						
							|  |  |  | IP6_ADDRESS="$(__get_ip6)" | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Where to save passwords to | 
					
						
							|  |  |  | 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 | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # root/admin user info password/random] | 
					
						
							|  |  |  | root_user_name="${TOR_ROOT_USER_NAME:-}" # root user name | 
					
						
							|  |  |  | root_user_pass="${TOR_ROOT_PASS_WORD:-}" # root user password | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Normal user info [password/random] | 
					
						
							|  |  |  | user_name="${TOR_USER_NAME:-}"      # normal user name | 
					
						
							|  |  |  | user_pass="${TOR_USER_PASS_WORD:-}" # normal user password | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Load variables from config | 
					
						
							|  |  |  | [ -f "/config/env/tor.script.sh" ] && . "/config/env/tor.script.sh" # Generated by my dockermgr script | 
					
						
							|  |  |  | [ -f "/config/env/tor.sh" ] && . "/config/env/tor.sh"               # Overwrite the variabes | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Additional predefined variables | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Additional variables | 
					
						
							| 
									
										
										
										
											2025-01-09 00:42:55 -05:00
										 |  |  | TOR_HIDDEN_SERVERS="${TOR_HIDDEN_SERVERS//,/ }" | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Specifiy custom directories to be created | 
					
						
							|  |  |  | ADD_APPLICATION_FILES="" | 
					
						
							|  |  |  | ADD_APPLICATION_DIRS="" | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							| 
									
										
										
										
											2025-01-16 12:15:27 -05:00
										 |  |  | APPLICATION_FILES="" | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | APPLICATION_DIRS="$ETC_DIR $CONF_DIR $LOG_DIR $TMP_DIR $RUN_DIR $VAR_DIR" | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Additional config dirs - will be Copied to /etc/$name | 
					
						
							|  |  |  | ADDITIONAL_CONFIG_DIRS="" | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # define variables that need to be loaded into the service - escape quotes - var=\"value\",other=\"test\" | 
					
						
							|  |  |  | CMD_ENV="" | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Overwrite based on file/directory | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Per Application Variables or imports | 
					
						
							| 
									
										
										
										
											2025-01-06 12:58:25 -05:00
										 |  |  | TOR_DNS_ENABLED="${TOR_DNS_ENABLED:-yes}" | 
					
						
							|  |  |  | TOR_RELAY_ENABLED="${TOR_RELAY_ENABLED:-yes}" | 
					
						
							|  |  |  | TOR_BRIDGE_ENABLED="${TOR_BRIDGE_ENABLED:-yes}" | 
					
						
							|  |  |  | TOR_HIDDEN_ENABLED="${TOR_HIDDEN_ENABLED:-yes}" | 
					
						
							| 
									
										
										
										
											2025-01-06 11:55:15 -05:00
										 |  |  | RANDOM_NICK="$(head -n50 '/dev/random' | tr -dc 'a-zA-Z' | tr -d '[:space:]\042\047\134' | fold -w "32" | sed 's| ||g' | head -n 1)" | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Custom commands to run before copying to /config | 
					
						
							|  |  |  | __run_precopy() { | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	# Define environment | 
					
						
							|  |  |  | 	local hostname=${HOSTNAME} | 
					
						
							|  |  |  | 	# Define actions/commands | 
					
						
							| 
									
										
										
										
											2025-01-06 13:48:49 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	# allow custom functions | 
					
						
							|  |  |  | 	if builtin type -t __run_precopy_local | grep -q 'function'; then __run_precopy_local; fi | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | } | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Custom prerun functions - IE setup WWW_ROOT_DIR | 
					
						
							|  |  |  | __execute_prerun() { | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	# Define environment | 
					
						
							|  |  |  | 	local hostname=${HOSTNAME} | 
					
						
							|  |  |  | 	# Define actions/commands | 
					
						
							|  |  |  | 	touch "/tmp/init_tor_services" | 
					
						
							|  |  |  | 	# allow custom functions | 
					
						
							|  |  |  | 	if builtin type -t __execute_prerun_local | grep -q 'function'; then __execute_prerun_local; fi | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | } | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Run any pre-execution checks | 
					
						
							|  |  |  | __run_pre_execute_checks() { | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	# Set variables | 
					
						
							|  |  |  | 	local exitStatus=0 | 
					
						
							|  |  |  | 	local pre_execute_checks_MessageST="Running preexecute check for $SERVICE_NAME"   # message to show at start | 
					
						
							|  |  |  | 	local pre_execute_checks_MessageEnd="Finished preexecute check for $SERVICE_NAME" # message to show at completion | 
					
						
							|  |  |  | 	__banner "$pre_execute_checks_MessageST" | 
					
						
							|  |  |  | 	# Put command to execute in parentheses | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		true | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	exitStatus=$? | 
					
						
							|  |  |  | 	__banner "$pre_execute_checks_MessageEnd: Status $exitStatus" | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	# show exit message | 
					
						
							|  |  |  | 	if [ $exitStatus -ne 0 ]; then | 
					
						
							|  |  |  | 		echo "The pre-execution check has failed" >&2 | 
					
						
							|  |  |  | 		[ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE" | 
					
						
							|  |  |  | 		exit 1 | 
					
						
							|  |  |  | 	fi | 
					
						
							|  |  |  | 	# allow custom functions | 
					
						
							|  |  |  | 	if builtin type -t __run_pre_execute_checks_local | grep -q 'function'; then __run_pre_execute_checks_local; fi | 
					
						
							|  |  |  | 	# exit function | 
					
						
							|  |  |  | 	return $exitStatus | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | } | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # use this function to update config files - IE: change port | 
					
						
							|  |  |  | __update_conf_files() { | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	local exitCode=0                                               # default exit code | 
					
						
							|  |  |  | 	local sysname="${SERVER_NAME:-${FULL_DOMAIN_NAME:-$HOSTNAME}}" # set hostname | 
					
						
							|  |  |  | 	# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | 	# delete files | 
					
						
							|  |  |  | 	__rm "$CONF_DIR/server.conf" | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | 	# custom commands | 
					
						
							|  |  |  | 	chmod 600 $RUN_DIR | 
					
						
							|  |  |  | 	chown -Rf ${SERVICE_USER:-$RUNAS_USER}:${SERVICE_GROUP:-$RUNAS_USER} $RUN_DIR | 
					
						
							|  |  |  | 	mkdir -p "/run/tor/sites" && chmod 777 "/run/tor/sites" | 
					
						
							|  |  |  | 	# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | 	# replace variables | 
					
						
							| 
									
										
										
										
											2025-01-06 15:55:39 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | 	cat <<EOF >>"$CONF_DIR/server.conf" | 
					
						
							| 
									
										
										
										
											2025-01-09 00:42:55 -05:00
										 |  |  | ##### Server | 
					
						
							| 
									
										
										
										
											2025-01-06 15:55:39 -05:00
										 |  |  | RunAsDaemon 0 | 
					
						
							|  |  |  | HardwareAccel 1 | 
					
						
							| 
									
										
										
										
											2025-01-09 00:42:55 -05:00
										 |  |  | AddressDisableIPv6 0 | 
					
						
							| 
									
										
										
										
											2025-01-16 11:50:23 -05:00
										 |  |  | #VirtualAddrNetwork 10.0.0.0/12 | 
					
						
							| 
									
										
										
										
											2025-01-09 00:42:55 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | #### control settings | 
					
						
							| 
									
										
										
										
											2025-01-16 11:43:20 -05:00
										 |  |  | ControlPort 127.0.0.1:9051 | 
					
						
							| 
									
										
										
										
											2025-01-06 15:55:39 -05:00
										 |  |  | ControlSocketsGroupWritable 1 | 
					
						
							|  |  |  | CookieAuthentication 1 | 
					
						
							|  |  |  | CookieAuthFileGroupReadable 1 | 
					
						
							|  |  |  | HashedControlPassword 16:C30604D1D90F341360A14D9A1048C1DF4A3CA2411444E52EE5B954C01F | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-08-02 18:42:31 -04:00
										 |  |  | ##### bandwidth and accounting (monitoring only) | 
					
						
							|  |  |  | Nickname ${TOR_SERVER_NICK_NAME:-$RANDOM_NICK} | 
					
						
							|  |  |  | ContactInfo ${TOR_SERVER_ADMIN:-tor-admin@$HOSTNAME} | 
					
						
							|  |  |  | AccountingMax ${TOR_SERVER_ACCOUNT_MAX:-250 GBytes} | 
					
						
							|  |  |  | AccountingStart month 1 00:00 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-06 15:55:39 -05:00
										 |  |  | ##### directiories and files | 
					
						
							|  |  |  | DataDirectory $DATA_DIR | 
					
						
							|  |  |  | ControlSocket $RUN_DIR/server.sock | 
					
						
							|  |  |  | CookieAuthFile $RUN_DIR/server.authcookie | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ##### socks option | 
					
						
							| 
									
										
										
										
											2025-01-16 11:50:23 -05:00
										 |  |  | SOCKSPort 0.0.0.0:9050 | 
					
						
							| 
									
										
										
										
											2025-01-06 15:55:39 -05:00
										 |  |  | SafeSocks ${TOR_SOCKS_SAFE:-0} | 
					
						
							|  |  |  | SocksTimeout ${TOR_SOCKS_TIMEOUT:-10} | 
					
						
							| 
									
										
										
										
											2025-01-06 15:17:34 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | ##### logging | 
					
						
							|  |  |  | LogMessageDomains 1 | 
					
						
							| 
									
										
										
										
											2025-01-16 11:43:20 -05:00
										 |  |  | Log notice file $LOG_DIR/server.log | 
					
						
							| 
									
										
										
										
											2025-01-06 15:17:34 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-09 00:42:55 -05:00
										 |  |  | ##### port mappings | 
					
						
							|  |  |  | TransPort 0.0.0.0:9040 | 
					
						
							|  |  |  | HTTPTunnelPort 0.0.0.0:9080 | 
					
						
							| 
									
										
										
										
											2025-01-06 15:17:34 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-08-02 18:42:31 -04:00
										 |  |  | ##### hidden services | 
					
						
							|  |  |  | HiddenServiceDir ${TOR_HIDDEN_SERVICE_DIR:-$DATA_DIR/hidden_service} | 
					
						
							|  |  |  | HiddenServicePort ${TOR_HIDDEN_SERVICE_PORT:-80 127.0.0.1:80} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ##### security | 
					
						
							|  |  |  | SafeLogging 1 | 
					
						
							|  |  |  | UseEntryGuards 1 | 
					
						
							|  |  |  | NumEntryGuards 3 | 
					
						
							|  |  |  | DisableAllSwap 1 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-10 06:56:37 -05:00
										 |  |  | ##### exit relay | 
					
						
							| 
									
										
										
										
											2025-08-02 18:42:31 -04:00
										 |  |  | ExcludeNodes {ru},{cn},{ir},{kp},{sy} | 
					
						
							| 
									
										
										
										
											2025-01-10 06:56:37 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-06 15:17:34 -05:00
										 |  |  | EOF | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	# define actions | 
					
						
							|  |  |  | 	if [ "$TOR_DNS_ENABLED" = "yes" ]; then | 
					
						
							|  |  |  | 		SHOW_HIDDEN_HOSTNAMES=yes | 
					
						
							|  |  |  | 		mkdir -p "$CONF_DIR/conf.d" | 
					
						
							|  |  |  | 		cat <<EOF >>"$CONF_DIR/server.conf" | 
					
						
							| 
									
										
										
										
											2025-01-06 13:58:01 -05:00
										 |  |  | #### dns forwarder | 
					
						
							| 
									
										
										
										
											2025-01-16 11:55:41 -05:00
										 |  |  | Log notice file $LOG_DIR/dns.log | 
					
						
							|  |  |  | DNSPort 0.0.0.0:8053 | 
					
						
							| 
									
										
										
										
											2025-01-08 21:20:56 -05:00
										 |  |  | DNSListenAddress 0.0.0.0,[::] | 
					
						
							| 
									
										
										
										
											2025-01-06 12:22:22 -05:00
										 |  |  | AutomapHostsOnResolve 1 | 
					
						
							|  |  |  | AutomapHostsSuffixes .exit,.onion | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-06 11:55:15 -05:00
										 |  |  | EOF | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	fi | 
					
						
							| 
									
										
										
										
											2025-01-06 15:55:39 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	if [ "$TOR_HIDDEN_ENABLED" = "yes" ]; then | 
					
						
							|  |  |  | 		mkdir -p "$CONF_DIR/hidden.d" | 
					
						
							|  |  |  | 		mkdir -p "$DATA_DIR/services" | 
					
						
							|  |  |  | 		chmod 700 "$DATA_DIR/services" | 
					
						
							|  |  |  | 		cat <<EOF >>"$CONF_DIR/server.conf" | 
					
						
							| 
									
										
										
										
											2025-02-08 12:08:41 -05:00
										 |  |  | #### hidden services | 
					
						
							| 
									
										
										
										
											2025-01-06 15:55:39 -05:00
										 |  |  | HiddenServiceDir $DATA_DIR/services/default | 
					
						
							|  |  |  | HiddenServicePort 80 127.0.0.1:80 | 
					
						
							|  |  |  | %include $CONF_DIR/hidden.d/*.conf | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | EOF | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	fi | 
					
						
							| 
									
										
										
										
											2025-01-09 01:50:02 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	cat <<EOF >>"$CONF_DIR/server.conf" | 
					
						
							| 
									
										
										
										
											2025-01-06 15:55:39 -05:00
										 |  |  | ##### include configurations | 
					
						
							|  |  |  | %include $CONF_DIR/conf.d/*.conf | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | EOF | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	if [ "$TOR_DEBUG" = "yes" ]; then | 
					
						
							|  |  |  | 		sed -i 's|#Log debug|Log debug|g' "$CONF_DIR/server.conf" | 
					
						
							|  |  |  | 	fi | 
					
						
							| 
									
										
										
										
											2025-01-06 15:55:39 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	# allow custom functions | 
					
						
							|  |  |  | 	if builtin type -t __update_conf_files_local | grep -q 'function'; then __update_conf_files_local; fi | 
					
						
							|  |  |  | 	# exit function | 
					
						
							|  |  |  | 	return $exitCode | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | } | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # function to run before executing | 
					
						
							|  |  |  | __pre_execute() { | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	local exitCode=0                                               # default exit code | 
					
						
							|  |  |  | 	local sysname="${SERVER_NAME:-${FULL_DOMAIN_NAME:-$HOSTNAME}}" # set hostname | 
					
						
							|  |  |  | 	# execute if directories is empty | 
					
						
							|  |  |  | 	# __is_dir_empty "$CONF_DIR" && true | 
					
						
							|  |  |  | 	# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | 	# define actions to run after copying to /config | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | 	# unset unneeded variables | 
					
						
							|  |  |  | 	unset sysname | 
					
						
							|  |  |  | 	# Lets wait a few seconds before continuing | 
					
						
							|  |  |  | 	sleep 5 | 
					
						
							|  |  |  | 	# allow custom functions | 
					
						
							|  |  |  | 	if builtin type -t __pre_execute_local | grep -q 'function'; then __pre_execute_local; fi | 
					
						
							|  |  |  | 	# exit function | 
					
						
							|  |  |  | 	return $exitCode | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | } | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # function to run after executing | 
					
						
							|  |  |  | __post_execute() { | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	local pid=""                                                    # init pid var | 
					
						
							|  |  |  | 	local retVal=0                                                  # set default exit code | 
					
						
							|  |  |  | 	local ctime=${POST_EXECUTE_WAIT_TIME:-1}                        # how long to wait before executing | 
					
						
							|  |  |  | 	local waitTime=$((ctime * 60))                                  # convert minutes to seconds | 
					
						
							|  |  |  | 	local postMessageST="Running post commands for $SERVICE_NAME"   # message to show at start | 
					
						
							|  |  |  | 	local postMessageEnd="Finished post commands for $SERVICE_NAME" # message to show at completion | 
					
						
							|  |  |  | 	# wait | 
					
						
							|  |  |  | 	sleep $waitTime | 
					
						
							|  |  |  | 	# execute commands after waiting | 
					
						
							|  |  |  | 	( | 
					
						
							|  |  |  | 		# commands to execute | 
					
						
							|  |  |  | 		while :; do | 
					
						
							|  |  |  | 			if pgrep unbound >/dev/null 2>&1; then | 
					
						
							|  |  |  | 				break | 
					
						
							|  |  |  | 			else | 
					
						
							|  |  |  | 				sleep 10 | 
					
						
							|  |  |  | 			fi | 
					
						
							|  |  |  | 		done | 
					
						
							|  |  |  | 		# show message | 
					
						
							|  |  |  | 		__banner "$postMessageST" | 
					
						
							|  |  |  | 		if [ -d "/data/htdocs/www" ]; then | 
					
						
							|  |  |  | 			WWW_ROOT_DIR="/data/htdocs/www" | 
					
						
							|  |  |  | 		fi | 
					
						
							|  |  |  | 		if [ -d "$DATA_DIR/services" ]; then | 
					
						
							|  |  |  | 			echo "Begin current hidden services"htdocs | 
					
						
							|  |  |  | 			[ -f "$WWW_ROOT_DIR/hostnames.html" ] && rm -f "$WWW_ROOT_DIR/hostnames.html" | 
					
						
							|  |  |  | 			for host in "$DATA_DIR/services"/*/hostname; do | 
					
						
							|  |  |  | 				d="$(dirname -- $host)" | 
					
						
							|  |  |  | 				name="$(basename "$d")" | 
					
						
							|  |  |  | 				url="$(<"$host")" | 
					
						
							|  |  |  | 				site="$(echo "$url" | sed 's|\.onion$||g')" | 
					
						
							|  |  |  | 				echo "$name: $url" | 
					
						
							|  |  |  | 				touch "/run/tor/sites/$site" | 
					
						
							|  |  |  | 				echo '<a href="http://'$url'">'$name'</a><br />' >>"$WWW_ROOT_DIR/hostnames.html" | 
					
						
							|  |  |  | 				if [ "$name" = "default" ]; then echo "$site" >"$WWW_ROOT_DIR/default_host.txt"; fi | 
					
						
							|  |  |  | 			done | 
					
						
							|  |  |  | 			echo "End current hidden services" | 
					
						
							|  |  |  | 		fi | 
					
						
							|  |  |  | 		[ -f "/tmp/init_tor_services" ] && rm -Rf "/tmp/init_tor_services" | 
					
						
							|  |  |  | 		(while :; do sleep 10 && __pgrep $EXEC_CMD_BIN >/dev/null || eval $EXEC_CMD_BIN $EXEC_CMD_ARGS >/dev/null; done &) | 
					
						
							|  |  |  | 		# show exit message | 
					
						
							|  |  |  | 		__banner "$postMessageEnd: Status $retVal" | 
					
						
							|  |  |  | 	) 2>"/dev/stderr" | tee -p -a "/data/logs/init.txt" & | 
					
						
							|  |  |  | 	pid=$! | 
					
						
							|  |  |  | 	ps ax | awk '{print $1}' | grep -v grep | grep -q "$execPid$" && retVal=0 || retVal=10 | 
					
						
							|  |  |  | 	# allow custom functions | 
					
						
							|  |  |  | 	if builtin type -t __post_execute_local | grep -q 'function'; then __post_execute_local; fi | 
					
						
							|  |  |  | 	# exit function | 
					
						
							|  |  |  | 	return $retVal | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | } | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # use this function to update config files - IE: change port | 
					
						
							|  |  |  | __pre_message() { | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	local exitCode=0 | 
					
						
							|  |  |  | 	[ -n "$PRE_EXEC_MESSAGE" ] && eval echo "$PRE_EXEC_MESSAGE" | 
					
						
							|  |  |  | 	# execute commands | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	# allow custom functions | 
					
						
							|  |  |  | 	if builtin type -t __pre_message_local | grep -q 'function'; then __pre_message_local; fi | 
					
						
							|  |  |  | 	# exit function | 
					
						
							|  |  |  | 	return $exitCode | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | } | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # use this function to setup ssl support | 
					
						
							|  |  |  | __update_ssl_conf() { | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	local exitCode=0 | 
					
						
							|  |  |  | 	local sysname="${SERVER_NAME:-${FULL_DOMAIN_NAME:-$HOSTNAME}}" # set hostname | 
					
						
							|  |  |  | 	# execute commands | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	# allow custom functions | 
					
						
							|  |  |  | 	if builtin type -t __update_ssl_conf_local | grep -q 'function'; then __update_ssl_conf_local; fi | 
					
						
							|  |  |  | 	# set exitCode | 
					
						
							|  |  |  | 	return $exitCode | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | } | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | __create_service_env() { | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	local exitCode=0 | 
					
						
							|  |  |  | 	if [ ! -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ]; then | 
					
						
							|  |  |  | 		cat <<EOF | tee -p "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" &>/dev/null
 | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # root/admin user info [password/random] | 
					
						
							|  |  |  | #ENV_ROOT_USER_NAME="${ENV_ROOT_USER_NAME:-$TOR_ROOT_USER_NAME}"   # root user name | 
					
						
							|  |  |  | #ENV_ROOT_USER_PASS="${ENV_ROOT_USER_NAME:-$TOR_ROOT_PASS_WORD}"   # root user password | 
					
						
							|  |  |  | #root_user_name="${ENV_ROOT_USER_NAME:-$root_user_name}"                              # | 
					
						
							|  |  |  | #root_user_pass="${ENV_ROOT_USER_PASS:-$root_user_pass}"                              # | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | #Normal user info [password/random] | 
					
						
							|  |  |  | #ENV_USER_NAME="${ENV_USER_NAME:-$TOR_USER_NAME}"                  # | 
					
						
							|  |  |  | #ENV_USER_PASS="${ENV_USER_PASS:-$TOR_USER_PASS_WORD}"             # | 
					
						
							|  |  |  | #user_name="${ENV_USER_NAME:-$user_name}"                                             # normal user name | 
					
						
							|  |  |  | #user_pass="${ENV_USER_PASS:-$user_pass}"                                             # normal user password | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | EOF | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	fi | 
					
						
							|  |  |  | 	if [ ! -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.local.sh" ]; then | 
					
						
							|  |  |  | 		# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | 		__run_precopy_local() { true; } | 
					
						
							|  |  |  | 		# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | 		__execute_prerun_local() { true; } | 
					
						
							|  |  |  | 		# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | 		__run_pre_execute_checks_local() { true; } | 
					
						
							|  |  |  | 		# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | 		__update_conf_files_local() { true; } | 
					
						
							|  |  |  | 		# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | 		__pre_execute_local() { true; } | 
					
						
							|  |  |  | 		# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | 		__post_execute_local() { true; } | 
					
						
							|  |  |  | 		# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | 		__pre_message_local() { true; } | 
					
						
							|  |  |  | 		# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | 		__update_ssl_conf_local() { true; } | 
					
						
							|  |  |  | 		# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | 	fi | 
					
						
							|  |  |  | 	__file_exists_with_content "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" || exitCode=$((exitCode + 1)) | 
					
						
							|  |  |  | 	__file_exists_with_content "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.local.sh" || exitCode=$((exitCode + 1)) | 
					
						
							|  |  |  | 	return $exitCode | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | } | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # script to start server | 
					
						
							|  |  |  | __run_start_script() { | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	local runExitCode=0 | 
					
						
							|  |  |  | 	local workdir="$(eval echo "${WORK_DIR:-}")"                   # expand variables | 
					
						
							|  |  |  | 	local cmd="$(eval echo "${EXEC_CMD_BIN:-}")"                   # expand variables | 
					
						
							|  |  |  | 	local args="$(eval echo "${EXEC_CMD_ARGS:-}")"                 # expand variables | 
					
						
							|  |  |  | 	local name="$(eval echo "${EXEC_CMD_NAME:-}")"                 # expand variables | 
					
						
							|  |  |  | 	local pre="$(eval echo "${EXEC_PRE_SCRIPT:-}")"                # expand variables | 
					
						
							|  |  |  | 	local extra_env="$(eval echo "${CMD_ENV//,/ }")"               # expand variables | 
					
						
							|  |  |  | 	local lc_type="$(eval echo "${LANG:-${LC_ALL:-$LC_CTYPE}}")"   # expand variables | 
					
						
							|  |  |  | 	local home="$(eval echo "${workdir//\/root/\/tmp\/docker}")"   # expand variables | 
					
						
							|  |  |  | 	local path="$(eval echo "$PATH")"                              # expand variables | 
					
						
							|  |  |  | 	local message="$(eval echo "")"                                # expand variables | 
					
						
							|  |  |  | 	local sysname="${SERVER_NAME:-${FULL_DOMAIN_NAME:-$HOSTNAME}}" # set hostname | 
					
						
							|  |  |  | 	[ -f "$CONF_DIR/$SERVICE_NAME.exec_cmd.sh" ] && . "$CONF_DIR/$SERVICE_NAME.exec_cmd.sh" | 
					
						
							|  |  |  | 	# | 
					
						
							|  |  |  | 	if [ -z "$cmd" ]; then | 
					
						
							|  |  |  | 		__post_execute 2>"/dev/stderr" | tee -p -a "/data/logs/init.txt" | 
					
						
							|  |  |  | 		retVal=$? | 
					
						
							|  |  |  | 		echo "Initializing $SCRIPT_NAME has completed" | 
					
						
							|  |  |  | 		exit $retVal | 
					
						
							|  |  |  | 	else | 
					
						
							|  |  |  | 		# ensure the command exists | 
					
						
							|  |  |  | 		if [ ! -x "$cmd" ]; then | 
					
						
							|  |  |  | 			echo "$name is not a valid executable" | 
					
						
							|  |  |  | 			return 2 | 
					
						
							|  |  |  | 		fi | 
					
						
							|  |  |  | 		# check and exit if already running | 
					
						
							|  |  |  | 		if __proc_check "$name" || __proc_check "$cmd"; then | 
					
						
							|  |  |  | 			echo "$name is already running" >&2 | 
					
						
							|  |  |  | 			return 0 | 
					
						
							|  |  |  | 		else | 
					
						
							|  |  |  | 			# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | 			# show message if env exists | 
					
						
							|  |  |  | 			if [ -n "$cmd" ]; then | 
					
						
							|  |  |  | 				[ -n "$SERVICE_USER" ] && echo "Setting up $cmd to run as $SERVICE_USER" || SERVICE_USER="root" | 
					
						
							|  |  |  | 				[ -n "$SERVICE_PORT" ] && echo "$name will be running on port $SERVICE_PORT" || SERVICE_PORT="" | 
					
						
							|  |  |  | 			fi | 
					
						
							|  |  |  | 			if [ -n "$pre" ] && [ -n "$(command -v "$pre" 2>/dev/null)" ]; then | 
					
						
							|  |  |  | 				export cmd_exec="$pre $cmd $args" | 
					
						
							|  |  |  | 				message="Starting service: $name $args through $pre" | 
					
						
							|  |  |  | 			else | 
					
						
							|  |  |  | 				export cmd_exec="$cmd $args" | 
					
						
							|  |  |  | 				message="Starting service: $name $args" | 
					
						
							|  |  |  | 			fi | 
					
						
							|  |  |  | 			[ -n "$su_exec" ] && echo "using $su_exec" | tee -a -p "/data/logs/init.txt" | 
					
						
							|  |  |  | 			echo "$message" | tee -a -p "/data/logs/init.txt" | 
					
						
							|  |  |  | 			su_cmd touch "$SERVICE_PID_FILE" | 
					
						
							|  |  |  | 			if [ "$RESET_ENV" = "yes" ]; then | 
					
						
							|  |  |  | 				env_command="$(echo "env -i HOME=\"$home\" LC_CTYPE=\"$lc_type\" PATH=\"$path\" HOSTNAME=\"$sysname\" USER=\"${SERVICE_USER:-$RUNAS_USER}\" $extra_env")" | 
					
						
							|  |  |  | 				execute_command="$(__trim "$su_exec $env_command $cmd_exec")" | 
					
						
							|  |  |  | 				if [ ! -f "$START_SCRIPT" ]; then | 
					
						
							|  |  |  | 					cat <<EOF >"$START_SCRIPT" | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | #!/usr/bin/env bash
 | 
					
						
							|  |  |  | trap 'exitCode=\$?;[ \$exitCode -ne 0 ] && [ -f "\$SERVICE_PID_FILE" ] && rm -Rf "\$SERVICE_PID_FILE";exit \$exitCode' EXIT | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | set -Eeo pipefail | 
					
						
							|  |  |  | # Setting up $cmd to run as ${SERVICE_USER:-root} with env | 
					
						
							|  |  |  | retVal=10 | 
					
						
							|  |  |  | cmd="$cmd" | 
					
						
							|  |  |  | SERVICE_NAME="$SERVICE_NAME" | 
					
						
							|  |  |  | SERVICE_PID_FILE="$SERVICE_PID_FILE" | 
					
						
							|  |  |  | $execute_command 2>"/dev/stderr" >>"$LOG_DIR/$SERVICE_NAME.log" & | 
					
						
							|  |  |  | execPid=\$! | 
					
						
							|  |  |  | sleep 2 | 
					
						
							|  |  |  | checkPID="\$(ps ax | awk '{print \$1}' | grep -v grep | grep "\$execPid$" || false)" | 
					
						
							|  |  |  | [ -n "\$execPid"  ] && [ -n "\$checkPID" ] && echo "\$execPid" >"\$SERVICE_PID_FILE" && retVal=0 || retVal=10 | 
					
						
							|  |  |  | [ "\$retVal" = 0 ] && echo "\$cmd has been started" || echo "Failed to start $execute_command" >&2 | 
					
						
							|  |  |  | exit \$retVal | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | EOF | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 				fi | 
					
						
							|  |  |  | 			else | 
					
						
							|  |  |  | 				if [ ! -f "$START_SCRIPT" ]; then | 
					
						
							|  |  |  | 					execute_command="$(__trim "$su_exec $cmd_exec")" | 
					
						
							|  |  |  | 					cat <<EOF >"$START_SCRIPT" | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | #!/usr/bin/env bash
 | 
					
						
							|  |  |  | trap 'exitCode=\$?;[ \$exitCode -ne 0 ] && [ -f "\$SERVICE_PID_FILE" ] && rm -Rf "\$SERVICE_PID_FILE";exit \$exitCode' EXIT | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | set -Eeo pipefail | 
					
						
							|  |  |  | # Setting up $cmd to run as ${SERVICE_USER:-root} | 
					
						
							|  |  |  | retVal=10 | 
					
						
							|  |  |  | cmd="$cmd" | 
					
						
							|  |  |  | SERVICE_NAME="$SERVICE_NAME" | 
					
						
							|  |  |  | SERVICE_PID_FILE="$SERVICE_PID_FILE" | 
					
						
							|  |  |  | $execute_command 2>>"/dev/stderr" >>"$LOG_DIR/$SERVICE_NAME.log" & | 
					
						
							|  |  |  | execPid=\$! | 
					
						
							|  |  |  | sleep 2 | 
					
						
							|  |  |  | checkPID="\$(ps ax | awk '{print \$1}' | grep -v grep | grep "\$execPid$" || false)" | 
					
						
							|  |  |  | [ -n "\$execPid"  ] && [ -n "\$checkPID" ] && echo "\$execPid" >"\$SERVICE_PID_FILE" && retVal=0 || retVal=10 | 
					
						
							|  |  |  | [ "\$retVal" = 0 ] && echo "\$cmd has been started" || echo "Failed to start $execute_command" >&2 >&2 | 
					
						
							|  |  |  | exit \$retVal | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | EOF | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 				fi | 
					
						
							|  |  |  | 			fi | 
					
						
							|  |  |  | 		fi | 
					
						
							|  |  |  | 		[ -x "$START_SCRIPT" ] || chmod 755 -Rf "$START_SCRIPT" | 
					
						
							|  |  |  | 		[ "$CONTAINER_INIT" = "yes" ] || eval sh -c "$START_SCRIPT" | 
					
						
							|  |  |  | 		runExitCode=$? | 
					
						
							|  |  |  | 	fi | 
					
						
							|  |  |  | 	return $runExitCode | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | } | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # username and password actions | 
					
						
							|  |  |  | __run_secure_function() { | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	local filesperms | 
					
						
							|  |  |  | 	if [ -n "$user_name" ] || [ -n "$user_pass" ]; then | 
					
						
							|  |  |  | 		for filesperms in "${USER_FILE_PREFIX}"/*; do | 
					
						
							|  |  |  | 			if [ -e "$filesperms" ]; then | 
					
						
							|  |  |  | 				chmod -Rf 600 "$filesperms" | 
					
						
							|  |  |  | 				chown -Rf $SERVICE_USER:$SERVICE_USER "$filesperms" 2>/dev/null | 
					
						
							|  |  |  | 			fi | 
					
						
							|  |  |  | 		done 2>/dev/null | tee -p -a "/data/logs/init.txt" | 
					
						
							|  |  |  | 	fi | 
					
						
							|  |  |  | 	if [ -n "$root_user_name" ] || [ -n "$root_user_pass" ]; then | 
					
						
							|  |  |  | 		for filesperms in "${ROOT_FILE_PREFIX}"/*; do | 
					
						
							|  |  |  | 			if [ -e "$filesperms" ]; then | 
					
						
							|  |  |  | 				chmod -Rf 600 "$filesperms" | 
					
						
							|  |  |  | 				chown -Rf $SERVICE_USER:$SERVICE_USER "$filesperms" 2>/dev/null | 
					
						
							|  |  |  | 			fi | 
					
						
							|  |  |  | 		done 2>/dev/null | tee -p -a "/data/logs/init.txt" | 
					
						
							|  |  |  | 	fi | 
					
						
							|  |  |  | 	unset filesperms | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | } | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Allow ENV_ variable - Import env file | 
					
						
							|  |  |  | __file_exists_with_content "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" | 
					
						
							|  |  |  | __file_exists_with_content "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.local.sh" && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.local.sh" | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | SERVICE_EXIT_CODE=0 # default exit code | 
					
						
							|  |  |  | # application specific | 
					
						
							|  |  |  | 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 | 
					
						
							|  |  |  | SERVICE_PID_NUMBER="$(__pgrep)"                                            # check if running | 
					
						
							|  |  |  | EXEC_CMD_BIN="$(type -P "$EXEC_CMD_BIN" || echo "$EXEC_CMD_BIN")"          # set full path | 
					
						
							|  |  |  | EXEC_PRE_SCRIPT="$(type -P "$EXEC_PRE_SCRIPT" || echo "$EXEC_PRE_SCRIPT")" # set full path | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Only run check | 
					
						
							|  |  |  | __check_service "$1" && SERVICE_IS_RUNNING=yes | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # ensure needed directories exists | 
					
						
							|  |  |  | [ -d "$LOG_DIR" ] || mkdir -p "$LOG_DIR" | 
					
						
							|  |  |  | [ -d "$RUN_DIR" ] || mkdir -p "$RUN_DIR" | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # 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"; } | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | [ -n "$RUNAS_USER" ] || RUNAS_USER="root" | 
					
						
							|  |  |  | [ -n "$SERVICE_USER" ] || SERVICE_USER="$RUNAS_USER" | 
					
						
							|  |  |  | [ -n "$SERVICE_GROUP" ] || SERVICE_GROUP="${SERVICE_USER:-$RUNAS_USER}" | 
					
						
							|  |  |  | [ "$IS_WEB_SERVER" = "yes" ] && RESET_ENV="yes" && __is_htdocs_mounted | 
					
						
							|  |  |  | [ "$IS_WEB_SERVER" = "yes" ] && [ -z "$SERVICE_PORT" ] && SERVICE_PORT="80" | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Database env | 
					
						
							|  |  |  | if [ "$IS_DATABASE_SERVICE" = "yes" ] || [ "$USES_DATABASE_SERVICE" = "yes" ]; then | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	RESET_ENV="no" | 
					
						
							|  |  |  | 	DATABASE_CREATE="${ENV_DATABASE_CREATE:-$DATABASE_CREATE}" | 
					
						
							|  |  |  | 	DATABASE_USER_NORMAL="${ENV_DATABASE_USER:-${DATABASE_USER_NORMAL:-$user_name}}" | 
					
						
							|  |  |  | 	DATABASE_PASS_NORMAL="${ENV_DATABASE_PASSWORD:-${DATABASE_PASS_NORMAL:-$user_pass}}" | 
					
						
							|  |  |  | 	DATABASE_USER_ROOT="${ENV_DATABASE_ROOT_USER:-${DATABASE_USER_ROOT:-$root_user_name}}" | 
					
						
							|  |  |  | 	DATABASE_PASS_ROOT="${ENV_DATABASE_ROOT_PASSWORD:-${DATABASE_PASS_ROOT:-$root_user_pass}}" | 
					
						
							|  |  |  | 	if [ -n "$DATABASE_PASS_NORMAL" ] && [ ! -f "${USER_FILE_PREFIX}/db_pass_user" ]; then | 
					
						
							|  |  |  | 		echo "$DATABASE_PASS_NORMAL" >"${USER_FILE_PREFIX}/db_pass_user" | 
					
						
							|  |  |  | 	fi | 
					
						
							|  |  |  | 	if [ -n "$DATABASE_PASS_ROOT" ] && [ ! -f "${ROOT_FILE_PREFIX}/db_pass_root" ]; then | 
					
						
							|  |  |  | 		echo "$DATABASE_PASS_ROOT" >"${ROOT_FILE_PREFIX}/db_pass_root" | 
					
						
							|  |  |  | 	fi | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | fi | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # [DATABASE_DIR_[SQLITE,REDIS,POSTGRES,MARIADB,COUCHDB,MONGODB,SUPABASE]] | 
					
						
							|  |  |  | if [ "$DATABASE_SERVICE_TYPE" = "custom" ]; then | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	DATABASE_DIR="${DATABASE_DIR_CUSTOM:-/data/db/custom}" | 
					
						
							|  |  |  | 	DATABASE_BASE_DIR="${DATABASE_DIR_CUSTOM:-/data/db/custom}" | 
					
						
							|  |  |  | 	DATABASE_ADMIN_WWW_ROOT="${DATABASE_ADMIN_WWW_ROOT_CUSTOM:-/usr/local/share/httpd/admin/databases}" | 
					
						
							|  |  |  | 	[ -d "$DATABASE_ADMIN_WWW_ROOT" ] && SERVER_ADMIN_URL="${SERVER_ADMIN_URL_CUSTOM:-/admin/dbadmin}" | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | elif [ "$SERVICE_NAME" = "redis" ] || [ "$DATABASE_SERVICE_TYPE" = "redis" ]; then | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	DATABASE_DIR="${DATABASE_DIR_REDIS:-/data/db/redis}" | 
					
						
							|  |  |  | 	DATABASE_BASE_DIR="${DATABASE_DIR_REDIS:-/data/db/redis}" | 
					
						
							|  |  |  | 	DATABASE_ADMIN_WWW_ROOT="${DATABASE_ADMIN_WWW_ROOT_REDIS:-/usr/local/share/httpd/admin/redis}" | 
					
						
							|  |  |  | 	[ -d "$DATABASE_ADMIN_WWW_ROOT" ] && SERVER_ADMIN_URL="${SERVER_ADMIN_URL_REDIS:-/admin/redis}" | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | elif [ "$SERVICE_NAME" = "postgres" ] || [ "$DATABASE_SERVICE_TYPE" = "postgres" ]; then | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	DATABASE_DIR="${DATABASE_DIR_POSTGRES:-/data/db/postgres}" | 
					
						
							|  |  |  | 	DATABASE_BASE_DIR="${DATABASE_DIR_POSTGRES:-/data/db/postgres}" | 
					
						
							|  |  |  | 	DATABASE_ADMIN_WWW_ROOT="${DATABASE_ADMIN_WWW_ROOT_POSTGRES:-/usr/local/share/httpd/admin/postgres}" | 
					
						
							|  |  |  | 	[ -d "$DATABASE_ADMIN_WWW_ROOT" ] && SERVER_ADMIN_URL="${SERVER_ADMIN_URL_POSTGRES:-/admin/postgres}" | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | elif [ "$SERVICE_NAME" = "mariadb" ] || [ "$DATABASE_SERVICE_TYPE" = "mariadb" ]; then | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	DATABASE_DIR="${DATABASE_DIR_MARIADB:-/data/db/mariadb}" | 
					
						
							|  |  |  | 	DATABASE_BASE_DIR="${DATABASE_DIR_MARIADB:-/data/db/mariadb}" | 
					
						
							|  |  |  | 	DATABASE_ADMIN_WWW_ROOT="${DATABASE_ADMIN_WWW_ROOT_MARIADB:-/usr/local/share/httpd/admin/mysql}" | 
					
						
							|  |  |  | 	[ -d "$DATABASE_ADMIN_WWW_ROOT" ] && SERVER_ADMIN_URL="${SERVER_ADMIN_URL_MARIADB:-/admin/mysql}" | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | elif [ "$SERVICE_NAME" = "mysql" ] || [ "$DATABASE_SERVICE_TYPE" = "mysql" ]; then | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	DATABASE_DIR="${DATABASE_DIR_MYSQL:-/data/db/mysql}" | 
					
						
							|  |  |  | 	DATABASE_BASE_DIR="${DATABASE_DIR_MYSQL:-/data/db/mysql}" | 
					
						
							|  |  |  | 	DATABASE_ADMIN_WWW_ROOT="${DATABASE_ADMIN_WWW_ROOT_MYSQL:-/usr/local/share/httpd/admin/mysql}" | 
					
						
							|  |  |  | 	[ -d "$DATABASE_ADMIN_WWW_ROOT" ] && SERVER_ADMIN_URL="${SERVER_ADMIN_URL_MYSQL:-/admin/mysql}" | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | elif [ "$SERVICE_NAME" = "couchdb" ] || [ "$DATABASE_SERVICE_TYPE" = "couchdb" ]; then | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	DATABASE_DIR="${DATABASE_DIR_COUCHDB:-/data/db/couchdb}" | 
					
						
							|  |  |  | 	DATABASE_BASE_DIR="${DATABASE_DIR_COUCHDB:-/data/db/couchdb}" | 
					
						
							|  |  |  | 	DATABASE_ADMIN_WWW_ROOT="${DATABASE_ADMIN_WWW_ROOT_COUCHDB:-/usr/local/share/httpd/admin/couchdb}" | 
					
						
							|  |  |  | 	[ -d "$DATABASE_ADMIN_WWW_ROOT" ] && SERVER_ADMIN_URL="${SERVER_ADMIN_URL_COUCHDB:-/admin/couchdb}" | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | elif [ "$SERVICE_NAME" = "mongodb" ] || [ "$DATABASE_SERVICE_TYPE" = "mongodb" ]; then | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	DATABASE_DIR="${DATABASE_DIR_MONGODB:-/data/db/mongodb}" | 
					
						
							|  |  |  | 	DATABASE_BASE_DIR="${DATABASE_DIR_MONGODB:-/data/db/mongodb}" | 
					
						
							|  |  |  | 	DATABASE_ADMIN_WWW_ROOT="${DATABASE_ADMIN_WWW_ROOT_MONGODB:-/usr/local/share/httpd/admin/mongodb}" | 
					
						
							|  |  |  | 	[ -d "$DATABASE_ADMIN_WWW_ROOT" ] && SERVER_ADMIN_URL="${SERVER_ADMIN_URL_MONGODB:-/admin/mongodb}" | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | elif [ "$SERVICE_NAME" = "supabase" ] || [ "$DATABASE_SERVICE_TYPE" = "supabase" ]; then | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	DATABASE_DIR="${DATABASE_DIR_SUPABASE:-/data/db/supabase}" | 
					
						
							|  |  |  | 	DATABASE_BASE_DIR="${DATABASE_DIR_SUPABASE:-/data/db/supabase}" | 
					
						
							|  |  |  | 	DATABASE_ADMIN_WWW_ROOT="${DATABASE_ADMIN_WWW_ROOT_SUPABASE:-/usr/local/share/httpd/admin/supabase}" | 
					
						
							|  |  |  | 	[ -d "$DATABASE_ADMIN_WWW_ROOT" ] && SERVER_ADMIN_URL="${SERVER_ADMIN_URL_SUPBASE:-/admin/supabase}" | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | elif [ "$SERVICE_NAME" = "sqlite" ] || [ "$DATABASE_SERVICE_TYPE" = "sqlite" ]; then | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	DATABASE_DIR="${DATABASE_DIR_SQLITE:-/data/db/sqlite}/$SERVER_NAME" | 
					
						
							|  |  |  | 	DATABASE_BASE_DIR="${DATABASE_DIR_SQLITE:-/data/db/sqlite}/$SERVER_NAME" | 
					
						
							|  |  |  | 	DATABASE_ADMIN_WWW_ROOT="${DATABASE_ADMIN_WWW_ROOT_SQLITE:-/usr/local/share/httpd/admin/sqlite}" | 
					
						
							|  |  |  | 	[ -d "$DATABASE_ADMIN_WWW_ROOT" ] && SERVER_ADMIN_URL="${SERVER_ADMIN_URL_SQLITE:-/admin/sqlite}" | 
					
						
							|  |  |  | 	[ -d "$DATABASE_DIR" ] || mkdir -p "$DATABASE_DIR" | 
					
						
							|  |  |  | 	chmod 777 "$DATABASE_DIR" | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | fi | 
					
						
							|  |  |  | [ -n "$DATABASE_ADMIN_WWW_ROOT" ] && { [ ! -d "$DATABASE_ADMIN_WWW_ROOT" ] || mkdir -p "${DATABASE_ADMIN_WWW_ROOT}"; } | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Allow variables via imports - Overwrite existing | 
					
						
							|  |  |  | [ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ] && . "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # set password to random if variable is random | 
					
						
							|  |  |  | [ "$user_pass" = "random" ] && user_pass="$(__random_password ${RANDOM_PASS_USER:-16})" | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | [ "$root_user_pass" = "random" ] && root_user_pass="$(__random_password ${RANDOM_PASS_ROOT:-16})" | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Allow setting initial users and passwords via environment and save to file | 
					
						
							|  |  |  | [ -n "$user_name" ] && echo "$user_name" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_name" | 
					
						
							|  |  |  | [ -n "$user_pass" ] && echo "$user_pass" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" | 
					
						
							|  |  |  | [ -n "$root_user_name" ] && echo "$root_user_name" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name" | 
					
						
							|  |  |  | [ -n "$root_user_pass" ] && echo "$root_user_pass" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # create needed dirs | 
					
						
							|  |  |  | [ -d "$LOG_DIR" ] || mkdir -p "$LOG_DIR" | 
					
						
							|  |  |  | [ -d "$RUN_DIR" ] || mkdir -p "$RUN_DIR" | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Allow per init script usernames and passwords | 
					
						
							|  |  |  | __file_exists_with_content "${USER_FILE_PREFIX}/${SERVICE_NAME}_name" && user_name="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_name")" | 
					
						
							|  |  |  | __file_exists_with_content "${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && user_pass="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass")" | 
					
						
							|  |  |  | __file_exists_with_content "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name" && root_user_name="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name")" | 
					
						
							|  |  |  | __file_exists_with_content "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && root_user_pass="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass")" | 
					
						
							|  |  |  | __file_exists_with_content "${USER_FILE_PREFIX}/db_pass_user" && DATABASE_PASS_NORMAL="$(<"${USER_FILE_PREFIX}/db_pass_user")" | 
					
						
							|  |  |  | __file_exists_with_content "${ROOT_FILE_PREFIX}/db_pass_root" && DATABASE_PASS_ROOT="$(<"${ROOT_FILE_PREFIX}/db_pass_root")" | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # set hostname for script | 
					
						
							|  |  |  | sysname="${SERVER_NAME:-${FULL_DOMAIN_NAME:-$HOSTNAME}}" | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | __create_service_env | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Setup /config directories | 
					
						
							|  |  |  | __init_config_etc | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # pre-run function | 
					
						
							|  |  |  | __execute_prerun | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # create user if needed | 
					
						
							|  |  |  | __create_service_user "$SERVICE_USER" "$SERVICE_GROUP" "${WORK_DIR:-/home/$SERVICE_USER}" "${SERVICE_UID:-}" "${SERVICE_GID:-}" | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Modify user if needed | 
					
						
							|  |  |  | __set_user_group_id $SERVICE_USER ${SERVICE_UID:-} ${SERVICE_GID:-} | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Create base directories | 
					
						
							|  |  |  | __setup_directories | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # set switch user command | 
					
						
							|  |  |  | __switch_to_user | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Initialize the home/working dir | 
					
						
							|  |  |  | __init_working_dir | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # show init message | 
					
						
							|  |  |  | __pre_message | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | __initialize_db_users | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Initialize ssl | 
					
						
							|  |  |  | __update_ssl_conf | 
					
						
							|  |  |  | __update_ssl_certs | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Set permissions in ${USER_FILE_PREFIX} and ${ROOT_FILE_PREFIX} | 
					
						
							|  |  |  | __run_secure_function | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | __run_precopy | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Copy /config to /etc | 
					
						
							|  |  |  | for config_2_etc in $CONF_DIR $ADDITIONAL_CONFIG_DIRS; do | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	__initialize_system_etc "$config_2_etc" 2>/dev/stderr | tee -p -a "/data/logs/init.txt" | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | done | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Replace variables | 
					
						
							|  |  |  | __initialize_replace_variables "$ETC_DIR" "$CONF_DIR" "$ADDITIONAL_CONFIG_DIRS" "$WWW_ROOT_DIR" | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | __initialize_database | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Updating config files | 
					
						
							|  |  |  | __update_conf_files | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # run the pre execute commands | 
					
						
							|  |  |  | __pre_execute | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # Set permissions | 
					
						
							|  |  |  | __fix_permissions "$SERVICE_USER" "$SERVICE_GROUP" | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | __run_pre_execute_checks 2>/dev/stderr | tee -a -p "/data/logs/entrypoint.log" "/data/logs/init.txt" || return 20 | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | __run_start_script 2>>/dev/stderr | tee -p -a "/data/logs/entrypoint.log" | 
					
						
							|  |  |  | errorCode=$? | 
					
						
							|  |  |  | if [ -n "$EXEC_CMD_BIN" ]; then | 
					
						
							| 
									
										
										
										
											2025-10-22 08:53:17 -04:00
										 |  |  | 	if [ "$errorCode" -eq 0 ]; then | 
					
						
							|  |  |  | 		SERVICE_EXIT_CODE=0 | 
					
						
							|  |  |  | 		SERVICE_IS_RUNNING="yes" | 
					
						
							|  |  |  | 	else | 
					
						
							|  |  |  | 		SERVICE_EXIT_CODE=$errorCode | 
					
						
							|  |  |  | 		SERVICE_IS_RUNNING="${SERVICE_IS_RUNNING:-no}" | 
					
						
							|  |  |  | 		[ -s "$SERVICE_PID_FILE" ] || rm -Rf "$SERVICE_PID_FILE" | 
					
						
							|  |  |  | 	fi | 
					
						
							|  |  |  | 	SERVICE_EXIT_CODE=0 | 
					
						
							| 
									
										
										
										
											2025-01-06 09:09:27 -05:00
										 |  |  | fi | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | # start the post execute function in background | 
					
						
							|  |  |  | __post_execute 2>"/dev/stderr" | tee -p -a "/data/logs/init.txt" & | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | __banner "Initializing of $SERVICE_NAME has completed with statusCode: $SERVICE_EXIT_CODE" | tee -p -a "/data/logs/entrypoint.log" "/data/logs/init.txt" | 
					
						
							|  |  |  | # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - | 
					
						
							|  |  |  | exit $SERVICE_EXIT_CODE |