Spaces:
Running
Running
Update start.sh
Browse files
start.sh
CHANGED
|
@@ -1,110 +1,107 @@
|
|
| 1 |
-
#!/usr/bin/env bash
|
| 2 |
-
set -euo pipefail
|
| 3 |
-
|
| 4 |
-
PORT="${PORT:-7860}"
|
| 5 |
-
|
| 6 |
-
#
|
| 7 |
-
if [[ -z "${PASSWORD:-}" && -z "${HASHED_PASSWORD:-}" ]]; then
|
| 8 |
-
echo "[ERROR] Missing PASSWORD/HASHED_PASSWORD secret."
|
| 9 |
-
exit 1
|
| 10 |
-
fi
|
| 11 |
-
|
| 12 |
-
# Hugging Face 持久化目录
|
| 13 |
-
if [[ -d "/data" ]]; then
|
| 14 |
-
WORKDIR="/data/workspace"
|
| 15 |
-
EXT_DIR="/data/code-server/extensions"
|
| 16 |
-
USER_DATA_DIR="/data/code-server/user-data"
|
| 17 |
-
CODEX_DIR="/data/.codex"
|
| 18 |
-
else
|
| 19 |
-
WORKDIR="${HOME}/workspace"
|
| 20 |
-
EXT_DIR="${HOME}/.local/share/code-server/extensions"
|
| 21 |
-
USER_DATA_DIR="${HOME}/.local/share/code-server/user-data"
|
| 22 |
-
CODEX_DIR="${HOME}/.codex"
|
| 23 |
-
fi
|
| 24 |
-
|
| 25 |
-
mkdir -p "$WORKDIR" "$EXT_DIR" "$USER_DATA_DIR" "${HOME}/.config/code-server" "$CODEX_DIR"
|
| 26 |
-
|
| 27 |
-
# -------------------------
|
| 28 |
-
# code-server 配置
|
| 29 |
-
# -------------------------
|
| 30 |
-
|
| 31 |
-
{
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
echo "
|
| 40 |
-
|
| 41 |
-
|
| 42 |
-
# -------------------------
|
| 43 |
-
# Codex
|
| 44 |
-
# -------------------------
|
| 45 |
-
|
| 46 |
-
: "${
|
| 47 |
-
: "${
|
| 48 |
-
: "${
|
| 49 |
-
: "${
|
| 50 |
-
: "${
|
| 51 |
-
: "${
|
| 52 |
-
|
| 53 |
-
: "${CODEX_PROVIDER_NAME:=sub2api}"
|
| 54 |
-
: "${CODEX_BASE_URL:=https://ai.qaq.al}"
|
| 55 |
-
: "${CODEX_WIRE_API:=responses}"
|
| 56 |
-
: "${CODEX_REQUIRES_OPENAI_AUTH:=true}"
|
| 57 |
-
|
| 58 |
-
cat > "${CODEX_DIR}/config.toml" <<EOF
|
| 59 |
-
model_provider = "${CODEX_MODEL_PROVIDER}"
|
| 60 |
-
model = "${CODEX_MODEL}"
|
| 61 |
-
model_reasoning_effort = "${CODEX_REASONING_EFFORT}"
|
| 62 |
-
network_access = "${CODEX_NETWORK_ACCESS}"
|
| 63 |
-
disable_response_storage = ${CODEX_DISABLE_RESPONSE_STORAGE}
|
| 64 |
-
windows_wsl_setup_acknowledged = ${CODEX_WSL_ACK}
|
| 65 |
-
model_verbosity = "${CODEX_VERBOSITY}"
|
| 66 |
-
|
| 67 |
-
[model_providers.${CODEX_PROVIDER_NAME}]
|
| 68 |
-
name = "${CODEX_PROVIDER_NAME}"
|
| 69 |
-
base_url = "${CODEX_BASE_URL}"
|
| 70 |
-
wire_api = "${CODEX_WIRE_API}"
|
| 71 |
-
requires_openai_auth = ${CODEX_REQUIRES_OPENAI_AUTH}
|
| 72 |
-
EOF
|
| 73 |
-
|
| 74 |
-
# -------------------------
|
| 75 |
-
# Codex auth.json
|
| 76 |
-
# -------------------------
|
| 77 |
-
|
| 78 |
-
|
| 79 |
-
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
|
| 86 |
-
|
| 87 |
-
|
| 88 |
-
|
| 89 |
-
|
| 90 |
-
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
|
| 94 |
-
|
| 95 |
-
|
| 96 |
-
|
| 97 |
-
|
| 98 |
-
|
| 99 |
-
|
| 100 |
-
echo "[INFO]
|
| 101 |
-
echo "[INFO]
|
| 102 |
-
echo "[INFO]
|
| 103 |
-
|
| 104 |
-
|
| 105 |
-
|
| 106 |
-
|
| 107 |
-
exec code-server "$WORKDIR" \
|
| 108 |
-
--extensions-dir "$EXT_DIR" \
|
| 109 |
-
--user-data-dir "$USER_DATA_DIR" \
|
| 110 |
--disable-telemetry
|
|
|
|
| 1 |
+
#!/usr/bin/env bash
|
| 2 |
+
set -euo pipefail
|
| 3 |
+
|
| 4 |
+
PORT="${PORT:-7860}"
|
| 5 |
+
|
| 6 |
+
# code-server 登录密码:必须在 HF Secrets 里配置
|
| 7 |
+
if [[ -z "${PASSWORD:-}" && -z "${HASHED_PASSWORD:-}" ]]; then
|
| 8 |
+
echo "[ERROR] Missing PASSWORD/HASHED_PASSWORD secret."
|
| 9 |
+
exit 1
|
| 10 |
+
fi
|
| 11 |
+
|
| 12 |
+
# Hugging Face 持久化目录支持
|
| 13 |
+
if [[ -d "/data" ]]; then
|
| 14 |
+
WORKDIR="/data/workspace"
|
| 15 |
+
EXT_DIR="/data/code-server/extensions"
|
| 16 |
+
USER_DATA_DIR="/data/code-server/user-data"
|
| 17 |
+
CODEX_DIR="/data/.codex"
|
| 18 |
+
else
|
| 19 |
+
WORKDIR="${HOME}/workspace"
|
| 20 |
+
EXT_DIR="${HOME}/.local/share/code-server/extensions"
|
| 21 |
+
USER_DATA_DIR="${HOME}/.local/share/code-server/user-data"
|
| 22 |
+
CODEX_DIR="${HOME}/.codex"
|
| 23 |
+
fi
|
| 24 |
+
|
| 25 |
+
mkdir -p "$WORKDIR" "$EXT_DIR" "$USER_DATA_DIR" "${HOME}/.config/code-server" "$CODEX_DIR"
|
| 26 |
+
|
| 27 |
+
# -------------------------
|
| 28 |
+
# code-server 配置
|
| 29 |
+
# -------------------------
|
| 30 |
+
cat > "${HOME}/.config/code-server/config.yaml" <<EOF
|
| 31 |
+
bind-addr: 0.0.0.0:${PORT}
|
| 32 |
+
auth: password
|
| 33 |
+
cert: false
|
| 34 |
+
EOF
|
| 35 |
+
|
| 36 |
+
if [[ -n "${HASHED_PASSWORD:-}" ]]; then
|
| 37 |
+
echo "hashed-password: ${HASHED_PASSWORD}" >> "${HOME}/.config/code-server/config.yaml"
|
| 38 |
+
else
|
| 39 |
+
echo "password: ${PASSWORD}" >> "${HOME}/.config/code-server/config.yaml"
|
| 40 |
+
fi
|
| 41 |
+
|
| 42 |
+
# -------------------------
|
| 43 |
+
# Codex config.toml(默认使用你给的配置)
|
| 44 |
+
# -------------------------
|
| 45 |
+
: "${CODEX_MODEL_PROVIDER:=sub2api}"
|
| 46 |
+
: "${CODEX_MODEL:=gpt-5.3-codex}"
|
| 47 |
+
: "${CODEX_REASONING_EFFORT:=high}"
|
| 48 |
+
: "${CODEX_NETWORK_ACCESS:=enabled}"
|
| 49 |
+
: "${CODEX_DISABLE_RESPONSE_STORAGE:=true}"
|
| 50 |
+
: "${CODEX_WSL_ACK:=true}"
|
| 51 |
+
: "${CODEX_VERBOSITY:=high}"
|
| 52 |
+
|
| 53 |
+
: "${CODEX_PROVIDER_NAME:=sub2api}"
|
| 54 |
+
: "${CODEX_BASE_URL:=https://ai.qaq.al}"
|
| 55 |
+
: "${CODEX_WIRE_API:=responses}"
|
| 56 |
+
: "${CODEX_REQUIRES_OPENAI_AUTH:=true}"
|
| 57 |
+
|
| 58 |
+
cat > "${CODEX_DIR}/config.toml" <<EOF
|
| 59 |
+
model_provider = "${CODEX_MODEL_PROVIDER}"
|
| 60 |
+
model = "${CODEX_MODEL}"
|
| 61 |
+
model_reasoning_effort = "${CODEX_REASONING_EFFORT}"
|
| 62 |
+
network_access = "${CODEX_NETWORK_ACCESS}"
|
| 63 |
+
disable_response_storage = ${CODEX_DISABLE_RESPONSE_STORAGE}
|
| 64 |
+
windows_wsl_setup_acknowledged = ${CODEX_WSL_ACK}
|
| 65 |
+
model_verbosity = "${CODEX_VERBOSITY}"
|
| 66 |
+
|
| 67 |
+
[model_providers.${CODEX_PROVIDER_NAME}]
|
| 68 |
+
name = "${CODEX_PROVIDER_NAME}"
|
| 69 |
+
base_url = "${CODEX_BASE_URL}"
|
| 70 |
+
wire_api = "${CODEX_WIRE_API}"
|
| 71 |
+
requires_openai_auth = ${CODEX_REQUIRES_OPENAI_AUTH}
|
| 72 |
+
EOF
|
| 73 |
+
|
| 74 |
+
# -------------------------
|
| 75 |
+
# Codex auth.json(只从 Secrets 生成,不要写死到仓库)
|
| 76 |
+
# -------------------------
|
| 77 |
+
if [[ -n "${CODEX_AUTH_JSON:-}" ]]; then
|
| 78 |
+
printf '%s\n' "${CODEX_AUTH_JSON}" > "${CODEX_DIR}/auth.json"
|
| 79 |
+
elif [[ -n "${OPENAI_API_KEY:-}" ]]; then
|
| 80 |
+
cat > "${CODEX_DIR}/auth.json" <<EOF
|
| 81 |
+
{
|
| 82 |
+
"OPENAI_API_KEY": "${OPENAI_API_KEY}"
|
| 83 |
+
}
|
| 84 |
+
EOF
|
| 85 |
+
else
|
| 86 |
+
echo "[WARN] OPENAI_API_KEY / CODEX_AUTH_JSON not found. auth.json not generated."
|
| 87 |
+
fi
|
| 88 |
+
|
| 89 |
+
chmod 600 "${CODEX_DIR}/config.toml" 2>/dev/null || true
|
| 90 |
+
chmod 600 "${CODEX_DIR}/auth.json" 2>/dev/null || true
|
| 91 |
+
|
| 92 |
+
# 若走 /data,软链到 ~/.codex
|
| 93 |
+
if [[ "${CODEX_DIR}" != "${HOME}/.codex" ]]; then
|
| 94 |
+
rm -rf "${HOME}/.codex"
|
| 95 |
+
ln -s "${CODEX_DIR}" "${HOME}/.codex"
|
| 96 |
+
fi
|
| 97 |
+
|
| 98 |
+
echo "[INFO] Java: $(java -version 2>&1 | head -n1 || true)"
|
| 99 |
+
echo "[INFO] Python: $(python --version || true)"
|
| 100 |
+
echo "[INFO] Pip: $(pip --version || true)"
|
| 101 |
+
echo "[INFO] Node: $(node --version || true)"
|
| 102 |
+
echo "[INFO] g++: $(g++ --version | head -n1 || true)"
|
| 103 |
+
|
| 104 |
+
exec code-server "$WORKDIR" \
|
| 105 |
+
--extensions-dir "$EXT_DIR" \
|
| 106 |
+
--user-data-dir "$USER_DATA_DIR" \
|
|
|
|
|
|
|
|
|
|
| 107 |
--disable-telemetry
|