#!/command/with-contenv sh # ============================================================================= # s6 cont-init.d / 099-hf-finalize —— 在所有官方 cont-init 之后、s6-rc 服务之前运行 # 职责:注入 Telegram 反代 base_url → 修属主 → 启动 HF Bucket 定时备份 # (telegram.base_url 必须在 gateway 启动前写入 config.yaml,否则 gateway # 读到的是注入前的配置,会直连 api.telegram.org 而 HF 出站不通) # ============================================================================= set -e : "${HERMES_HOME:=/opt/data}" : "${HERMES_UID:=10000}" : "${HERMES_GID:=10000}" : "${HF_BUCKET_REMOTE:=hf://buckets/guntp/hersb}" : "${HF_BUCKET_BACKUP_INTERVAL:=3600}" # ---- 1. 注入 Telegram 反代 base_url(HF Spaces 无法直连 api.telegram.org)---- if [ -n "${TELEGRAM_API_BASE_URL:-}" ]; then PYBIN=/opt/hermes/.venv/bin/python [ -x "$PYBIN" ] || PYBIN=python3 HERMES_HOME="$HERMES_HOME" TELEGRAM_API_BASE_URL="$TELEGRAM_API_BASE_URL" \ TELEGRAM_API_FILE_BASE_URL="${TELEGRAM_API_FILE_BASE_URL:-}" \ "$PYBIN" - <<'PY' 2>&1 || echo "[hf-hermes] telegram base_url 注入失败,继续启动" import os, yaml p = os.path.join(os.environ["HERMES_HOME"], "config.yaml") with open(p) as f: cfg = yaml.safe_load(f) or {} tg = cfg.setdefault("telegram", {}) extra = tg.setdefault("extra", {}) base = os.environ["TELEGRAM_API_BASE_URL"].rstrip("/") extra["base_url"] = base fbase = os.environ.get("TELEGRAM_API_FILE_BASE_URL", "").strip() if not fbase: fbase = base[:-4] + "/file/bot" if base.endswith("/bot") else base extra["base_file_url"] = fbase with open(p, "w") as f: yaml.safe_dump(cfg, f, sort_keys=False, allow_unicode=True) print(f"[hf-hermes] telegram base_url={base} base_file_url={fbase}") PY fi # ---- 2. 修正数据目录属主 ---- chown -R "$HERMES_UID:$HERMES_GID" "$HERMES_HOME" 2>/dev/null || true # ---- 3. 启动 HF Bucket 定时备份(后台循环)---- if [ -n "${HF_TOKEN:-}" ] && [ -x /usr/local/bin/hf ]; then echo "[hf-hermes] 启动定时备份:先立即同步一次,再每 ${HF_BUCKET_BACKUP_INTERVAL}s -> ${HF_BUCKET_REMOTE}" /opt/hermes-hf/hf-bucket-sync.sh || true setsid sh -c " while true; do sleep ${HF_BUCKET_BACKUP_INTERVAL} /opt/hermes-hf/hf-bucket-sync.sh || true done " >/dev/null 2>&1 & fi