59 lines
1.5 KiB
Bash
Executable File
59 lines
1.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
USER_NAME=codex
|
|
PUID=${PUID:-1000}
|
|
PGID=${PGID:-1000}
|
|
|
|
ensure_group() {
|
|
local desired_gid=$1
|
|
local group_name
|
|
|
|
if getent group "${desired_gid}" >/dev/null 2>&1; then
|
|
group_name=$(getent group "${desired_gid}" | cut -d: -f1)
|
|
echo "${group_name}"
|
|
return 0
|
|
fi
|
|
|
|
if getent group "${USER_NAME}" >/dev/null 2>&1; then
|
|
groupmod -o -g "${desired_gid}" "${USER_NAME}"
|
|
echo "${USER_NAME}"
|
|
return 0
|
|
fi
|
|
|
|
groupadd -o -g "${desired_gid}" "${USER_NAME}"
|
|
echo "${USER_NAME}"
|
|
}
|
|
|
|
ensure_user() {
|
|
local desired_uid=$1
|
|
local primary_group=$2
|
|
|
|
if getent passwd "${USER_NAME}" >/dev/null 2>&1; then
|
|
usermod -o -u "${desired_uid}" -g "${primary_group}" -d "/home/${USER_NAME}" -s /bin/bash "${USER_NAME}"
|
|
else
|
|
useradd -o -m -u "${desired_uid}" -g "${primary_group}" -s /bin/bash "${USER_NAME}"
|
|
fi
|
|
}
|
|
|
|
GROUP_NAME=$(ensure_group "${PGID}")
|
|
ensure_user "${PUID}" "${GROUP_NAME}"
|
|
|
|
USER_HOME=$(eval echo "~${USER_NAME}")
|
|
|
|
mkdir -p /workspace/inbox /workspace/outbox /workspace/processed /workspace/failed
|
|
mkdir -p "${USER_HOME}/.codex"
|
|
|
|
for path in /workspace/inbox /workspace/outbox /workspace/processed /workspace/failed "${USER_HOME}" "${USER_HOME}/.codex"; do
|
|
if [ -e "${path}" ]; then
|
|
chown -R "${PUID}:${PGID}" "${path}"
|
|
fi
|
|
done
|
|
|
|
export HOME="${USER_HOME}"
|
|
export XDG_CACHE_HOME="${USER_HOME}/.cache"
|
|
mkdir -p "${XDG_CACHE_HOME}"
|
|
chown -R "${PUID}:${PGID}" "${XDG_CACHE_HOME}"
|
|
|
|
exec gosu "${PUID}:${PGID}" python3 /app/watch_and_customize.py
|