🔧 Update scripts and add CA cert update 🔧

Update all container scripts to 202605241245-git and add CA certificate
update step after package installation.
- rootfs/root/docker/setup/00-init.sh: updated to latest template
- rootfs/root/docker/setup/01-system.sh: updated to latest template
- rootfs/root/docker/setup/02-packages.sh: add update-ca-certificates/update-ca-trust step
- rootfs/root/docker/setup/03-files.sh: updated to latest template
- rootfs/root/docker/setup/04-users.sh: updated to latest template
- rootfs/root/docker/setup/05-custom.sh: updated to latest template
- rootfs/root/docker/setup/06-post.sh: updated to latest template
- rootfs/root/docker/setup/07-cleanup.sh: updated to latest template
- rootfs/usr/local/bin/entrypoint.sh: updated to 202605241245-git
- rootfs/usr/local/bin/pkmgr: updated to 202605241245-git
- rootfs/usr/local/etc/docker/functions/entrypoint.sh: updated to 202605241245-git

rootfs/root/docker/setup/00-init.sh
rootfs/root/docker/setup/01-system.sh
rootfs/root/docker/setup/02-packages.sh
rootfs/root/docker/setup/03-files.sh
rootfs/root/docker/setup/04-users.sh
rootfs/root/docker/setup/05-custom.sh
rootfs/root/docker/setup/06-post.sh
rootfs/root/docker/setup/07-cleanup.sh
rootfs/usr/local/bin/entrypoint.sh
rootfs/usr/local/bin/pkmgr
rootfs/usr/local/etc/docker/functions/entrypoint.sh
This commit is contained in:
2026-05-24 21:46:18 -04:00
parent 47a092d70a
commit d25162fc48
11 changed files with 334 additions and 676 deletions
+4 -3
View File
@@ -1,12 +1,12 @@
#!/usr/bin/env bash
# shellcheck shell=bash
# - - - - - - - - - - - - - - - - - - - - - - - - -
##@Version : 202604221922-git
##@Version : 202605242059-git
# @@Author : CasjaysDev
# @@Contact : CasjaysDev <docker-admin@casjaysdev.pro>
# @@License : MIT
# @@Copyright : Copyright 2026 CasjaysDev
# @@Created : Wed Apr 22 07:22:55 PM EDT 2026
# @@Created : Sun May 24 08:59:09 PM EDT 2026
# @@File : 00-init.sh
# @@Description : script to run init
# @@Changelog : newScript
@@ -36,9 +36,10 @@ if [ -d "/usr/local/share/template-files/defaults" ]; then rm -Rf "/usr/local/sh
# - - - - - - - - - - - - - - - - - - - - - - - - -
# Set the exit code
#exitCode=$?
exitCode=$?
# - - - - - - - - - - - - - - - - - - - - - - - - -
exit $exitCode
# - - - - - - - - - - - - - - - - - - - - - - - - -
# ex: ts=2 sw=2 et filetype=sh
# - - - - - - - - - - - - - - - - - - - - - - - - -
+4 -3
View File
@@ -1,12 +1,12 @@
#!/usr/bin/env bash
# shellcheck shell=bash
# - - - - - - - - - - - - - - - - - - - - - - - - -
##@Version : 202604221922-git
##@Version : 202605242059-git
# @@Author : CasjaysDev
# @@Contact : CasjaysDev <docker-admin@casjaysdev.pro>
# @@License : MIT
# @@Copyright : Copyright 2026 CasjaysDev
# @@Created : Wed Apr 22 07:22:56 PM EDT 2026
# @@Created : Sun May 24 08:59:09 PM EDT 2026
# @@File : 01-system.sh
# @@Description : script to run system
# @@Changelog : newScript
@@ -34,9 +34,10 @@ exitCode=0
# - - - - - - - - - - - - - - - - - - - - - - - - -
# Set the exit code
#exitCode=$?
exitCode=$?
# - - - - - - - - - - - - - - - - - - - - - - - - -
exit $exitCode
# - - - - - - - - - - - - - - - - - - - - - - - - -
# ex: ts=2 sw=2 et filetype=sh
# - - - - - - - - - - - - - - - - - - - - - - - - -
+10 -77
View File
@@ -1,12 +1,12 @@
#!/usr/bin/env bash
# shellcheck shell=bash
# - - - - - - - - - - - - - - - - - - - - - - - - -
##@Version : 202604221922-git
##@Version : 202605242139-git
# @@Author : CasjaysDev
# @@Contact : CasjaysDev <docker-admin@casjaysdev.pro>
# @@License : MIT
# @@Copyright : Copyright 2026 CasjaysDev
# @@Created : Wed Apr 22 07:22:56 PM EDT 2026
# @@Created : Sun May 24 08:59:10 PM EDT 2026
# @@File : 02-packages.sh
# @@Description : script to run packages
# @@Changelog : newScript
@@ -31,87 +31,20 @@ exitCode=0
# - - - - - - - - - - - - - - - - - - - - - - - - -
# Main script
# Install the latest upstream Go toolchain straight from go.dev.
# We don't use apk's `go` package because Alpine often lags upstream by
# a release. Tarballs from go.dev are HTTPS-served and we additionally
# verify the SHA256 published in the same JSON catalog.
#
# Wrapped in a subshell with `set -e` so any single step (curl, jq,
# sha256sum, tar) that fails aborts the whole installer and the
# parent script returns non-zero - the Dockerfile then fails the build
# rather than silently producing a broken image.
(
set -euo pipefail
case "$(uname -m)" in
x86_64) GO_ARCH="amd64" ;;
aarch64) GO_ARCH="arm64" ;;
armv7l|armv6l) GO_ARCH="armv6l" ;;
i386|i686) GO_ARCH="386" ;;
ppc64le) GO_ARCH="ppc64le" ;;
s390x) GO_ARCH="s390x" ;;
riscv64) GO_ARCH="riscv64" ;;
*)
echo "Unsupported architecture for upstream Go install: $(uname -m)" >&2
exit 1
;;
esac
GO_DL_INDEX="https://go.dev/dl/?mode=json"
GO_INDEX_JSON="$(curl -fsSL "$GO_DL_INDEX")"
# `// empty` makes jq emit nothing (instead of the literal string
# "null") when the path is missing, so the [ -z ... ] check below
# actually catches resolution failures.
GO_VERSION="$(printf '%s' "$GO_INDEX_JSON" \
| jq -r '[.[] | select(.stable == true)][0].version // empty')"
if [ -z "$GO_VERSION" ]; then
echo "Failed to resolve latest Go version from $GO_DL_INDEX" >&2
exit 1
fi
GO_FILE="${GO_VERSION}.linux-${GO_ARCH}.tar.gz"
GO_SHA256="$(printf '%s' "$GO_INDEX_JSON" \
| jq -r --arg f "$GO_FILE" '[.[] | select(.stable == true)][0].files[] | select(.filename == $f) | .sha256 // empty')"
if [ -z "$GO_SHA256" ]; then
echo "Failed to resolve sha256 for $GO_FILE from $GO_DL_INDEX" >&2
exit 1
fi
echo "Installing upstream ${GO_VERSION} for linux/${GO_ARCH}"
curl -fsSL "https://go.dev/dl/${GO_FILE}" -o "/tmp/${GO_FILE}"
echo "${GO_SHA256} /tmp/${GO_FILE}" | sha256sum -c -
rm -rf /usr/local/go
tar -C /usr/local -xzf "/tmp/${GO_FILE}"
rm -f "/tmp/${GO_FILE}"
# Expose go + gofmt on PATH (the rest of the Go-shipped tools are
# invoked through `go tool ...` and don't need symlinks).
ln -sf /usr/local/go/bin/go /usr/local/bin/go
ln -sf /usr/local/go/bin/gofmt /usr/local/bin/gofmt
# Sanity-check the install before subsequent setup steps depend on it.
/usr/local/bin/go version
# Trim ~70MB of test data and API definitions that aren't useful at
# build/run time. Stdlib sources stay (needed for `go build`).
rm -rf /usr/local/go/test /usr/local/go/api /usr/local/go/doc
)
__go_install_rc=$?
# Note: this is intentionally a separate statement, not `(...) || exit`.
# Bash silently disables `set -e` inside an explicit subshell when the
# subshell appears on the left of && or ||, so the form below is the
# only reliable way to propagate set -e failures from the subshell.
if [ "$__go_install_rc" -ne 0 ]; then
exit "$__go_install_rc"
if command -v update-ca-certificates >/dev/null 2>&1; then
update-ca-certificates
elif command -v update-ca-trust >/dev/null 2>&1; then
update-ca-trust extract
elif command -v trust >/dev/null 2>&1; then
trust extract-compat
fi
unset __go_install_rc
# - - - - - - - - - - - - - - - - - - - - - - - - -
# Set the exit code
#exitCode=$?
exitCode=$?
# - - - - - - - - - - - - - - - - - - - - - - - - -
exit $exitCode
# - - - - - - - - - - - - - - - - - - - - - - - - -
# ex: ts=2 sw=2 et filetype=sh
# - - - - - - - - - - - - - - - - - - - - - - - - -
+21 -40
View File
@@ -1,12 +1,12 @@
#!/usr/bin/env bash
# shellcheck shell=bash
# - - - - - - - - - - - - - - - - - - - - - - - - -
##@Version : 202604221922-git
##@Version : 202605242059-git
# @@Author : CasjaysDev
# @@Contact : CasjaysDev <docker-admin@casjaysdev.pro>
# @@License : MIT
# @@Copyright : Copyright 2026 CasjaysDev
# @@Created : Wed Apr 22 07:22:57 PM EDT 2026
# @@Created : Sun May 24 08:59:10 PM EDT 2026
# @@File : 03-files.sh
# @@Description : script to run files
# @@Changelog : newScript
@@ -31,51 +31,55 @@ exitCode=0
if [ -d "/tmp/bin" ]; then
mkdir -p "/usr/local/bin"
for bin in "/tmp/bin"/*; do
name="$(basename -- "$bin")"
[ -e "$bin" ] || continue
name="${bin##*/}"
echo "Installing $name to /usr/local/bin/$name"
copy "$bin" "/usr/local/bin/$name"
cp -Rf "$bin" "/usr/local/bin/$name"
chmod -f +x "/usr/local/bin/$name"
done
fi
unset bin
if [ -d "/tmp/var" ]; then
for var in "/tmp/var"/*; do
name="$(basename -- "$var")"
[ -e "$var" ] || continue
name="${var##*/}"
echo "Installing $var to /var/$name"
if [ -d "$var" ]; then
mkdir -p "/var/$name"
copy "$var/." "/var/$name/"
cp -Rf "$var/." "/var/$name/"
else
copy "$var" "/var/$name"
cp -Rf "$var" "/var/$name"
fi
done
fi
unset var
if [ -d "/tmp/etc" ]; then
for config in "/tmp/etc"/*; do
name="$(basename -- "$config")"
[ -e "$config" ] || continue
name="${config##*/}"
echo "Installing $config to /etc/$name"
if [ -d "$config" ]; then
mkdir -p "/etc/$name"
copy "$config/." "/etc/$name/"
cp -Rf "$config/." "/etc/$name/"
mkdir -p "/usr/local/share/template-files/config/$name"
copy "$config/." "/usr/local/share/template-files/config/$name/"
cp -Rf "$config/." "/usr/local/share/template-files/config/$name/"
else
copy "$config" "/etc/$name"
copy "$config" "/usr/local/share/template-files/config/$name"
cp -Rf "$config" "/etc/$name"
cp -Rf "$config" "/usr/local/share/template-files/config/$name"
fi
done
fi
unset config
if [ -d "/tmp/data" ]; then
for data in "/tmp/data"/*; do
name="$(basename -- "$data")"
[ -e "$data" ] || continue
name="${data##*/}"
echo "Installing $data to /usr/local/share/template-files/data"
if [ -d "$data" ]; then
mkdir -p "/usr/local/share/template-files/data/$name"
copy "$data/." "/usr/local/share/template-files/data/$name/"
cp -Rf "$data/." "/usr/local/share/template-files/data/$name/"
else
copy "$data" "/usr/local/share/template-files/data/$name"
cp -Rf "$data" "/usr/local/share/template-files/data/$name"
fi
done
fi
@@ -83,35 +87,12 @@ unset data
# - - - - - - - - - - - - - - - - - - - - - - - - -
# Main script
# Create conventional Go project dirs. Users can mount their code into
# any of these; WORKDIR defaults to /app.
for dir in /app /work /root/app /root/project; do
mkdir -p "$dir"
chmod 0755 "$dir"
done
# Canonical Go state dir (FHS-style: arch-independent shared data);
# declared as a Docker VOLUME for cross-rebuild persistence. The paths
# /go, /root/go, /root/.go, /root/.local/share/go are symlinks to this
# location so any of the conventional GOPATH paths resolve here. /data/go
# is symlinked at runtime by the init script (since /data is a volume).
GO_STATE_DIR="/usr/local/share/go"
mkdir -p "${GO_STATE_DIR}/bin" "${GO_STATE_DIR}/cache" "${GO_STATE_DIR}/pkg/mod"
chmod -R 0755 "${GO_STATE_DIR}"
mkdir -p /root/.local/share
for link in /go /root/go /root/.go /root/.local/share/go; do
if [ -e "$link" ] && [ ! -L "$link" ]; then
rm -rf "$link"
fi
ln -sfn "${GO_STATE_DIR}" "$link"
done
unset GO_STATE_DIR link
# - - - - - - - - - - - - - - - - - - - - - - - - -
# Set the exit code
#exitCode=$?
exitCode=$?
# - - - - - - - - - - - - - - - - - - - - - - - - -
exit $exitCode
# - - - - - - - - - - - - - - - - - - - - - - - - -
# ex: ts=2 sw=2 et filetype=sh
# - - - - - - - - - - - - - - - - - - - - - - - - -
+4 -3
View File
@@ -1,12 +1,12 @@
#!/usr/bin/env bash
# shellcheck shell=bash
# - - - - - - - - - - - - - - - - - - - - - - - - -
##@Version : 202604221922-git
##@Version : 202605242059-git
# @@Author : CasjaysDev
# @@Contact : CasjaysDev <docker-admin@casjaysdev.pro>
# @@License : MIT
# @@Copyright : Copyright 2026 CasjaysDev
# @@Created : Wed Apr 22 07:22:57 PM EDT 2026
# @@Created : Sun May 24 08:59:10 PM EDT 2026
# @@File : 04-users.sh
# @@Description : script to run users
# @@Changelog : newScript
@@ -34,9 +34,10 @@ exitCode=0
# - - - - - - - - - - - - - - - - - - - - - - - - -
# Set the exit code
#exitCode=$?
exitCode=$?
# - - - - - - - - - - - - - - - - - - - - - - - - -
exit $exitCode
# - - - - - - - - - - - - - - - - - - - - - - - - -
# ex: ts=2 sw=2 et filetype=sh
# - - - - - - - - - - - - - - - - - - - - - - - - -
+8 -119
View File
@@ -1,12 +1,12 @@
#!/usr/bin/env bash
# shellcheck shell=bash
# - - - - - - - - - - - - - - - - - - - - - - - - -
##@Version : 202604221922-git
##@Version : 202605242059-git
# @@Author : CasjaysDev
# @@Contact : CasjaysDev <docker-admin@casjaysdev.pro>
# @@License : MIT
# @@Copyright : Copyright 2026 CasjaysDev
# @@Created : Wed Apr 22 07:22:57 PM EDT 2026
# @@Created : Sun May 24 08:59:10 PM EDT 2026
# @@File : 05-custom.sh
# @@Description : script to run custom
# @@Changelog : newScript
@@ -32,123 +32,12 @@ exitCode=0
# - - - - - - - - - - - - - - - - - - - - - - - - -
# Main script
# Install Go developer tools into /usr/local/bin so they are on PATH
# without pulling GOPATH/bin into the runtime image. CGO disabled so the
# tools themselves are fully static (matches the image default).
export GOPATH="${GOPATH:-/usr/local/share/go}"
export GOBIN="/usr/local/bin"
export PATH="${GOBIN}:${PATH}"
export CGO_ENABLED=0
export GOTOOLCHAIN=auto
export GOMAXPROCS="${GOMAXPROCS:-2}"
export GOMEMLIMIT="${GOMEMLIMIT:-1GiB}"
export GOFLAGS="${GOFLAGS:+${GOFLAGS} }-p=1"
mkdir -p "$GOPATH" "$GOPATH/bin" "$GOPATH/cache" "$GOPATH/pkg/mod"
if command -v go >/dev/null 2>&1; then
echo "Installing Go developer tools with $(go version)"
tool_install_count=0
install_go_tool() {
local tool="$1"
echo "go install $tool"
# Best-effort: don't fail the build if a single upstream tool has
# stale deps incompatible with the current Go release. The rest of
# the kitchen-sink installs cleanly and the user can manually
# `go install` whichever tools they need at runtime against their
# own version pin.
go install "$tool" || echo " WARN: skipping $tool (install failed)" >&2
tool_install_count=$((tool_install_count + 1))
if [ "$tool_install_count" -ge 5 ]; then
go clean -cache -testcache 2>/dev/null || true
tool_install_count=0
fi
}
for tool in \
"github.com/golangci/golangci-lint/v2/cmd/golangci-lint@latest" \
"golang.org/x/tools/gopls@latest" \
"golang.org/x/tools/cmd/goimports@latest" \
"golang.org/x/tools/cmd/stringer@latest" \
"golang.org/x/tools/cmd/godoc@latest" \
"golang.org/x/tools/cmd/deadcode@latest" \
"golang.org/x/tools/cmd/callgraph@latest" \
"golang.org/x/tools/cmd/guru@latest" \
"golang.org/x/tools/cmd/gorename@latest" \
"golang.org/x/lint/golint@latest" \
"golang.org/x/perf/cmd/benchstat@latest" \
"github.com/go-delve/delve/cmd/dlv@latest" \
"mvdan.cc/gofumpt@latest" \
"honnef.co/go/tools/cmd/staticcheck@latest" \
"golang.org/x/vuln/cmd/govulncheck@latest" \
"github.com/air-verse/air@latest" \
"go.uber.org/mock/mockgen@latest" \
"github.com/swaggo/swag/cmd/swag@latest" \
"google.golang.org/protobuf/cmd/protoc-gen-go@latest" \
"google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest" \
"github.com/kisielk/errcheck@latest" \
"github.com/gordonklaus/ineffassign@latest" \
"github.com/fzipp/gocyclo/cmd/gocyclo@latest" \
"github.com/securego/gosec/v2/cmd/gosec@latest" \
"github.com/cweill/gotests/gotests@latest" \
"github.com/josharian/impl@latest" \
"github.com/fatih/gomodifytags@latest" \
"gotest.tools/gotestsum@latest" \
"github.com/kyoh86/richgo@latest" \
"github.com/goreleaser/goreleaser/v2@latest" \
"github.com/vektra/mockery/v2@latest" \
"github.com/google/wire/cmd/wire@latest" \
"github.com/sqlc-dev/sqlc/cmd/sqlc@latest" \
"github.com/oapi-codegen/oapi-codegen/v2/cmd/oapi-codegen@latest" \
"github.com/bufbuild/buf/cmd/buf@latest" \
"github.com/go-task/task/v3/cmd/task@latest" \
"github.com/google/ko@latest" \
"github.com/magefile/mage@latest" \
"github.com/pressly/goose/v3/cmd/goose@latest" \
"github.com/mgechev/revive@latest" \
"github.com/daixiang0/gci@latest" \
"github.com/segmentio/golines@latest" \
"go.uber.org/nilaway/cmd/nilaway@latest" \
"github.com/jstemmer/go-junit-report/v2@latest" \
"github.com/boumenot/gocover-cobertura@latest" \
"github.com/jandelgado/gcov2lcov@latest" \
"github.com/google/gops@latest" \
"github.com/dmarkham/enumer@latest" \
"github.com/mailru/easyjson/easyjson@latest" \
"github.com/envoyproxy/protoc-gen-validate@latest" \
"github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway@latest" \
"github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2@latest" \
; do
install_go_tool "$tool"
done
# migrate: needs build tags for DB driver compilation. Limited to
# the common pure-Go drivers (postgres, pgx, mysql, sqlite) - the
# full driver set (cockroachdb, spanner, clickhouse, mongodb,
# redshift) pulls in ~2GB of transitive deps and has been observed
# to crash bash mid-compile inside resource-constrained build
# environments. Users who need those drivers can rebuild migrate at
# runtime with whatever tags they need.
echo "go install golang-migrate/migrate (pure-Go drivers)"
go install -tags 'postgres,pgx,mysql,sqlite' \
github.com/golang-migrate/migrate/v4/cmd/migrate@latest \
|| echo " WARN: skipping migrate (install failed)" >&2
# Drop the module cache; it's not needed in the final image.
go clean -testcache 2>/dev/null || true
go clean -modcache 2>/dev/null || true
go clean -cache 2>/dev/null || true
rm -rf "$GOPATH/pkg" "$GOPATH/src" 2>/dev/null || true
else
echo "go binary not found; skipping Go dev tools" >&2
fi
# Always succeed: tool installation is best-effort, the build environment
# is functional even if some optional dev tools didn't make it. The Go
# toolchain itself was already verified by 02-packages.sh.
exit 0
# - - - - - - - - - - - - - - - - - - - - - - - - -
# Set the exit code
exitCode=$?
# - - - - - - - - - - - - - - - - - - - - - - - - -
exit $exitCode
# - - - - - - - - - - - - - - - - - - - - - - - - -
# ex: ts=2 sw=2 et filetype=sh
# - - - - - - - - - - - - - - - - - - - - - - - - -
+4 -3
View File
@@ -1,12 +1,12 @@
#!/usr/bin/env bash
# shellcheck shell=bash
# - - - - - - - - - - - - - - - - - - - - - - - - -
##@Version : 202604221922-git
##@Version : 202605242059-git
# @@Author : CasjaysDev
# @@Contact : CasjaysDev <docker-admin@casjaysdev.pro>
# @@License : MIT
# @@Copyright : Copyright 2026 CasjaysDev
# @@Created : Wed Apr 22 07:22:58 PM EDT 2026
# @@Created : Sun May 24 08:59:10 PM EDT 2026
# @@File : 06-post.sh
# @@Description : script to run post
# @@Changelog : newScript
@@ -34,9 +34,10 @@ exitCode=0
# - - - - - - - - - - - - - - - - - - - - - - - - -
# Set the exit code
#exitCode=$?
exitCode=$?
# - - - - - - - - - - - - - - - - - - - - - - - - -
exit $exitCode
# - - - - - - - - - - - - - - - - - - - - - - - - -
# ex: ts=2 sw=2 et filetype=sh
# - - - - - - - - - - - - - - - - - - - - - - - - -
+5 -4
View File
@@ -1,12 +1,12 @@
#!/usr/bin/env bash
# shellcheck shell=bash
# - - - - - - - - - - - - - - - - - - - - - - - - -
##@Version : 202604221922-git
##@Version : 202605242059-git
# @@Author : CasjaysDev
# @@Contact : CasjaysDev <docker-admin@casjaysdev.pro>
# @@License : MIT
# @@Copyright : Copyright 2026 CasjaysDev
# @@Created : Wed Apr 22 07:22:58 PM EDT 2026
# @@Created : Sun May 24 08:59:10 PM EDT 2026
# @@File : 07-cleanup.sh
# @@Description : script to run cleanup
# @@Changelog : newScript
@@ -24,7 +24,7 @@ set -o pipefail
[ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -x$DEBUGGER_OPTIONS
# - - - - - - - - - - - - - - - - - - - - - - - - -
# Load functions
__find_and_remove() { [ -z "$1" ] || find "${2:-/etc}" -iname "$1" -exec rm -Rf {} \; 2>/dev/null; }
__find_and_remove() { [ -z "$1" ] || find "${2:-/etc}" -iname "$1" -exec rm -Rf {} + 2>/dev/null; }
# - - - - - - - - - - - - - - - - - - - - - - - - -
# Set env variables
exitCode=0
@@ -38,9 +38,10 @@ if [ -d "$HOME/.cache" ]; then rm -Rf "$HOME/.cache"; fi
# - - - - - - - - - - - - - - - - - - - - - - - - -
# Set the exit code
#exitCode=$?
exitCode=$?
# - - - - - - - - - - - - - - - - - - - - - - - - -
exit $exitCode
# - - - - - - - - - - - - - - - - - - - - - - - - -
# ex: ts=2 sw=2 et filetype=sh
# - - - - - - - - - - - - - - - - - - - - - - - - -
+37 -51
View File
@@ -1,15 +1,15 @@
#!/usr/bin/env bash
# shellcheck shell=bash
# - - - - - - - - - - - - - - - - - - - - - - - - -
##@Version : 202602061352-git
##@Version : 202605241245-git
# @@Author : Jason Hempstead
# @@Contact : jason@casjaysdev.pro
# @@License : WTFPL
# @@ReadME : entrypoint.sh --help
# @@Copyright : Copyright: (c) 2026 Jason Hempstead, Casjays Developments
# @@Created : Wednesday, Apr 22, 2026 19:22 EDT
# @@Created : Sunday, May 24, 2026 20:59 EDT
# @@File : entrypoint.sh
# @@Description : Entrypoint file for go
# @@Description : Entrypoint file for alpine
# @@Changelog : New script
# @@TODO : Better documentation
# @@Other :
@@ -21,17 +21,25 @@
# 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
trap 'retVal=$?;[ "$SERVICE_IS_RUNNING" != "yes" ] && [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE";exit $retVal' INT TERM
trap 'retVal=$?;[ "$SERVICE_IS_RUNNING" != "yes" ] && [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE";exit $retVal' SIGPWR 2>/dev/null || true
# - - - - - - - - - - - - - - - - - - - - - - - - -
# 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 -o pipefail -x$DEBUGGER_OPTIONS && export DEBUGGER="on" || set -o pipefail
if [ "$DEBUGGER" = "on" ] || [ -f "/config/.debug" ]; then
echo "Enabling debugging"
set -o pipefail
[ -n "$DEBUGGER_OPTIONS" ] && set -"$DEBUGGER_OPTIONS"
export DEBUGGER="on"
else
set -o pipefail
fi
# - - - - - - - - - - - - - - - - - - - - - - - - -
PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
# - - - - - - - - - - - - - - - - - - - - - - - - -
# Set bash options
SCRIPT_FILE="$0"
CONTAINER_NAME="go"
CONTAINER_NAME="alpine"
SCRIPT_NAME="${SCRIPT_FILE##*/}"
CONTAINER_NAME="${ENV_CONTAINER_NAME:-$CONTAINER_NAME}"
# - - - - - - - - - - - - - - - - - - - - - - - - -
@@ -54,7 +62,7 @@ case "$1" in
-h | --help)
shift 1
echo 'Docker container for '$CONTAINER_NAME''
echo "Usage: $CONTAINER_NAME [help tail cron exec start init shell certbot ssl procs ports healthcheck backup command]"
echo "Usage: $CONTAINER_NAME [help tail cron exec start init shell procs ports healthcheck backup command]"
echo ""
exit 0
;;
@@ -87,8 +95,8 @@ SERVICE_UID="${SERVICE_UID:-0}"
SERVICE_GID="${SERVICE_GID:-0}"
# - - - - - - - - - - - - - - - - - - - - - - - - -
# User and group in which the service switches to - IE: nginx,apache,mysql,postgres
#SERVICE_USER="${SERVICE_USER:-go}" # execute command as another user
#SERVICE_GROUP="${SERVICE_GROUP:-go}" # Set the service group
#SERVICE_USER="${SERVICE_USER:-alpine}" # execute command as another user
#SERVICE_GROUP="${SERVICE_GROUP:-alpine}" # Set the service group
# - - - - - - - - - - - - - - - - - - - - - - - - -
# Secondary ports
# specifiy other ports
@@ -143,7 +151,7 @@ export DOMAINNAME="$(hostname -d)"
# - - - - - - - - - - - - - - - - - - - - - - - - -
# Default directories
export SSL_DIR="${SSL_DIR:-/config/ssl}"
export SSL_CA="${SSL_CERT:-/config/ssl/ca.crt}"
export SSL_CA="${SSL_CA:-/config/ssl/ca.crt}"
export SSL_KEY="${SSL_KEY:-/config/ssl/localhost.pem}"
export SSL_CERT="${SSL_CERT:-/config/ssl/localhost.crt}"
export LOCAL_BIN_DIR="${LOCAL_BIN_DIR:-/usr/local/bin}"
@@ -164,7 +172,7 @@ export NGINX_CONFIG_FILE="${NGINX_CONFIG_FILE:-$(__find_nginx_conf)}"
export MYSQL_CONFIG_FILE="${MYSQL_CONFIG_FILE:-$(__find_mysql_conf)}"
export PGSQL_CONFIG_FILE="${PGSQL_CONFIG_FILE:-$(__find_pgsql_conf)}"
export MONGODB_CONFIG_FILE="${MONGODB_CONFIG_FILE:-$(__find_mongodb_conf)}"
export ENTRYPOINT_PID_FILE="${ENTRYPOINT_PID_FILE:-$ENTRYPOINT_PID_FILE}"
export ENTRYPOINT_PID_FILE="${ENTRYPOINT_PID_FILE:-/run/.entrypoint.pid}"
export ENTRYPOINT_INIT_FILE="${ENTRYPOINT_INIT_FILE:-/config/.entrypoint.done}"
export ENTRYPOINT_DATA_INIT_FILE="${ENTRYPOINT_DATA_INIT_FILE:-/data/.docker_has_run}"
export ENTRYPOINT_CONFIG_INIT_FILE="${ENTRYPOINT_CONFIG_INIT_FILE:-/config/.docker_has_run}"
@@ -214,8 +222,6 @@ SERVER_PORTS="${SERVER_PORTS//,/ }" #
SERVER_PORTS="${SERVER_PORTS//\/*/}" #
# - - - - - - - - - - - - - - - - - - - - - - - - -
# clean WEB_SERVER_PORTS variables
WEB_SERVER_PORTS="${WEB_SERVER_PORT//\/*/}" #
WEB_SERVER_PORTS="${WEB_SERVER_PORTS//\/*/}" #
WEB_SERVER_PORTS="${WEB_SERVER_PORT//,/ } ${ENV_WEB_SERVER_PORTS//,/ }" #
# - - - - - - - - - - - - - - - - - - - - - - - - -
# rewrite and merge variables
@@ -288,7 +294,7 @@ fi
if [ "$ENTRYPOINT_FIRST_RUN" != "no" ]; then
if [ "$CONFIG_DIR_INITIALIZED" = "no" ] || [ "$DATA_DIR_INITIALIZED" = "no" ]; then
if [ "$ENTRYPOINT_MESSAGE" = "yes" ]; then
echo "Executing entrypoint script for go"
echo "Executing entrypoint script for alpine"
fi
fi
# - - - - - - - - - - - - - - - - - - - - - - - - -
@@ -357,7 +363,7 @@ if [ "$ENTRYPOINT_FIRST_RUN" != "no" ]; then
fi
# - - - - - - - - - - - - - - - - - - - - - - - - -
if [ -f "/etc/hostname" ]; then
if [ -n "$(type -P hostname 2>/dev/null)" ]; then
if command -v hostname &>/dev/null; then
hostname -F "/etc/hostname" 2>/dev/null || true
else
HOSTNAME="$(<"/etc/hostname")" 2>/dev/null || true
@@ -372,7 +378,7 @@ if [ "$ENTRYPOINT_FIRST_RUN" != "no" ]; then
# - - - - - - - - - - - - - - - - - - - - - - - - -
# import resolv.conf file into container
if [ "$CUSTOM_DNS" != "yes" ] && [ -f "/usr/local/etc/resolv.conf" ] && [ "$UPDATE_FILE_RESOLV" = "yes" ]; then
cat "/usr/local/etc/resolv.conf" >"/etc/resolv.conf" 2>/dev/null || true
cp -f "/usr/local/etc/resolv.conf" "/etc/resolv.conf" 2>/dev/null || true
fi
# - - - - - - - - - - - - - - - - - - - - - - - - -
if [ -n "$HOME" ] && [ -d "/usr/local/etc/skel" ]; then
@@ -383,12 +389,13 @@ if [ "$ENTRYPOINT_FIRST_RUN" != "no" ]; then
# - - - - - - - - - - - - - - - - - - - - - - - - -
fi
# - - - - - - - - - - - - - - - - - - - - - - - - -
# Delete any .gitkeep files
# Delete any .gitkeep files (bash * does not match dotfiles by default,
# so the explicit /.gitkeep path is required at each depth)
if [ -d "/data" ]; then
rm -Rf "/data/.gitkeep" "/data"/*/*.gitkeep 2>/dev/null || true
rm -Rf "/data/.gitkeep" "/data"/*/.gitkeep 2>/dev/null || true
fi
if [ -d "/config" ]; then
rm -Rf "/config/.gitkeep" "/config"/*/*.gitkeep 2>/dev/null || true
rm -Rf "/config/.gitkeep" "/config"/*/.gitkeep 2>/dev/null || true
fi
if [ -f "/usr/local/bin/.gitkeep" ]; then
rm -Rf "/usr/local/bin/.gitkeep" 2>/dev/null || true
@@ -442,7 +449,7 @@ fi
# if no pid assume container restart - clean stale files on restart
if [ -f "$ENTRYPOINT_PID_FILE" ]; then
# Check if the PID in the file is still running
entrypoint_pid=$(cat "$ENTRYPOINT_PID_FILE" 2>/dev/null || echo "")
entrypoint_pid=$(<"$ENTRYPOINT_PID_FILE") 2>/dev/null
if [ -n "$entrypoint_pid" ] && kill -0 "$entrypoint_pid" 2>/dev/null; then
# Process is still running, don't restart services
START_SERVICES="no"
@@ -482,7 +489,7 @@ __set_user_group_id $SERVICE_USER ${SERVICE_UID:-} ${SERVICE_GID:-}
__run_message
# - - - - - - - - - - - - - - - - - - - - - - - - -
# Just start services
START_SERVICES="${START_SERVICES:-SYSTEM_INIT}"
START_SERVICES="${START_SERVICES:-yes}"
# - - - - - - - - - - - - - - - - - - - - - - - - -
# Determine if we should start services based on command
# Only skip service start for the 'init' command
@@ -540,10 +547,10 @@ logs)
tail -Fq /data/logs/*/*
;;
clean)
log_files="$(find "/data/logs" -type f)"
mapfile -t log_files < <(find "/data/logs" -type f 2>/dev/null)
for log in "${log_files[@]}"; do
__log_info "Clearing log file: $log"
printf '' >$log
printf '' >"$log"
done
;;
*)
@@ -578,16 +585,16 @@ healthcheck)
healthPorts="${WEB_SERVER_PORTS:-}"
healthEndPoints="${HEALTH_ENDPOINTS:-}"
SERVICES_LIST="${arguments:-$SERVICES_LIST}"
services="$(echo "${SERVICES_LIST//,/ }")"
services="${SERVICES_LIST//,/ }"
healthMessage="Everything seems to be running"
[ "$healthEnabled" = "yes" ] || exit 0
if [ -d "/run/healthcheck" ] && [ "$(ls -A "/run/healthcheck" | wc -l)" -ne 0 ]; then
if [ -d "/run/healthcheck" ] && ! __is_dir_empty "/run/healthcheck"; then
for service in /run/healthcheck/*; do
name="${service##*/}"
services+="$name "
done
fi
services="$(echo "$services" | tr ' ' '\n' | sort -u | grep -v '^$')"
services="$(printf '%s\n' $services | sort -u | grep -v '^$')"
for proc in $services; do
if [ -n "$proc" ]; then
if ! __pgrep "$proc"; then
@@ -596,8 +603,8 @@ healthcheck)
fi
fi
done
for port in $ports; do
if [ -n "$(type -P netstat)" ] && [ -n "$port" ]; then
for port in $healthPorts; do
if command -v netstat &>/dev/null && [ -n "$port" ]; then
if ! netstat -taupln | grep -q ":$port "; then
echo "$port isn't open" >&2
healthStatus=$((healthStatus + 1))
@@ -621,38 +628,17 @@ healthcheck)
# show open ports
ports)
shift 1
ports="$(__netstat -taupln | awk -F ' ' '{print $4}' | awk -F ':' '{print $2}' | sort --unique --version-sort | grep -v '^$' | grep '^' || echo '')"
ports="$(__netstat -taupln 2>/dev/null | awk '{ split($4, a, ":"); if (a[2] != "") print a[2] }' | sort -uV)"
[ -n "$ports" ] && printf '%s\n%s\n' "The following are servers:" "$ports" | tr '\n' ' '
exit $?
;;
# show running processes
procs)
shift 1
ps="$(__ps axco command | grep -vE 'COMMAND|grep|ps' | sort -u || grep '^' || echo '')"
ps="$(__ps axco command 2>/dev/null | grep -vE '^(COMMAND|grep|ps)$' | sort -u)"
[ -n "$ps" ] && printf '%s\n%s\n' "Found the following processes" "$ps" | tr '\n' ' '
exit $?
;;
# setup ssl
ssl)
shift 1
__create_ssl_cert
exit $?
;;
# manage ssl certificate
certbot)
shift 1
CERT_BOT_ENABLED="yes"
if [ "$1" = "create" ]; then
shift 1
__certbot "create"
elif [ "$1" = "renew" ]; then
shift 1
__certbot "renew certonly --force-renew"
else
__exec_command "certbot" "$@"
fi
exit $?
;;
# Launch shell
*/bin/sh | */bin/bash | bash | sh | shell)
shift 1
+2 -1
View File
@@ -103,7 +103,7 @@ install)
[ -n "$1" ] || exit 0
[ "$USER_UID" -eq 0 ] || [ "$USER" = "root" ] || pkmgr_install_cmd="sudo $pkmgr_install_cmd"
if [ -f "$1" ]; then
install_list="$(cat "$1")"
install_list="$(tr '\n' ' ' < "$1")"
else
install_list="$*"
fi
@@ -140,3 +140,4 @@ clean)
esac
# - - - - - - - - - - - - - - - - - - - - - - - - -
# end
File diff suppressed because it is too large Load Diff