zlh-agent/scripts/devcontainer/python/install.sh
2025-12-21 22:11:44 +00:00

56 lines
1.5 KiB
Bash

#!/usr/bin/env bash
set -euo pipefail
RUNTIME="python"
ARCHIVE_FILE="python-${DEST_VERSION}.tar.xz"
ARTIFACT_BASE_URL="${ZLH_ARTIFACT_BASE_URL:-http://10.60.0.251:8080}"
DEST_DIR="${RUNTIME_ROOT}/${DEST_VERSION}"
TMP_DIR="/tmp/zlh-python-install"
ARCHIVE_FILE="python-${DEST_VERSION}.tar.xz"
URL="${ARTIFACT_BASE_URL%/}/devcontainer/python/${DEST_VERSION}/${ARCHIVE_FILE}"
echo "[python] Installing Python ${DEST_VERSION}"
mkdir -p "${RUNTIME_ROOT}"
# Idempotency
if [ -d "${DEST_DIR}" ]; then
echo "[python] Python ${DEST_VERSION} already installed at ${DEST_DIR}"
else
echo "[python] Downloading ${URL}"
rm -rf "${TMP_DIR}"
mkdir -p "${TMP_DIR}"
if command -v curl >/dev/null 2>&1; then
curl -fL "${URL}" -o "${TMP_DIR}/${ARCHIVE_FILE}"
elif command -v wget >/dev/null 2>&1; then
wget -O "${TMP_DIR}/${ARCHIVE_FILE}" "${URL}"
else
echo "[python][ERROR] curl or wget is required"
exit 1
fi
echo "[python] Extracting ${ARCHIVE_FILE} -> ${DEST_DIR}"
mkdir -p "${DEST_DIR}"
tar -xf "${TMP_DIR}/${ARCHIVE_FILE}" -C "${DEST_DIR}" --strip-components=1
fi
# Stable symlinks (same model as Node)
ln -sfn "${DEST_DIR}" "${RUNTIME_ROOT}/current"
ln -sfn "${DEST_DIR}/bin" "${RUNTIME_ROOT}/bin"
# System-wide PATH export
cat >/etc/profile.d/zlh-python.sh <<'EOF'
export PATH="/opt/zlh/runtime/python/bin:$PATH"
EOF
chmod +x /etc/profile.d/zlh-python.sh
# Permissions sanity
chmod -R 755 "${DEST_DIR}"
echo "[python] Python ${DEST_VERSION} installed successfully"