61 lines
1.9 KiB
Bash
61 lines
1.9 KiB
Bash
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
DEFAULT_ARGS=("spyder" "--new-instance")
|
|
|
|
TARGET_UID=${UID:-1000}
|
|
TARGET_GID=${GID:-1000}
|
|
TARGET_USER=${HOST_USER:-spyder}
|
|
TARGET_GROUP=${HOST_GROUP:-$TARGET_USER}
|
|
TARGET_HOME=${SPYDER_HOME:-/home/${TARGET_USER}}
|
|
TARGET_WORKSPACE=${SPYDER_WORKSPACE:-${TARGET_HOME}/workspace}
|
|
|
|
if [ "$#" -eq 0 ]; then
|
|
set -- "${DEFAULT_ARGS[@]}"
|
|
fi
|
|
|
|
existing_group=$(getent group "${TARGET_GID}" || true)
|
|
if [ -z "${existing_group}" ]; then
|
|
# Reconcile group entry so host files stay accessible.
|
|
if getent group "${TARGET_GROUP}" >/dev/null 2>&1; then
|
|
groupmod --gid "${TARGET_GID}" "${TARGET_GROUP}"
|
|
else
|
|
groupadd --gid "${TARGET_GID}" "${TARGET_GROUP}"
|
|
fi
|
|
else
|
|
TARGET_GROUP=$(printf '%s' "${existing_group}" | cut -d: -f1)
|
|
fi
|
|
|
|
existing_user=$(getent passwd "${TARGET_UID}" || true)
|
|
if [ -z "${existing_user}" ]; then
|
|
# Mirror host UID/GID inside the container.
|
|
if id "${TARGET_USER}" >/dev/null 2>&1; then
|
|
usermod --uid "${TARGET_UID}" --gid "${TARGET_GID}" --home "${TARGET_HOME}" --shell /bin/bash "${TARGET_USER}"
|
|
else
|
|
useradd --uid "${TARGET_UID}" --gid "${TARGET_GID}" --home-dir "${TARGET_HOME}" --shell /bin/bash "${TARGET_USER}"
|
|
fi
|
|
else
|
|
TARGET_USER=$(printf '%s' "${existing_user}" | cut -d: -f1)
|
|
TARGET_HOME=$(printf '%s' "${existing_user}" | cut -d: -f6)
|
|
fi
|
|
|
|
install -d -m 0755 "${TARGET_HOME}" "${TARGET_WORKSPACE}"
|
|
# Ensure mounts are owned by the runtime user.
|
|
chown "${TARGET_UID}:${TARGET_GID}" "${TARGET_HOME}" "${TARGET_WORKSPACE}"
|
|
|
|
for lock in \
|
|
"${TARGET_HOME}/.config/spyder/spyder.lock" \
|
|
"${TARGET_HOME}/.local/share/spyder/spyder.lock" \
|
|
"${TARGET_HOME}/.spyder-py3/spyder.lock"
|
|
do
|
|
# Remove stale Spyder locks that can survive bind mounts.
|
|
rm -f "$lock"
|
|
done
|
|
|
|
export HOME="${TARGET_HOME}"
|
|
export USER="${TARGET_USER}"
|
|
export QTWEBENGINE_DISABLE_SANDBOX="${QTWEBENGINE_DISABLE_SANDBOX:-1}"
|
|
|
|
cd "${TARGET_WORKSPACE}"
|
|
|
|
exec gosu "${TARGET_UID}:${TARGET_GID}" micromamba run -n base "$@" |