From b1eb86038a30a14a67bbc759e3aa1b269ec3db38 Mon Sep 17 00:00:00 2001 From: Arvin <62139570+wnlen@users.noreply.github.com> Date: Thu, 25 Jun 2026 10:34:57 +0800 Subject: [PATCH] Skip GEO predownload by default --- README.md | 4 +- scripts/core/runtime.sh | 2 +- scripts/dev/check-geo-predownload-toggle.sh | 62 +++++++++++++++++++++ 3 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 scripts/dev/check-geo-predownload-toggle.sh diff --git a/README.md b/README.md index 521fa07..6f7c40c 100644 --- a/README.md +++ b/README.md @@ -293,15 +293,17 @@ MIHOMO_DOWNLOAD_BASE=https://github.com/MetaCubeX/mihomo/releases/download CLASH_DOWNLOAD_BASE=https://github.com/WindSpiritSR/clash/releases/download CLASH_BUNDLED_ASSET_ENABLED=true CLASH_SHELL_AUTO_RESTORE_PROXY=true +CLASH_PREDOWNLOAD_GEO=false ``` 按需设置即可,不需要每项都写。 - `CLASH_SHELL_AUTO_RESTORE_PROXY`:控制登录 Shell 是否自动恢复上次 `clashon` 写入的代理变量。默认 `true` 保持兼容;如果不希望 SSH 远程登录后自动带上 `http_proxy` / `https_proxy`,设为 `false`,之后仍可手动执行 `clashon`。 +- `CLASH_PREDOWNLOAD_GEO`:控制安装期是否预下载 GEO 数据。默认 `false`,临时部署时不会下载 `Country.mmdb`、`geoip.metadb`、`GeoIP.dat`、`GeoSite.dat` 等大文件;如果希望离线预置这些资源,可设为 `true`。注意:当最终运行配置实际使用 `GEOIP` 规则时,启动前仍会按需准备 `Country.mmdb`,否则 Mihomo 无法可靠加载该配置。 #### GitHub 下载加速 -所有来自 GitHub 的资源(内核、GEO 数据、yq、subconverter、Dashboard)在下载时会自动尝试内置镜像池(`gh-proxy.org`、`ghfast.top`、`ghproxy.net`、`kkgithub.com`),无需额外配置即可加速。 +所有来自 GitHub 的资源(内核、按需 GEO 数据、yq、subconverter、Dashboard)在下载时会自动尝试内置镜像池(`gh-proxy.org`、`ghfast.top`、`ghproxy.net`、`kkgithub.com`),无需额外配置即可加速。 如果默认镜像不满足需求,可在 `.env` 中指定自定义加速前缀: diff --git a/scripts/core/runtime.sh b/scripts/core/runtime.sh index f1ef115..dd18c10 100644 --- a/scripts/core/runtime.sh +++ b/scripts/core/runtime.sh @@ -14,7 +14,7 @@ GEO_ASSET_DOWNLOADS=( ) resolve_geo_assets() { - case "${CLASH_PREDOWNLOAD_GEO:-true}" in + case "${CLASH_PREDOWNLOAD_GEO:-false}" in 0|false|no|off|disable|disabled|FALSE|NO|OFF) return 0 ;; esac diff --git a/scripts/dev/check-geo-predownload-toggle.sh b/scripts/dev/check-geo-predownload-toggle.sh new file mode 100644 index 0000000..03baf48 --- /dev/null +++ b/scripts/dev/check-geo-predownload-toggle.sh @@ -0,0 +1,62 @@ +#!/usr/bin/env bash +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PROJECT_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)" + +# shellcheck source=scripts/core/runtime.sh +source "$PROJECT_DIR/scripts/core/runtime.sh" + +tmp_dir="$(mktemp -d)" +trap 'rm -rf "$tmp_dir"' EXIT + +RUNTIME_DIR="$tmp_dir/runtime" +RESOURCE_DIR="$tmp_dir/resources" +mkdir -p "$RUNTIME_DIR" "$RESOURCE_DIR" + +download_log="$tmp_dir/downloads" +copy_log="$tmp_dir/copies" +: > "$download_log" +: > "$copy_log" + +copy_bundled_asset() { + printf '%s\n' "$*" >> "$copy_log" + return 1 +} + +download_file() { + local url="$1" + local out="$2" + local asset_name="$3" + + printf '%s %s %s\n' "$asset_name" "$url" "$out" >> "$download_log" + mkdir -p "$(dirname "$out")" + printf 'mock\n' > "$out" +} + +assert_download_count() { + local name="$1" + local expected="$2" + local actual + + actual="$(wc -l < "$download_log" | tr -d ' ')" + if [ "$actual" != "$expected" ]; then + echo "not ok - $name: got $actual downloads, expected $expected" >&2 + sed 's/^/ /' "$download_log" >&2 + return 1 + fi + + echo "ok - $name" +} + +unset CLASH_PREDOWNLOAD_GEO +resolve_geo_assets +assert_download_count "default skips install-time GEO predownload" 0 + +: > "$download_log" +CLASH_PREDOWNLOAD_GEO=false resolve_geo_assets +assert_download_count "explicit false skips install-time GEO predownload" 0 + +: > "$download_log" +CLASH_PREDOWNLOAD_GEO=true resolve_geo_assets +assert_download_count "explicit true predownloads GEO assets" 5