56 lines
1.5 KiB
Bash
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"
|