Files
OpenPXE/deploy/docker/entrypoint.sh
T
2026-05-06 14:13:38 -04:00

33 lines
1.3 KiB
Bash

#!/bin/sh
# Container entrypoint that handles the common bind-mount-as-root case.
#
# When volumes are bind-mounted into the container (e.g. `-v ./data/isos:...`),
# they come up owned by the host uid:gid — often root:root. The openpxe
# binary runs as uid 10001 and can't write there. This script, when started
# as root, chowns the two state dirs to the openpxe user, then drops
# privileges via gosu before execing the binary.
#
# If the container is already running as non-root (OpenShift does this via
# its own uid assignment from the SCC), we skip the chown attempt and just
# exec the binary — OpenShift either preconfigures the volume with fsGroup
# or the operator is on their own for permissions.
set -e
OPENPXE_UID=${OPENPXE_UID:-10001}
OPENPXE_GID=${OPENPXE_GID:-10001}
DATA_DIRS="/var/lib/openpxe/isos /var/lib/openpxe/work /var/lib/openpxe/smb"
if [ "$(id -u)" = "0" ]; then
for d in $DATA_DIRS; do
if [ -d "$d" ]; then
chown -R "${OPENPXE_UID}:${OPENPXE_GID}" "$d" 2>/dev/null || true
fi
done
# Re-exec ourselves under the openpxe user so the binary inherits a
# clean process environment and a predictable umask.
exec gosu "${OPENPXE_UID}:${OPENPXE_GID}" /usr/local/bin/openpxe "$@"
fi
# Non-root: straight exec, no chown attempt.
exec /usr/local/bin/openpxe "$@"