- rootfs/usr/local/bin/entrypoint.sh:
1. The "start all services" gate
(`if [ "$START_SERVICES" = "yes" ] || [ -z "$1" ]`) always evaluated
true on a first-run container regardless of $1, because
START_SERVICES is force-set to "yes" whenever no PID file exists yet.
Any command passed to `docker run` — `exec ...`, `sh -c ...`,
`shell`, or an arbitrary program — was swallowed into the
service-start+monitor branch before reaching the `case "$1"`
statement that already handles those subcommands, hanging the
container as a daemon instead of running the given command. Changed
the condition to `if [ -z "$1" ]` so the daemon branch only fires
when no command was given at all.
2. The `*/bin/sh | */bin/bash | bash | sh | shell)` case branch
unconditionally shifted $1 before `__exec_command "$@"` (a bare
`exec "$@"`). For `docker run image sh -c 'cmd'` this turned the
exec into `exec -c cmd` (command not found, exit 127) instead of
`exec sh -c 'cmd'`. Split the branch: real interpreter names
(*/bin/sh, */bin/bash, bash, sh) now pass through unshifted; the
"shell" keyword (not a real interpreter) gets its own branch that
shifts and prepends "sh" to any remaining args, or falls back to a
bare `__exec_command` (exec bash -l) when none remain.
Verified `bash -n` passes. Found and fixed upstream in
dockersrc/go, confirmed identical in this repo's generated
entrypoint.sh, and mechanically applied here with the same patch.
Four bugs prevented nginx from starting in the super-productivity container.
All four are fixed; tested end-to-end: HTTP 200 on /, /health returns
"healthy", and sync-config-default-override.json is written correctly
from SUPERSYNC_BASE_URL env vars.
- Dockerfile: remove /etc/postfix and /etc/ssmtp in the pkmgr RUN step
so ssmtp binary cannot resolve config dirs that were never installed
- rootfs/usr/local/bin/entrypoint.sh: make __setup_mta non-fatal with
|| true; image has ssmtp binary but no config dirs — MTA is optional
- rootfs/usr/local/etc/docker/functions/entrypoint.sh: fix __setup_mta
guard (bare return → return 0) so it does not exit caller with code 1;
gate all verbose debug echoes behind DEBUGGER=on so they do not slow
down __fix_permissions / __setup_directories with unnecessary tee pipes
- rootfs/usr/local/etc/docker/init.d/zz-nginx.sh: guard EXEC_PRE_SCRIPT
type-P lookup behind [ -n ] so type -P '' cannot fire __trap_err_handler;
create nginx.local.sh with touch inside __create_service_env and remove
its __file_exists_with_content check from exitCode so the function
returns 0 and zz-nginx.sh proceeds to __run_start_script
Dockerfile
rootfs/usr/local/bin/entrypoint.sh
rootfs/usr/local/etc/docker/functions/entrypoint.sh
rootfs/usr/local/etc/docker/init.d/zz-nginx.sh