🗃️ Updated Dockerfile* and .env.scripts* 🗃️
Some checks failed
release-tag / release-image (push) Has been cancelled

Dockerfile
rootfs/usr/local/bin/entrypoint.sh
rootfs/usr/local/etc/docker/functions/entrypoint.sh
This commit is contained in:
casjay
2025-11-29 11:04:00 -05:00
parent 49164aac0a
commit a4d0ff569d
3 changed files with 1075 additions and 1070 deletions

View File

@@ -254,6 +254,5 @@ EXPOSE ${SERVICE_PORT} ${ENV_PORTS}
STOPSIGNAL SIGRTMIN+3
CMD [ "tail", "-f", "/dev/null" ]
ENTRYPOINT [ "tini", "-p", "SIGTERM","--", "/usr/local/bin/entrypoint.sh" ]
HEALTHCHECK --start-period=10m --interval=5m --timeout=15s CMD [ "/usr/local/bin/entrypoint.sh", "healthcheck" ]

View File

@@ -1,24 +1,24 @@
#!/usr/bin/env bash
# shellcheck shell=bash
# - - - - - - - - - - - - - - - - - - - - - - - - -
##@Version : 202510311144-git
# @@Author : Jason Hempstead
# @@Contact : jason@casjaysdev.pro
# @@License : WTFPL
##@Version : GEN_SCRIPT_REPLACE_VERSION
# @@Author : GEN_SCRIPT_REPLACE_AUTHOR
# @@Contact : GEN_SCRIPT_REPLACE_EMAIL
# @@License : GEN_SCRIPT_REPLACE_LICENSE
# @@ReadME : entrypoint.sh --help
# @@Copyright : Copyright: (c) 2025 Jason Hempstead, Casjays Developments
# @@Created : Friday, Oct 31, 2025 11:44 EDT
# @@Copyright : GEN_SCRIPT_REPLACE_COPYRIGHT
# @@Created : GEN_SCRIPT_REPLACE_DATE
# @@File : entrypoint.sh
# @@Description : Entrypoint file for bind
# @@Changelog : New script
# @@TODO : Better documentation
# @@Other :
# @@Resource :
# @@Terminal App : no
# @@sudo/root : no
# @@Description : Entrypoint file for GEN_SCRIPT_REPLACE_APPNAME
# @@Changelog : GEN_SCRIPT_REPLACE_CHANGELOG
# @@TODO : GEN_SCRIPT_REPLACE_TODO
# @@Other : GEN_SCRIPT_REPLACE_OTHER
# @@Resource : GEN_SCRIPT_REPLACE_RES
# @@Terminal App : GEN_SCRIPT_REPLACE_TERMINAL
# @@sudo/root : GEN_SCRIPT_REPLACE_SUDO
# @@Template : other/docker-entrypoint
# - - - - - - - - - - - - - - - - - - - - - - - - -
# shellcheck disable=SC1001,SC1003,SC2001,SC2003,SC2016,SC2031,SC2120,SC2155,SC2199,SC2317,SC2329
# shellcheck disable=SC1001,SC1003,SC2001,SC2003,SC2016,SC2031,SC2090,SC2115,SC2120,SC2155,SC2199,SC2229,SC2317,SC2329
# - - - - - - - - - - - - - - - - - - - - - - - - -
# run trap command on exit
trap 'retVal=$?;[ "$SERVICE_IS_RUNNING" != "yes" ] && [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE";exit $retVal' INT TERM PWR
@@ -31,7 +31,7 @@ PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
# - - - - - - - - - - - - - - - - - - - - - - - - -
# Set bash options
SCRIPT_FILE="$0"
CONTAINER_NAME="bind"
CONTAINER_NAME="GEN_SCRIPT_REPLACE_APPNAME"
SCRIPT_NAME="$(basename -- "$SCRIPT_FILE" 2>/dev/null)"
CONTAINER_NAME="${ENV_CONTAINER_NAME:-$CONTAINER_NAME}"
# - - - - - - - - - - - - - - - - - - - - - - - - -
@@ -84,8 +84,8 @@ SERVICE_UID="${SERVICE_UID:-0}" # set the user id
SERVICE_GID="${SERVICE_GID:-0}" # set the group id
# - - - - - - - - - - - - - - - - - - - - - - - - -
# User and group in which the service switches to - IE: nginx,apache,mysql,postgres
SERVICE_USER="${SERVICE_USER:-bind}" # execute command as another user
SERVICE_GROUP="${SERVICE_GROUP:-bind}" # Set the service group
SERVICE_USER="${SERVICE_USER:-GEN_SCRIPT_REPLACE_APPNAME}" # execute command as another user
SERVICE_GROUP="${SERVICE_GROUP:-GEN_SCRIPT_REPLACE_APPNAME}" # Set the service group
# - - - - - - - - - - - - - - - - - - - - - - - - -
# Secondary ports
SERVER_PORTS="" # specifiy other ports
@@ -95,7 +95,7 @@ WEB_SERVER_PORT="" # port : 80,443
# - - - - - - - - - - - - - - - - - - - - - - - - -
# Healthcheck variables
HEALTH_ENABLED="yes" # enable healthcheck [yes/no]
SERVICES_LIST="tini" # comma seperated list of processes for the healthcheck
SERVICES_LIST="tini" # comma separated list of processes for the healthcheck
HEALTH_ENDPOINTS="" # url endpoints: [http://localhost/health,http://localhost/test]
# - - - - - - - - - - - - - - - - - - - - - - - - -
# Update path var
@@ -258,7 +258,7 @@ fi
if [ "$ENTRYPOINT_FIRST_RUN" != "no" ]; then
# Show start message
if [ "$CONFIG_DIR_INITIALIZED" = "no" ] || [ "$DATA_DIR_INITIALIZED" = "no" ]; then
[ "$ENTRYPOINT_MESSAGE" = "yes" ] && echo "Executing entrypoint script for bind"
[ "$ENTRYPOINT_MESSAGE" = "yes" ] && echo "Executing entrypoint script for GEN_SCRIPT_REPLACE_APPNAME"
fi
# - - - - - - - - - - - - - - - - - - - - - - - - -
# Set reusable variables
@@ -371,11 +371,6 @@ else
rm -f /run/__start_init_scripts.pid /run/init.d/*.pid /run/*.pid 2>/dev/null || true
fi
# - - - - - - - - - - - - - - - - - - - - - - - - -
if [ ! -f "/run/__start_init_scripts.pid" ]; then
START_SERVICES="yes"
touch /run/__start_init_scripts.pid
fi
# - - - - - - - - - - - - - - - - - - - - - - - - -
[ "$ENTRYPOINT_MESSAGE" = "yes" ] && __printf_space "40" "The containers ip address is:" "$CONTAINER_IP4_ADDRESS"
# - - - - - - - - - - - - - - - - - - - - - - - - -
# Show configured listing processes
@@ -400,26 +395,26 @@ __run_message
# - - - - - - - - - - - - - - - - - - - - - - - - -
# Just start services
START_SERVICES="${START_SERVICES:-SYSTEM_INIT}"
[ "$1" = "sh" ] && START_SERVICES=no
[ "$1" = "shell" ] && START_SERVICES=no
[ "$1" = "init" ] && START_SERVICES=no
[ "$1" = "backup" ] && START_SERVICES=no
[ "$1" = "healthcheck" ] && START_SERVICES=no
[ "$1" = "cron" ] && START_SERVICES=no
[ "$1" = "tail" ] && START_SERVICES=no
[ "$1" = "logs" ] && START_SERVICES=no
# - - - - - - - - - - - - - - - - - - - - - - - - -
# Start all services if no pidfile
# Determine if we should start services based on command
# Only skip service start for the 'init' command
SKIP_SERVICE_START="no"
[ "$1" = "init" ] && SKIP_SERVICE_START="yes" && CONTAINER_INIT="yes"
[ "$2" = "init" ] && SKIP_SERVICE_START="yes" && CONTAINER_INIT="yes"
# - - - - - - - - - - - - - - - - - - - - - - - - -
# Start all services if no pidfile and not skipping
if [ "$START_SERVICES" = "yes" ] || [ -z "$1" ]; then
if [ "$SKIP_SERVICE_START" = "no" ]; then
[ "$1" = "start" ] && shift 1
[ "$1" = "all" ] && shift 1
[ "$1" = "init" ] && export CONTAINER_INIT="yes"
rm -Rf "/run"/*/*pid 2>/dev/null || true
echo "$$" >"$ENTRYPOINT_PID_FILE"
rm -Rf "/run"/*/*pid
__start_init_scripts "/usr/local/etc/docker/init.d"
START_SERVICES="no"
CONTAINER_INIT="${CONTAINER_INIT:-no}"
fi
START_SERVICES="no"
fi
export START_SERVICES CONTAINER_INIT ENTRYPOINT_PID_FILE
# - - - - - - - - - - - - - - - - - - - - - - - - -
# Begin options
case "$1" in
@@ -481,6 +476,11 @@ backup)
# Docker healthcheck
healthcheck)
shift 1
case "$1" in
init | test)
exit 0
;;
*)
arguments="$*"
healthStatus=0
healthEnabled="${HEALTH_ENABLED:-}"
@@ -497,7 +497,6 @@ healthcheck)
done
fi
services="$(echo "$services" | tr ' ' '\n' | sort -u | grep -v '^$')"
{ [ "$1" = "init" ] || [ "$1" = "test" ]; } && exit 0
for proc in $services; do
if [ -n "$proc" ]; then
if ! __pgrep "$proc"; then
@@ -526,6 +525,8 @@ healthcheck)
[ -n "$healthMessage" ] && echo "$healthMessage"
exit $healthStatus
;;
esac
;;
# show open ports
ports)
shift 1

View File

@@ -18,7 +18,7 @@
# @@sudo/root : no
# @@Template : functions/docker-entrypoint
# - - - - - - - - - - - - - - - - - - - - - - - - -
# shellcheck disable=SC1001,SC1003,SC2001,SC2003,SC2016,SC2031,SC2120,SC2155,SC2199,SC2317,SC2329
# shellcheck disable=SC1001,SC1003,SC2001,SC2003,SC2016,SC2031,SC2090,SC2115,SC2120,SC2155,SC2199,SC2229,SC2317,SC2329
# - - - - - - - - - - - - - - - - - - - - - - - - -
# 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")" || true
@@ -38,6 +38,7 @@ __printf_space() {
printf '%s\n' "$message"
}
# - - - - - - - - - - - - - - - - - - - - - - - - -
__mkdir() { [ -n "$1" ] && mkdir -p "$@" || return 1; }
__rm() { [ -n "$1" ] && [ -e "$1" ] && rm -Rf "${1:?}"; }
__grep_test() { grep -sh "$1" "$2" | grep -qwF "${3:-$1}" || return 1; }
__netstat() { [ -f "$(type -P netstat)" ] && netstat "$@" || return 10; }
@@ -675,7 +676,7 @@ __create_service_user() {
if [ -d "/etc/sudoers.d" ] && [ ! -f "/etc/sudoers.d/$create_user" ]; then
echo "$create_user ALL=(ALL) NOPASSWD: ALL" >"/etc/sudoers.d/$create_user"
elif [ -f "/etc/sudoers" ] && ! grep -qs "$create_user" "/etc/sudoers"; then
echo "$create_user ALL=(ALL) NOPASSWD: ALL" >"/etc/sudoers"
echo "$create_user ALL=(ALL) NOPASSWD: ALL" ? >>"/etc/sudoers"
fi
exitStatus=0
SERVICE_UID="$create_uid"
@@ -786,8 +787,13 @@ __start_init_scripts() {
initStatus="0"
__service_banner "🚫" "Service $service is disabled -" "skipping"
unset SERVICE_DISABLED
# Continue to next service
elif [ "$CONTAINER_INIT" = "yes" ]; then
initStatus="0"
__service_banner "✅" "Service $service completed successfully -" "configuration service"
else
sleep 2
# Allow some time for service to initialize
sleep 1
# Check for service success indicators
local expected_pid_file="/run/init.d/$service.pid"
if [ "$SERVICE_USES_PID" = "no" ]; then
@@ -804,7 +810,6 @@ __start_init_scripts() {
# Service uses PID tracking - verify actual running processes
set +e # Temporarily disable exit on error
retPID=""
# First, try to find actual running process with various name patterns
for name_variant in "$service" "${service}84" "${service}d" "$(echo "$service" | sed 's/-//g')" "$(echo "$service" | tr -d '-')"; do
if [ -z "$retPID" ]; then
@@ -812,9 +817,7 @@ __start_init_scripts() {
[ -n "$retPID" ] && found_process="$name_variant" && break
fi
done
set -e # Re-enable exit on error
if [ -n "$retPID" ] && [ "$retPID" != "0" ]; then
# Found actual running process
initStatus="0"
@@ -1264,24 +1267,26 @@ __check_service() {
}
# - - - - - - - - - - - - - - - - - - - - - - - - -
__switch_to_user() {
if [ "$RUNAS_USER" = "root" ]; then
# Use SERVICE_USER if set, otherwise fall back to RUNAS_USER
local switch_user="${SERVICE_USER:-$RUNAS_USER}"
if [ "$switch_user" = "root" ]; then
su_exec=""
su_cmd() { eval "$@" || return 1; }
elif [ "$(builtin type -P gosu)" ]; then
su_exec="gosu $RUNAS_USER"
su_exec="gosu $switch_user"
su_cmd() { $su_exec "$@" || return 1; }
elif [ "$(builtin type -P runuser)" ]; then
su_exec="runuser -u $RUNAS_USER"
su_exec="runuser -u $switch_user"
su_cmd() { $su_exec "$@" || return 1; }
elif [ "$(builtin type -P sudo)" ]; then
su_exec="sudo -u $RUNAS_USER"
su_exec="sudo -u $switch_user"
su_cmd() { $su_exec "$@" || return 1; }
elif [ "$(builtin type -P su)" ]; then
su_exec="su -s /bin/sh - $RUNAS_USER"
su_exec="su -s /bin/sh - $switch_user"
su_cmd() { $su_exec -c "$@" || return 1; }
else
su_exec=""
su_cmd() { echo "Can not switch to $RUNAS_USER: attempting to run as root" && eval "$@" || return 1; }
su_cmd() { echo "Can not switch to $switch_user: attempting to run as root" && eval "$@" || return 1; }
fi
export su_exec
}