First working version
This commit is contained in:
61
start-spyder.sh
Normal file
61
start-spyder.sh
Normal file
@@ -0,0 +1,61 @@
|
||||
#!/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 "$@"
|
||||
Reference in New Issue
Block a user