Files
forge/docker/root/usr/bin/entrypoint
zeekayandHanzo Dev 8ad69a6e8b fix(docker): the image lost its GIT__* config merge when the binary moved
`environment-to-ini` still exec'd `/app/gitd/gitd`, which the same release
deleted. Proven on the running v1.26.20 pod:

    /usr/local/bin/environment-to-ini: line 2: /app/gitd/gitd: No such file
    exit=127

s6 `setup` calls it with no `set -e`, so boot swallowed the 127 and the server
came up on whatever app.ini the volume already had. Every deploy configures this
server through `GIT__<section>__<KEY>` env and nothing else, so the next config
change — or any boot on a fresh volume — would have been silently ignored.
`run` and `setup` referenced the same dead directory (`pushd`, `chown`, `chmod`),
all likewise swallowed.

The binary path was written in eight places; that is why moving it missed three.
`environment-to-ini` now goes through `/usr/local/bin/gitd`, the wrapper that
already owns the path, so the path is written only where the image places it
(two Dockerfiles) and where the wrappers resolve it (two scripts). Verified in
the live image: the wrapper form merges (`GIT__probe__CANARY` reached the ini,
exit 0) where the shipped script exits 127.

The merge is now fatal instead of swallowed: a server that starts without it is
running on config nobody declared.

Co-authored-by: Hanzo Dev <[email protected]>
2026-07-26 13:48:03 -07:00

42 lines
1.1 KiB
Bash
Executable File

#!/bin/sh
# Protect against buggy runc in docker <20.10.6 causing problems in with Alpine >= 3.14
if [ ! -x /bin/sh ]; then
echo "Executable test for /bin/sh failed. Your Docker version is too old to run Alpine 3.14+ and Hanzo Git. You must upgrade Docker.";
exit 1;
fi
if [ "${USER}" != "git" ]; then
# Rename user
sed -i -e "s/^git\:/${USER}\:/g" /etc/passwd
fi
if [ -z "${USER_GID}" ]; then
USER_GID="`id -g ${USER}`"
fi
if [ -z "${USER_UID}" ]; then
USER_UID="`id -u ${USER}`"
fi
# Change GID for USER?
if [ -n "${USER_GID}" ] && [ "${USER_GID}" != "`id -g ${USER}`" ]; then
sed -i -e "s/^${USER}:\([^:]*\):[0-9]*/${USER}:\1:${USER_GID}/" /etc/group
sed -i -e "s/^${USER}:\([^:]*\):\([0-9]*\):[0-9]*/${USER}:\1:\2:${USER_GID}/" /etc/passwd
fi
# Change UID for USER?
if [ -n "${USER_UID}" ] && [ "${USER_UID}" != "`id -u ${USER}`" ]; then
sed -i -e "s/^${USER}:\([^:]*\):[0-9]*:\([0-9]*\)/${USER}:\1:${USER_UID}:\2/" /etc/passwd
fi
for FOLDER in /data/gitea/conf /data/gitea/log /data/git /data/ssh; do
mkdir -p ${FOLDER}
done
if [ $# -gt 0 ]; then
exec "$@"
else
exec /usr/bin/s6-svscan /etc/s6
fi