mirror of
https://github.com/dockersrc/rust
synced 2026-06-24 14:01:04 -04:00
🔧 Update configuration files 🔧
Dockerfile .env.scripts .gitattributes .gitea/workflows/docker.yaml .gitignore rootfs/etc/profile.d/rust.sh 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/copy rootfs/usr/local/bin/entrypoint.sh rootfs/usr/local/bin/healthcheck rootfs/usr/local/bin/symlink rootfs/usr/local/etc/docker/init.d/00-rust.sh rootfs/usr/local/share/cargo/config.toml rootfs/usr/local/share/template-files/config/env/default.sample rootfs/usr/local/share/template-files/config/env/examples/zz-entrypoint.sh
This commit is contained in:
+13
-11
@@ -1,10 +1,10 @@
|
|||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
##@Version : 202604221922-git
|
##@Version : 202605311110-git
|
||||||
# @@Author : CasjaysDev
|
# @@Author : CasjaysDev
|
||||||
# @@Contact : CasjaysDev <docker-admin@casjaysdev.pro>
|
# @@Contact : CasjaysDev <docker-admin@casjaysdev.pro>
|
||||||
# @@License : MIT
|
# @@License : MIT
|
||||||
# @@Copyright : Copyright 2026 CasjaysDev
|
# @@Copyright : Copyright 2026 CasjaysDev
|
||||||
# @@Created : Wed Apr 22 07:22:44 PM EDT 2026
|
# @@Created : Sun May 31 11:10:17 AM EDT 2026
|
||||||
# @@File : .env.scripts
|
# @@File : .env.scripts
|
||||||
# @@Description : Variables for gen-dockerfile and buildx scripts
|
# @@Description : Variables for gen-dockerfile and buildx scripts
|
||||||
# @@Changelog : newScript
|
# @@Changelog : newScript
|
||||||
@@ -25,24 +25,25 @@ DOCKER_ENTYPOINT_HEALTH_ENDPOINTS="$DOCKER_ENTYPOINT_HEALTH_ENDPOINTS"
|
|||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
# Dockerfile info
|
# Dockerfile info
|
||||||
ENV_DOCKERFILE="Dockerfile"
|
ENV_DOCKERFILE="Dockerfile"
|
||||||
ENV_IMAGE_NAME="rust"
|
# ENV_REGISTRY_REPO: Registry repository/image name
|
||||||
|
ENV_REGISTRY_REPO="rust"
|
||||||
ENV_USE_TEMPLATE="alpine"
|
ENV_USE_TEMPLATE="alpine"
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
# Maintainer info
|
# Maintainer info
|
||||||
ENV_ORG_NAME="casjaysdevdocker"
|
ENV_REGISTRY_ORG="dockersrc"
|
||||||
ENV_VENDOR="CasjaysDev"
|
ENV_VENDOR="CasjaysDev"
|
||||||
ENV_AUTHOR="CasjaysDev"
|
ENV_AUTHOR="CasjaysDev"
|
||||||
ENV_MAINTAINER="CasjaysDev <docker-admin@casjaysdev.pro>"
|
ENV_MAINTAINER="CasjaysDev <docker-admin@casjaysdev.pro>"
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
# Repository URLs (Full URLs)
|
# Repository URLs (Full URLs)
|
||||||
# ENV_GIT_REPO_URL: Complete Git repository URL for source code
|
# ENV_GIT_REPO_URL: Complete Git repository URL for source code
|
||||||
ENV_GIT_REPO_URL="https://github.com/casjaysdevdocker/rust"
|
ENV_GIT_REPO_URL="https://github.com/dockersrc/rust"
|
||||||
# ENV_REGISTRY_URL: Complete registry URL for reference (NOT used for pushing)
|
# ENV_REGISTRY_URL: Registry provider base URL (for example https://docker.io)
|
||||||
ENV_REGISTRY_URL="https://hub.docker.com/casjaysdevdocker/rust"
|
ENV_REGISTRY_URL="https://docker.io"
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
# Push Configuration
|
# Push Configuration
|
||||||
# ENV_IMAGE_PUSH: Complete push destination (this IS used for pushing)
|
# ENV_REGISTRY_PUSH: Complete push destination derived from registry/org/repo
|
||||||
ENV_IMAGE_PUSH="casjaysdevdocker/rust"
|
ENV_REGISTRY_PUSH="casjaysdev/rust"
|
||||||
# ENV_IMAGE_TAG: Default tag for the image
|
# ENV_IMAGE_TAG: Default tag for the image
|
||||||
ENV_IMAGE_TAG="latest"
|
ENV_IMAGE_TAG="latest"
|
||||||
# ENV_ADD_TAGS: Additional tags, comma-separated (USE_DATE = auto date tag)
|
# ENV_ADD_TAGS: Additional tags, comma-separated (USE_DATE = auto date tag)
|
||||||
@@ -62,7 +63,7 @@ SERVICE_PORT=""
|
|||||||
EXPOSE_PORTS=""
|
EXPOSE_PORTS=""
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
# IF using a lanuage such as go, php, rust, ruby, etc set the version here.
|
# IF using a lanuage such as go, php, rust, ruby, etc set the version here.
|
||||||
LANG_VERSION="rust"
|
LANG_VERSION=""
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
# Versions
|
# Versions
|
||||||
PHP_VERSION="system"
|
PHP_VERSION="system"
|
||||||
@@ -76,7 +77,8 @@ DEFAULT_DATA_DIR="/usr/local/share/template-files/data"
|
|||||||
DEFAULT_CONF_DIR="/usr/local/share/template-files/config"
|
DEFAULT_CONF_DIR="/usr/local/share/template-files/config"
|
||||||
DEFAULT_TEMPLATE_DIR="/usr/local/share/template-files/defaults"
|
DEFAULT_TEMPLATE_DIR="/usr/local/share/template-files/defaults"
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
ENV_PACKAGES="git make bash tini ca-certificates openssh-client curl wget tar tzdata jq build-base gcc clang lld musl-dev pkgconf cmake perl openssl-dev libffi-dev zlib-dev linux-headers protobuf protobuf-dev mingw-w64-gcc binaryen wabt zig"
|
ENV_PACKAGES="bash tini bash-completion git curl wget sudo unzip iproute2 openrc ssmtp openssl jq tzdata mailcap ncurses util-linux pciutils usbutils coreutils binutils findutils grep rsync zip py3-pip procps net-tools sed gawk attr readline lsof less shadow ca-certificates"
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
# ex: ts=2 sw=2 et filetype=sh
|
# ex: ts=2 sw=2 et filetype=sh
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
# Template generated on Sat Nov 29 11:57:12 AM EST 2025 from https://github.com/alexkaratarakis/gitattributes"
|
# Template generated on Sun May 17 10:58:44 PM EDT 2026 from https://github.com/alexkaratarakis/gitattributes"
|
||||||
# Common settings that generally should always be used with your language specific settings
|
# Common settings that generally should always be used with your language specific settings
|
||||||
# Auto detect text files and perform LF normalization
|
# Auto detect text files and perform LF normalization
|
||||||
* text=auto
|
* text=auto
|
||||||
|
|||||||
@@ -19,13 +19,20 @@ jobs:
|
|||||||
- name: Get Meta
|
- name: Get Meta
|
||||||
id: meta
|
id: meta
|
||||||
run: |
|
run: |
|
||||||
echo DATE_TAG=$(date +'%y%m') >> $GITHUB_OUTPUT
|
repo_version="$(git describe --tags --always)"
|
||||||
echo REPO_VERSION=$(git describe --tags --always | sed 's/^v//') >> $GITHUB_OUTPUT
|
repo_version="${repo_version#v}"
|
||||||
echo DOCKER_ORG=$(echo ${GITHUB_REPOSITORY} | awk -F"/" '{print $1}') >> $GITHUB_OUTPUT
|
docker_org="${GITHUB_REPOSITORY%%/*}"
|
||||||
echo DOCKER_TAG=$([ -n "$DOCKER_TAG" ] && echo ${DOCKER_TAG} || echo "latest") >> $GITHUB_OUTPUT
|
repo_name="${GITHUB_REPOSITORY#*/}"
|
||||||
echo DOCKER_HUB=$([ -n "$DOCKER_HUB" ] && echo ${DOCKER_HUB} || echo "docker.io") >> $GITHUB_OUTPUT
|
repo_name="${repo_name#docker-}"
|
||||||
echo REPO_NAME=$(echo ${GITHUB_REPOSITORY} | awk -F"/" '{print $2}' | sed 's|^docker-||g') >> $GITHUB_OUTPUT
|
docker_tag="${DOCKER_TAG:-latest}"
|
||||||
echo "$DOCKER_HUB/$DOCKER_ORG/$REPO_NAME:$DOCKER_TAG"
|
docker_hub="${DOCKER_HUB:-docker.io}"
|
||||||
|
printf 'DATE_TAG=%s\n' "$(date +'%y%m')" >> "$GITHUB_OUTPUT"
|
||||||
|
printf 'REPO_VERSION=%s\n' "$repo_version" >> "$GITHUB_OUTPUT"
|
||||||
|
printf 'DOCKER_ORG=%s\n' "$docker_org" >> "$GITHUB_OUTPUT"
|
||||||
|
printf 'DOCKER_TAG=%s\n' "$docker_tag" >> "$GITHUB_OUTPUT"
|
||||||
|
printf 'DOCKER_HUB=%s\n' "$docker_hub" >> "$GITHUB_OUTPUT"
|
||||||
|
printf 'REPO_NAME=%s\n' "$repo_name" >> "$GITHUB_OUTPUT"
|
||||||
|
printf '%s\n' "$docker_hub/$docker_org/$repo_name:$docker_tag"
|
||||||
|
|
||||||
- name: Set up Docker BuildX
|
- name: Set up Docker BuildX
|
||||||
uses: docker/setup-buildx-action@v2
|
uses: docker/setup-buildx-action@v2
|
||||||
@@ -58,3 +65,4 @@ jobs:
|
|||||||
tags: |
|
tags: |
|
||||||
${{ steps.meta.outputs.DOCKER_HUB }}/${{ steps.meta.outputs.DOCKER_ORG }}/${{ steps.meta.outputs.REPO_NAME }}:${{ steps.meta.outputs.DATE_TAG }}
|
${{ steps.meta.outputs.DOCKER_HUB }}/${{ steps.meta.outputs.DOCKER_ORG }}/${{ steps.meta.outputs.REPO_NAME }}:${{ steps.meta.outputs.DATE_TAG }}
|
||||||
${{ steps.meta.outputs.DOCKER_HUB }}/${{ steps.meta.outputs.DOCKER_ORG }}/${{ steps.meta.outputs.REPO_NAME }}:${{ steps.meta.outputs.DOCKER_TAG }}
|
${{ steps.meta.outputs.DOCKER_HUB }}/${{ steps.meta.outputs.DOCKER_ORG }}/${{ steps.meta.outputs.REPO_NAME }}:${{ steps.meta.outputs.DOCKER_TAG }}
|
||||||
|
|
||||||
|
|||||||
+174
@@ -102,3 +102,177 @@ $RECYCLE.BIN/
|
|||||||
**/*.rewrite.sh
|
**/*.rewrite.sh
|
||||||
**/*.refactor.sh
|
**/*.refactor.sh
|
||||||
|
|
||||||
|
|
||||||
|
# Backup files left by editors
|
||||||
|
|
||||||
|
# Temporary files left when a process holds an open handle to a deleted file
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# NFS stale file handles
|
||||||
|
|
||||||
|
.DS_Store
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Crash dump files
|
||||||
|
|
||||||
|
# Core dumps (Linux/macOS)
|
||||||
|
core
|
||||||
|
core.*
|
||||||
|
vgcore.*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### Editors ###
|
||||||
|
# Visual Studio Code
|
||||||
|
.vscode/
|
||||||
|
!.vscode/extensions.json
|
||||||
|
|
||||||
|
# JetBrains IDEs (IntelliJ, GoLand, RustRover, PyCharm, etc.)
|
||||||
|
.idea/
|
||||||
|
*.iml
|
||||||
|
*.iws
|
||||||
|
*.ipr
|
||||||
|
|
||||||
|
# Vim / Neovim
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
.netrwhist
|
||||||
|
Session.vim
|
||||||
|
.vim/
|
||||||
|
|
||||||
|
# Sublime Text
|
||||||
|
*.sublime-workspace
|
||||||
|
*.sublime-project
|
||||||
|
|
||||||
|
# Eclipse / generic Java IDEs
|
||||||
|
.project
|
||||||
|
.classpath
|
||||||
|
.factorypath
|
||||||
|
.settings/
|
||||||
|
|
||||||
|
### AI tool local configs (personal settings, never commit) ###
|
||||||
|
# Claude Code
|
||||||
|
.claude/settings.local.json
|
||||||
|
.claude/*.lock
|
||||||
|
|
||||||
|
# Cursor
|
||||||
|
.cursor/
|
||||||
|
.cursorignore
|
||||||
|
.cursorindexingignore
|
||||||
|
|
||||||
|
# GitHub Copilot
|
||||||
|
.copilot/
|
||||||
|
|
||||||
|
# Codeium
|
||||||
|
.codeium/
|
||||||
|
|
||||||
|
# Tabnine
|
||||||
|
.tabnine/
|
||||||
|
|
||||||
|
# Aider
|
||||||
|
.aider/
|
||||||
|
.aider.conf.yml
|
||||||
|
.aider.model.settings.yml
|
||||||
|
.aiderignore
|
||||||
|
|
||||||
|
# General AI assistant local state
|
||||||
|
.ai/
|
||||||
|
.ai.local/
|
||||||
|
|
||||||
|
### Environment and secrets ###
|
||||||
|
# Local env overrides — never commit credentials
|
||||||
|
.env
|
||||||
|
.env.local
|
||||||
|
.env.*.local
|
||||||
|
|
||||||
|
# Private keys and certificates
|
||||||
|
*.pem
|
||||||
|
*.key
|
||||||
|
*.p12
|
||||||
|
*.pfx
|
||||||
|
|
||||||
|
### Build artifacts ###
|
||||||
|
build/
|
||||||
|
dist/
|
||||||
|
out/
|
||||||
|
|
||||||
|
# Rust
|
||||||
|
target/
|
||||||
|
|
||||||
|
# C / C++ / compiled objects
|
||||||
|
*.o
|
||||||
|
*.a
|
||||||
|
*.so
|
||||||
|
*.dylib
|
||||||
|
*.dll
|
||||||
|
*.exe
|
||||||
|
|
||||||
|
### Dependency directories ###
|
||||||
|
# Node
|
||||||
|
node_modules/
|
||||||
|
|
||||||
|
# Go (vendored deps are sometimes committed intentionally, so gitignore only the cache)
|
||||||
|
# vendor/
|
||||||
|
|
||||||
|
# Python
|
||||||
|
__pycache__/
|
||||||
|
*.pyc
|
||||||
|
*.pyo
|
||||||
|
*.pyd
|
||||||
|
.Python
|
||||||
|
*.egg-info/
|
||||||
|
.eggs/
|
||||||
|
.venv/
|
||||||
|
venv/
|
||||||
|
env/
|
||||||
|
|
||||||
|
### Logs ###
|
||||||
|
*.log
|
||||||
|
logs/
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
|
||||||
|
### Temporary and cache ###
|
||||||
|
tmp/
|
||||||
|
.tmp/
|
||||||
|
*.tmp
|
||||||
|
*.cache
|
||||||
|
.cache/
|
||||||
|
|
||||||
|
### Test and coverage ###
|
||||||
|
coverage/
|
||||||
|
.coverage
|
||||||
|
*.cover
|
||||||
|
*.coverprofile
|
||||||
|
htmlcov/
|
||||||
|
.nyc_output/
|
||||||
|
.pytest_cache/
|
||||||
|
.tox/
|
||||||
|
|
||||||
|
### Misc — always allow ###
|
||||||
|
|
||||||
|
### Project-specific patterns ###
|
||||||
|
# ignore commit message files
|
||||||
|
|
||||||
|
# ignore backup files
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# ignore .installed marker files
|
||||||
|
|
||||||
|
# ignore work-in-progress rewrite/refactor scripts
|
||||||
|
|
||||||
|
# ignore local override scripts and configs
|
||||||
|
**/*.local.sh
|
||||||
|
**/*.local.conf
|
||||||
|
**/*.local.yaml
|
||||||
|
**/*.local.yml
|
||||||
|
|
||||||
|
|||||||
+14
-19
@@ -1,7 +1,7 @@
|
|||||||
# Docker image for rust using the alpine template
|
# Docker image for rust using the alpine template
|
||||||
ARG IMAGE_NAME="rust"
|
ARG IMAGE_NAME="rust"
|
||||||
ARG PHP_SERVER="rust"
|
ARG PHP_SERVER="rust"
|
||||||
ARG BUILD_DATE="202604221922"
|
ARG BUILD_DATE="202605311109"
|
||||||
ARG LANGUAGE="en_US.UTF-8"
|
ARG LANGUAGE="en_US.UTF-8"
|
||||||
ARG TIMEZONE="America/New_York"
|
ARG TIMEZONE="America/New_York"
|
||||||
ARG WWW_ROOT_DIR="/usr/local/share/httpd/default"
|
ARG WWW_ROOT_DIR="/usr/local/share/httpd/default"
|
||||||
@@ -20,7 +20,7 @@ ARG PHP_VERSION="system"
|
|||||||
ARG NODE_VERSION="system"
|
ARG NODE_VERSION="system"
|
||||||
ARG NODE_MANAGER="system"
|
ARG NODE_MANAGER="system"
|
||||||
|
|
||||||
ARG IMAGE_REPO="casjaysdevdocker/rust"
|
ARG IMAGE_REPO="casjaysdev/rust"
|
||||||
ARG IMAGE_VERSION="latest"
|
ARG IMAGE_VERSION="latest"
|
||||||
ARG CONTAINER_VERSION=""
|
ARG CONTAINER_VERSION=""
|
||||||
|
|
||||||
@@ -54,19 +54,16 @@ ARG PHP_SERVER
|
|||||||
ARG SHELL_OPTS
|
ARG SHELL_OPTS
|
||||||
ARG PATH
|
ARG PATH
|
||||||
|
|
||||||
ARG PACK_LIST="git make bash tini ca-certificates openssh-client curl wget tar tzdata jq build-base gcc clang lld musl-dev pkgconf cmake perl openssl-dev libffi-dev zlib-dev linux-headers protobuf protobuf-dev mingw-w64-gcc binaryen wabt zig"
|
ARG PACK_LIST="bash tini bash-completion git curl wget sudo unzip iproute2 openrc ssmtp openssl jq tzdata mailcap ncurses util-linux pciutils usbutils coreutils binutils findutils grep rsync zip py3-pip procps net-tools sed gawk attr readline lsof less shadow ca-certificates "
|
||||||
|
|
||||||
ENV ENV=~/.profile
|
ENV ENV=~/.profile
|
||||||
ENV SHELL="/bin/sh"
|
ENV SHELL="/bin/sh"
|
||||||
ENV PATH="/usr/local/share/cargo/bin:${PATH}"
|
ENV PATH="${PATH}"
|
||||||
ENV TZ="${TIMEZONE}"
|
ENV TZ="${TIMEZONE}"
|
||||||
ENV TIMEZONE="${TZ}"
|
ENV TIMEZONE="${TZ}"
|
||||||
ENV LANG="${LANGUAGE}"
|
ENV LANG="${LANGUAGE}"
|
||||||
ENV TERM="xterm-256color"
|
ENV TERM="xterm-256color"
|
||||||
ENV HOSTNAME="casjaysdevdocker-rust"
|
ENV HOSTNAME="casjaysdevdocker-rust"
|
||||||
ENV CARGO_HOME="/usr/local/share/cargo"
|
|
||||||
ENV RUSTUP_HOME="/usr/local/share/rustup"
|
|
||||||
ENV RUSTUP_TOOLCHAIN="stable"
|
|
||||||
|
|
||||||
USER ${USER}
|
USER ${USER}
|
||||||
WORKDIR /root
|
WORKDIR /root
|
||||||
@@ -121,7 +118,7 @@ RUN echo "Updating system files "; \
|
|||||||
echo 'hosts: files dns' >"/etc/nsswitch.conf"; \
|
echo 'hosts: files dns' >"/etc/nsswitch.conf"; \
|
||||||
[ "$PHP_VERSION" = "system" ] && PHP_VERSION="php" || true; \
|
[ "$PHP_VERSION" = "system" ] && PHP_VERSION="php" || true; \
|
||||||
PHP_BIN="$(command -v ${PHP_VERSION} 2>/dev/null || true)"; \
|
PHP_BIN="$(command -v ${PHP_VERSION} 2>/dev/null || true)"; \
|
||||||
PHP_FPM="$(ls /usr/*bin/php*fpm* 2>/dev/null || true)"; \
|
set -- /usr/*bin/php*fpm*; [ -e "$1" ] && PHP_FPM="$1" || PHP_FPM=""; \
|
||||||
pip_bin="$(command -v python3 2>/dev/null || command -v python2 2>/dev/null || command -v python 2>/dev/null || true)"; \
|
pip_bin="$(command -v python3 2>/dev/null || command -v python2 2>/dev/null || command -v python 2>/dev/null || true)"; \
|
||||||
py_version="$(command $pip_bin --version | sed 's|[pP]ython ||g' | awk -F '.' '{print $1$2}' | grep '[0-9]' || true)"; \
|
py_version="$(command $pip_bin --version | sed 's|[pP]ython ||g' | awk -F '.' '{print $1$2}' | grep '[0-9]' || true)"; \
|
||||||
[ "$py_version" -gt "310" ] && pip_opts="--break-system-packages " || pip_opts=""; \
|
[ "$py_version" -gt "310" ] && pip_opts="--break-system-packages " || pip_opts=""; \
|
||||||
@@ -178,7 +175,7 @@ RUN echo "Deleting unneeded files"; \
|
|||||||
rm -rf /lib/systemd/system/sockets.target.wants/*udev* || true; \
|
rm -rf /lib/systemd/system/sockets.target.wants/*udev* || true; \
|
||||||
rm -rf /lib/systemd/system/sockets.target.wants/*initctl* || true; \
|
rm -rf /lib/systemd/system/sockets.target.wants/*initctl* || true; \
|
||||||
rm -Rf /usr/share/doc/* /var/tmp/* /var/cache/*/* /root/.cache/* /usr/share/info/* /tmp/* || true; \
|
rm -Rf /usr/share/doc/* /var/tmp/* /var/cache/*/* /root/.cache/* /usr/share/info/* /tmp/* || true; \
|
||||||
if [ -d "/lib/systemd/system/sysinit.target.wants" ];then cd "/lib/systemd/system/sysinit.target.wants" && rm -f $(ls | grep -v systemd-tmpfiles-setup);fi; \
|
if [ -d "/lib/systemd/system/sysinit.target.wants" ];then cd "/lib/systemd/system/sysinit.target.wants" && for want_file in *; do [ "$want_file" = "systemd-tmpfiles-setup" ] || rm -f "$want_file"; done; fi; \
|
||||||
if [ -f "/root/docker/setup/07-cleanup.sh" ];then echo "Running the cleanup script";/root/docker/setup/07-cleanup.sh||{ echo "Failed to execute /root/docker/setup/07-cleanup.sh" >&2 && exit 10; };echo "Done running the cleanup script";fi; \
|
if [ -f "/root/docker/setup/07-cleanup.sh" ];then echo "Running the cleanup script";/root/docker/setup/07-cleanup.sh||{ echo "Failed to execute /root/docker/setup/07-cleanup.sh" >&2 && exit 10; };echo "Done running the cleanup script";fi; \
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
@@ -210,7 +207,7 @@ ARG LICENSE="WTFPL"
|
|||||||
ARG ENV_PORTS="${EXPOSE_PORTS}"
|
ARG ENV_PORTS="${EXPOSE_PORTS}"
|
||||||
|
|
||||||
USER ${USER}
|
USER ${USER}
|
||||||
WORKDIR /app
|
WORKDIR /root
|
||||||
|
|
||||||
LABEL maintainer="CasjaysDev <docker-admin@casjaysdev.pro>"
|
LABEL maintainer="CasjaysDev <docker-admin@casjaysdev.pro>"
|
||||||
LABEL org.opencontainers.image.vendor="CasjaysDev"
|
LABEL org.opencontainers.image.vendor="CasjaysDev"
|
||||||
@@ -222,17 +219,17 @@ LABEL org.opencontainers.image.authors="${LICENSE}"
|
|||||||
LABEL org.opencontainers.image.created="${BUILD_DATE}"
|
LABEL org.opencontainers.image.created="${BUILD_DATE}"
|
||||||
LABEL org.opencontainers.image.version="${BUILD_VERSION}"
|
LABEL org.opencontainers.image.version="${BUILD_VERSION}"
|
||||||
LABEL org.opencontainers.image.schema-version="${BUILD_VERSION}"
|
LABEL org.opencontainers.image.schema-version="${BUILD_VERSION}"
|
||||||
LABEL org.opencontainers.image.url="https://hub.docker.com/casjaysdevdocker/rust"
|
LABEL org.opencontainers.image.url="https://docker.io/casjaysdev/rust"
|
||||||
LABEL org.opencontainers.image.source="https://hub.docker.com/casjaysdevdocker/rust"
|
LABEL org.opencontainers.image.source="https://docker.io/casjaysdev/rust"
|
||||||
LABEL org.opencontainers.image.vcs-type="Git"
|
LABEL org.opencontainers.image.vcs-type="Git"
|
||||||
LABEL org.opencontainers.image.revision="${GIT_COMMIT}"
|
LABEL org.opencontainers.image.revision="${GIT_COMMIT}"
|
||||||
LABEL org.opencontainers.image.source="https://github.com/casjaysdevdocker/rust"
|
LABEL org.opencontainers.image.source="https://github.com/dockersrc/rust"
|
||||||
LABEL org.opencontainers.image.documentation="https://github.com/casjaysdevdocker/rust"
|
LABEL org.opencontainers.image.documentation="https://github.com/dockersrc/rust"
|
||||||
LABEL com.github.containers.toolbox="false"
|
LABEL com.github.containers.toolbox="false"
|
||||||
|
|
||||||
ENV ENV=~/.bashrc
|
ENV ENV=~/.bashrc
|
||||||
ENV USER="${USER}"
|
ENV USER="${USER}"
|
||||||
ENV PATH="/usr/local/share/cargo/bin:${PATH}"
|
ENV PATH="${PATH}"
|
||||||
ENV TZ="${TIMEZONE}"
|
ENV TZ="${TIMEZONE}"
|
||||||
ENV SHELL="/bin/bash"
|
ENV SHELL="/bin/bash"
|
||||||
ENV TIMEZONE="${TZ}"
|
ENV TIMEZONE="${TZ}"
|
||||||
@@ -248,13 +245,10 @@ ENV NODE_MANAGER="${NODE_MANAGER}"
|
|||||||
ENV PHP_VERSION="${PHP_VERSION}"
|
ENV PHP_VERSION="${PHP_VERSION}"
|
||||||
ENV DISTRO_VERSION="${IMAGE_VERSION}"
|
ENV DISTRO_VERSION="${IMAGE_VERSION}"
|
||||||
ENV WWW_ROOT_DIR="${WWW_ROOT_DIR}"
|
ENV WWW_ROOT_DIR="${WWW_ROOT_DIR}"
|
||||||
ENV CARGO_HOME="/usr/local/share/cargo"
|
|
||||||
ENV RUSTUP_HOME="/usr/local/share/rustup"
|
|
||||||
ENV RUSTUP_TOOLCHAIN="stable"
|
|
||||||
|
|
||||||
COPY --from=build /. /
|
COPY --from=build /. /
|
||||||
|
|
||||||
VOLUME [ "/config","/data","/usr/local/share/cargo","/usr/local/share/rustup" ]
|
VOLUME [ "/config","/data" ]
|
||||||
|
|
||||||
EXPOSE ${SERVICE_PORT} ${ENV_PORTS}
|
EXPOSE ${SERVICE_PORT} ${ENV_PORTS}
|
||||||
|
|
||||||
@@ -262,3 +256,4 @@ STOPSIGNAL SIGRTMIN+3
|
|||||||
|
|
||||||
ENTRYPOINT [ "tini", "-p", "SIGTERM","--", "/usr/local/bin/entrypoint.sh" ]
|
ENTRYPOINT [ "tini", "-p", "SIGTERM","--", "/usr/local/bin/entrypoint.sh" ]
|
||||||
HEALTHCHECK --start-period=10m --interval=5m --timeout=15s CMD [ "/usr/local/bin/entrypoint.sh", "healthcheck" ]
|
HEALTHCHECK --start-period=10m --interval=5m --timeout=15s CMD [ "/usr/local/bin/entrypoint.sh", "healthcheck" ]
|
||||||
|
|
||||||
|
|||||||
@@ -1,17 +0,0 @@
|
|||||||
# Rust environment - sourced by /etc/profile for interactive login shells.
|
|
||||||
#
|
|
||||||
# All Rust state lives under /usr/local/share/cargo (registry, target
|
|
||||||
# cache, user-installed cargo binaries) and /usr/local/share/rustup
|
|
||||||
# (toolchains and components), both declared as Docker VOLUMEs. The
|
|
||||||
# paths /root/.cargo, /root/.rustup, /data/cargo, /data/rustup are
|
|
||||||
# symlinks to these locations so any of them can be used interchangeably
|
|
||||||
# and the data persists across container rebuilds with named volumes.
|
|
||||||
|
|
||||||
export CARGO_HOME="${CARGO_HOME:-/usr/local/share/cargo}"
|
|
||||||
export RUSTUP_HOME="${RUSTUP_HOME:-/usr/local/share/rustup}"
|
|
||||||
export RUSTUP_TOOLCHAIN="${RUSTUP_TOOLCHAIN:-stable}"
|
|
||||||
|
|
||||||
case ":${PATH}:" in
|
|
||||||
*":${CARGO_HOME}/bin:"*) ;;
|
|
||||||
*) export PATH="${CARGO_HOME}/bin:${PATH}" ;;
|
|
||||||
esac
|
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# shellcheck shell=bash
|
# shellcheck shell=bash
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
##@Version : 202605242100-git
|
##@Version : 202605311104-git
|
||||||
# @@Author : CasjaysDev
|
# @@Author : CasjaysDev
|
||||||
# @@Contact : CasjaysDev <docker-admin@casjaysdev.pro>
|
# @@Contact : CasjaysDev <docker-admin@casjaysdev.pro>
|
||||||
# @@License : MIT
|
# @@License : MIT
|
||||||
# @@Copyright : Copyright 2026 CasjaysDev
|
# @@Copyright : Copyright 2026 CasjaysDev
|
||||||
# @@Created : Sun May 24 09:00:28 PM EDT 2026
|
# @@Created : Sun May 31 11:04:48 AM EDT 2026
|
||||||
# @@File : 00-init.sh
|
# @@File : 00-init.sh
|
||||||
# @@Description : script to run init
|
# @@Description : script to run init
|
||||||
# @@Changelog : newScript
|
# @@Changelog : newScript
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# shellcheck shell=bash
|
# shellcheck shell=bash
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
##@Version : 202605242100-git
|
##@Version : 202605311104-git
|
||||||
# @@Author : CasjaysDev
|
# @@Author : CasjaysDev
|
||||||
# @@Contact : CasjaysDev <docker-admin@casjaysdev.pro>
|
# @@Contact : CasjaysDev <docker-admin@casjaysdev.pro>
|
||||||
# @@License : MIT
|
# @@License : MIT
|
||||||
# @@Copyright : Copyright 2026 CasjaysDev
|
# @@Copyright : Copyright 2026 CasjaysDev
|
||||||
# @@Created : Sun May 24 09:00:28 PM EDT 2026
|
# @@Created : Sun May 31 11:04:49 AM EDT 2026
|
||||||
# @@File : 01-system.sh
|
# @@File : 01-system.sh
|
||||||
# @@Description : script to run system
|
# @@Description : script to run system
|
||||||
# @@Changelog : newScript
|
# @@Changelog : newScript
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# shellcheck shell=bash
|
# shellcheck shell=bash
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
##@Version : 202605242139-git
|
##@Version : 202605311104-git
|
||||||
# @@Author : CasjaysDev
|
# @@Author : CasjaysDev
|
||||||
# @@Contact : CasjaysDev <docker-admin@casjaysdev.pro>
|
# @@Contact : CasjaysDev <docker-admin@casjaysdev.pro>
|
||||||
# @@License : MIT
|
# @@License : MIT
|
||||||
# @@Copyright : Copyright 2026 CasjaysDev
|
# @@Copyright : Copyright 2026 CasjaysDev
|
||||||
# @@Created : Sun May 24 09:00:29 PM EDT 2026
|
# @@Created : Sun May 31 11:04:49 AM EDT 2026
|
||||||
# @@File : 02-packages.sh
|
# @@File : 02-packages.sh
|
||||||
# @@Description : script to run packages
|
# @@Description : script to run packages
|
||||||
# @@Changelog : newScript
|
# @@Changelog : newScript
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# shellcheck shell=bash
|
# shellcheck shell=bash
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
##@Version : 202605242100-git
|
##@Version : 202605311104-git
|
||||||
# @@Author : CasjaysDev
|
# @@Author : CasjaysDev
|
||||||
# @@Contact : CasjaysDev <docker-admin@casjaysdev.pro>
|
# @@Contact : CasjaysDev <docker-admin@casjaysdev.pro>
|
||||||
# @@License : MIT
|
# @@License : MIT
|
||||||
# @@Copyright : Copyright 2026 CasjaysDev
|
# @@Copyright : Copyright 2026 CasjaysDev
|
||||||
# @@Created : Sun May 24 09:00:30 PM EDT 2026
|
# @@Created : Sun May 31 11:04:49 AM EDT 2026
|
||||||
# @@File : 03-files.sh
|
# @@File : 03-files.sh
|
||||||
# @@Description : script to run files
|
# @@Description : script to run files
|
||||||
# @@Changelog : newScript
|
# @@Changelog : newScript
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# shellcheck shell=bash
|
# shellcheck shell=bash
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
##@Version : 202605242100-git
|
##@Version : 202605311104-git
|
||||||
# @@Author : CasjaysDev
|
# @@Author : CasjaysDev
|
||||||
# @@Contact : CasjaysDev <docker-admin@casjaysdev.pro>
|
# @@Contact : CasjaysDev <docker-admin@casjaysdev.pro>
|
||||||
# @@License : MIT
|
# @@License : MIT
|
||||||
# @@Copyright : Copyright 2026 CasjaysDev
|
# @@Copyright : Copyright 2026 CasjaysDev
|
||||||
# @@Created : Sun May 24 09:00:31 PM EDT 2026
|
# @@Created : Sun May 31 11:04:49 AM EDT 2026
|
||||||
# @@File : 04-users.sh
|
# @@File : 04-users.sh
|
||||||
# @@Description : script to run users
|
# @@Description : script to run users
|
||||||
# @@Changelog : newScript
|
# @@Changelog : newScript
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# shellcheck shell=bash
|
# shellcheck shell=bash
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
##@Version : 202605242100-git
|
##@Version : 202605311104-git
|
||||||
# @@Author : CasjaysDev
|
# @@Author : CasjaysDev
|
||||||
# @@Contact : CasjaysDev <docker-admin@casjaysdev.pro>
|
# @@Contact : CasjaysDev <docker-admin@casjaysdev.pro>
|
||||||
# @@License : MIT
|
# @@License : MIT
|
||||||
# @@Copyright : Copyright 2026 CasjaysDev
|
# @@Copyright : Copyright 2026 CasjaysDev
|
||||||
# @@Created : Sun May 24 09:00:31 PM EDT 2026
|
# @@Created : Sun May 31 11:04:50 AM EDT 2026
|
||||||
# @@File : 05-custom.sh
|
# @@File : 05-custom.sh
|
||||||
# @@Description : script to run custom
|
# @@Description : script to run custom
|
||||||
# @@Changelog : newScript
|
# @@Changelog : newScript
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# shellcheck shell=bash
|
# shellcheck shell=bash
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
##@Version : 202605242100-git
|
##@Version : 202605311104-git
|
||||||
# @@Author : CasjaysDev
|
# @@Author : CasjaysDev
|
||||||
# @@Contact : CasjaysDev <docker-admin@casjaysdev.pro>
|
# @@Contact : CasjaysDev <docker-admin@casjaysdev.pro>
|
||||||
# @@License : MIT
|
# @@License : MIT
|
||||||
# @@Copyright : Copyright 2026 CasjaysDev
|
# @@Copyright : Copyright 2026 CasjaysDev
|
||||||
# @@Created : Sun May 24 09:00:32 PM EDT 2026
|
# @@Created : Sun May 31 11:04:51 AM EDT 2026
|
||||||
# @@File : 06-post.sh
|
# @@File : 06-post.sh
|
||||||
# @@Description : script to run post
|
# @@Description : script to run post
|
||||||
# @@Changelog : newScript
|
# @@Changelog : newScript
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# shellcheck shell=bash
|
# shellcheck shell=bash
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
##@Version : 202605242100-git
|
##@Version : 202605311104-git
|
||||||
# @@Author : CasjaysDev
|
# @@Author : CasjaysDev
|
||||||
# @@Contact : CasjaysDev <docker-admin@casjaysdev.pro>
|
# @@Contact : CasjaysDev <docker-admin@casjaysdev.pro>
|
||||||
# @@License : MIT
|
# @@License : MIT
|
||||||
# @@Copyright : Copyright 2026 CasjaysDev
|
# @@Copyright : Copyright 2026 CasjaysDev
|
||||||
# @@Created : Sun May 24 09:00:33 PM EDT 2026
|
# @@Created : Sun May 31 11:04:52 AM EDT 2026
|
||||||
# @@File : 07-cleanup.sh
|
# @@File : 07-cleanup.sh
|
||||||
# @@Description : script to run cleanup
|
# @@Description : script to run cleanup
|
||||||
# @@Changelog : newScript
|
# @@Changelog : newScript
|
||||||
|
|||||||
@@ -1,78 +0,0 @@
|
|||||||
#!/usr/bin/env sh
|
|
||||||
# shellcheck shell=sh
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
##@Version : 202605051306-git
|
|
||||||
# @@Author : Jason Hempstead
|
|
||||||
# @@Contact : jason@casjaysdev.pro
|
|
||||||
# @@License : WTFPL
|
|
||||||
# @@ReadME : copy --help
|
|
||||||
# @@Copyright : Copyright: (c) 2026 Jason Hempstead, Casjays Developments
|
|
||||||
# @@Created : Tuesday, May 05, 2026 13:06 EDT
|
|
||||||
# @@File : copy
|
|
||||||
# @@Description : copies a file and shows progress
|
|
||||||
# @@Changelog : Refactored for self-contained operation
|
|
||||||
# @@TODO : Better documentation
|
|
||||||
# @@Other :
|
|
||||||
# @@Resource :
|
|
||||||
# @@Terminal App : no
|
|
||||||
# @@sudo/root : no
|
|
||||||
# @@Template : shell/sh
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# shellcheck disable=SC1001,SC1003,SC2001,SC2003,SC2016,SC2031,SC2090,SC2115,SC2120,SC2155,SC2199,SC2229,SC2317,SC2329
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
APPNAME="$(basename -- "$0" 2>/dev/null)"
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# colorization
|
|
||||||
if [ -n "$NO_COLOR" ]; then
|
|
||||||
__printf_color() { printf '%b' "$1\n" | tr -d '\t' | sed '/^%b$/d;s,\x1B\[ 0-9;]*[a-zA-Z],,g'; }
|
|
||||||
else
|
|
||||||
__printf_color() { { [ -z "$2" ] || DEFAULT_COLOR=$2; } && printf "%b" "$(tput setaf "$DEFAULT_COLOR" 2>/dev/null)" "$1\n" "$(tput sgr0 2>/dev/null)"; }
|
|
||||||
fi
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
__unlink() { [ -L "$1" ] && rm -f -- "$1" >/dev/null; }
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# custom functions
|
|
||||||
__copy() {
|
|
||||||
exitCode=0
|
|
||||||
if [ -d "$1" ]; then
|
|
||||||
__printf_color "Copying $1/* to $2/"
|
|
||||||
__unlink "$2"
|
|
||||||
mkdir -p "$2"
|
|
||||||
for f in "$1"/* "$1"/.[!.]* "$1"/..?*; do
|
|
||||||
[ -e "$f" ] || [ -L "$f" ] || continue
|
|
||||||
base=$(basename -- "$f")
|
|
||||||
__copy "$f" "$2/$base" || exitCode=$?
|
|
||||||
done
|
|
||||||
elif [ -f "$1" ] || [ -L "$1" ]; then
|
|
||||||
__printf_color "Copying $1 to $2"
|
|
||||||
__unlink "$2"
|
|
||||||
cp -Rf "$1" "$2"
|
|
||||||
exitCode=$?
|
|
||||||
fi
|
|
||||||
return $exitCode
|
|
||||||
}
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# Define variables
|
|
||||||
DEFAULT_COLOR="254"
|
|
||||||
COPY_EXIT_STATUS=0
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# Main application
|
|
||||||
if [ $# -ne 2 ]; then
|
|
||||||
__printf_color "USAGE: $APPNAME to from" "1" >&2
|
|
||||||
COPY_EXIT_STATUS=1
|
|
||||||
elif [ ! -e "$1" ]; then
|
|
||||||
__printf_color "$1 does not exist" >&2
|
|
||||||
COPY_EXIT_STATUS=2
|
|
||||||
else
|
|
||||||
__printf_color "Copying $1 to $2" "4"
|
|
||||||
__copy "$1" "$2" >/dev/null
|
|
||||||
COPY_EXIT_STATUS=$?
|
|
||||||
fi
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# End application
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# lets exit with code
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
exit $COPY_EXIT_STATUS
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# ex: ts=2 sw=2 et filetype=sh
|
|
||||||
@@ -1,15 +1,15 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# shellcheck shell=bash
|
# shellcheck shell=bash
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
##@Version : 202605241245-git
|
##@Version : 202605260122-git
|
||||||
# @@Author : Jason Hempstead
|
# @@Author : Jason Hempstead
|
||||||
# @@Contact : jason@casjaysdev.pro
|
# @@Contact : jason@casjaysdev.pro
|
||||||
# @@License : WTFPL
|
# @@License : LICENSE.md
|
||||||
# @@ReadME : entrypoint.sh --help
|
# @@ReadME : entrypoint.sh --help
|
||||||
# @@Copyright : Copyright: (c) 2026 Jason Hempstead, Casjays Developments
|
# @@Copyright : Copyright: (c) 2026 Jason Hempstead, Casjays Developments
|
||||||
# @@Created : Sunday, May 24, 2026 21:00 EDT
|
# @@Created : Sunday, May 31, 2026 11:04 EDT
|
||||||
# @@File : entrypoint.sh
|
# @@File : entrypoint.sh
|
||||||
# @@Description : Entrypoint file for alpine
|
# @@Description : Entrypoint file for rust
|
||||||
# @@Changelog : New script
|
# @@Changelog : New script
|
||||||
# @@TODO : Better documentation
|
# @@TODO : Better documentation
|
||||||
# @@Other :
|
# @@Other :
|
||||||
@@ -39,7 +39,7 @@ PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
|
|||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
# Set bash options
|
# Set bash options
|
||||||
SCRIPT_FILE="$0"
|
SCRIPT_FILE="$0"
|
||||||
CONTAINER_NAME="alpine"
|
CONTAINER_NAME="rust"
|
||||||
SCRIPT_NAME="${SCRIPT_FILE##*/}"
|
SCRIPT_NAME="${SCRIPT_FILE##*/}"
|
||||||
CONTAINER_NAME="${ENV_CONTAINER_NAME:-$CONTAINER_NAME}"
|
CONTAINER_NAME="${ENV_CONTAINER_NAME:-$CONTAINER_NAME}"
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
@@ -61,7 +61,7 @@ case "$1" in
|
|||||||
# Help message
|
# Help message
|
||||||
-h | --help)
|
-h | --help)
|
||||||
shift 1
|
shift 1
|
||||||
echo 'Docker container for '$CONTAINER_NAME''
|
echo "Docker container for $CONTAINER_NAME"
|
||||||
echo "Usage: $CONTAINER_NAME [help tail cron exec start init shell procs ports healthcheck backup command]"
|
echo "Usage: $CONTAINER_NAME [help tail cron exec start init shell procs ports healthcheck backup command]"
|
||||||
echo ""
|
echo ""
|
||||||
exit 0
|
exit 0
|
||||||
@@ -95,8 +95,8 @@ SERVICE_UID="${SERVICE_UID:-0}"
|
|||||||
SERVICE_GID="${SERVICE_GID:-0}"
|
SERVICE_GID="${SERVICE_GID:-0}"
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
# User and group in which the service switches to - IE: nginx,apache,mysql,postgres
|
# User and group in which the service switches to - IE: nginx,apache,mysql,postgres
|
||||||
#SERVICE_USER="${SERVICE_USER:-alpine}" # execute command as another user
|
#SERVICE_USER="${SERVICE_USER:-rust}" # execute command as another user
|
||||||
#SERVICE_GROUP="${SERVICE_GROUP:-alpine}" # Set the service group
|
#SERVICE_GROUP="${SERVICE_GROUP:-rust}" # Set the service group
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
# Secondary ports
|
# Secondary ports
|
||||||
# specifiy other ports
|
# specifiy other ports
|
||||||
@@ -294,7 +294,7 @@ fi
|
|||||||
if [ "$ENTRYPOINT_FIRST_RUN" != "no" ]; then
|
if [ "$ENTRYPOINT_FIRST_RUN" != "no" ]; then
|
||||||
if [ "$CONFIG_DIR_INITIALIZED" = "no" ] || [ "$DATA_DIR_INITIALIZED" = "no" ]; then
|
if [ "$CONFIG_DIR_INITIALIZED" = "no" ] || [ "$DATA_DIR_INITIALIZED" = "no" ]; then
|
||||||
if [ "$ENTRYPOINT_MESSAGE" = "yes" ]; then
|
if [ "$ENTRYPOINT_MESSAGE" = "yes" ]; then
|
||||||
echo "Executing entrypoint script for alpine"
|
echo "Executing entrypoint script for rust"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|||||||
@@ -1,249 +0,0 @@
|
|||||||
#!/usr/bin/env sh
|
|
||||||
# shellcheck shell=sh
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
##@Version : 202605051654-git
|
|
||||||
# @@Author : Jason Hempstead
|
|
||||||
# @@Contact : jason@casjaysdev.pro
|
|
||||||
# @@License : WTFPL
|
|
||||||
# @@ReadME : healthcheck --help
|
|
||||||
# @@Copyright : Copyright: (c) 2026 Jason Hempstead, Casjays Developments
|
|
||||||
# @@Created : Tuesday, May 05, 2026 16:54 EDT
|
|
||||||
# @@File : healthcheck
|
|
||||||
# @@Description : Docker container healthcheck — HTTP/TCP/process/file checks
|
|
||||||
# @@Changelog : Rewrote as a real Docker HEALTHCHECK probe
|
|
||||||
# @@TODO : Better documentation
|
|
||||||
# @@Other :
|
|
||||||
# @@Resource :
|
|
||||||
# @@Terminal App : no
|
|
||||||
# @@sudo/root : no
|
|
||||||
# @@Template : shell/sh
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# shellcheck disable=SC1001,SC1003,SC2001,SC2003,SC2016,SC2031,SC2090,SC2115,SC2120,SC2155,SC2199,SC2229,SC2317,SC2329
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
APPNAME="$(basename -- "$0" 2>/dev/null)"
|
|
||||||
VERSION="202605051654-git"
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# Defaults (env vars override built-ins, CLI flags override env vars)
|
|
||||||
HEALTHCHECK_URL="${HEALTHCHECK_URL:-}"
|
|
||||||
HEALTHCHECK_HTTP_STATUS="${HEALTHCHECK_HTTP_STATUS:-2,3}"
|
|
||||||
HEALTHCHECK_HOST="${HEALTHCHECK_HOST:-127.0.0.1}"
|
|
||||||
HEALTHCHECK_PORT="${HEALTHCHECK_PORT:-}"
|
|
||||||
HEALTHCHECK_PROCESS="${HEALTHCHECK_PROCESS:-}"
|
|
||||||
HEALTHCHECK_FILE="${HEALTHCHECK_FILE:-}"
|
|
||||||
HEALTHCHECK_FILE_MAX_AGE="${HEALTHCHECK_FILE_MAX_AGE:-}"
|
|
||||||
HEALTHCHECK_TIMEOUT="${HEALTHCHECK_TIMEOUT:-5}"
|
|
||||||
HEALTHCHECK_VERBOSE="${HEALTHCHECK_VERBOSE:-}"
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
__cmd_exists() { command -v "$1" >/dev/null 2>&1; }
|
|
||||||
__log() { [ -n "$HEALTHCHECK_VERBOSE" ] && printf '%s\n' "$*" >&2; return 0; }
|
|
||||||
__fail() { printf 'UNHEALTHY: %s\n' "$*" >&2; exit 1; }
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
__usage() {
|
|
||||||
cat <<EOF
|
|
||||||
$APPNAME $VERSION — Docker container healthcheck
|
|
||||||
|
|
||||||
Usage: $APPNAME [options]
|
|
||||||
|
|
||||||
At least one check must be configured (via env var or flag), or the script
|
|
||||||
exits 1. All configured checks must pass for the container to be healthy.
|
|
||||||
|
|
||||||
Options:
|
|
||||||
--url LIST HTTP(S) URL(s) to GET, comma-separated; ALL must
|
|
||||||
return an accepted status
|
|
||||||
(e.g. "http://localhost/health,http://localhost/ready")
|
|
||||||
--status PREFIXES Accepted status code prefixes, comma-separated
|
|
||||||
(default: "2,3" — any 2xx or 3xx; e.g. "200,204,301")
|
|
||||||
--host HOST Host for TCP port check (default: 127.0.0.1)
|
|
||||||
--port LIST TCP port(s) that must be accepting connections,
|
|
||||||
comma-separated; ALL must be reachable
|
|
||||||
(e.g. "80,443,3306")
|
|
||||||
--process LIST Process name(s) that must be running (matches the
|
|
||||||
executable name via pgrep). Comma-separated for
|
|
||||||
multiple — ALL must be present
|
|
||||||
(e.g. "tini,nginx,postfix,mariadb")
|
|
||||||
--file LIST File path(s) that must exist, comma-separated; ALL
|
|
||||||
must exist (and pass --file-max-age, if set)
|
|
||||||
--file-max-age SECONDS Each file's mtime must be within this many seconds
|
|
||||||
--timeout SECONDS Network check timeout (default: 5)
|
|
||||||
-v, --verbose Print check progress to stderr
|
|
||||||
-h, --help Show this help and exit 0
|
|
||||||
|
|
||||||
Environment variables (overridden by flags):
|
|
||||||
HEALTHCHECK_URL, HEALTHCHECK_HTTP_STATUS, HEALTHCHECK_HOST,
|
|
||||||
HEALTHCHECK_PORT, HEALTHCHECK_PROCESS, HEALTHCHECK_FILE,
|
|
||||||
HEALTHCHECK_FILE_MAX_AGE, HEALTHCHECK_TIMEOUT, HEALTHCHECK_VERBOSE
|
|
||||||
|
|
||||||
Exit codes:
|
|
||||||
0 all configured checks passed
|
|
||||||
1 at least one check failed, or no checks were configured
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# Parse CLI flags (override env vars)
|
|
||||||
while [ $# -gt 0 ]; do
|
|
||||||
case "$1" in
|
|
||||||
--url) HEALTHCHECK_URL="$2"; shift 2 ;;
|
|
||||||
--url=*) HEALTHCHECK_URL="${1#*=}"; shift ;;
|
|
||||||
--status) HEALTHCHECK_HTTP_STATUS="$2"; shift 2 ;;
|
|
||||||
--status=*) HEALTHCHECK_HTTP_STATUS="${1#*=}"; shift ;;
|
|
||||||
--host) HEALTHCHECK_HOST="$2"; shift 2 ;;
|
|
||||||
--host=*) HEALTHCHECK_HOST="${1#*=}"; shift ;;
|
|
||||||
--port) HEALTHCHECK_PORT="$2"; shift 2 ;;
|
|
||||||
--port=*) HEALTHCHECK_PORT="${1#*=}"; shift ;;
|
|
||||||
--process) HEALTHCHECK_PROCESS="$2"; shift 2 ;;
|
|
||||||
--process=*) HEALTHCHECK_PROCESS="${1#*=}"; shift ;;
|
|
||||||
--file) HEALTHCHECK_FILE="$2"; shift 2 ;;
|
|
||||||
--file=*) HEALTHCHECK_FILE="${1#*=}"; shift ;;
|
|
||||||
--file-max-age) HEALTHCHECK_FILE_MAX_AGE="$2"; shift 2 ;;
|
|
||||||
--file-max-age=*) HEALTHCHECK_FILE_MAX_AGE="${1#*=}"; shift ;;
|
|
||||||
--timeout) HEALTHCHECK_TIMEOUT="$2"; shift 2 ;;
|
|
||||||
--timeout=*) HEALTHCHECK_TIMEOUT="${1#*=}"; shift ;;
|
|
||||||
-v|--verbose) HEALTHCHECK_VERBOSE=1; shift ;;
|
|
||||||
-h|--help) __usage; exit 0 ;;
|
|
||||||
--) shift; break ;;
|
|
||||||
-*) printf 'Unknown option: %s\n' "$1" >&2; __usage >&2; exit 1 ;;
|
|
||||||
*) printf 'Unexpected argument: %s\n' "$1" >&2; exit 1 ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# Individual checks — each prints why it failed and exits 1 on failure
|
|
||||||
__trim() { printf '%s' "$1" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//'; }
|
|
||||||
|
|
||||||
__check_one_http() {
|
|
||||||
url="$1"; accepted="$2"; timeout="$3"
|
|
||||||
if __cmd_exists curl; then
|
|
||||||
code="$(curl -ksSL -o /dev/null -w '%{http_code}' --max-time "$timeout" "$url" 2>/dev/null)" \
|
|
||||||
|| __fail "HTTP request to $url failed (curl error)"
|
|
||||||
elif __cmd_exists wget; then
|
|
||||||
code="$(wget -q -S --spider --timeout="$timeout" --tries=1 "$url" 2>&1 \
|
|
||||||
| awk '/^ HTTP\// {c=$2} END {print c+0}')"
|
|
||||||
[ "$code" -gt 0 ] 2>/dev/null || __fail "HTTP request to $url failed (wget error)"
|
|
||||||
else
|
|
||||||
__fail "HTTP check requires curl or wget"
|
|
||||||
fi
|
|
||||||
IFS=','
|
|
||||||
for prefix in $accepted; do
|
|
||||||
case "$code" in
|
|
||||||
"$prefix"*) unset IFS; __log "HTTP ok: $url -> $code"; return 0 ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
unset IFS
|
|
||||||
__fail "HTTP $url returned $code (expected prefix in: $accepted)"
|
|
||||||
}
|
|
||||||
|
|
||||||
__check_http() {
|
|
||||||
urls="$1"; accepted="$2"; timeout="$3"
|
|
||||||
__log "HTTP: urls=$urls (timeout=${timeout}s, accept=${accepted})"
|
|
||||||
IFS=','
|
|
||||||
for u in $urls; do
|
|
||||||
unset IFS
|
|
||||||
u="$(__trim "$u")"
|
|
||||||
[ -n "$u" ] || { IFS=','; continue; }
|
|
||||||
__check_one_http "$u" "$accepted" "$timeout"
|
|
||||||
IFS=','
|
|
||||||
done
|
|
||||||
unset IFS
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
__check_one_tcp() {
|
|
||||||
host="$1"; port="$2"; timeout="$3"
|
|
||||||
if __cmd_exists nc; then
|
|
||||||
nc -z -w "$timeout" "$host" "$port" >/dev/null 2>&1 && { __log "TCP ok: $host:$port"; return 0; }
|
|
||||||
fi
|
|
||||||
if __cmd_exists ncat; then
|
|
||||||
ncat -z -w "${timeout}s" "$host" "$port" >/dev/null 2>&1 && { __log "TCP ok (ncat): $host:$port"; return 0; }
|
|
||||||
fi
|
|
||||||
# Last resort: bash /dev/tcp (only if bash is available; sh-only systems skip)
|
|
||||||
if __cmd_exists bash; then
|
|
||||||
bash -c "exec 3<>/dev/tcp/$host/$port" >/dev/null 2>&1 && { __log "TCP ok (bash): $host:$port"; return 0; }
|
|
||||||
fi
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
__check_tcp() {
|
|
||||||
host="$1"; ports="$2"; timeout="$3"
|
|
||||||
__log "TCP: host=$host ports=$ports (timeout=${timeout}s)"
|
|
||||||
IFS=','
|
|
||||||
for p in $ports; do
|
|
||||||
unset IFS
|
|
||||||
p="$(__trim "$p")"
|
|
||||||
[ -n "$p" ] || { IFS=','; continue; }
|
|
||||||
__check_one_tcp "$host" "$p" "$timeout" || __fail "TCP $host:$p not reachable"
|
|
||||||
IFS=','
|
|
||||||
done
|
|
||||||
unset IFS
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
__check_one_process() {
|
|
||||||
pattern="$1"
|
|
||||||
if __cmd_exists pgrep; then
|
|
||||||
# Match against process name (not full cmdline) so our own argv doesn't self-match
|
|
||||||
pgrep -- "$pattern" >/dev/null 2>&1 && return 0
|
|
||||||
else
|
|
||||||
# Portable fallback: ps -o comm= prints just the command name
|
|
||||||
ps -e -o comm= 2>/dev/null | grep -v -e "^grep$" -e "^$APPNAME$" | grep -q -- "$pattern" && return 0
|
|
||||||
fi
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
__check_process() {
|
|
||||||
patterns="$1"
|
|
||||||
__log "Process: patterns=$patterns"
|
|
||||||
IFS=','
|
|
||||||
for p in $patterns; do
|
|
||||||
unset IFS
|
|
||||||
p="$(__trim "$p")"
|
|
||||||
[ -n "$p" ] || { IFS=','; continue; }
|
|
||||||
__check_one_process "$p" || __fail "Process not running: $p"
|
|
||||||
__log "Process ok: $p"
|
|
||||||
IFS=','
|
|
||||||
done
|
|
||||||
unset IFS
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
__check_one_file() {
|
|
||||||
path="$1"; max_age="$2"
|
|
||||||
[ -e "$path" ] || __fail "File not found: $path"
|
|
||||||
if [ -n "$max_age" ]; then
|
|
||||||
now="$(date +%s)"
|
|
||||||
mtime="$(stat -c %Y "$path" 2>/dev/null || stat -f %m "$path" 2>/dev/null \
|
|
||||||
|| perl -e 'print((stat(shift))[9])' "$path" 2>/dev/null)"
|
|
||||||
[ -n "$mtime" ] || __fail "Cannot determine mtime of $path"
|
|
||||||
age=$(( now - mtime ))
|
|
||||||
[ "$age" -le "$max_age" ] || __fail "File $path is stale (age=${age}s, max=${max_age}s)"
|
|
||||||
fi
|
|
||||||
__log "File ok: $path"
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
__check_file() {
|
|
||||||
paths="$1"; max_age="$2"
|
|
||||||
__log "File: paths=$paths max_age=${max_age:-none}"
|
|
||||||
IFS=','
|
|
||||||
for f in $paths; do
|
|
||||||
unset IFS
|
|
||||||
f="$(__trim "$f")"
|
|
||||||
[ -n "$f" ] || { IFS=','; continue; }
|
|
||||||
__check_one_file "$f" "$max_age"
|
|
||||||
IFS=','
|
|
||||||
done
|
|
||||||
unset IFS
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# Run checks
|
|
||||||
ran_any=0
|
|
||||||
[ -n "$HEALTHCHECK_URL" ] && { __check_http "$HEALTHCHECK_URL" "$HEALTHCHECK_HTTP_STATUS" "$HEALTHCHECK_TIMEOUT"; ran_any=1; }
|
|
||||||
[ -n "$HEALTHCHECK_PORT" ] && { __check_tcp "$HEALTHCHECK_HOST" "$HEALTHCHECK_PORT" "$HEALTHCHECK_TIMEOUT"; ran_any=1; }
|
|
||||||
[ -n "$HEALTHCHECK_PROCESS" ] && { __check_process "$HEALTHCHECK_PROCESS"; ran_any=1; }
|
|
||||||
[ -n "$HEALTHCHECK_FILE" ] && { __check_file "$HEALTHCHECK_FILE" "$HEALTHCHECK_FILE_MAX_AGE"; ran_any=1; }
|
|
||||||
|
|
||||||
[ "$ran_any" -eq 1 ] || __fail "no checks configured (set HEALTHCHECK_URL/PORT/PROCESS/FILE or pass --url/--port/--process/--file)"
|
|
||||||
|
|
||||||
__log "All checks passed"
|
|
||||||
exit 0
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# ex: ts=2 sw=2 et filetype=sh
|
|
||||||
@@ -1,77 +0,0 @@
|
|||||||
#!/usr/bin/env sh
|
|
||||||
# shellcheck shell=sh
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
##@Version : 202605051306-git
|
|
||||||
# @@Author : Jason Hempstead
|
|
||||||
# @@Contact : jason@casjaysdev.pro
|
|
||||||
# @@License : WTFPL
|
|
||||||
# @@ReadME : symlink --help
|
|
||||||
# @@Copyright : Copyright: (c) 2026 Jason Hempstead, Casjays Developments
|
|
||||||
# @@Created : Tuesday, May 05, 2026 13:06 EDT
|
|
||||||
# @@File : symlink
|
|
||||||
# @@Description :
|
|
||||||
# @@Changelog : New script
|
|
||||||
# @@TODO : Better documentation
|
|
||||||
# @@Other :
|
|
||||||
# @@Resource :
|
|
||||||
# @@Terminal App : no
|
|
||||||
# @@sudo/root : no
|
|
||||||
# @@Template : shell/sh
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# shellcheck disable=SC1001,SC1003,SC2001,SC2003,SC2016,SC2031,SC2090,SC2115,SC2120,SC2155,SC2199,SC2229,SC2317,SC2329
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
APPNAME="$(basename -- "$0" 2>/dev/null)"
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# colorization
|
|
||||||
if [ -n "$NO_COLOR" ]; then
|
|
||||||
__printf_color() { printf '%b' "$1\n" | tr -d '\t' | sed '/^%b$/d;s,\x1B\[ 0-9;]*[a-zA-Z],,g'; }
|
|
||||||
else
|
|
||||||
__printf_color() { { [ -z "$2" ] || DEFAULT_COLOR=$2; } && printf "%b" "$(tput setaf "$DEFAULT_COLOR" 2>/dev/null)" "$1\n" "$(tput sgr0 2>/dev/null)"; }
|
|
||||||
fi
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
__unlink() { [ -L "$1" ] && rm -f -- "$1" >/dev/null; }
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# custom functions
|
|
||||||
__ln_sf() {
|
|
||||||
exitCode=0
|
|
||||||
if [ -d "$1" ] && [ ! -L "$1" ]; then
|
|
||||||
__printf_color "symlinking contents of $1 into $2/" "4"
|
|
||||||
__unlink "$2"
|
|
||||||
mkdir -p "$2"
|
|
||||||
for f in "$1"/* "$1"/.[!.]* "$1"/..?*; do
|
|
||||||
[ -e "$f" ] || [ -L "$f" ] || continue
|
|
||||||
base=$(basename -- "$f")
|
|
||||||
__ln_sf "$f" "$2/$base" || exitCode=$?
|
|
||||||
done
|
|
||||||
else
|
|
||||||
__printf_color "symlinking $2 to $1" "4"
|
|
||||||
__unlink "$2"
|
|
||||||
ln -sf "$1" "$2"
|
|
||||||
exitCode=$?
|
|
||||||
fi
|
|
||||||
return $exitCode
|
|
||||||
}
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# Define variables
|
|
||||||
DEFAULT_COLOR="254"
|
|
||||||
SYMLINK_EXIT_STATUS=0
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# Main application
|
|
||||||
if [ $# -ne 2 ]; then
|
|
||||||
__printf_color "USAGE: $APPNAME from to" "2" >&2
|
|
||||||
SYMLINK_EXIT_STATUS=1
|
|
||||||
elif [ ! -e "$1" ]; then
|
|
||||||
__printf_color "$1 does not exist" >&2
|
|
||||||
SYMLINK_EXIT_STATUS=2
|
|
||||||
else
|
|
||||||
__ln_sf "$1" "$2" >/dev/null
|
|
||||||
SYMLINK_EXIT_STATUS=$?
|
|
||||||
fi
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# End application
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# lets exit with code
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
exit $SYMLINK_EXIT_STATUS
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# ex: ts=2 sw=2 et filetype=sh
|
|
||||||
@@ -1,958 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
# shellcheck shell=bash
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
##@Version : 202602061352-git
|
|
||||||
# @@Author : Jason Hempstead
|
|
||||||
# @@Contact : jason@casjaysdev.pro
|
|
||||||
# @@License : WTFPL
|
|
||||||
# @@ReadME : 00-go.sh --help
|
|
||||||
# @@Copyright : Copyright: (c) 2026 Jason Hempstead, Casjays Developments
|
|
||||||
# @@Created : Wednesday, Apr 22, 2026 19:24 EDT
|
|
||||||
# @@File : 00-go.sh
|
|
||||||
# @@Description :
|
|
||||||
# @@Changelog : New script
|
|
||||||
# @@TODO : Better documentation
|
|
||||||
# @@Other :
|
|
||||||
# @@Resource :
|
|
||||||
# @@Terminal App : no
|
|
||||||
# @@sudo/root : no
|
|
||||||
# @@Template : other/start-service
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# shellcheck disable=SC1001,SC1003,SC2001,SC2003,SC2016,SC2031,SC2090,SC2115,SC2120,SC2155,SC2199,SC2229,SC2317,SC2329
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
set -e
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# run trap command on exit
|
|
||||||
trap '__trap_err_handler' ERR
|
|
||||||
trap 'retVal=$?;if [ "$SERVICE_IS_RUNNING" != "yes" ] && [ -f "$SERVICE_PID_FILE" ]; then rm -Rf "$SERVICE_PID_FILE"; fi;exit $retVal' SIGINT SIGTERM SIGPWR
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# ERR trap handler - smart about critical vs non-critical errors
|
|
||||||
__trap_err_handler() {
|
|
||||||
local retVal=$?
|
|
||||||
local command="$BASH_COMMAND"
|
|
||||||
# Ignore SIGPIPE and user interrupts
|
|
||||||
[ $retVal -eq 130 ] || [ $retVal -eq 141 ] && return $retVal
|
|
||||||
# Non-critical: file operations, text processing, user/group operations
|
|
||||||
if [[ "$command" =~ (mkdir|touch|chmod|chown|chgrp|ln|cp|mv|rm|echo|printf|cat|tee|sed|awk|grep|find|sort|uniq|adduser|addgroup|usermod|groupmod|id|getent) ]]; then
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
# Non-critical: conditional checks that might fail
|
|
||||||
if [[ "$command" =~ (test|\[|\[\[|kill -0|pgrep|pidof|ps) ]]; then
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
# Critical error - but only fail if service hasn't started yet
|
|
||||||
if [ "$SERVICE_IS_RUNNING" != "yes" ]; then
|
|
||||||
echo "❌ Critical error (exit $retVal): $command" >&2
|
|
||||||
kill -TERM 1 2>/dev/null || exit $retVal
|
|
||||||
fi
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
SCRIPT_FILE="$0"
|
|
||||||
SERVICE_NAME="rust"
|
|
||||||
SCRIPT_NAME="${SCRIPT_FILE##*/}"
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# Function to exit appropriately based on context
|
|
||||||
__script_exit() {
|
|
||||||
local exit_code="${1:-0}"
|
|
||||||
if [ "${BASH_SOURCE[0]}" != "${0}" ]; then
|
|
||||||
# Script is being sourced - use return
|
|
||||||
return "$exit_code"
|
|
||||||
else
|
|
||||||
# Script is being executed - use exit
|
|
||||||
exit "$exit_code"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# Exit if service is disabled
|
|
||||||
if [ -n "$RUST_APPNAME_ENABLED" ]; then
|
|
||||||
if [ "$RUST_APPNAME_ENABLED" != "yes" ]; then
|
|
||||||
export SERVICE_DISABLED="$SERVICE_NAME"
|
|
||||||
__script_exit 0
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# 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/share/cargo/bin:/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin"
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# import the functions file
|
|
||||||
if [ -f "/usr/local/etc/docker/functions/entrypoint.sh" ]; then
|
|
||||||
. "/usr/local/etc/docker/functions/entrypoint.sh"
|
|
||||||
fi
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# import variables
|
|
||||||
for set_env in "/root/env.sh" "/usr/local/etc/docker/env"/*.sh "/config/env"/*.sh; do
|
|
||||||
if [ -f "$set_env" ]; then
|
|
||||||
. "$set_env"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# exit if __start_init_scripts function hasn't been Initialized
|
|
||||||
if [ ! -f "/run/.start_init_scripts.pid" ]; then
|
|
||||||
echo "__start_init_scripts function hasn't been Initialized" >&2
|
|
||||||
SERVICE_IS_RUNNING="no"
|
|
||||||
__script_exit 1
|
|
||||||
fi
|
|
||||||
# Clean up any stale PID file for this service on startup
|
|
||||||
if [ -n "$SERVICE_NAME" ] && [ -f "/run/init.d/$SERVICE_NAME.pid" ]; then
|
|
||||||
old_pid=$(cat "/run/init.d/$SERVICE_NAME.pid" 2>/dev/null)
|
|
||||||
if [ -n "$old_pid" ] && ! kill -0 "$old_pid" 2>/dev/null; then
|
|
||||||
echo "🧹 Removing stale PID file for $SERVICE_NAME"
|
|
||||||
rm -f "/run/init.d/$SERVICE_NAME.pid"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# Custom functions
|
|
||||||
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# Script to execute
|
|
||||||
START_SCRIPT="/usr/local/etc/docker/exec/$SERVICE_NAME"
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# Reset environment before executing service
|
|
||||||
RESET_ENV="no"
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# Set webroot
|
|
||||||
WWW_ROOT_DIR="/usr/local/share/httpd/default"
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# Default predefined variables
|
|
||||||
# set data directory
|
|
||||||
# Empty to avoid clobbering the /data/go -> /usr/local/share/go symlink
|
|
||||||
# created in __run_precopy. This image is a build env, not a service
|
|
||||||
# with a per-instance data dir.
|
|
||||||
DATA_DIR=""
|
|
||||||
# set config directory
|
|
||||||
CONF_DIR="/config/rust"
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# set the containers etc directory
|
|
||||||
ETC_DIR="/etc/rust"
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# set the var dir
|
|
||||||
VAR_DIR=""
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# set the temp dir
|
|
||||||
TMP_DIR="/tmp/rust"
|
|
||||||
# set scripts pid dir
|
|
||||||
RUN_DIR="/run/rust"
|
|
||||||
# set log directory
|
|
||||||
LOG_DIR="/data/logs/rust"
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# Set the working dir
|
|
||||||
WORK_DIR=""
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# port which service is listening on
|
|
||||||
SERVICE_PORT=""
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# User to use to launch service - IE: postgres
|
|
||||||
# normally root
|
|
||||||
RUNAS_USER="root"
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# User and group in which the service switches to - IE: nginx,apache,mysql,postgres
|
|
||||||
# execute command as another user
|
|
||||||
#SERVICE_USER="go"
|
|
||||||
# Set the service group
|
|
||||||
#SERVICE_GROUP="go"
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# Set password length
|
|
||||||
RANDOM_PASS_USER=""
|
|
||||||
RANDOM_PASS_ROOT=""
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# Set user and group ID
|
|
||||||
# set the user id
|
|
||||||
SERVICE_UID="0"
|
|
||||||
# set the group id
|
|
||||||
SERVICE_GID="0"
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# execute command variables - keep single quotes variables will be expanded later
|
|
||||||
# command to execute
|
|
||||||
# This is a build environment, not a daemon. Leave EXEC_CMD_BIN empty so
|
|
||||||
# the init pipeline finishes after __post_execute and the container idles
|
|
||||||
# via tini+entrypoint.
|
|
||||||
EXEC_CMD_BIN=''
|
|
||||||
# command arguments
|
|
||||||
EXEC_CMD_ARGS=''
|
|
||||||
# execute script before
|
|
||||||
EXEC_PRE_SCRIPT=''
|
|
||||||
# Set to 'no' for configuration services (no daemon process), leave blank for actual services
|
|
||||||
SERVICE_USES_PID=''
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# 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
|
|
||||||
# 0 because this is a build environment, not a service - the container
|
|
||||||
# idles after init and there's no daemon to wait for.
|
|
||||||
POST_EXECUTE_WAIT_TIME="0"
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# Update path var
|
|
||||||
PATH="$PATH:."
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# Lets get containers ip address
|
|
||||||
IP4_ADDRESS="$(__get_ip4)"
|
|
||||||
IP6_ADDRESS="$(__get_ip6)"
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# Where to save passwords to
|
|
||||||
# directory to save username/password for root user
|
|
||||||
ROOT_FILE_PREFIX="/config/secure/auth/root"
|
|
||||||
# directory to save username/password for normal user
|
|
||||||
USER_FILE_PREFIX="/config/secure/auth/user"
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# root/admin user info password/random]
|
|
||||||
# root user name
|
|
||||||
root_user_name="${RUST_ROOT_USER_NAME:-}"
|
|
||||||
# root user password
|
|
||||||
root_user_pass="${RUST_ROOT_PASS_WORD:-}"
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# Normal user info [password/random]
|
|
||||||
# normal user name
|
|
||||||
user_name="${RUST_USER_NAME:-}"
|
|
||||||
# normal user password
|
|
||||||
user_pass="${RUST_USER_PASS_WORD:-}"
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# Load variables from config
|
|
||||||
# Generated by my dockermgr script
|
|
||||||
if [ -f "/config/env/rust.script.sh" ]; then
|
|
||||||
. "/config/env/rust.script.sh"
|
|
||||||
fi
|
|
||||||
# Overwrite the variables
|
|
||||||
if [ -f "/config/env/rust.sh" ]; then
|
|
||||||
. "/config/env/rust.sh"
|
|
||||||
fi
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# Additional predefined variables
|
|
||||||
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# Additional variables
|
|
||||||
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# Specifiy custom directories to be created
|
|
||||||
ADD_APPLICATION_FILES=""
|
|
||||||
ADD_APPLICATION_DIRS="/data/build /app /work /root/app /root/project /usr/local/share/cargo /usr/local/share/cargo/bin /usr/local/share/cargo/registry /usr/local/share/cargo/git /usr/local/share/cargo/target /usr/local/share/rustup"
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
APPLICATION_FILES="$LOG_DIR/$SERVICE_NAME.log"
|
|
||||||
APPLICATION_DIRS="$ETC_DIR $CONF_DIR $DATA_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
|
|
||||||
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# Custom commands to run before copying to /config
|
|
||||||
__run_precopy() {
|
|
||||||
# Define environment
|
|
||||||
local hostname=${HOSTNAME}
|
|
||||||
if [ ! -d "/run/healthcheck" ]; then
|
|
||||||
mkdir -p "/run/healthcheck"
|
|
||||||
fi
|
|
||||||
# Point /data/cargo and /data/rustup at the canonical persistent Rust
|
|
||||||
# state dirs. Done at runtime because /data is a volume mount and only
|
|
||||||
# exists once the container starts. Skip if either path is already a
|
|
||||||
# real, populated dir (legacy upgrade path - leave user data alone).
|
|
||||||
mkdir -p /usr/local/share/cargo /usr/local/share/rustup /data
|
|
||||||
if [ ! -e /data/cargo ] || [ -L /data/cargo ]; then
|
|
||||||
ln -sfn /usr/local/share/cargo /data/cargo
|
|
||||||
fi
|
|
||||||
if [ ! -e /data/rustup ] || [ -L /data/rustup ]; then
|
|
||||||
ln -sfn /usr/local/share/rustup /data/rustup
|
|
||||||
fi
|
|
||||||
# Define actions/commands
|
|
||||||
|
|
||||||
# allow custom functions
|
|
||||||
if builtin type -t __run_precopy_local | grep -q 'function'; then
|
|
||||||
__run_precopy_local
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# Custom prerun functions - IE setup WWW_ROOT_DIR
|
|
||||||
__execute_prerun() {
|
|
||||||
# Define environment
|
|
||||||
local hostname=${HOSTNAME}
|
|
||||||
# Define actions/commands
|
|
||||||
|
|
||||||
# allow custom functions
|
|
||||||
if builtin type -t __execute_prerun_local | grep -q 'function'; then
|
|
||||||
__execute_prerun_local
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# Run any pre-execution checks
|
|
||||||
__run_pre_execute_checks() {
|
|
||||||
# Set variables
|
|
||||||
local exitStatus=0
|
|
||||||
# message to show at start
|
|
||||||
local pre_execute_checks_MessageST="Running preexecute check for $SERVICE_NAME"
|
|
||||||
# message to show at completion
|
|
||||||
local pre_execute_checks_MessageEnd="Finished preexecute check for $SERVICE_NAME"
|
|
||||||
__banner "$pre_execute_checks_MessageST"
|
|
||||||
# Put command to execute in parentheses
|
|
||||||
{
|
|
||||||
true
|
|
||||||
}
|
|
||||||
exitStatus=$?
|
|
||||||
__banner "$pre_execute_checks_MessageEnd: Status $exitStatus"
|
|
||||||
|
|
||||||
# show exit message
|
|
||||||
if [ $exitStatus -ne 0 ]; then
|
|
||||||
echo "The pre-execution check has failed" >&2
|
|
||||||
if [ -f "$SERVICE_PID_FILE" ]; then
|
|
||||||
rm -Rf "$SERVICE_PID_FILE"
|
|
||||||
fi
|
|
||||||
__script_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
|
|
||||||
}
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# use this function to update config files - IE: change port
|
|
||||||
__update_conf_files() {
|
|
||||||
# default exit code
|
|
||||||
local exitCode=0
|
|
||||||
# set hostname
|
|
||||||
local sysname="${SERVER_NAME:-${FULL_DOMAIN_NAME:-$HOSTNAME}}"
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# delete files
|
|
||||||
#__rm ""
|
|
||||||
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# custom commands
|
|
||||||
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# replace variables
|
|
||||||
# __replace "" "" "$CONF_DIR/go.conf"
|
|
||||||
# replace variables recursively
|
|
||||||
# __find_replace "" "" "$CONF_DIR"
|
|
||||||
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# define actions
|
|
||||||
|
|
||||||
# allow custom functions
|
|
||||||
if builtin type -t __update_conf_files_local | grep -q 'function'; then
|
|
||||||
__update_conf_files_local
|
|
||||||
fi
|
|
||||||
# exit function
|
|
||||||
return $exitCode
|
|
||||||
}
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# function to run before executing
|
|
||||||
__pre_execute() {
|
|
||||||
# default exit code
|
|
||||||
local exitCode=0
|
|
||||||
# set hostname
|
|
||||||
local sysname="${SERVER_NAME:-${FULL_DOMAIN_NAME:-$HOSTNAME}}"
|
|
||||||
# execute if directories is empty
|
|
||||||
# __is_dir_empty "$CONF_DIR" && true
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# define actions to run after copying to /config
|
|
||||||
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# unset unneeded variables
|
|
||||||
unset sysname
|
|
||||||
# Lets wait a few seconds before continuing
|
|
||||||
sleep 2
|
|
||||||
# allow custom functions
|
|
||||||
if builtin type -t __pre_execute_local | grep -q 'function'; then
|
|
||||||
__pre_execute_local
|
|
||||||
fi
|
|
||||||
# exit function
|
|
||||||
return $exitCode
|
|
||||||
}
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# function to run after executing
|
|
||||||
__post_execute() {
|
|
||||||
# init pid var
|
|
||||||
local pid=""
|
|
||||||
# set default exit code
|
|
||||||
local retVal=0
|
|
||||||
# how long to wait before executing
|
|
||||||
local ctime=${POST_EXECUTE_WAIT_TIME:-1}
|
|
||||||
# convert minutes to seconds
|
|
||||||
local waitTime=$((ctime * 60))
|
|
||||||
# message to show at start
|
|
||||||
local postMessageST="Running post commands for $SERVICE_NAME"
|
|
||||||
# message to show at completion
|
|
||||||
local postMessageEnd="Finished post commands for $SERVICE_NAME"
|
|
||||||
# wait
|
|
||||||
sleep $waitTime
|
|
||||||
# execute commands after waiting
|
|
||||||
(
|
|
||||||
# show message
|
|
||||||
__banner "$postMessageST"
|
|
||||||
# commands to execute
|
|
||||||
sleep 5
|
|
||||||
# show exit message
|
|
||||||
__banner "$postMessageEnd: Status $retVal"
|
|
||||||
) 2>"/dev/stderr" | tee -p -a "/data/logs/init.txt" &
|
|
||||||
pid=$!
|
|
||||||
if ps ax | awk '{print $1}' | grep -v grep | grep -q "$execPid$"; then
|
|
||||||
retVal=0
|
|
||||||
else
|
|
||||||
retVal=10
|
|
||||||
fi
|
|
||||||
# allow custom functions
|
|
||||||
if builtin type -t __post_execute_local | grep -q 'function'; then
|
|
||||||
__post_execute_local
|
|
||||||
fi
|
|
||||||
# exit function
|
|
||||||
return $retVal
|
|
||||||
}
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# use this function to update config files - IE: change port
|
|
||||||
__pre_message() {
|
|
||||||
local exitCode=0
|
|
||||||
if [ -n "$PRE_EXEC_MESSAGE" ]; then
|
|
||||||
eval echo "$PRE_EXEC_MESSAGE"
|
|
||||||
fi
|
|
||||||
# execute commands
|
|
||||||
|
|
||||||
# allow custom functions
|
|
||||||
if builtin type -t __pre_message_local | grep -q 'function'; then
|
|
||||||
__pre_message_local
|
|
||||||
fi
|
|
||||||
# exit function
|
|
||||||
return $exitCode
|
|
||||||
}
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# use this function to setup ssl support
|
|
||||||
__update_ssl_conf() {
|
|
||||||
local exitCode=0
|
|
||||||
local sysname="${SERVER_NAME:-${FULL_DOMAIN_NAME:-$HOSTNAME}}"
|
|
||||||
# execute commands
|
|
||||||
|
|
||||||
# allow custom functions
|
|
||||||
if builtin type -t __update_ssl_conf_local | grep -q 'function'; then
|
|
||||||
__update_ssl_conf_local
|
|
||||||
fi
|
|
||||||
# set exitCode
|
|
||||||
return $exitCode
|
|
||||||
}
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
__create_service_env() {
|
|
||||||
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
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# root/admin user info [password/random]
|
|
||||||
#ENV_ROOT_USER_NAME="${ENV_ROOT_USER_NAME:-$RUST_ROOT_USER_NAME}" # root user name
|
|
||||||
#ENV_ROOT_USER_PASS="${ENV_ROOT_USER_NAME:-$RUST_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:-$RUST_USER_NAME}" #
|
|
||||||
#ENV_USER_PASS="${ENV_USER_PASS:-$RUST_USER_PASS_WORD}" #
|
|
||||||
#user_name="${ENV_USER_NAME:-$user_name}" # normal user name
|
|
||||||
#user_pass="${ENV_USER_PASS:-$user_pass}" # normal user password
|
|
||||||
|
|
||||||
EOF
|
|
||||||
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
|
|
||||||
if ! __file_exists_with_content "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"; then
|
|
||||||
exitCode=$((exitCode + 1))
|
|
||||||
fi
|
|
||||||
if ! __file_exists_with_content "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.local.sh"; then
|
|
||||||
exitCode=$((exitCode + 1))
|
|
||||||
fi
|
|
||||||
return $exitCode
|
|
||||||
}
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# script to start server
|
|
||||||
__run_start_script() {
|
|
||||||
local runExitCode=0
|
|
||||||
# expand variables
|
|
||||||
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 "")"
|
|
||||||
local sysname="${SERVER_NAME:-${FULL_DOMAIN_NAME:-$HOSTNAME}}"
|
|
||||||
if [ -f "$CONF_DIR/$SERVICE_NAME.exec_cmd.sh" ]; then
|
|
||||||
. "$CONF_DIR/$SERVICE_NAME.exec_cmd.sh"
|
|
||||||
fi
|
|
||||||
#
|
|
||||||
if [ -z "$cmd" ]; then
|
|
||||||
__post_execute 2>"/dev/stderr" | tee -p -a "/data/logs/init.txt"
|
|
||||||
retVal=$?
|
|
||||||
__log_info "Initialization of $SCRIPT_NAME has completed"
|
|
||||||
__script_exit $retVal
|
|
||||||
else
|
|
||||||
# ensure the command exists
|
|
||||||
if [ ! -x "$cmd" ]; then
|
|
||||||
__log_error "$name is not a valid executable"
|
|
||||||
return 2
|
|
||||||
fi
|
|
||||||
# check and exit if already running (respects SERVICE_USES_PID in __proc_check)
|
|
||||||
if __proc_check "$name" || __proc_check "$cmd"; then
|
|
||||||
__log_debug "Service $name is already running"
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# show message if env exists
|
|
||||||
if [ -n "$cmd" ]; then
|
|
||||||
if [ -n "$SERVICE_USER" ]; then
|
|
||||||
__log_info "Setting up $cmd to run as $SERVICE_USER"
|
|
||||||
else
|
|
||||||
SERVICE_USER="root"
|
|
||||||
fi
|
|
||||||
if [ -n "$SERVICE_PORT" ]; then
|
|
||||||
__log_info "$name will be running on port $SERVICE_PORT"
|
|
||||||
else
|
|
||||||
SERVICE_PORT=""
|
|
||||||
fi
|
|
||||||
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
|
|
||||||
if [ -n "$su_exec" ]; then
|
|
||||||
__log_debug "Using $su_exec" | tee -a -p "/data/logs/init.txt"
|
|
||||||
fi
|
|
||||||
__log_info "$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"
|
|
||||||
#!/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"
|
|
||||||
args="$args"
|
|
||||||
SERVICE_NAME="$SERVICE_NAME"
|
|
||||||
SERVICE_PID_FILE="$SERVICE_PID_FILE"
|
|
||||||
LOG_DIR="$LOG_DIR"
|
|
||||||
execute_command="$execute_command"
|
|
||||||
\$execute_command 2>"/dev/stderr" >>"\$LOG_DIR/\$SERVICE_NAME.log" &
|
|
||||||
execPid=\$!
|
|
||||||
sleep 1
|
|
||||||
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 ] && printf '%s\n' "\$SERVICE_NAME: \$execPid" >"/run/healthcheck/\$SERVICE_NAME" || echo "Failed to start $execute_command" >&2
|
|
||||||
exit \$retVal
|
|
||||||
|
|
||||||
EOF
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
if [ ! -f "$START_SCRIPT" ]; then
|
|
||||||
execute_command="$(__trim "$su_exec $cmd_exec")"
|
|
||||||
cat <<EOF >"$START_SCRIPT"
|
|
||||||
#!/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"
|
|
||||||
args="$args"
|
|
||||||
SERVICE_NAME="$SERVICE_NAME"
|
|
||||||
SERVICE_PID_FILE="$SERVICE_PID_FILE"
|
|
||||||
LOG_DIR="$LOG_DIR"
|
|
||||||
execute_command="$execute_command"
|
|
||||||
\$execute_command 2>>"/dev/stderr" >>"\$LOG_DIR/\$SERVICE_NAME.log" &
|
|
||||||
execPid=\$!
|
|
||||||
sleep 1
|
|
||||||
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 "Failed to start $execute_command" >&2
|
|
||||||
exit \$retVal
|
|
||||||
|
|
||||||
EOF
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if [ ! -x "$START_SCRIPT" ]; then
|
|
||||||
chmod 755 -Rf "$START_SCRIPT"
|
|
||||||
fi
|
|
||||||
if [ "$CONTAINER_INIT" != "yes" ]; then
|
|
||||||
eval sh -c "$START_SCRIPT"
|
|
||||||
runExitCode=$?
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
return $runExitCode
|
|
||||||
}
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# username and password actions
|
|
||||||
__run_secure_function() {
|
|
||||||
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
|
|
||||||
}
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# Allow ENV_ variable - Import env file
|
|
||||||
if __file_exists_with_content "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"; then
|
|
||||||
. "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
|
|
||||||
fi
|
|
||||||
if __file_exists_with_content "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.local.sh"; then
|
|
||||||
. "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.local.sh"
|
|
||||||
fi
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# default exit code
|
|
||||||
SERVICE_EXIT_CODE=0
|
|
||||||
# application specific
|
|
||||||
EXEC_CMD_NAME="${EXEC_CMD_BIN##*/}"
|
|
||||||
SERVICE_PID_FILE="/run/init.d/$EXEC_CMD_NAME.pid"
|
|
||||||
SERVICE_PID_NUMBER="$(__pgrep "$EXEC_CMD_NAME" 2>/dev/null || echo '')"
|
|
||||||
if type -P "$EXEC_CMD_BIN" &>/dev/null; then
|
|
||||||
EXEC_CMD_BIN="$(type -P "$EXEC_CMD_BIN")"
|
|
||||||
fi
|
|
||||||
if type -P "$EXEC_PRE_SCRIPT" &>/dev/null; then
|
|
||||||
EXEC_PRE_SCRIPT="$(type -P "$EXEC_PRE_SCRIPT")"
|
|
||||||
fi
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# Only run check
|
|
||||||
if __check_service "$1"; then
|
|
||||||
SERVICE_IS_RUNNING=yes
|
|
||||||
else
|
|
||||||
SERVICE_IS_RUNNING="no"
|
|
||||||
fi
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# ensure needed directories exists
|
|
||||||
if [ ! -d "$LOG_DIR" ]; then
|
|
||||||
mkdir -p "$LOG_DIR"
|
|
||||||
fi
|
|
||||||
if [ ! -d "$RUN_DIR" ]; then
|
|
||||||
mkdir -p "$RUN_DIR"
|
|
||||||
fi
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# create auth directories
|
|
||||||
if [ -n "$USER_FILE_PREFIX" ]; then
|
|
||||||
if [ ! -d "$USER_FILE_PREFIX" ]; then
|
|
||||||
mkdir -p "$USER_FILE_PREFIX"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if [ -n "$ROOT_FILE_PREFIX" ]; then
|
|
||||||
if [ ! -d "$ROOT_FILE_PREFIX" ]; then
|
|
||||||
mkdir -p "$ROOT_FILE_PREFIX"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
if [ -z "$RUNAS_USER" ]; then
|
|
||||||
RUNAS_USER="root"
|
|
||||||
fi
|
|
||||||
if [ -z "$SERVICE_USER" ]; then
|
|
||||||
SERVICE_USER="$RUNAS_USER"
|
|
||||||
fi
|
|
||||||
if [ -z "$SERVICE_GROUP" ]; then
|
|
||||||
SERVICE_GROUP="${SERVICE_USER:-$RUNAS_USER}"
|
|
||||||
fi
|
|
||||||
if [ "$IS_WEB_SERVER" = "yes" ]; then
|
|
||||||
RESET_ENV="yes"
|
|
||||||
__is_htdocs_mounted
|
|
||||||
fi
|
|
||||||
if [ "$IS_WEB_SERVER" = "yes" ] && [ -z "$SERVICE_PORT" ]; then
|
|
||||||
SERVICE_PORT="80"
|
|
||||||
fi
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# Database env
|
|
||||||
if [ "$IS_DATABASE_SERVICE" = "yes" ] || [ "$USES_DATABASE_SERVICE" = "yes" ]; then
|
|
||||||
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" ]; then
|
|
||||||
if [ ! -f "${USER_FILE_PREFIX}/db_pass_user" ]; then
|
|
||||||
echo "$DATABASE_PASS_NORMAL" >"${USER_FILE_PREFIX}/db_pass_user"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if [ -n "$DATABASE_PASS_ROOT" ]; then
|
|
||||||
if [ ! -f "${ROOT_FILE_PREFIX}/db_pass_root" ]; then
|
|
||||||
echo "$DATABASE_PASS_ROOT" >"${ROOT_FILE_PREFIX}/db_pass_root"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# [DATABASE_DIR_[SQLITE,REDIS,POSTGRES,MARIADB,COUCHDB,MONGODB,SUPABASE]]
|
|
||||||
if [ "$DATABASE_SERVICE_TYPE" = "custom" ]; then
|
|
||||||
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}"
|
|
||||||
if [ -d "$DATABASE_ADMIN_WWW_ROOT" ]; then
|
|
||||||
SERVER_ADMIN_URL="${SERVER_ADMIN_URL_CUSTOM:-/admin/dbadmin}"
|
|
||||||
fi
|
|
||||||
elif [ "$SERVICE_NAME" = "redis" ] || [ "$DATABASE_SERVICE_TYPE" = "redis" ]; then
|
|
||||||
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}"
|
|
||||||
if [ -d "$DATABASE_ADMIN_WWW_ROOT" ]; then
|
|
||||||
SERVER_ADMIN_URL="${SERVER_ADMIN_URL_REDIS:-/admin/redis}"
|
|
||||||
fi
|
|
||||||
elif [ "$SERVICE_NAME" = "postgres" ] || [ "$DATABASE_SERVICE_TYPE" = "postgres" ]; then
|
|
||||||
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}"
|
|
||||||
if [ -d "$DATABASE_ADMIN_WWW_ROOT" ]; then
|
|
||||||
SERVER_ADMIN_URL="${SERVER_ADMIN_URL_POSTGRES:-/admin/postgres}"
|
|
||||||
fi
|
|
||||||
elif [ "$SERVICE_NAME" = "mariadb" ] || [ "$DATABASE_SERVICE_TYPE" = "mariadb" ]; then
|
|
||||||
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}"
|
|
||||||
if [ -d "$DATABASE_ADMIN_WWW_ROOT" ]; then
|
|
||||||
SERVER_ADMIN_URL="${SERVER_ADMIN_URL_MARIADB:-/admin/mysql}"
|
|
||||||
fi
|
|
||||||
elif [ "$SERVICE_NAME" = "mysql" ] || [ "$DATABASE_SERVICE_TYPE" = "mysql" ]; then
|
|
||||||
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}"
|
|
||||||
if [ -d "$DATABASE_ADMIN_WWW_ROOT" ]; then
|
|
||||||
SERVER_ADMIN_URL="${SERVER_ADMIN_URL_MYSQL:-/admin/mysql}"
|
|
||||||
fi
|
|
||||||
elif [ "$SERVICE_NAME" = "couchdb" ] || [ "$DATABASE_SERVICE_TYPE" = "couchdb" ]; then
|
|
||||||
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}"
|
|
||||||
if [ -d "$DATABASE_ADMIN_WWW_ROOT" ]; then
|
|
||||||
SERVER_ADMIN_URL="${SERVER_ADMIN_URL_COUCHDB:-/admin/couchdb}"
|
|
||||||
fi
|
|
||||||
elif [ "$SERVICE_NAME" = "mongodb" ] || [ "$DATABASE_SERVICE_TYPE" = "mongodb" ]; then
|
|
||||||
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}"
|
|
||||||
if [ -d "$DATABASE_ADMIN_WWW_ROOT" ]; then
|
|
||||||
SERVER_ADMIN_URL="${SERVER_ADMIN_URL_MONGODB:-/admin/mongodb}"
|
|
||||||
fi
|
|
||||||
elif [ "$SERVICE_NAME" = "supabase" ] || [ "$DATABASE_SERVICE_TYPE" = "supabase" ]; then
|
|
||||||
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}"
|
|
||||||
if [ -d "$DATABASE_ADMIN_WWW_ROOT" ]; then
|
|
||||||
SERVER_ADMIN_URL="${SERVER_ADMIN_URL_SUPBASE:-/admin/supabase}"
|
|
||||||
fi
|
|
||||||
elif [ "$SERVICE_NAME" = "sqlite" ] || [ "$DATABASE_SERVICE_TYPE" = "sqlite" ]; then
|
|
||||||
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}"
|
|
||||||
if [ -d "$DATABASE_ADMIN_WWW_ROOT" ]; then
|
|
||||||
SERVER_ADMIN_URL="${SERVER_ADMIN_URL_SQLITE:-/admin/sqlite}"
|
|
||||||
fi
|
|
||||||
if [ ! -d "$DATABASE_DIR" ]; then
|
|
||||||
mkdir -p "$DATABASE_DIR"
|
|
||||||
fi
|
|
||||||
chmod 777 "$DATABASE_DIR"
|
|
||||||
fi
|
|
||||||
if [ -n "$DATABASE_ADMIN_WWW_ROOT" ]; then
|
|
||||||
if [ ! -d "$DATABASE_ADMIN_WWW_ROOT" ]; then
|
|
||||||
mkdir -p "${DATABASE_ADMIN_WWW_ROOT}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# Allow variables via imports - Overwrite existing
|
|
||||||
if [ -f "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh" ]; then
|
|
||||||
. "/config/env/${SERVICE_NAME:-$SCRIPT_NAME}.sh"
|
|
||||||
fi
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# set password to random if variable is random
|
|
||||||
if [ "$user_pass" = "random" ]; then
|
|
||||||
user_pass="$(__random_password ${RANDOM_PASS_USER:-16})"
|
|
||||||
fi
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
if [ "$root_user_pass" = "random" ]; then
|
|
||||||
root_user_pass="$(__random_password ${RANDOM_PASS_ROOT:-16})"
|
|
||||||
fi
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# Allow setting initial users and passwords via environment and save to file
|
|
||||||
if [ -n "$user_name" ]; then
|
|
||||||
echo "$user_name" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_name"
|
|
||||||
fi
|
|
||||||
if [ -n "$user_pass" ]; then
|
|
||||||
echo "$user_pass" >"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass"
|
|
||||||
fi
|
|
||||||
if [ -n "$root_user_name" ]; then
|
|
||||||
echo "$root_user_name" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name"
|
|
||||||
fi
|
|
||||||
if [ -n "$root_user_pass" ]; then
|
|
||||||
echo "$root_user_pass" >"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass"
|
|
||||||
fi
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# create needed dirs
|
|
||||||
if [ ! -d "$LOG_DIR" ]; then
|
|
||||||
mkdir -p "$LOG_DIR"
|
|
||||||
fi
|
|
||||||
if [ ! -d "$RUN_DIR" ]; then
|
|
||||||
mkdir -p "$RUN_DIR"
|
|
||||||
fi
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# Allow per init script usernames and passwords
|
|
||||||
if __file_exists_with_content "${USER_FILE_PREFIX}/${SERVICE_NAME}_name"; then
|
|
||||||
user_name="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_name")"
|
|
||||||
fi
|
|
||||||
if __file_exists_with_content "${USER_FILE_PREFIX}/${SERVICE_NAME}_pass"; then
|
|
||||||
user_pass="$(<"${USER_FILE_PREFIX}/${SERVICE_NAME}_pass")"
|
|
||||||
fi
|
|
||||||
if __file_exists_with_content "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name"; then
|
|
||||||
root_user_name="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_name")"
|
|
||||||
fi
|
|
||||||
if __file_exists_with_content "${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass"; then
|
|
||||||
root_user_pass="$(<"${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass")"
|
|
||||||
fi
|
|
||||||
if __file_exists_with_content "${USER_FILE_PREFIX}/db_pass_user"; then
|
|
||||||
DATABASE_PASS_NORMAL="$(<"${USER_FILE_PREFIX}/db_pass_user")"
|
|
||||||
fi
|
|
||||||
if __file_exists_with_content "${ROOT_FILE_PREFIX}/db_pass_root"; then
|
|
||||||
DATABASE_PASS_ROOT="$(<"${ROOT_FILE_PREFIX}/db_pass_root")"
|
|
||||||
fi
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# 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
|
|
||||||
__initialize_system_etc "$config_2_etc" 2>/dev/stderr | tee -p -a "/data/logs/init.txt"
|
|
||||||
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
|
|
||||||
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}"
|
|
||||||
if [ ! -s "$SERVICE_PID_FILE" ]; then
|
|
||||||
rm -Rf "$SERVICE_PID_FILE"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
SERVICE_EXIT_CODE=0
|
|
||||||
fi
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
# start the post execute function in background
|
|
||||||
__post_execute 2>"/dev/stderr" | tee -p -a "/data/logs/init.txt" &
|
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
__script_exit $SERVICE_EXIT_CODE
|
|
||||||
@@ -1,70 +0,0 @@
|
|||||||
# Cargo system config - lives at $CARGO_HOME/config.toml.
|
|
||||||
#
|
|
||||||
# Default linker overrides for cross-compile targets so plain
|
|
||||||
# `cargo build --target=...` works for pure-Rust crates without the
|
|
||||||
# user having to set up a separate cross C toolchain. The image already
|
|
||||||
# ships:
|
|
||||||
#
|
|
||||||
# - rust-lld (via the llvm-tools-preview rustup component, symlinked
|
|
||||||
# to /usr/local/bin/rust-lld in 02-packages.sh)
|
|
||||||
# - mingw-w64 (apk: mingw-w64-gcc, for native Windows GNU linking)
|
|
||||||
# - zig (apk + cargo-zigbuild bundled copy, for full C cross
|
|
||||||
# toolchains incl. macOS/glibc/RISC-V)
|
|
||||||
#
|
|
||||||
# For crates that pull in C deps (*-sys, openssl-sys, ring, etc.) prefer
|
|
||||||
# `cargo zigbuild --target=...` instead - it handles both the linker AND
|
|
||||||
# the C compile.
|
|
||||||
|
|
||||||
# --- Linux musl / glibc (pure-Rust via rust-lld) ---
|
|
||||||
[target.aarch64-unknown-linux-musl]
|
|
||||||
linker = "rust-lld"
|
|
||||||
|
|
||||||
[target.aarch64-unknown-linux-gnu]
|
|
||||||
linker = "rust-lld"
|
|
||||||
|
|
||||||
[target.armv7-unknown-linux-musleabihf]
|
|
||||||
linker = "rust-lld"
|
|
||||||
|
|
||||||
[target.armv7-unknown-linux-gnueabihf]
|
|
||||||
linker = "rust-lld"
|
|
||||||
|
|
||||||
[target.arm-unknown-linux-gnueabihf]
|
|
||||||
linker = "rust-lld"
|
|
||||||
|
|
||||||
[target.i686-unknown-linux-musl]
|
|
||||||
linker = "rust-lld"
|
|
||||||
|
|
||||||
[target.i686-unknown-linux-gnu]
|
|
||||||
linker = "rust-lld"
|
|
||||||
|
|
||||||
# Note: riscv64gc-unknown-linux-{musl,gnu}, powerpc64le-unknown-linux-gnu,
|
|
||||||
# and s390x-unknown-linux-gnu need libgcc_s + libc for the target arch
|
|
||||||
# which aren't shipped with rust-lld's bundled musl. Use
|
|
||||||
# `cargo zigbuild --target=...` for these.
|
|
||||||
|
|
||||||
# --- Windows GNU (mingw) ---
|
|
||||||
[target.x86_64-pc-windows-gnu]
|
|
||||||
linker = "x86_64-w64-mingw32-gcc"
|
|
||||||
|
|
||||||
[target.i686-pc-windows-gnu]
|
|
||||||
linker = "i686-w64-mingw32-gcc"
|
|
||||||
|
|
||||||
# --- Embedded ARM Cortex-M (no_std) ---
|
|
||||||
# These produce no_std bare-metal binaries. Source code must be `no_std`
|
|
||||||
# with a `#[panic_handler]` and `#[entry]` macro - see the cortex-m-rt
|
|
||||||
# crate. A `std` hello-world will not compile for these targets.
|
|
||||||
[target.thumbv6m-none-eabi]
|
|
||||||
linker = "rust-lld"
|
|
||||||
|
|
||||||
[target.thumbv7em-none-eabihf]
|
|
||||||
linker = "rust-lld"
|
|
||||||
|
|
||||||
[target."thumbv8m.main-none-eabihf"]
|
|
||||||
linker = "rust-lld"
|
|
||||||
|
|
||||||
# --- Embedded RISC-V (no_std) ---
|
|
||||||
[target.riscv32imc-unknown-none-elf]
|
|
||||||
linker = "rust-lld"
|
|
||||||
|
|
||||||
[target.riscv32imac-unknown-none-elf]
|
|
||||||
linker = "rust-lld"
|
|
||||||
@@ -116,7 +116,7 @@ DATABASE_DIR_SUPABASE="${DATABASE_DIR_SUPABASE:-$DATABASE_BASE_DIR/supabase}"
|
|||||||
DOCKER_HOST="unix://var/run/docker.sock"
|
DOCKER_HOST="unix://var/run/docker.sock"
|
||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
# File locations
|
# File locations
|
||||||
ENTRYPOINT_PID_FILE="${ENTRYPOINT_PID_FILE:-/run/.entrypoint.pid}"
|
ENTRYPOINT_PID_FILE="${ENTRYPOINT_PID_FILE:-/run/init.d/entrypoint.pid}"
|
||||||
ENTRYPOINT_INIT_FILE="${ENTRYPOINT_INIT_FILE:-/config/.entrypoint.done}"
|
ENTRYPOINT_INIT_FILE="${ENTRYPOINT_INIT_FILE:-/config/.entrypoint.done}"
|
||||||
ENTRYPOINT_DATA_INIT_FILE="${ENTRYPOINT_DATA_INIT_FILE:-/data/.docker_has_run}"
|
ENTRYPOINT_DATA_INIT_FILE="${ENTRYPOINT_DATA_INIT_FILE:-/data/.docker_has_run}"
|
||||||
ENTRYPOINT_CONFIG_INIT_FILE="${ENTRYPOINT_CONFIG_INIT_FILE:-/config/.docker_has_run}"
|
ENTRYPOINT_CONFIG_INIT_FILE="${ENTRYPOINT_CONFIG_INIT_FILE:-/config/.docker_has_run}"
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
# - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
# File locations
|
# File locations
|
||||||
ENTRYPOINT_PID_FILE="${ENTRYPOINT_PID_FILE:-/run/.entrypoint.pid}"
|
ENTRYPOINT_PID_FILE="${ENTRYPOINT_PID_FILE:-/run/init.d/entrypoint.pid}"
|
||||||
ENTRYPOINT_INIT_FILE="${ENTRYPOINT_INIT_FILE:-/config/.entrypoint.done}"
|
ENTRYPOINT_INIT_FILE="${ENTRYPOINT_INIT_FILE:-/config/.entrypoint.done}"
|
||||||
ENTRYPOINT_DATA_INIT_FILE="${ENTRYPOINT_DATA_INIT_FILE:-/data/.docker_has_run}"
|
ENTRYPOINT_DATA_INIT_FILE="${ENTRYPOINT_DATA_INIT_FILE:-/data/.docker_has_run}"
|
||||||
ENTRYPOINT_CONFIG_INIT_FILE="${ENTRYPOINT_CONFIG_INIT_FILE:-/config/.docker_has_run}"
|
ENTRYPOINT_CONFIG_INIT_FILE="${ENTRYPOINT_CONFIG_INIT_FILE:-/config/.docker_has_run}"
|
||||||
|
|||||||
Reference in New Issue
Block a user