From 28d9722e628312f851cf63205981c051d1f23c8c Mon Sep 17 00:00:00 2001 From: casjay Date: Fri, 26 Jun 2026 12:41:47 -0400 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=9D=20Sync=20example=20files=20and=20u?= =?UTF-8?q?pdate=20AI.md=20to=20current=20gen-dockerfile=20=F0=9F=93=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove stale DEFAULT_* variables and sync all generated example files to match the current gen-dockerfile tool output. - AI.md: remove DEFAULT_FILE_DIR/DATA/CONF/TEMPLATE_DIR from .env.scripts code block and variable reference table; WWW_ROOT_DIR retained - example/.env.scripts: migrate to current variable names (ENV_REGISTRY_REPO, ENV_REGISTRY_PUSH, ENV_REGISTRY_URL, ENV_REGISTRY_ORG); remove DEFAULT_FILE/DATA/CONF/TEMPLATE_DIR entries - example/Dockerfile: remove DEFAULT_FILE/DATA/CONF/TEMPLATE_DIR ARGs; regenerated from current alpine template - example/.gitattributes: sync to current template output - example/.gitignore: sync to current template output (expanded patterns) - example/README.md: regenerated from current template - example/rootfs/root/docker/setup/00-init.sh: sync to current template - example/rootfs/root/docker/setup/01-system.sh: sync to current template - example/rootfs/root/docker/setup/02-packages.sh: sync to current template - example/rootfs/root/docker/setup/03-files.sh: sync to current template - example/rootfs/root/docker/setup/04-users.sh: sync to current template - example/rootfs/root/docker/setup/05-custom.sh: sync to current template - example/rootfs/root/docker/setup/06-post.sh: sync to current template - example/rootfs/root/docker/setup/07-cleanup.sh: sync to current template - example/rootfs/usr/local/bin/entrypoint.sh: sync to current template - example/rootfs/usr/local/etc/docker/functions/entrypoint.sh: sync to current template AI.md example/Dockerfile example/.env.scripts example/.gitattributes example/.gitignore example/README.md example/rootfs/root/docker/setup/00-init.sh example/rootfs/root/docker/setup/01-system.sh example/rootfs/root/docker/setup/02-packages.sh example/rootfs/root/docker/setup/03-files.sh example/rootfs/root/docker/setup/04-users.sh example/rootfs/root/docker/setup/05-custom.sh example/rootfs/root/docker/setup/06-post.sh example/rootfs/root/docker/setup/07-cleanup.sh example/rootfs/usr/local/bin/entrypoint.sh example/rootfs/usr/local/etc/docker/functions/entrypoint.sh --- AI.md | 8 - example/.env.scripts | 22 +- example/.gitattributes | 2 +- example/.gitignore | 174 +++++- example/Dockerfile | 57 +- example/README.md | 38 +- example/rootfs/root/docker/setup/00-init.sh | 14 +- example/rootfs/root/docker/setup/01-system.sh | 10 +- .../rootfs/root/docker/setup/02-packages.sh | 17 +- example/rootfs/root/docker/setup/03-files.sh | 52 +- example/rootfs/root/docker/setup/04-users.sh | 10 +- example/rootfs/root/docker/setup/05-custom.sh | 10 +- example/rootfs/root/docker/setup/06-post.sh | 10 +- .../rootfs/root/docker/setup/07-cleanup.sh | 12 +- example/rootfs/usr/local/bin/entrypoint.sh | 93 +-- .../local/etc/docker/functions/entrypoint.sh | 566 +++++++----------- 16 files changed, 543 insertions(+), 552 deletions(-) diff --git a/AI.md b/AI.md index 97b20dc..0ee8c4b 100644 --- a/AI.md +++ b/AI.md @@ -266,13 +266,6 @@ PHP_VERSION="system" NODE_VERSION="system" NODE_MANAGER="system" # - - - - - - - - - - - - - - - - - - - - - - - - - -# Default directories (passed as ARGs into Dockerfile) -WWW_ROOT_DIR="/usr/local/share/httpd/default" -DEFAULT_FILE_DIR="/usr/local/share/template-files" -DEFAULT_DATA_DIR="/usr/local/share/template-files/data" -DEFAULT_CONF_DIR="/usr/local/share/template-files/config" -DEFAULT_TEMPLATE_DIR="/usr/local/share/template-files/defaults" -# - - - - - - - - - - - - - - - - - - - - - - - - - ENV_PACKAGES="" ``` @@ -338,7 +331,6 @@ Never use the old names in new `.env.scripts` files. | `PULL_URL` | Base image | `casjaysdev/alpine` | | `DISTRO_VERSION` | Base image tag | `${IMAGE_VERSION}` | | `WWW_ROOT_DIR` | Web root | `/usr/local/share/httpd/default` | -| `DEFAULT_FILE_DIR` | Template files dir | `/usr/local/share/template-files` | ### Generated Dockerfile Structure diff --git a/example/.env.scripts b/example/.env.scripts index 76d019f..fee5eef 100644 --- a/example/.env.scripts +++ b/example/.env.scripts @@ -1,10 +1,10 @@ # - - - - - - - - - - - - - - - - - - - - - - - - - -##@Version : 202605131434-git +##@Version : 202606261238-git # @@Author : CasjaysDev # @@Contact : CasjaysDev -# @@License : MIT +# @@License : WTFPL # @@Copyright : Copyright 2026 CasjaysDev -# @@Created : Wed May 13 02:34:14 PM EDT 2026 +# @@Created : Fri Jun 26 12:38:32 PM EDT 2026 # @@File : .env.scripts # @@Description : Variables for gen-dockerfile and buildx scripts # @@Changelog : newScript @@ -26,24 +26,24 @@ DOCKER_ENTYPOINT_HEALTH_ENDPOINTS="$DOCKER_ENTYPOINT_HEALTH_ENDPOINTS" # Dockerfile info ENV_DOCKERFILE="Dockerfile" # ENV_REGISTRY_REPO: Registry repository/image name -ENV_REGISTRY_REPO="example" +ENV_REGISTRY_REPO="alpine" ENV_USE_TEMPLATE="alpine" # - - - - - - - - - - - - - - - - - - - - - - - - - # Maintainer info -ENV_REGISTRY_ORG=".github" +ENV_REGISTRY_ORG="casjaysdevdocker" ENV_VENDOR="CasjaysDev" ENV_AUTHOR="CasjaysDev" ENV_MAINTAINER="CasjaysDev " # - - - - - - - - - - - - - - - - - - - - - - - - - # Repository URLs (Full URLs) # ENV_GIT_REPO_URL: Complete Git repository URL for source code -ENV_GIT_REPO_URL="https://github.com/.github/example" +ENV_GIT_REPO_URL="https://github.com/casjaysdevdocker/alpine" # ENV_REGISTRY_URL: Registry provider base URL (for example https://docker.io) ENV_REGISTRY_URL="https://docker.io" # - - - - - - - - - - - - - - - - - - - - - - - - - # Push Configuration # ENV_REGISTRY_PUSH: Complete push destination derived from registry/org/repo -ENV_REGISTRY_PUSH=".github/example" +ENV_REGISTRY_PUSH="casjaysdevdocker/alpine" # ENV_IMAGE_TAG: Default tag for the image ENV_IMAGE_TAG="latest" # ENV_ADD_TAGS: Additional tags, comma-separated (USE_DATE = auto date tag) @@ -54,7 +54,7 @@ ENV_ADD_IMAGE_PUSH="" # - - - - - - - - - - - - - - - - - - - - - - - - - # Pull Configuration # ENV_PULL_URL: Source image to pull from (base image) -ENV_PULL_URL="casjaysdev/alpine" +ENV_PULL_URL="alpine" # ENV_DISTRO_TAG: Tag for the pull source image ENV_DISTRO_TAG="${IMAGE_VERSION}" # - - - - - - - - - - - - - - - - - - - - - - - - - @@ -72,12 +72,8 @@ NODE_MANAGER="system" # - - - - - - - - - - - - - - - - - - - - - - - - - # Default directories WWW_ROOT_DIR="/usr/local/share/httpd/default" -DEFAULT_FILE_DIR="/usr/local/share/template-files" -DEFAULT_DATA_DIR="/usr/local/share/template-files/data" -DEFAULT_CONF_DIR="/usr/local/share/template-files/config" -DEFAULT_TEMPLATE_DIR="/usr/local/share/template-files/defaults" # - - - - - - - - - - - - - - - - - - - - - - - - - -ENV_PACKAGES="" +ENV_PACKAGES="bash-completion git curl wget sudo unzip iproute2 ssmtp openssl jq tzdata mailcap ncurses util-linux pciutils usbutils coreutils binutils findutils grep rsync zip tini py3-pip procps net-tools coreutils sed gawk grep attr findutils readline lsof less curl shadow ca-certificates" # - - - - - - - - - - - - - - - - - - - - - - - - - # ex: ts=2 sw=2 et filetype=sh # - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/example/.gitattributes b/example/.gitattributes index 07f3b95..b6611c7 100644 --- a/example/.gitattributes +++ b/example/.gitattributes @@ -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 # Auto detect text files and perform LF normalization * text=auto diff --git a/example/.gitignore b/example/.gitignore index 0ec30b5..ad8ca60 100644 --- a/example/.gitignore +++ b/example/.gitignore @@ -1,4 +1,4 @@ -# gitignore created on 05/13/26 at 14:31 +# gitignore created on 06/26/26 at 12:38 # Disable reminder in prompt ignoredirmessage @@ -6,10 +6,12 @@ ignoredirmessage **/.build_failed* # OS generated files + ### Linux ### +# Backup files left by editors *~ -# temporary files which can be created if a process still has a handle open of a deleted file +# Temporary files left when a process holds an open handle to a deleted file .fuse_hidden* # KDE directory preferences @@ -18,11 +20,11 @@ ignoredirmessage # Linux trash folder which might appear on any partition or disk .Trash-* -# .nfs files are created when an open file is removed but is still being accessed +# NFS stale file handles .nfs* ### macOS ### -# General +.DS_Store .DS_Store? .AppleDouble .LSOverride @@ -46,20 +48,23 @@ Network Trash Folder Temporary Items .apdisk -### macOS Patch ### # iCloud generated files *.icloud ### Windows ### -# Windows thumbnail cache files Thumbs.db Thumbs.db:encryptable ehthumbs.db ehthumbs_vista.db -# Dump file +# Crash dump files *.stackdump +# Core dumps (Linux/macOS) +core +core.* +vgcore.* + # Folder config file [Dd]esktop.ini @@ -73,32 +78,165 @@ $RECYCLE.BIN/ *.msm *.msp -# misc -!*/README* -!inc/main.bash - # Windows shortcuts *.lnk -# ignore commit message +### 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 ### +!*/README* +!inc/main.bash + +### Project-specific patterns ### +# ignore commit message files **/.gitcommit -# ignore .build_failed files -**/.build_failed* - -# ignore .bak files +# ignore backup files **/*.bak # ignore .no_push files **/.no_push +**/.nopush # ignore .no_git files **/.no_git -# ignore .installed files +# ignore .installed marker files **/.installed -# ignore work in progress files +# ignore work-in-progress rewrite/refactor scripts **/*.rewrite.sh **/*.refactor.sh +# ignore local override scripts and configs +**/*.local.sh +**/*.local.conf +**/*.local.yaml +**/*.local.yml + diff --git a/example/Dockerfile b/example/Dockerfile index 39d7b82..4fd32e8 100644 --- a/example/Dockerfile +++ b/example/Dockerfile @@ -1,14 +1,10 @@ -# Docker image for example using the alpine template -ARG IMAGE_NAME="example" -ARG PHP_SERVER="example" -ARG BUILD_DATE="202605131434" +# Docker image for alpine using the alpine template +ARG IMAGE_NAME="alpine" +ARG PHP_SERVER="alpine" +ARG BUILD_DATE="202606261238" ARG LANGUAGE="en_US.UTF-8" ARG TIMEZONE="America/New_York" ARG WWW_ROOT_DIR="/usr/local/share/httpd/default" -ARG DEFAULT_FILE_DIR="/usr/local/share/template-files" -ARG DEFAULT_DATA_DIR="/usr/local/share/template-files/data" -ARG DEFAULT_CONF_DIR="/usr/local/share/template-files/config" -ARG DEFAULT_TEMPLATE_DIR="/usr/local/share/template-files/defaults" ARG PATH="/usr/local/etc/docker/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ARG USER="root" @@ -20,11 +16,11 @@ ARG PHP_VERSION="system" ARG NODE_VERSION="system" ARG NODE_MANAGER="system" -ARG IMAGE_REPO=".github/example" +ARG IMAGE_REPO="casjaysdevdocker/alpine" ARG IMAGE_VERSION="latest" ARG CONTAINER_VERSION="" -ARG PULL_URL="casjaysdev/alpine" +ARG PULL_URL="alpine" ARG DISTRO_VERSION="${IMAGE_VERSION}" ARG BUILD_VERSION="${BUILD_DATE}" @@ -42,10 +38,6 @@ ARG EXPOSE_PORTS ARG BUILD_VERSION ARG IMAGE_VERSION ARG WWW_ROOT_DIR -ARG DEFAULT_FILE_DIR -ARG DEFAULT_DATA_DIR -ARG DEFAULT_CONF_DIR -ARG DEFAULT_TEMPLATE_DIR ARG DISTRO_VERSION ARG NODE_VERSION ARG NODE_MANAGER @@ -54,7 +46,7 @@ ARG PHP_SERVER ARG SHELL_OPTS ARG PATH -ARG PACK_LIST=" " +ARG PACK_LIST="bash-completion git curl wget sudo unzip iproute2 ssmtp openssl jq tzdata mailcap ncurses util-linux pciutils usbutils coreutils binutils findutils grep rsync zip tini py3-pip procps net-tools coreutils sed gawk grep attr findutils readline lsof less curl shadow ca-certificates " ENV ENV=~/.profile ENV SHELL="/bin/sh" @@ -63,7 +55,7 @@ ENV TZ="${TIMEZONE}" ENV TIMEZONE="${TZ}" ENV LANG="${LANGUAGE}" ENV TERM="xterm-256color" -ENV HOSTNAME="casjaysdevdocker-example" +ENV HOSTNAME="casjaysdevdocker-alpine" USER ${USER} WORKDIR /root @@ -72,11 +64,18 @@ COPY ./rootfs/. / RUN set -e; \ echo "Updating the system and ensuring bash is installed"; \ - pkmgr update;pkmgr install bash + pkmgr update;pkmgr install bash ca-certificates; \ + update-ca-certificates RUN set -e; \ echo "Setting up prerequisites"; \ - true + apk --no-cache add bash; \ + SH_CMD="$(which sh 2>/dev/null||command -v sh 2>/dev/null)"; \ + BASH_CMD="$(which bash 2>/dev/null||command -v bash 2>/dev/null)"; \ + [ -x "$BASH_CMD" ] && symlink "$BASH_CMD" "/bin/sh" || true; \ + [ -x "$BASH_CMD" ] && symlink "$BASH_CMD" "/usr/bin/sh" || true; \ + [ -x "$BASH_CMD" ] && [ "$SH_CMD" != "/bin/sh" ] && symlink "$BASH_CMD" "$SH_CMD" || true; \ + [ -n "$BASH_CMD" ] && sed -i 's|root:x:.*|root:x:0:0:root:/root:'$BASH_CMD'|g' "/etc/passwd" || true ENV SHELL="/bin/bash" SHELL [ "/bin/bash", "-c" ] @@ -85,13 +84,19 @@ COPY --from=gosu /usr/local/bin/gosu /usr/local/bin/gosu RUN echo "Initializing the system"; \ $SHELL_OPTS; \ - mkdir -p "${DEFAULT_DATA_DIR}" "${DEFAULT_CONF_DIR}" "${DEFAULT_TEMPLATE_DIR}" "/root/docker/setup" "/etc/profile.d"; \ + mkdir -p "/root/docker/setup" "/etc/profile.d"; \ if [ -f "/root/docker/setup/00-init.sh" ];then echo "Running the init script";/root/docker/setup/00-init.sh||{ echo "Failed to execute /root/docker/setup/00-init.sh" >&2 && exit 10; };echo "Done running the init script";fi; \ echo "" RUN echo "Creating and editing system files "; \ $SHELL_OPTS; \ - [ -f "/root/.profile" ] || touch "/root/.profile"; \ + + rm -Rf "/etc/apk/repositories"; \ + [ "$DISTRO_VERSION" = "latest" ] && DISTRO_VERSION="edge";[ "$DISTRO_VERSION" = "edge" ] || DISTRO_VERSION="v${DISTRO_VERSION}"; \ + echo "http://dl-cdn.alpinelinux.org/alpine/${DISTRO_VERSION}/main" >>"/etc/apk/repositories"; \ + echo "http://dl-cdn.alpinelinux.org/alpine/${DISTRO_VERSION}/community" >>"/etc/apk/repositories"; \ + if [ "${DISTRO_VERSION}" = "edge" ]; then echo "http://dl-cdn.alpinelinux.org/alpine/${DISTRO_VERSION}/testing" >>"/etc/apk/repositories";fi; \ + apk update; apk upgrade --no-cache; \ if [ -f "/root/docker/setup/01-system.sh" ];then echo "Running the system script";/root/docker/setup/01-system.sh||{ echo "Failed to execute /root/docker/setup/01-system.sh" >&2 && exit 10; };echo "Done running the system script";fi; \ echo "" @@ -194,10 +199,6 @@ ARG BUILD_VERSION ARG IMAGE_VERSION ARG GIT_COMMIT ARG WWW_ROOT_DIR -ARG DEFAULT_FILE_DIR -ARG DEFAULT_DATA_DIR -ARG DEFAULT_CONF_DIR -ARG DEFAULT_TEMPLATE_DIR ARG DISTRO_VERSION ARG NODE_VERSION ARG NODE_MANAGER @@ -219,12 +220,12 @@ LABEL org.opencontainers.image.authors="${LICENSE}" LABEL org.opencontainers.image.created="${BUILD_DATE}" LABEL org.opencontainers.image.version="${BUILD_VERSION}" LABEL org.opencontainers.image.schema-version="${BUILD_VERSION}" -LABEL org.opencontainers.image.url="https://docker.io/.github/example" -LABEL org.opencontainers.image.source="https://docker.io/.github/example" +LABEL org.opencontainers.image.url="https://docker.io/casjaysdevdocker/alpine" +LABEL org.opencontainers.image.source="https://docker.io/casjaysdevdocker/alpine" LABEL org.opencontainers.image.vcs-type="Git" LABEL org.opencontainers.image.revision="${GIT_COMMIT}" -LABEL org.opencontainers.image.source="https://github.com/.github/example" -LABEL org.opencontainers.image.documentation="https://github.com/.github/example" +LABEL org.opencontainers.image.source="https://github.com/casjaysdevdocker/alpine" +LABEL org.opencontainers.image.documentation="https://github.com/casjaysdevdocker/alpine" LABEL com.github.containers.toolbox="false" ENV ENV=~/.bashrc diff --git a/example/README.md b/example/README.md index 3534f41..baa99a4 100644 --- a/example/README.md +++ b/example/README.md @@ -1,6 +1,6 @@ -## 👋 Welcome to example 🚀 +## 👋 Welcome to example-new 🚀 -example README +example-new README ## Install my system scripts @@ -13,42 +13,41 @@ example README ## Automatic install/update ```shell -dockermgr update example +dockermgr update example-new ``` ## Install and run container ```shell -dockerHome="/var/lib/srv/$USER/docker/casjaysdevdocker/example/example/latest/rootfs" -mkdir -p "/var/lib/srv/$USER/docker/example/rootfs" -git clone "https://github.com/dockermgr/example" "$HOME/.local/share/CasjaysDev/dockermgr/example" -cp -Rfva "$HOME/.local/share/CasjaysDev/dockermgr/example/rootfs/." "$dockerHome/" +dockerHome="/var/lib/srv/$USER/docker/casjaysdevdocker/example-new/latest/volumes" +mkdir -p "$dockerHome" +git clone "https://github.com/dockermgr/example-new" "$HOME/.local/share/CasjaysDev/dockermgr/example-new" +cp -Rfva "$HOME/.local/share/CasjaysDev/dockermgr/example-new/volumes/." "$dockerHome/" docker run -d \ --restart always \ --privileged \ ---name casjaysdevdocker-example-latest \ ---hostname example \ +--name casjaysdevdocker-example-new-latest \ +--hostname example-new \ -e TZ=${TIMEZONE:-America/New_York} \ -v "$dockerHome/data:/data:z" \ -v "$dockerHome/config:/config:z" \ -p 80:80 \ -casjaysdevdocker/example:latest +casjaysdevdocker/example-new:latest ``` ## via docker-compose ```yaml -version: "2" services: ProjectName: - image: casjaysdevdocker/example - container_name: casjaysdevdocker-example + image: casjaysdevdocker/example-new + container_name: casjaysdevdocker-example-new environment: - TZ=America/New_York - - HOSTNAME=example + - HOSTNAME=example-new volumes: - - "/var/lib/srv/$USER/docker/casjaysdevdocker/example/example/latest/rootfs/data:/data:z" - - "/var/lib/srv/$USER/docker/casjaysdevdocker/example/example/latest/rootfs/config:/config:z" + - "/var/lib/srv/$USER/docker/casjaysdevdocker/example-new/latest/volumes/data:/data:z" + - "/var/lib/srv/$USER/docker/casjaysdevdocker/example-new/latest/volumes/config:/config:z" ports: - 80:80 restart: always @@ -57,19 +56,19 @@ services: ## Get source files ```shell -dockermgr download src casjaysdevdocker/example +dockermgr download src casjaysdevdocker/example-new ``` OR ```shell -git clone "https://github.com/casjaysdevdocker/example" "$HOME/Projects/github/casjaysdevdocker/example" +git clone "https://github.com/casjaysdevdocker/example-new" "$HOME/Projects/github/casjaysdevdocker/example-new" ``` ## Build container ```shell -cd "$HOME/Projects/github/casjaysdevdocker/example" +cd "$HOME/Projects/github/casjaysdevdocker/example-new" buildx ``` @@ -77,3 +76,4 @@ buildx 🤖 casjay: [Github](https://github.com/casjay) 🤖 ⛵ casjaysdevdocker: [Github](https://github.com/casjaysdevdocker) [Docker](https://hub.docker.com/u/casjaysdevdocker) ⛵ + diff --git a/example/rootfs/root/docker/setup/00-init.sh b/example/rootfs/root/docker/setup/00-init.sh index 99e88df..584afca 100755 --- a/example/rootfs/root/docker/setup/00-init.sh +++ b/example/rootfs/root/docker/setup/00-init.sh @@ -1,12 +1,12 @@ #!/usr/bin/env bash # shellcheck shell=bash # - - - - - - - - - - - - - - - - - - - - - - - - - -##@Version : 202605131431-git +##@Version : 202606261238-git # @@Author : CasjaysDev # @@Contact : CasjaysDev -# @@License : MIT +# @@License : WTFPL # @@Copyright : Copyright 2026 CasjaysDev -# @@Created : Wed May 13 02:31:25 PM EDT 2026 +# @@Created : Fri Jun 26 12:38:35 PM EDT 2026 # @@File : 00-init.sh # @@Description : script to run init # @@Changelog : newScript @@ -20,7 +20,7 @@ # shellcheck disable=SC1001,SC1003,SC2001,SC2003,SC2016,SC2031,SC2090,SC2115,SC2120,SC2155,SC2199,SC2229,SC2317,SC2329 # - - - - - - - - - - - - - - - - - - - - - - - - - # Set bash options -set -o pipefail +set -eo pipefail [ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -x$DEBUGGER_OPTIONS # - - - - - - - - - - - - - - - - - - - - - - - - - # Set env variables @@ -28,15 +28,13 @@ exitCode=0 # - - - - - - - - - - - - - - - - - - - - - - - - - # Predefined actions -if [ -d "/usr/local/share/template-files/data" ]; then rm -Rf "/usr/local/share/template-files/data"/*; fi -if [ -d "/usr/local/share/template-files/config" ]; then rm -Rf "/usr/local/share/template-files/config"/*; fi -if [ -d "/usr/local/share/template-files/defaults" ]; then rm -Rf "/usr/local/share/template-files/defaults"/*; fi + # - - - - - - - - - - - - - - - - - - - - - - - - - # Main script # - - - - - - - - - - - - - - - - - - - - - - - - - # Set the exit code -#exitCode=$? +exitCode=$? # - - - - - - - - - - - - - - - - - - - - - - - - - exit $exitCode # - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/example/rootfs/root/docker/setup/01-system.sh b/example/rootfs/root/docker/setup/01-system.sh index c7cae6f..75ddc98 100755 --- a/example/rootfs/root/docker/setup/01-system.sh +++ b/example/rootfs/root/docker/setup/01-system.sh @@ -1,12 +1,12 @@ #!/usr/bin/env bash # shellcheck shell=bash # - - - - - - - - - - - - - - - - - - - - - - - - - -##@Version : 202605131431-git +##@Version : 202606261238-git # @@Author : CasjaysDev # @@Contact : CasjaysDev -# @@License : MIT +# @@License : WTFPL # @@Copyright : Copyright 2026 CasjaysDev -# @@Created : Wed May 13 02:31:25 PM EDT 2026 +# @@Created : Fri Jun 26 12:38:36 PM EDT 2026 # @@File : 01-system.sh # @@Description : script to run system # @@Changelog : newScript @@ -20,7 +20,7 @@ # shellcheck disable=SC1001,SC1003,SC2001,SC2003,SC2016,SC2031,SC2090,SC2115,SC2120,SC2155,SC2199,SC2229,SC2317,SC2329 # - - - - - - - - - - - - - - - - - - - - - - - - - # Set bash options -set -o pipefail +set -eo pipefail [ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -x$DEBUGGER_OPTIONS # - - - - - - - - - - - - - - - - - - - - - - - - - # Set env variables @@ -34,7 +34,7 @@ exitCode=0 # - - - - - - - - - - - - - - - - - - - - - - - - - # Set the exit code -#exitCode=$? +exitCode=$? # - - - - - - - - - - - - - - - - - - - - - - - - - exit $exitCode # - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/example/rootfs/root/docker/setup/02-packages.sh b/example/rootfs/root/docker/setup/02-packages.sh index 58c3443..322be31 100755 --- a/example/rootfs/root/docker/setup/02-packages.sh +++ b/example/rootfs/root/docker/setup/02-packages.sh @@ -1,12 +1,12 @@ #!/usr/bin/env bash # shellcheck shell=bash # - - - - - - - - - - - - - - - - - - - - - - - - - -##@Version : 202605131431-git +##@Version : 202606261238-git # @@Author : CasjaysDev # @@Contact : CasjaysDev -# @@License : MIT +# @@License : WTFPL # @@Copyright : Copyright 2026 CasjaysDev -# @@Created : Wed May 13 02:31:25 PM EDT 2026 +# @@Created : Fri Jun 26 12:38:36 PM EDT 2026 # @@File : 02-packages.sh # @@Description : script to run packages # @@Changelog : newScript @@ -20,7 +20,7 @@ # shellcheck disable=SC1001,SC1003,SC2001,SC2003,SC2016,SC2031,SC2090,SC2115,SC2120,SC2155,SC2199,SC2229,SC2317,SC2329 # - - - - - - - - - - - - - - - - - - - - - - - - - # Set bash options -set -o pipefail +set -eo pipefail [ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -x$DEBUGGER_OPTIONS # - - - - - - - - - - - - - - - - - - - - - - - - - # Set env variables @@ -31,10 +31,17 @@ exitCode=0 # - - - - - - - - - - - - - - - - - - - - - - - - - # Main script +if command -v update-ca-certificates >/dev/null 2>&1; then + update-ca-certificates +elif command -v update-ca-trust >/dev/null 2>&1; then + update-ca-trust extract +elif command -v trust >/dev/null 2>&1; then + trust extract-compat +fi # - - - - - - - - - - - - - - - - - - - - - - - - - # Set the exit code -#exitCode=$? +exitCode=$? # - - - - - - - - - - - - - - - - - - - - - - - - - exit $exitCode # - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/example/rootfs/root/docker/setup/03-files.sh b/example/rootfs/root/docker/setup/03-files.sh index 5823f67..64e4cd1 100755 --- a/example/rootfs/root/docker/setup/03-files.sh +++ b/example/rootfs/root/docker/setup/03-files.sh @@ -1,12 +1,12 @@ #!/usr/bin/env bash # shellcheck shell=bash # - - - - - - - - - - - - - - - - - - - - - - - - - -##@Version : 202605131431-git +##@Version : 202606261238-git # @@Author : CasjaysDev # @@Contact : CasjaysDev -# @@License : MIT +# @@License : WTFPL # @@Copyright : Copyright 2026 CasjaysDev -# @@Created : Wed May 13 02:31:25 PM EDT 2026 +# @@Created : Fri Jun 26 12:38:36 PM EDT 2026 # @@File : 03-files.sh # @@Description : script to run files # @@Changelog : newScript @@ -20,7 +20,7 @@ # shellcheck disable=SC1001,SC1003,SC2001,SC2003,SC2016,SC2031,SC2090,SC2115,SC2120,SC2155,SC2199,SC2229,SC2317,SC2329 # - - - - - - - - - - - - - - - - - - - - - - - - - # Set bash options -set -o pipefail +set -eo pipefail [ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -x$DEBUGGER_OPTIONS # - - - - - - - - - - - - - - - - - - - - - - - - - # Set env variables @@ -31,61 +31,59 @@ exitCode=0 if [ -d "/tmp/bin" ]; then mkdir -p "/usr/local/bin" for bin in "/tmp/bin"/*; do - name="$(basename -- "$bin")" + [ -e "$bin" ] || continue + name="${bin##*/}" echo "Installing $name to /usr/local/bin/$name" - copy "$bin" "/usr/local/bin/$name" + cp -Rf "$bin" "/usr/local/bin/$name" chmod -f +x "/usr/local/bin/$name" done fi unset bin if [ -d "/tmp/var" ]; then for var in "/tmp/var"/*; do - name="$(basename -- "$var")" + [ -e "$var" ] || continue + name="${var##*/}" echo "Installing $var to /var/$name" if [ -d "$var" ]; then mkdir -p "/var/$name" - copy "$var/." "/var/$name/" + cp -Rf "$var/." "/var/$name/" else - copy "$var" "/var/$name" + cp -Rf "$var" "/var/$name" fi done fi unset var if [ -d "/tmp/etc" ]; then for config in "/tmp/etc"/*; do - name="$(basename -- "$config")" + [ -e "$config" ] || continue + name="${config##*/}" echo "Installing $config to /etc/$name" if [ -d "$config" ]; then mkdir -p "/etc/$name" - copy "$config/." "/etc/$name/" - mkdir -p "/usr/local/share/template-files/config/$name" - copy "$config/." "/usr/local/share/template-files/config/$name/" + cp -Rf "$config/." "/etc/$name/" else - copy "$config" "/etc/$name" - copy "$config" "/usr/local/share/template-files/config/$name" + cp -Rf "$config" "/etc/$name" fi done fi unset config -if [ -d "/tmp/data" ]; then - for data in "/tmp/data"/*; do - name="$(basename -- "$data")" - echo "Installing $data to /usr/local/share/template-files/data" - if [ -d "$data" ]; then - mkdir -p "/usr/local/share/template-files/data/$name" - copy "$data/." "/usr/local/share/template-files/data/$name/" - else - copy "$data" "/usr/local/share/template-files/data/$name" - fi +if [ -d "/tmp/usr" ]; then + for share in "/tmp/usr"/*; do + [ -e "$share" ] || continue + name="${share##*/}" + dest="/usr/$name" + echo "Installing $share to $dest" + mkdir -p "$dest" + cp -Rf "$share/." "$dest/" done fi -unset data +unset share # - - - - - - - - - - - - - - - - - - - - - - - - - # Main script # - - - - - - - - - - - - - - - - - - - - - - - - - # Set the exit code -#exitCode=$? +exitCode=$? # - - - - - - - - - - - - - - - - - - - - - - - - - exit $exitCode # - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/example/rootfs/root/docker/setup/04-users.sh b/example/rootfs/root/docker/setup/04-users.sh index ff375ca..dd02afd 100755 --- a/example/rootfs/root/docker/setup/04-users.sh +++ b/example/rootfs/root/docker/setup/04-users.sh @@ -1,12 +1,12 @@ #!/usr/bin/env bash # shellcheck shell=bash # - - - - - - - - - - - - - - - - - - - - - - - - - -##@Version : 202605131431-git +##@Version : 202606261238-git # @@Author : CasjaysDev # @@Contact : CasjaysDev -# @@License : MIT +# @@License : WTFPL # @@Copyright : Copyright 2026 CasjaysDev -# @@Created : Wed May 13 02:31:26 PM EDT 2026 +# @@Created : Fri Jun 26 12:38:36 PM EDT 2026 # @@File : 04-users.sh # @@Description : script to run users # @@Changelog : newScript @@ -20,7 +20,7 @@ # shellcheck disable=SC1001,SC1003,SC2001,SC2003,SC2016,SC2031,SC2090,SC2115,SC2120,SC2155,SC2199,SC2229,SC2317,SC2329 # - - - - - - - - - - - - - - - - - - - - - - - - - # Set bash options -set -o pipefail +set -eo pipefail [ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -x$DEBUGGER_OPTIONS # - - - - - - - - - - - - - - - - - - - - - - - - - # Set env variables @@ -34,7 +34,7 @@ exitCode=0 # - - - - - - - - - - - - - - - - - - - - - - - - - # Set the exit code -#exitCode=$? +exitCode=$? # - - - - - - - - - - - - - - - - - - - - - - - - - exit $exitCode # - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/example/rootfs/root/docker/setup/05-custom.sh b/example/rootfs/root/docker/setup/05-custom.sh index ea1154f..730ea66 100755 --- a/example/rootfs/root/docker/setup/05-custom.sh +++ b/example/rootfs/root/docker/setup/05-custom.sh @@ -1,12 +1,12 @@ #!/usr/bin/env bash # shellcheck shell=bash # - - - - - - - - - - - - - - - - - - - - - - - - - -##@Version : 202605131431-git +##@Version : 202606261238-git # @@Author : CasjaysDev # @@Contact : CasjaysDev -# @@License : MIT +# @@License : WTFPL # @@Copyright : Copyright 2026 CasjaysDev -# @@Created : Wed May 13 02:31:26 PM EDT 2026 +# @@Created : Fri Jun 26 12:38:36 PM EDT 2026 # @@File : 05-custom.sh # @@Description : script to run custom # @@Changelog : newScript @@ -20,7 +20,7 @@ # shellcheck disable=SC1001,SC1003,SC2001,SC2003,SC2016,SC2031,SC2090,SC2115,SC2120,SC2155,SC2199,SC2229,SC2317,SC2329 # - - - - - - - - - - - - - - - - - - - - - - - - - # Set bash options -set -o pipefail +set -eo pipefail [ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -x$DEBUGGER_OPTIONS # - - - - - - - - - - - - - - - - - - - - - - - - - # Set env variables @@ -34,7 +34,7 @@ exitCode=0 # - - - - - - - - - - - - - - - - - - - - - - - - - # Set the exit code -#exitCode=$? +exitCode=$? # - - - - - - - - - - - - - - - - - - - - - - - - - exit $exitCode # - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/example/rootfs/root/docker/setup/06-post.sh b/example/rootfs/root/docker/setup/06-post.sh index a0c32c6..03ec215 100755 --- a/example/rootfs/root/docker/setup/06-post.sh +++ b/example/rootfs/root/docker/setup/06-post.sh @@ -1,12 +1,12 @@ #!/usr/bin/env bash # shellcheck shell=bash # - - - - - - - - - - - - - - - - - - - - - - - - - -##@Version : 202605131431-git +##@Version : 202606261238-git # @@Author : CasjaysDev # @@Contact : CasjaysDev -# @@License : MIT +# @@License : WTFPL # @@Copyright : Copyright 2026 CasjaysDev -# @@Created : Wed May 13 02:31:26 PM EDT 2026 +# @@Created : Fri Jun 26 12:38:36 PM EDT 2026 # @@File : 06-post.sh # @@Description : script to run post # @@Changelog : newScript @@ -20,7 +20,7 @@ # shellcheck disable=SC1001,SC1003,SC2001,SC2003,SC2016,SC2031,SC2090,SC2115,SC2120,SC2155,SC2199,SC2229,SC2317,SC2329 # - - - - - - - - - - - - - - - - - - - - - - - - - # Set bash options -set -o pipefail +set -eo pipefail [ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -x$DEBUGGER_OPTIONS # - - - - - - - - - - - - - - - - - - - - - - - - - # Set env variables @@ -34,7 +34,7 @@ exitCode=0 # - - - - - - - - - - - - - - - - - - - - - - - - - # Set the exit code -#exitCode=$? +exitCode=$? # - - - - - - - - - - - - - - - - - - - - - - - - - exit $exitCode # - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/example/rootfs/root/docker/setup/07-cleanup.sh b/example/rootfs/root/docker/setup/07-cleanup.sh index 23b9272..c46c02f 100755 --- a/example/rootfs/root/docker/setup/07-cleanup.sh +++ b/example/rootfs/root/docker/setup/07-cleanup.sh @@ -1,12 +1,12 @@ #!/usr/bin/env bash # shellcheck shell=bash # - - - - - - - - - - - - - - - - - - - - - - - - - -##@Version : 202605131431-git +##@Version : 202606261238-git # @@Author : CasjaysDev # @@Contact : CasjaysDev -# @@License : MIT +# @@License : WTFPL # @@Copyright : Copyright 2026 CasjaysDev -# @@Created : Wed May 13 02:31:26 PM EDT 2026 +# @@Created : Fri Jun 26 12:38:36 PM EDT 2026 # @@File : 07-cleanup.sh # @@Description : script to run cleanup # @@Changelog : newScript @@ -20,11 +20,11 @@ # shellcheck disable=SC1001,SC1003,SC2001,SC2003,SC2016,SC2031,SC2090,SC2115,SC2120,SC2155,SC2199,SC2229,SC2317,SC2329 # - - - - - - - - - - - - - - - - - - - - - - - - - # Set bash options -set -o pipefail +set -eo pipefail [ "$DEBUGGER" = "on" ] && echo "Enabling debugging" && set -x$DEBUGGER_OPTIONS # - - - - - - - - - - - - - - - - - - - - - - - - - # Load functions -__find_and_remove() { [ -z "$1" ] || find "${2:-/etc}" -iname "$1" -exec rm -Rf {} \; 2>/dev/null; } +__find_and_remove() { [ -z "$1" ] || find "${2:-/etc}" -iname "$1" -exec rm -Rf {} + 2>/dev/null; } # - - - - - - - - - - - - - - - - - - - - - - - - - # Set env variables exitCode=0 @@ -38,7 +38,7 @@ if [ -d "$HOME/.cache" ]; then rm -Rf "$HOME/.cache"; fi # - - - - - - - - - - - - - - - - - - - - - - - - - # Set the exit code -#exitCode=$? +exitCode=$? # - - - - - - - - - - - - - - - - - - - - - - - - - exit $exitCode # - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/example/rootfs/usr/local/bin/entrypoint.sh b/example/rootfs/usr/local/bin/entrypoint.sh index 7ae76a9..9e1de41 100755 --- a/example/rootfs/usr/local/bin/entrypoint.sh +++ b/example/rootfs/usr/local/bin/entrypoint.sh @@ -1,15 +1,15 @@ #!/usr/bin/env bash # shellcheck shell=bash # - - - - - - - - - - - - - - - - - - - - - - - - - -##@Version : 202605052024-git +##@Version : 202606041210-git # @@Author : Jason Hempstead # @@Contact : jason@casjaysdev.pro # @@License : WTFPL # @@ReadME : entrypoint.sh --help # @@Copyright : Copyright: (c) 2026 Jason Hempstead, Casjays Developments -# @@Created : Wednesday, May 13, 2026 14:31 EDT +# @@Created : Friday, Jun 26, 2026 12:38 EDT # @@File : entrypoint.sh -# @@Description : Entrypoint file for example +# @@Description : Entrypoint file for alpine # @@Changelog : New script # @@TODO : Better documentation # @@Other : @@ -21,23 +21,25 @@ # shellcheck disable=SC1001,SC1003,SC2001,SC2003,SC2016,SC2031,SC2090,SC2115,SC2120,SC2155,SC2199,SC2229,SC2317,SC2329 # - - - - - - - - - - - - - - - - - - - - - - - - - # run trap command on exit -trap 'retVal=$?;[ "$SERVICE_IS_RUNNING" != "yes" ] && [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE";exit $retVal' INT TERM PWR +trap 'retVal=$?;[ "$SERVICE_IS_RUNNING" != "yes" ] && [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE";exit $retVal' INT TERM +trap 'retVal=$?;[ "$SERVICE_IS_RUNNING" != "yes" ] && [ -f "$SERVICE_PID_FILE" ] && rm -Rf "$SERVICE_PID_FILE";exit $retVal' SIGPWR 2>/dev/null || true # - - - - - - - - - - - - - - - - - - - - - - - - - # setup debugging - https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html [ -f "/config/.debug" ] && [ -z "$DEBUGGER_OPTIONS" ] && export DEBUGGER_OPTIONS="$(<"/config/.debug")" || DEBUGGER_OPTIONS="${DEBUGGER_OPTIONS:-}" if [ "$DEBUGGER" = "on" ] || [ -f "/config/.debug" ]; then echo "Enabling debugging" - set -o pipefail -x$DEBUGGER_OPTIONS + set -eo pipefail + [ -n "$DEBUGGER_OPTIONS" ] && set -"$DEBUGGER_OPTIONS" export DEBUGGER="on" else - set -o pipefail + set -eo pipefail fi # - - - - - - - - - - - - - - - - - - - - - - - - - PATH="/usr/local/etc/docker/bin:/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbin" # - - - - - - - - - - - - - - - - - - - - - - - - - # Set bash options SCRIPT_FILE="$0" -CONTAINER_NAME="example" +CONTAINER_NAME="alpine" SCRIPT_NAME="${SCRIPT_FILE##*/}" CONTAINER_NAME="${ENV_CONTAINER_NAME:-$CONTAINER_NAME}" # - - - - - - - - - - - - - - - - - - - - - - - - - @@ -59,8 +61,8 @@ case "$1" in # Help message -h | --help) shift 1 - echo 'Docker container for '$CONTAINER_NAME'' - echo "Usage: $CONTAINER_NAME [help tail cron exec start init shell certbot ssl procs ports healthcheck backup command]" + echo "Docker container for $CONTAINER_NAME" + echo "Usage: $CONTAINER_NAME [help tail cron exec start init shell procs ports healthcheck backup command]" echo "" exit 0 ;; @@ -93,8 +95,8 @@ SERVICE_UID="${SERVICE_UID:-0}" SERVICE_GID="${SERVICE_GID:-0}" # - - - - - - - - - - - - - - - - - - - - - - - - - # User and group in which the service switches to - IE: nginx,apache,mysql,postgres -#SERVICE_USER="${SERVICE_USER:-example}" # execute command as another user -#SERVICE_GROUP="${SERVICE_GROUP:-example}" # Set the service group +#SERVICE_USER="${SERVICE_USER:-alpine}" # execute command as another user +#SERVICE_GROUP="${SERVICE_GROUP:-alpine}" # Set the service group # - - - - - - - - - - - - - - - - - - - - - - - - - # Secondary ports # specifiy other ports @@ -149,13 +151,10 @@ export DOMAINNAME="$(hostname -d)" # - - - - - - - - - - - - - - - - - - - - - - - - - # Default directories export SSL_DIR="${SSL_DIR:-/config/ssl}" -export SSL_CA="${SSL_CERT:-/config/ssl/ca.crt}" +export SSL_CA="${SSL_CA:-/config/ssl/ca.crt}" export SSL_KEY="${SSL_KEY:-/config/ssl/localhost.pem}" export SSL_CERT="${SSL_CERT:-/config/ssl/localhost.crt}" export LOCAL_BIN_DIR="${LOCAL_BIN_DIR:-/usr/local/bin}" -export DEFAULT_DATA_DIR="${DEFAULT_DATA_DIR:-/usr/local/share/template-files/data}" -export DEFAULT_CONF_DIR="${DEFAULT_CONF_DIR:-/usr/local/share/template-files/config}" -export DEFAULT_TEMPLATE_DIR="${DEFAULT_TEMPLATE_DIR:-/usr/local/share/template-files/defaults}" # - - - - - - - - - - - - - - - - - - - - - - - - - # Backup settings export BACKUP_MAX_DAYS="${BACKUP_MAX_DAYS:-}" @@ -170,7 +169,7 @@ export NGINX_CONFIG_FILE="${NGINX_CONFIG_FILE:-$(__find_nginx_conf)}" export MYSQL_CONFIG_FILE="${MYSQL_CONFIG_FILE:-$(__find_mysql_conf)}" export PGSQL_CONFIG_FILE="${PGSQL_CONFIG_FILE:-$(__find_pgsql_conf)}" export MONGODB_CONFIG_FILE="${MONGODB_CONFIG_FILE:-$(__find_mongodb_conf)}" -export ENTRYPOINT_PID_FILE="${ENTRYPOINT_PID_FILE:-$ENTRYPOINT_PID_FILE}" +export ENTRYPOINT_PID_FILE="${ENTRYPOINT_PID_FILE:-/run/.entrypoint.pid}" export ENTRYPOINT_INIT_FILE="${ENTRYPOINT_INIT_FILE:-/config/.entrypoint.done}" export ENTRYPOINT_DATA_INIT_FILE="${ENTRYPOINT_DATA_INIT_FILE:-/data/.docker_has_run}" export ENTRYPOINT_CONFIG_INIT_FILE="${ENTRYPOINT_CONFIG_INIT_FILE:-/config/.docker_has_run}" @@ -212,17 +211,15 @@ else fi # - - - - - - - - - - - - - - - - - - - - - - - - - # clean ENV_PORTS variables -ENV_PORTS="${ENV_PORTS//,/ }" # -ENV_PORTS="${ENV_PORTS//\/*/}" # +ENV_PORTS="${ENV_PORTS//,/ }" +ENV_PORTS="${ENV_PORTS//\/*/}" # - - - - - - - - - - - - - - - - - - - - - - - - - # clean SERVER_PORTS variables -SERVER_PORTS="${SERVER_PORTS//,/ }" # -SERVER_PORTS="${SERVER_PORTS//\/*/}" # +SERVER_PORTS="${SERVER_PORTS//,/ }" +SERVER_PORTS="${SERVER_PORTS//\/*/}" # - - - - - - - - - - - - - - - - - - - - - - - - - # clean WEB_SERVER_PORTS variables -WEB_SERVER_PORTS="${WEB_SERVER_PORT//\/*/}" # -WEB_SERVER_PORTS="${WEB_SERVER_PORTS//\/*/}" # -WEB_SERVER_PORTS="${WEB_SERVER_PORT//,/ } ${ENV_WEB_SERVER_PORTS//,/ }" # +WEB_SERVER_PORTS="${WEB_SERVER_PORT//,/ } ${ENV_WEB_SERVER_PORTS//,/ }" # - - - - - - - - - - - - - - - - - - - - - - - - - # rewrite and merge variables ENV_PORTS="$(__format_variables "$ENV_PORTS" || false)" @@ -294,7 +291,7 @@ fi if [ "$ENTRYPOINT_FIRST_RUN" != "no" ]; then if [ "$CONFIG_DIR_INITIALIZED" = "no" ] || [ "$DATA_DIR_INITIALIZED" = "no" ]; then if [ "$ENTRYPOINT_MESSAGE" = "yes" ]; then - echo "Executing entrypoint script for example" + echo "Executing entrypoint script for alpine" fi fi # - - - - - - - - - - - - - - - - - - - - - - - - - @@ -373,7 +370,7 @@ if [ "$ENTRYPOINT_FIRST_RUN" != "no" ]; then # - - - - - - - - - - - - - - - - - - - - - - - - - # import hosts file into container if [ -f "/usr/local/etc/hosts" ] && [ "$UPDATE_FILE_HOSTS" = "yes" ]; then - grep -vF "$HOSTNAME" "/usr/local/etc/hosts" 2>/dev/null >>"/etc/hosts" 2>/dev/null || true + grep -vF "$HOSTNAME" "/usr/local/etc/hosts" 2>/dev/null >>"/etc/hosts" || true fi # - - - - - - - - - - - - - - - - - - - - - - - - - # import resolv.conf file into container @@ -407,21 +404,6 @@ if [ "$ENTRYPOINT_FIRST_RUN" != "no" ] || [ "$CONFIG_DIR_INITIALIZED" = "no" ] | # Setup bin directory - /config/bin > /usr/local/bin __initialize_custom_bin_dir # - - - - - - - - - - - - - - - - - - - - - - - - - - # Copy default system configs - /usr/local/share/template-files/defaults > /config/ - if [ "$CONFIG_DIR_INITIALIZED" = "no" ]; then - __initialize_default_templates - fi - # - - - - - - - - - - - - - - - - - - - - - - - - - - # Copy custom config files - /usr/local/share/template-files/config > /config/ - if [ "$CONFIG_DIR_INITIALIZED" = "no" ]; then - __initialize_config_dir - fi - # - - - - - - - - - - - - - - - - - - - - - - - - - - # Copy custom data files - /usr/local/share/template-files/data > /data/ - if [ "$DATA_DIR_INITIALIZED" = "no" ]; then - __initialize_data_dir - fi - # - - - - - - - - - - - - - - - - - - - - - - - - - # Initialize SSL certificates __initialize_ssl_certs # - - - - - - - - - - - - - - - - - - - - - - - - - @@ -489,7 +471,7 @@ __set_user_group_id $SERVICE_USER ${SERVICE_UID:-} ${SERVICE_GID:-} __run_message # - - - - - - - - - - - - - - - - - - - - - - - - - # Just start services -START_SERVICES="${START_SERVICES:-SYSTEM_INIT}" +START_SERVICES="${START_SERVICES:-yes}" # - - - - - - - - - - - - - - - - - - - - - - - - - # Determine if we should start services based on command # Only skip service start for the 'init' command @@ -547,10 +529,10 @@ logs) tail -Fq /data/logs/*/* ;; clean) - log_files="$(find "/data/logs" -type f)" + mapfile -t log_files < <(find "/data/logs" -type f 2>/dev/null) for log in "${log_files[@]}"; do __log_info "Clearing log file: $log" - printf '' >$log + printf '' >"$log" done ;; *) @@ -585,7 +567,7 @@ healthcheck) healthPorts="${WEB_SERVER_PORTS:-}" healthEndPoints="${HEALTH_ENDPOINTS:-}" SERVICES_LIST="${arguments:-$SERVICES_LIST}" - services="$(echo "${SERVICES_LIST//,/ }")" + services="${SERVICES_LIST//,/ }" healthMessage="Everything seems to be running" [ "$healthEnabled" = "yes" ] || exit 0 if [ -d "/run/healthcheck" ] && ! __is_dir_empty "/run/healthcheck"; then @@ -603,7 +585,7 @@ healthcheck) fi fi done - for port in $ports; do + for port in $healthPorts; do if command -v netstat &>/dev/null && [ -n "$port" ]; then if ! netstat -taupln | grep -q ":$port "; then echo "$port isn't open" >&2 @@ -639,27 +621,6 @@ procs) [ -n "$ps" ] && printf '%s\n%s\n' "Found the following processes" "$ps" | tr '\n' ' ' exit $? ;; - # setup ssl -ssl) - shift 1 - __create_ssl_cert - exit $? - ;; -# manage ssl certificate -certbot) - shift 1 - CERT_BOT_ENABLED="yes" - if [ "$1" = "create" ]; then - shift 1 - __certbot "create" - elif [ "$1" = "renew" ]; then - shift 1 - __certbot "renew certonly --force-renew" - else - __exec_command "certbot" "$@" - fi - exit $? - ;; # Launch shell */bin/sh | */bin/bash | bash | sh | shell) shift 1 diff --git a/example/rootfs/usr/local/etc/docker/functions/entrypoint.sh b/example/rootfs/usr/local/etc/docker/functions/entrypoint.sh index e5c74eb..3e62e2a 100644 --- a/example/rootfs/usr/local/etc/docker/functions/entrypoint.sh +++ b/example/rootfs/usr/local/etc/docker/functions/entrypoint.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash # shellcheck shell=bash # - - - - - - - - - - - - - - - - - - - - - - - - - -##@Version : 202605051922-git +##@Version : 202606051249-git # @@Author : Jason Hempstead # @@Contact : git-admin@casjaysdev.pro # @@License : LICENSE.md @@ -25,10 +25,11 @@ if [ -f "/config/.debug" ] && [ -z "$DEBUGGER_OPTIONS" ]; then export DEBUGGER_OPTIONS="$(<"/config/.debug")" fi if [ "$DEBUGGER" = "on" ] || [ -f "/config/.debug" ]; then - set -xo pipefail -x$DEBUGGER_OPTIONS + set -eo pipefail + [ -n "$DEBUGGER_OPTIONS" ] && set -"$DEBUGGER_OPTIONS" export DEBUGGER="on" else - set -o pipefail + set -eo pipefail fi # - - - - - - - - - - - - - - - - - - - - - - - - - __remove_extra_spaces() { sed -E 's/ +/ /g; s|^ ||'; } @@ -133,7 +134,7 @@ __pgrep() { while [ $count -ge 0 ]; do pgrep -x "$srvc" &>/dev/null && return 0 pgrep -f "$srvc" &>/dev/null && return 0 - ps -ef 2>/dev/null | grep -v 'grep' | grep -qw "$srvc" && return 0 + ps -eo comm 2>/dev/null | grep -qxF "$srvc" && return 0 [ $count -gt 0 ] && sleep 1 count=$((count - 1)) done @@ -142,14 +143,14 @@ __pgrep() { # - - - - - - - - - - - - - - - - - - - - - - - - - __find_file_relative() { [ -e "$1" ] || return 0 - find "$1"/* -not -path '*env/*' -not -path '.git*' -type f 2>/dev/null \ + find "$1"/* -not -path '*env/*' -not -path '*/.git/*' -not -name '.git' -type f 2>/dev/null \ | sort -u \ | sed "s|^$1/||" || true } # - - - - - - - - - - - - - - - - - - - - - - - - - __find_directory_relative() { [ -d "$1" ] || return 0 - find "$1"/* -not -path '*env/*' -not -path '.git*' -type d 2>/dev/null \ + find "$1"/* -not -path '*env/*' -not -path '*/.git/*' -not -name '.git' -type d 2>/dev/null \ | sort -u \ | sed "s|^$1/||" || true } @@ -170,7 +171,7 @@ __get_pid() { return 1 fi local pid - pid=$(pgrep -x "$1" 2>/dev/null | head -n1) + pid=$(pgrep -x -n "$1" 2>/dev/null) if [ -n "$pid" ]; then echo "$pid" return 0 @@ -189,8 +190,8 @@ __clean_variables() { local var="$*" var="${var#"${var%%[![:space:]]*}"}" var="${var%"${var##*[![:space:]]}"}" - while [[ 202605051922-gitar == *" "* ]]; do var="${var// / }"; done - [ -n "202605051922-gitar" ] && printf '%s' "$var" + while [[ $var == *" "* ]]; do var="${var// / }"; done + [ -n "$var" ] && printf '%s' "$var" } # - - - - - - - - - - - - - - - - - - - - - - - - - __no_exit() { @@ -215,31 +216,33 @@ __no_exit() { exec bash -c " trap 'echo \"Container shutdown requested\"; rm -f /run/.no_exit.pid /run/*.pid; exit 0' TERM INT echo \$\$ > /run/.no_exit.pid + failed_services=\"\" + failure_count=0 while true; do if [ -n \"$monitor_services\" ] && [ \"$monitor_services\" != \"tini\" ]; then for service in \$(echo \"$monitor_services\" | tr ',' ' '); do if [ \"\$service\" != \"tini\" ] && ! pgrep -x \"\$service\" >/dev/null 2>&1; then - echo \"⚠️ Service \$service is not running\" >&2 + echo \"WARNING: Service \$service is not running\" >&2 failed_services=\"\$failed_services \$service\" failure_count=\$((failure_count + 1)) fi done if [ \$failure_count -ge $failure_threshold ]; then - echo \"❌ Too many service failures (\$failure_count), exiting container\" >&2 + echo \"ERROR: Too many service failures (\$failure_count), exiting container\" >&2 exit 1 fi if [ -n \"\$failed_services\" ]; then - echo \"⚠️ Failed services:\$failed_services\" >&2 + echo \"WARNING: Failed services:\$failed_services\" >&2 failed_services=\"\" + failure_count=0 fi fi - sleep $monitor_interval - done & - wait + sleep $monitor_interval & wait \$! + done " } # - - - - - - - - - - - - - - - - - - - - - - - - - @@ -247,14 +250,15 @@ __trim() { local var="${*//;/ }" var="${var#"${var%%[![:space:]]*}"}" var="${var%"${var##*[![:space:]]}"}" - while [[ 202605051922-gitar == *" "* ]]; do var="${var// / }"; done - [ -n "202605051922-gitar" ] && printf '%s' "$var" + while [[ $var == *" "* ]]; do var="${var// / }"; done + [ -n "$var" ] && printf '%s' "$var" } # - - - - - - - - - - - - - - - - - - - - - - - - - __banner() { local message="$*" local total_width=80 - local content_width=$((total_width - 14)) # Account for "# - - - " and " - - - #" + # Account for "# - - - " and " - - - #" + local content_width=$((total_width - 14)) printf '# - - - %-*s - - - #\n' "$content_width" "$message" } # - - - - - - - - - - - - - - - - - - - - - - - - - @@ -264,36 +268,73 @@ __service_banner() { local service="${3:-service}" local full_message="$message $service" local total_width=80 - local content_width=$((total_width - 14)) # Account for "# - - - " and " - - - #" - local icon_width=2 # Most emojis are 2 chars wide - local text_width=$((content_width - icon_width * 2 - 2)) # Account for both icons and spaces + # Account for "# - - - " and " - - - #" + local content_width=$((total_width - 14)) + # Most emojis are 2 chars wide + local icon_width=2 + # Account for both icons and spaces + local text_width=$((content_width - icon_width * 2 - 2)) printf '# - - - %s %-*s %s - - - #\n' "$icon" "$text_width" "$full_message" "$icon" } # - - - - - - - - - - - - - - - - - - - - - - - - - -__find_php_bin() { find -L '/usr'/*bin -maxdepth 4 -name 'php-fpm*' 2>/dev/null | head -n1; } +__find_php_bin() { + command -v php-fpm &>/dev/null || command -v php &>/dev/null || return 0 + find -L '/usr'/*bin -maxdepth 4 -name 'php-fpm*' 2>/dev/null | head -n1 +} __find_php_ini() { + command -v php &>/dev/null || return 0 local f f=$(find -L '/etc' -maxdepth 4 -name 'php.ini' 2>/dev/null | head -n1) [ -n "$f" ] && printf '%s\n' "${f%/php.ini}" } # - - - - - - - - - - - - - - - - - - - - - - - - - -__find_nginx_conf() { find -L '/etc' -maxdepth 4 -name 'nginx.conf' 2>/dev/null | head -n1; } -__find_caddy_conf() { find -L '/etc' -maxdepth 4 -type f -iname 'caddy.conf' 2>/dev/null | head -n1; } -__find_lighttpd_conf() { find -L '/etc' -maxdepth 4 -type f -iname 'lighttpd.conf' 2>/dev/null | head -n1; } -__find_cherokee_conf() { find -L '/etc' -maxdepth 4 -type f -iname 'cherokee.conf' 2>/dev/null | head -n1; } -__find_httpd_conf() { find -L '/etc' -maxdepth 4 -type f -iname 'httpd.conf' -o -iname 'apache2.conf' 2>/dev/null | head -n1; } +__find_nginx_conf() { + command -v nginx &>/dev/null || return 0 + find -L '/etc' -maxdepth 4 -name 'nginx.conf' 2>/dev/null | head -n1 +} +__find_caddy_conf() { + command -v caddy &>/dev/null || return 0 + find -L '/etc' -maxdepth 4 -type f -iname 'caddy.conf' 2>/dev/null | head -n1 +} +__find_lighttpd_conf() { + command -v lighttpd &>/dev/null || return 0 + find -L '/etc' -maxdepth 4 -type f -iname 'lighttpd.conf' 2>/dev/null | head -n1 +} +__find_cherokee_conf() { + command -v cherokee &>/dev/null || command -v cherokee-admin &>/dev/null || return 0 + find -L '/etc' -maxdepth 4 -type f -iname 'cherokee.conf' 2>/dev/null | head -n1 +} +__find_httpd_conf() { + command -v httpd &>/dev/null || command -v apache2 &>/dev/null || return 0 + find -L '/etc' -maxdepth 4 -type f \( -iname 'httpd.conf' -o -iname 'apache2.conf' \) 2>/dev/null | head -n1 +} # - - - - - - - - - - - - - - - - - - - - - - - - - -__find_mysql_conf() { find -L '/etc' -maxdepth 4 -type f -name 'my.cnf' 2>/dev/null | head -n1; } -__find_pgsql_conf() { find -L '/var/lib' '/etc' -maxdepth 8 -type f -name 'postgresql.conf' 2>/dev/null | head -n1; } -__find_couchdb_conf() { return; } -__find_mongodb_conf() { return; } +__find_mysql_conf() { + command -v mysqld &>/dev/null || command -v mariadbd &>/dev/null || command -v mysql &>/dev/null || return 0 + find -L '/etc' -maxdepth 4 -type f -name 'my.cnf' 2>/dev/null | head -n1 +} +__find_pgsql_conf() { + command -v postgres &>/dev/null || command -v pg_ctl &>/dev/null || return 0 + find -L '/var/lib' '/etc' -maxdepth 8 -type f -name 'postgresql.conf' 2>/dev/null | head -n1 +} +__find_couchdb_conf() { + command -v couchdb &>/dev/null || return 0 + find -L '/opt/couchdb/etc' '/etc/couchdb' -maxdepth 4 -type f \( -name 'local.ini' -o -name 'default.ini' \) 2>/dev/null | head -n1 +} +__find_mongodb_conf() { + command -v mongod &>/dev/null || return 0 + find -L '/etc/mongodb' '/etc' -maxdepth 4 -type f \( -name 'mongod.conf' -o -name 'mongodb.conf' \) 2>/dev/null | head -n1 +} # - - - - - - - - - - - - - - - - - - - - - - - - - __random_password() { tr -dc '0-9a-zA-Z' < /dev/urandom | head -c${1:-16} && echo ""; } # - - - - - - - - - - - - - - - - - - - - - - - - - __init_working_dir() { - local service_name="$SERVICE_NAME" # get service name - local workdir="$(eval echo "${WORK_DIR:-}")" # expand variables - local home="$(eval echo "${workdir//\/root/\/tmp\/docker}")" # expand variables + # get service name + local service_name="$SERVICE_NAME" + # expand variables + local workdir="$(eval echo "${WORK_DIR:-}")" + # expand variables + local home="$(eval echo "${workdir//\/root/\/tmp\/docker}")" # set working directories [ "$home" = "$workdir" ] && workdir="" [ "$home" = "/root" ] && home="/tmp/$service_name" @@ -334,7 +375,7 @@ __exec_service() { eval "$@" 2>>/dev/stderr >>/data/logs/start.log & while [ $count -ne 0 ]; do sleep 3 - if __pgrep $1; then + if __pgrep "$1"; then touch "/run/init.d/$1.pid" break else @@ -353,106 +394,32 @@ __update_ssl_certs() { fi } # - - - - - - - - - - - - - - - - - - - - - - - - - -__certbot() { - [ -n "$(type -P 'certbot')" ] || return 1 - local options="$1" - local statusCode=0 - local domain_list="" - local certbot_key_opts="" - local ADD_CERTBOT_DOMAINS="" - local CERTBOT_DOMAINS="${CERTBOT_DOMAINS:-$HOSTNAME}" - local CERT_BOT_MAIL="${CERT_BOT_MAIL:-ssl-admin@$CERTBOT_DOMAINS}" - local certbot_key_opts="--key-path $SSL_KEY --fullchain-path $SSL_CERT" - mkdir -p "/config/letsencrypt" - __symlink "/etc/letsencrypt" "/config/letsencrypt" - is_renewal="$(find /etc/letsencrypt/renewal -type f 2>/dev/null || false)" - [ -f "/config/env/ssl.sh" ] && . "/config/env/ssl.sh" - [ -f "/config/certbot/env.sh" ] && . "/config/certbot/env.sh" - if [ -n "$SSL_KEY" ]; then - mkdir -p "$(dirname "$SSL_KEY")" 2>/dev/null || true - else - echo "The variable SSL_KEY is not set" >&2 - return 1 - fi - if [ -n "$SSL_CERT" ]; then - mkdir -p "$(dirname "$SSL_CERT")" 2>/dev/null || true - else - echo "The variable SSL_CERT is not set" >&2 - return 1 - fi - domain_list="$CERTBOT_DOMAINS www.$CERTBOT_DOMAINS mail.$CERTBOT_DOMAINS" - domain_list="$(echo "$domain_list" | tr ' ' '\n' | sort -u | tr '\n' ' ')" - if [ "$CERT_BOT_ENABLED" != "true" ]; then - export CERT_BOT_ENABLED="" - return 10 - fi - if [ -z "$CERT_BOT_MAIL" ]; then - echo "The variable CERT_BOT_MAIL is not set" >&2 - return 1 - fi - if [ -z "$CERTBOT_DOMAINS" ]; then - echo "The variable CERTBOT_DOMAINS is not set" >&2 - return 1 - fi - for domain in $CERTBOT_DOMAINS; do - [ -n "$domain" ] && ADD_CERTBOT_DOMAINS+="-d $domain " - done - if [ -n "$is_renewal" ]; then - options="renew" - ADD_CERTBOT_DOMAINS="" - else - options="certonly" - fi - certbot_key_opts="$certbot_key_opts $ADD_CERTBOT_DOMAINS" - if [ -f "/config/certbot/setup.sh" ]; then - eval "/config/certbot/setup.sh" - statusCode=$? - elif [ -f "/etc/named/certbot.sh" ]; then - eval "/etc/named/certbot.sh" - statusCode=$? - elif [ -f "/config/certbot/dns.conf" ]; then - if certbot $options -n --dry-run --agree-tos --expand --dns-rfc2136 --dns-rfc2136-credentials /config/certbot/dns.conf $certbot_key_opts; then - certbot $options -n --agree-tos --expand --dns-rfc2136 --dns-rfc2136-credentials /config/certbot/dns.conf $certbot_key_opts - fi - statusCode=$? - elif [ -f "/config/certbot/certbot.conf" ]; then - if certbot $options -n --dry-run --agree-tos --expand --dns-rfc2136 --dns-rfc2136-credentials /config/certbot/certbot.conf $certbot_key_opts; then - certbot $options -n --agree-tos --expand --dns-rfc2136 --dns-rfc2136-credentials /config/certbot/certbot.conf $certbot_key_opts - fi - statusCode=$? - elif [ -f "/config/named/certbot-update.conf" ]; then - if certbot $options -n --dry-run --agree-tos --expand --dns-rfc2136 --dns-rfc2136-credentials /config/named/certbot-update.conf $certbot_key_opts; then - certbot $options -n --agree-tos --expand --dns-rfc2136 --dns-rfc2136-credentials /config/named/certbot-update.conf $certbot_key_opts - fi - statusCode=$? - else - certbot_key_opts="$certbot_key_opts --webroot ${WWW_ROOT_DIR:-/usr/local/share/httpd/default}" - if [ -n "$ADD_CERTBOT_DOMAINS" ]; then - certbot $options --agree-tos -m $CERT_BOT_MAIL certonly --webroot "${WWW_ROOT_DIR:-/usr/local/share/httpd/default}" $certbot_key_opts - statusCode=$? - else - statusCode=1 - fi - fi - [ $statusCode -eq 0 ] && __update_ssl_certs - return $statusCode -} -# - - - - - - - - - - - - - - - - - - - - - - - - - __display_user_info() { if [ -n "$user_name" ] || [ -n "$user_pass" ] || [ -n "$root_user_name" ] || [ -n "$root_user_pass" ]; then __banner "User info" - [ -n "$user_name" ] && __printf_space "40" "username:" "$user_name" && echo "$user_name" - [ -n "$user_pass" ] && __printf_space "40" "password:" "saved to ${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$user_pass" - [ -n "$root_user_name" ] && __printf_space "40" "root username:" "$root_user_name" && echo "$root_user_name" - [ -n "$root_user_pass" ] && __printf_space "40" "root password:" "saved to ${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" && echo "$root_user_pass" + [ -n "$user_name" ] && __printf_space "40" "username:" "$user_name" + if [ -n "$user_pass" ]; then + if [ "${SHOW_PASSWORDS:-no}" = "yes" ]; then + __printf_space "40" "password:" "$user_pass" + else + __printf_space "40" "password:" "saved to ${USER_FILE_PREFIX}/${SERVICE_NAME}_pass" + fi + fi + [ -n "$root_user_name" ] && __printf_space "40" "root username:" "$root_user_name" + if [ -n "$root_user_pass" ]; then + if [ "${SHOW_PASSWORDS:-no}" = "yes" ]; then + __printf_space "40" "root password:" "$root_user_pass" + else + __printf_space "40" "root password:" "saved to ${ROOT_FILE_PREFIX}/${SERVICE_NAME}_pass" + fi + fi __banner "" fi } # - - - - - - - - - - - - - - - - - - - - - - - - - __init_config_etc() { local copy="no" - local name="" - [ -e "/etc/$SERVICE_NAME" ] && name="/etc/$SERVICE_NAME" + local name="$SERVICE_NAME" local etc_dir="${ETC_DIR:-/etc/$name}" local conf_dir="${CONF_DIR:-/config/$name}" __is_dir_empty "$conf_dir" && copy=yes @@ -468,29 +435,26 @@ __init_config_etc() { } __create_ssl_cert() { local SSL_DIR="${SSL_DIR:-/etc/ssl}" - if ! __certbot certonly; then - [ -f "/config/env/ssl.sh" ] && . "/config/env/ssl.sh" - if [ -z "$SSL_DIR" ]; then - echo "SSL_DIR is unset" - return 1 - fi - [ -d "$SSL_DIR" ] || mkdir -p "$SSL_DIR" - if [ -n "$FORCE_SSL" ] || [ ! -f "$SSL_CERT" ] || [ ! -f "$SSL_KEY" ]; then - echo "Setting Country to $COUNTRY and Setting State/Province to $STATE and Setting City to $CITY" - echo "Setting OU to $UNIT and Setting ORG to $ORG and Setting server to $CN" - echo "All variables can be overwritten by creating a /config/.ssl.env and setting the variables there" - echo "Creating ssl key and certificate in $SSL_DIR and will be valid for $((VALID_FOR / 365)) year[s]" - # - openssl req \ - -new \ - -newkey rsa:$RSA \ - -days $VALID_FOR \ - -nodes \ - -x509 \ - -subj "/C=${COUNTRY// /\\ }/ST=${STATE// /\\ }/L=${CITY// /\\ }/O=${ORG// /\\ }/OU=${UNIT// /\\ }/CN=${CN// /\\ }" \ - -keyout "$SSL_KEY" \ - -out "$SSL_CERT" - fi + [ -f "/config/env/ssl.sh" ] && . "/config/env/ssl.sh" + if [ -z "$SSL_DIR" ]; then + echo "SSL_DIR is unset" >&2 + return 1 + fi + [ -d "$SSL_DIR" ] || mkdir -p "$SSL_DIR" + if [ -n "$FORCE_SSL" ] || [ ! -f "$SSL_CERT" ] || [ ! -f "$SSL_KEY" ]; then + echo "Setting Country to $COUNTRY and Setting State/Province to $STATE and Setting City to $CITY" + echo "Setting OU to $UNIT and Setting ORG to $ORG and Setting server to $CN" + echo "All variables can be overwritten by creating a /config/.ssl.env and setting the variables there" + echo "Creating ssl key and certificate in $SSL_DIR and will be valid for $((VALID_FOR / 365)) year[s]" + openssl req \ + -new \ + -newkey rsa:$RSA \ + -days $VALID_FOR \ + -nodes \ + -x509 \ + -subj "/C=${COUNTRY// /\\ }/ST=${STATE// /\\ }/L=${CITY// /\\ }/O=${ORG// /\\ }/OU=${UNIT// /\\ }/CN=${CN// /\\ }" \ + -keyout "$SSL_KEY" \ + -out "$SSL_CERT" fi if [ -f "$SSL_CERT" ] && [ -f "$SSL_KEY" ]; then __update_ssl_certs @@ -500,77 +464,111 @@ __create_ssl_cert() { fi } # - - - - - - - - - - - - - - - - - - - - - - - - - -__init_apache() { - local etc_dir="" conf_dir="" conf_dir="" www_dir="" apache_bin="" - etc_dir="/etc/${1:-apache2}" - conf_dir="/config/${1:-apache2}" - www_dir="${WWW_ROOT_DIR:-/data/htdocs}" - apache_bin="$(type -P 'httpd' || type -P 'apache2')" +__init_service_conf() { + # Seed /config/$svc/ from build-time baked /etc sources on first container start. + # Copy only — no symlinks. Symlinking /etc back to /config/ is the service's own + # responsibility, done inside __update_conf_files in each init.d/*.sh script so + # each service controls its exact paths and variable substitution order. # + # Usage: __init_service_conf [extra_etc_path ...] + # + # primary_etc_dir directory → contents copied into conf_dir/ when conf_dir is empty + # extra_etc_path directory → copied into conf_dir// when that subdir is empty + # extra_etc_path file → copied to conf_dir/ when absent + local conf_dir="$1" + local primary_etc="$2" + shift 2 + local src name + mkdir -p "$conf_dir" + if [ -d "$primary_etc" ] && __is_dir_empty "$conf_dir"; then + __copy_templates "$primary_etc/." "$conf_dir/" + fi + for src in "$@"; do + [ -e "$src" ] || continue + name="${src##*/}" + if [ -d "$src" ] && __is_dir_empty "$conf_dir/$name"; then + mkdir -p "$conf_dir/$name" + __copy_templates "$src/." "$conf_dir/$name/" + elif [ -f "$src" ] && [ ! -f "$conf_dir/$name" ]; then + cp -f "$src" "$conf_dir/$name" + fi + done +} +# - - - - - - - - - - - - - - - - - - - - - - - - - +__init_apache() { + command -v httpd &>/dev/null || command -v apache2 &>/dev/null || return 0 + local svc="${1:-apache2}" + __init_service_conf "/config/$svc" "/etc/$svc" return 0 } # - - - - - - - - - - - - - - - - - - - - - - - - - __init_nginx() { - local etc_dir="/etc/${1:-nginx}" - local conf_dir="/config/${1:-nginx}" - local www_dir="${WWW_ROOT_DIR:-/data/htdocs}" - local nginx_bin="$(type -P 'nginx')" + command -v nginx &>/dev/null || return 0 + local svc="${1:-nginx}" + __init_service_conf "/config/$svc" "/etc/$svc" return 0 } # - - - - - - - - - - - - - - - - - - - - - - - - - __init_php() { - local etc_dir="/etc/${1:-php}" - local conf_dir="/config/${1:-php}" - local php_bin="${PHP_BIN_DIR:-$(__find_php_bin)}" + command -v php &>/dev/null || return 0 + local php_etc="${PHP_INI_DIR:-$(__find_php_ini)}" + __init_service_conf "/config/php" "${php_etc:-/etc/php}" \ + "/etc/php.ini" "/etc/php-fpm" "/etc/php-fpm.conf" return 0 } # - - - - - - - - - - - - - - - - - - - - - - - - - __init_mysql() { - local db_dir="/data/db/mysql" - local etc_dir="${home:-/etc/${1:-mysql}}" - local db_user="${SERVICE_USER:-mysql}" - local conf_dir="/config/${1:-mysql}" - local user_name="${MARIADB_USER:-root}" - local user_pass="${MARIADB_PASSWORD:-$MARIADB_ROOT_PASSWORD}" - local user_db="${MARIADB_DATABASE}" - local root_pass="$MARIADB_ROOT_PASSWORD" - local mysqld_bin="$(type -P 'mysqld')" + command -v mysqld &>/dev/null || command -v mariadbd &>/dev/null || return 0 + local svc="${1:-mysql}" + __init_service_conf "/config/$svc" "/etc/$svc" "/etc/my.ini" "/etc/my.cnf" + [ -d "${DATABASE_DIR:-/data/db/$svc}" ] || mkdir -p "${DATABASE_DIR:-/data/db/$svc}" return 0 } # - - - - - - - - - - - - - - - - - - - - - - - - - __init_mongodb() { - local home="${MONGODB_CONFIG_FILE:-$(__find_mongodb_conf)}" - local user_name="${INITDB_ROOT_USERNAME:-root}" - local user_pass="${MONGO_INITDB_ROOT_PASSWORD:-$_ROOT_PASSWORD}" - return + command -v mongod &>/dev/null || return 0 + __init_service_conf "/config/mongodb" "/etc/mongodb" "/etc/mongod.conf" + return 0 } # - - - - - - - - - - - - - - - - - - - - - - - - - __init_postgres() { - local home="${PGSQL_CONFIG_FILE:-$(__find_pgsql_conf)}" - local user_name="${POSTGRES_USER:-root}" - local user_pass="${POSTGRES_PASSWORD:-$POSTGRES_ROOT_PASSWORD}" - return + command -v postgres &>/dev/null || command -v pg_ctl &>/dev/null || return 0 + local pg_etc + pg_etc="${PGSQL_CONFIG_FILE:+${PGSQL_CONFIG_FILE%/*}}" + [ -n "$pg_etc" ] || pg_etc="$(__find_pgsql_conf)" + [ -n "$pg_etc" ] && pg_etc="${pg_etc%/*}" + [ -n "$pg_etc" ] && __init_service_conf "/config/postgres" "$pg_etc" + return 0 } # - - - - - - - - - - - - - - - - - - - - - - - - - __init_couchdb() { - local home="${COUCHDB_CONFIG_FILE:-$(__find_couchdb_conf)}" - local user_name="${COUCHDB_USER:-root}" - local user_pass="${COUCHDB_PASSWORD:-$SET_RANDOM_PASS}" - return + command -v couchdb &>/dev/null || return 0 + __init_service_conf "/config/couchdb" "/etc/couchdb" + return 0 } # - - - - - - - - - - - - - - - - - - - - - - - - - # Show available init functions __init_help() { echo ' -__certbot -__update_ssl_certs -__create_ssl_cert +Config seeding (copy /etc → /config, no symlinks): + __init_service_conf [extra_etc_path ...] + __init_apache [svc] seeds /config/apache2 from /etc/apache2 + __init_nginx [svc] seeds /config/nginx from /etc/nginx + __init_php seeds /config/php from /etc/php* + /etc/php.ini + /etc/php-fpm + __init_mysql [svc] seeds /config/mysql from /etc/mysql + /etc/my.{ini,cnf} + __init_mongodb seeds /config/mongodb from /etc/mongodb + /etc/mongod.conf + __init_postgres seeds /config/postgres from pg data dir + __init_couchdb seeds /config/couchdb from /etc/couchdb + +SSL: + __update_ssl_certs + __create_ssl_cert ' return } # - - - - - - - - - - - - - - - - - - - - - - - - - __run_once() { - if [ "$CONFIG_DIR_INITIALIZED" = "false" ] || [ "$DATA_DIR_INITIALIZED" = "false" ] || [ ! -f "/config/.docker_has_run" ]; then + if [ "$CONFIG_DIR_INITIALIZED" = "no" ] || [ "$DATA_DIR_INITIALIZED" = "no" ] || [ ! -f "/config/.docker_has_run" ]; then return 0 else return 1 @@ -579,7 +577,7 @@ __run_once() { # - - - - - - - - - - - - - - - - - - - - - - - - - # run program ever n minutes __cron() { - trap 'retVal=$?;[ -f "/run/cron/$bin.run" ] && rm -Rf "/run/cron/$bin.run";[ -f "/run/cron/$bin.pid" ] && rm -Rf "/run/cron/$bin.pid";exit ${retVal:-0}' SIGINT ERR EXIT + local bin="" if [ "$1" = "--pid" ]; then pid="$2" shift 2 @@ -594,11 +592,13 @@ __cron() { fi [ $# -eq 0 ] && echo "Usage: cron [interval] [command]" && exit 1 local command="$*" - local bin="${CRON_NAME:-$1}"; bin="${bin##*/}" + bin="${CRON_NAME:-$1}"; bin="${bin##*/}" + trap 'retVal=$?;[ -f "/run/cron/$bin.run" ] && rm -Rf "/run/cron/$bin.run";[ -f "/run/cron/$bin.pid" ] && rm -Rf "/run/cron/$bin.pid";exit ${retVal:-0}' SIGINT ERR EXIT [ -d "/run/cron" ] || mkdir -p "/run/cron" echo "$pid" >"/run/cron/$bin.pid" echo "$command" >"/run/cron/$bin.run" echo "Log is saved to /data/logs/cron.log" + # eval is intentional: $command is operator-controlled input from this container's init while :; do eval "$command" sleep $interval @@ -615,7 +615,7 @@ __replace() { __find_replace() { local search="$1" replace="$2" file="${3:-$2}" [ -e "$file" ] || return 1 - find "$file" -type f -not -path '.git*' -exec sed -i "s|$search|$replace|g" {} \; 2>/dev/null + find "$file" -type f -not -path '*/.git/*' -not -name '.git' -exec sed -i "s|$search|$replace|g" {} + 2>/dev/null } # - - - - - - - - - - - - - - - - - - - - - - - - - # /config > /etc @@ -623,7 +623,7 @@ __copy_templates() { local from="$1" to="$2" is_link="" [ -L "$to" ] && is_link="$(readlink "$to")" [ "$from" != "$is_link" ] || return 0 - if [ -e "$from" ] && __is_dir_empty "$to"; then + if [ -e "$from" ] && (! [ -d "$to" ] || __is_dir_empty "$to"); then __file_copy "$from" "$to" fi } @@ -670,7 +670,7 @@ __file_copy() { } # - - - - - - - - - - - - - - - - - - - - - - - - - __generate_random_uids() { - local set_random_uid="$(seq 100 999 | sort -R | head -n 1)" + local set_random_uid=$((100 + RANDOM % 900)) while :; do if grep -shq "x:.*:$set_random_uid:" "/etc/group" && ! grep -shq "x:$set_random_uid:.*:" "/etc/passwd"; then set_random_uid=$((set_random_uid + 1)) @@ -772,7 +772,7 @@ __proc_check() { fi if [ $check_result -eq 0 ]; then SERVICE_IS_RUNNING="yes" - touch "$SERVICE_PID_FILE" 2>/dev/null || true + pgrep -x -n "$cmd_name" >"$SERVICE_PID_FILE" 2>/dev/null || true return 0 else return 1 @@ -953,7 +953,7 @@ __create_env_file() { fi [ -f "$create_env" ] || envStatus=$((1 + envStatus)) done - rm -f "$sample_file" + [ "$envStatus" -eq 0 ] && rm -f "$sample_file" return $envStatus } # - - - - - - - - - - - - - - - - - - - - - - - - - @@ -968,7 +968,7 @@ __exec_command() { prog="$(type -P "$bin" 2>/dev/null || echo "$bin")" if type -t "$bin" &>/dev/null; then echo "${exec_message:-Executing command: $cmdExec}" - eval "$shell" $pre_exec "$cmdExec" + "$shell" $pre_exec "$cmdExec" exitCode=$? elif [ -f "$prog" ]; then echo "$prog is not executable" @@ -985,9 +985,10 @@ __start_init_scripts() { [ "$1" = " " ] && shift 1 if [ "$DEBUGGER" = "on" ]; then echo "Enabling debugging" - set -o pipefail -x$DEBUGGER_OPTIONS + set -eo pipefail + [ -n "$DEBUGGER_OPTIONS" ] && set -"$DEBUGGER_OPTIONS" else - set -o pipefail + set -eo pipefail fi local retPID="" local basename="" @@ -1019,7 +1020,7 @@ __start_init_scripts() { for sample in "$init_dir"/*.sample; do [ -e "$sample" ] && __rm "$sample" done - chmod -Rf 755 "$init_dir"/*.sh + (shopt -s nullglob; chmod -Rf 755 "$init_dir"/*.sh 2>/dev/null || true) echo "🚀 Starting container services initialization" echo "📂 Init directory: $init_dir" @@ -1033,8 +1034,8 @@ __start_init_scripts() { name="${init##*/}" service="${name#*-}"; service="${service%.sh}" __service_banner "🔧" "Executing service script:" "${init##*/}" - # Execute the init script and capture the exit code - if source "$init"; then + # Execute the init script and capture the exit code (subshell isolates exit calls) + if ( source "$init" ); then # Check if service was disabled first if [ -n "$SERVICE_DISABLED" ]; then initStatus="0" @@ -1060,7 +1061,7 @@ __start_init_scripts() { retPID="" local found_process="" # Try multiple name variants to find the process - for name_variant in "$service" "${service}84" "${service}d" "${service//-/}"; do + for name_variant in "$service" "${service}d" "${service//-/}"; do if [ -z "$retPID" ]; then retPID=$(__get_pid "$name_variant" 2>/dev/null || echo "") if [ -n "$retPID" ] && [ "$retPID" != "0" ]; then @@ -1215,8 +1216,8 @@ EOF __initialize_replace_variables "/etc/postfix" touch "/config/postfix/aliases" "/config/postfix/mynetworks" "/config/postfix/transport" touch "/config/postfix/mydomains.pcre" "/config/postfix/mydomains" "/config/postfix/virtual" - postmap "/config/aliases" "/config/mynetworks" "/config/transport" &>/dev/null - postmap "/config/mydomains.pcre" "/config/mydomains" "/config/virtual" &>/dev/null + postmap "/config/postfix/aliases" "/config/postfix/mynetworks" "/config/postfix/transport" &>/dev/null + postmap "/config/postfix/mydomains.pcre" "/config/postfix/mydomains" "/config/postfix/virtual" &>/dev/null fi if [ -f "/etc/postfix/main.cf" ] && [ ! -f "/run/init.d/postfix.pid" ]; then SERVICES_LIST+="postfix " @@ -1329,7 +1330,7 @@ __initialize_db_users() { __initialize_system_etc() { local conf_dir="$1" local dir="" - local file=() + local files="" local directories="" if [ -n "$conf_dir" ] && [ -e "$conf_dir" ]; then files=$(find "$conf_dir"/* -not -path '*/env/*' -type f 2>/dev/null | sort -u | sed 's|/config/||') @@ -1371,99 +1372,6 @@ __initialize_custom_bin_dir() { fi } # - - - - - - - - - - - - - - - - - - - - - - - - - -__initialize_default_templates() { - local errors=0 - if [ -n "$DEFAULT_TEMPLATE_DIR" ]; then - if [ "$CONFIG_DIR_INITIALIZED" = "false" ] && [ -d "/config" ]; then - __log_info "Copying default config files $DEFAULT_TEMPLATE_DIR > /config" - if [ ! -d "$DEFAULT_TEMPLATE_DIR" ]; then - __log_warn "Template directory not found: $DEFAULT_TEMPLATE_DIR" - return 0 - fi - for create_config_template in "$DEFAULT_TEMPLATE_DIR"/*; do - if [ -e "$create_config_template" ]; then - create_template_name="${create_config_template##*/}" - if [ -d "$create_config_template" ]; then - mkdir -p "/config/$create_template_name/" || errors=$((errors + 1)) - if __is_dir_empty "/config/$create_template_name"; then - if ! cp -Rf "$create_config_template/." "/config/$create_template_name/" 2>/dev/null; then - __log_warn "Failed to copy template directory: $create_template_name" - errors=$((errors + 1)) - fi - fi - elif [ -f "$create_config_template" ]; then - if [ ! -e "/config/$create_template_name" ]; then - if ! cp -Rf "$create_config_template" "/config/$create_template_name" 2>/dev/null; then - __log_warn "Failed to copy template file: $create_template_name" - errors=$((errors + 1)) - fi - fi - fi - fi - done - unset create_config_template create_template_name - __log_debug "Template initialization completed with $errors errors" - fi - fi - return 0 -} -# - - - - - - - - - - - - - - - - - - - - - - - - - -__initialize_config_dir() { - local errors=0 - if [ -n "$DEFAULT_CONF_DIR" ]; then - if [ "$CONFIG_DIR_INITIALIZED" = "false" ] && [ -d "/config" ]; then - __log_info "Copying custom config files: $DEFAULT_CONF_DIR > /config" - if [ ! -d "$DEFAULT_CONF_DIR" ]; then - __log_warn "Config directory not found: $DEFAULT_CONF_DIR" - return 0 - fi - for create_config_template in "$DEFAULT_CONF_DIR"/*; do - if [ -e "$create_config_template" ]; then - create_config_name="${create_config_template##*/}" - if [ -d "$create_config_template" ]; then - mkdir -p "/config/$create_config_name" || errors=$((errors + 1)) - if __is_dir_empty "/config/$create_config_name"; then - if ! cp -Rf "$create_config_template/." "/config/$create_config_name/" 2>/dev/null; then - __log_warn "Failed to copy config directory: $create_config_name" - errors=$((errors + 1)) - fi - fi - elif [ -f "$create_config_template" ]; then - if [ ! -e "/config/$create_config_name" ]; then - if ! cp -Rf "$create_config_template" "/config/$create_config_name" 2>/dev/null; then - __log_warn "Failed to copy config file: $create_config_name" - errors=$((errors + 1)) - fi - fi - fi - fi - done - unset create_config_template create_config_name - __log_debug "Config initialization completed with $errors errors" - fi - fi - return 0 -} -# - - - - - - - - - - - - - - - - - - - - - - - - - -__initialize_data_dir() { - if [ -d "/data" ]; then - if [ "$DATA_DIR_INITIALIZED" = "false" ] && [ -n "$DEFAULT_DATA_DIR" ]; then - __log_info "Copying data files $DEFAULT_DATA_DIR > /data" - for create_data_template in "$DEFAULT_DATA_DIR"/*; do - create_data_name="${create_data_template##*/}" - if [ -n "$create_data_template" ]; then - if [ -d "$create_data_template" ]; then - mkdir -p "/data/$create_data_name" - __is_dir_empty "/data/$create_data_name" && cp -Rf "$create_data_template/." "/data/$create_data_name/" 2>/dev/null - elif [ -e "$create_data_template" ]; then - [ -e "/data/$create_data_name" ] || cp -Rf "$create_data_template" "/data/$create_data_name" 2>/dev/null - fi - fi - done - unset create_template - fi - fi -} # - - - - - - - - - - - - - - - - - - - - - - - - - __initialize_www_root() { local WWW_INIT="" @@ -1477,7 +1385,7 @@ __initialize_www_root() { WWW_INIT="false" fi if [ "$WWW_INIT" = "true" ] && [ -d "$WWW_TEMPLATE" ]; then - cp -Rf "$DEFAULT_DATA_DIR/data/htdocs/." "$WWW_ROOT_DIR/" 2>/dev/null + cp -Rf "$WWW_TEMPLATE/." "$WWW_ROOT_DIR/" 2>/dev/null fi __initialize_web_health "$WWW_ROOT_DIR" } @@ -1496,7 +1404,7 @@ __is_htdocs_mounted() { git clone -q "$IMPORT_FROM_GIT" "$WWW_ROOT_DIR" elif [ -d "$WWW_ROOT_DIR" ]; then echo "Updating the project in $WWW_ROOT_DIR" - git -C pull -q "$WWW_ROOT_DIR" + git -C "$WWW_ROOT_DIR" pull -q fi elif [ -d "/app" ]; then WWW_ROOT_DIR="/app" @@ -1514,27 +1422,16 @@ __is_htdocs_mounted() { } # - - - - - - - - - - - - - - - - - - - - - - - - - __initialize_ssl_certs() { - [ "$SSL_ENABLED" = "yes" ] && __certbot - if [ -d "/config/letsencrypt" ]; then - mkdir -p "/etc/letsencrypt" - __file_copy "/config/letsencrypt" "/etc/letsencrypt/" - elif [ -d "/etc/letsencrypt" ] && [ ! -d "/config/letsencrypt" ]; then - mkdir -p "/config/letsencrypt" - __file_copy "/etc/letsencrypt" "/config/letsencrypt/" - else - [ -d "$SSL_DIR" ] || mkdir -p "$SSL_DIR" - if [ "$SSL_ENABLED" = "true" ] || [ "$SSL_ENABLED" = "yes" ]; then - if [ -f "$SSL_CERT" ] && [ -f "$SSL_KEY" ]; then - SSL_ENABLED="true" - if [ -n "$SSL_CA" ] && [ -f "$SSL_CA" ]; then - mkdir -p "$SSL_DIR/certs" - cat "$SSL_CA" >>"/etc/ssl/certs/ca-certificates.crt" - cp -Rf "/." "$SSL_DIR/" - fi - else - [ -d "$SSL_DIR" ] || mkdir -p "$SSL_DIR" - __create_ssl_cert + [ -d "$SSL_DIR" ] || mkdir -p "$SSL_DIR" + if [ "$SSL_ENABLED" = "yes" ]; then + if [ -f "$SSL_CERT" ] && [ -f "$SSL_KEY" ]; then + if [ -n "$SSL_CA" ] && [ -f "$SSL_CA" ]; then + mkdir -p "$SSL_DIR/certs" + cat "$SSL_CA" >>"/etc/ssl/certs/ca-certificates.crt" fi + __update_ssl_certs + else + __create_ssl_cert fi fi type update-ca-certificates &>/dev/null && update-ca-certificates &>/dev/null @@ -1622,8 +1519,13 @@ __backup() { [ -z "$dirs" ] && echo "BACKUP_DIR is unset" >&2 && return 1 [ -f "$pidFile" ] && echo "A backup job is already running" >&2 && return 1 echo "$$" >"$pidFile" + trap "rm -f '$pidFile'" EXIT INT TERM echo "Starting backup in $(date)" >>"$logDir/$CONTAINER_NAME" - tar --exclude $backup_exclude cfvz "$backup_dir/$backup_name" $dirs 2>/dev/stderr >>"$logDir/$CONTAINER_NAME" || exitCodeP=1 + local tar_excludes=() + for excl in $backup_exclude; do + tar_excludes+=("--exclude=$excl") + done + tar "${tar_excludes[@]}" -cfvz "$backup_dir/$backup_name" $dirs 2>/dev/stderr >>"$logDir/$CONTAINER_NAME" || exitCodeP=1 if [ $exitCodeP -eq 0 ]; then echo "Backup has completed and saved to: $backup_dir/$backup_name" printf '%s\n\n' "Backup has completed on $(date)" >>"$logDir/$CONTAINER_NAME" @@ -1634,7 +1536,7 @@ __backup() { exitStatus=1 fi [ -f "$pidFile" ] && __rm "$pidFile" - [ -n "$maxDays" ] && find "$BACKUP_DIR"* -mtime +$maxDays -exec rm -Rf {} \; >/dev/null 2>&1 + [ -n "$maxDays" ] && find "$BACKUP_DIR" -mtime +"$maxDays" -exec rm -Rf {} \; >/dev/null 2>&1 if [ -n "$cronTime" ]; then runTime=$((cronTime * 3600)) else @@ -1648,8 +1550,8 @@ export INIT_DATE="${INIT_DATE:-$(date)}" export START_SERVICES="${START_SERVICES:-yes}" export ENTRYPOINT_MESSAGE="${ENTRYPOINT_MESSAGE:-yes}" export ENTRYPOINT_FIRST_RUN="${ENTRYPOINT_FIRST_RUN:-yes}" -export DATA_DIR_INITIALIZED="${DATA_DIR_INITIALIZED:-false}" -export CONFIG_DIR_INITIALIZED="${CONFIG_DIR_INITIALIZED:-false}" +export DATA_DIR_INITIALIZED="${DATA_DIR_INITIALIZED:-no}" +export CONFIG_DIR_INITIALIZED="${CONFIG_DIR_INITIALIZED:-no}" # - - - - - - - - - - - - - - - - - - - - - - - - - # System export LANG="${LANG:-C.UTF-8}" @@ -1659,13 +1561,10 @@ export HOSTNAME="${FULL_DOMAIN_NAME:-${SERVER_HOSTNAME:-$HOSTNAME}}" # - - - - - - - - - - - - - - - - - - - - - - - - - # Default directories export SSL_DIR="${SSL_DIR:-/config/ssl}" -export SSL_CA="${SSL_CERT:-/config/ssl/ca.crt}" +export SSL_CA="${SSL_CA:-/config/ssl/ca.crt}" export SSL_KEY="${SSL_KEY:-/config/ssl/localhost.pem}" export SSL_CERT="${SSL_CERT:-/config/ssl/localhost.crt}" export LOCAL_BIN_DIR="${LOCAL_BIN_DIR:-/usr/local/bin}" -export DEFAULT_DATA_DIR="${DEFAULT_DATA_DIR:-/usr/local/share/template-files/data}" -export DEFAULT_CONF_DIR="${DEFAULT_CONF_DIR:-/usr/local/share/template-files/config}" -export DEFAULT_TEMPLATE_DIR="${DEFAULT_TEMPLATE_DIR:-/usr/local/share/template-files/defaults}" # - - - - - - - - - - - - - - - - - - - - - - - - - # Backup settings export BACKUP_MAX_DAYS="${BACKUP_MAX_DAYS:-}" @@ -1696,29 +1595,30 @@ export ENTRYPOINT_CONFIG_INIT_FILE="${ENTRYPOINT_CONFIG_INIT_FILE:-/config/.dock # is already Initialized if [ -z "$DATA_DIR_INITIALIZED" ]; then if [ -f "$ENTRYPOINT_DATA_INIT_FILE" ]; then - DATA_DIR_INITIALIZED="true" + DATA_DIR_INITIALIZED="yes" else - DATA_DIR_INITIALIZED="false" + DATA_DIR_INITIALIZED="no" fi fi if [ -z "$CONFIG_DIR_INITIALIZED" ]; then if [ -f "$ENTRYPOINT_CONFIG_INIT_FILE" ]; then - CONFIG_DIR_INITIALIZED="true" + CONFIG_DIR_INITIALIZED="yes" else - CONFIG_DIR_INITIALIZED="false" + CONFIG_DIR_INITIALIZED="no" fi fi if [ -z "$ENTRYPOINT_FIRST_RUN" ]; then if [ -f "$ENTRYPOINT_PID_FILE" ] || [ -f "$ENTRYPOINT_INIT_FILE" ]; then ENTRYPOINT_FIRST_RUN="no" else - ENTRYPOINT_FIRST_RUN="true" + ENTRYPOINT_FIRST_RUN="yes" fi fi export ENTRYPOINT_DATA_INIT_FILE DATA_DIR_INITIALIZED ENTRYPOINT_CONFIG_INIT_FILE CONFIG_DIR_INITIALIZED export ENTRYPOINT_PID_FILE ENTRYPOINT_INIT_FILE ENTRYPOINT_FIRST_RUN # - - - - - - - - - - - - - - - - - - - - - - - - - # export the functions -export -f __get_pid __start_init_scripts __is_running __certbot __update_ssl_certs __create_ssl_cert +export -f __get_pid __start_init_scripts __is_running __update_ssl_certs __create_ssl_cert # - - - - - - - - - - - - - - - - - - - - - - - - - # end of functions +# vim: set ft=sh ts=4 sw=4 st=4 et :