mirror of
https://github.com/Yuyi-Oak/BlueArchiveToolkit.git
synced 2026-07-21 22:11:26 +08:00
docs(official-sync): 推荐环境变量配置代理并同步凭据处理说明
- official-resource-test-pull.md §0.1:新增"带凭据代理优先用 HTTPS_PROXY 环境 变量"推荐(含 systemd EnvironmentFile 0600 用法),补充凭据处理说明——日志/ status 脱敏、经 ALL_PROXY 环境变量传 curl、daemon 经环境变量下传、bat-proxy.secret 复用与 clean-stable 清除;修正旧表述"代理参数写入后台子进程启动参数"。 - official-resource-backend.md 第 13 条:把"仅日志脱敏"扩写为全链路凭据不落 世界可读位置。 - CURRENT_STATUS.md 第 7 条:同步上述凭据处理描述。 - deployments/systemd/official-sync.env.example:新增注释版 HTTPS_PROXY/NO_PROXY 示例,并提示含凭据时按 0600 安装。 - CHANGELOG:新增"修复"(Unity 版本数值比较)与"安全"(代理凭据不落世界可读 位置)条目。 对应 issue #18 维护清单 1-1 / 1-2。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -33,6 +33,12 @@
|
|||||||
- 新增 SQLite Resource Repository 和粗粒度 FFI JSON 接口
|
- 新增 SQLite Resource Repository 和粗粒度 FFI JSON 接口
|
||||||
- 补齐官方资源运行、架构、状态、缺口和交接文档
|
- 补齐官方资源运行、架构、状态、缺口和交接文档
|
||||||
|
|
||||||
|
### 修复
|
||||||
|
- 修正 Unity 版本范围比较:改为按 `(major, minor, patch)` 数值比较,`2021.3.9f1` 等带发布后缀的正式版本号不再被字典序误判越界
|
||||||
|
|
||||||
|
### 安全
|
||||||
|
- 代理凭据不再落入世界可读位置:传给 curl 子进程时经 `ALL_PROXY` 环境变量而非 `--proxy` 参数,不进 curl 的 `/proc/<pid>/cmdline`;`--daemon` 模式下代理凭据经环境变量下传后台子进程,不进子进程 argv 或 `bat-status.json`,复用凭据单独存于 `0600` 的 `bat-proxy.secret` 并在 `clean-stable` 后台停止后清除;日志与 `status` 输出对带凭据代理 URL 脱敏(含无 `scheme` 形式);推荐带凭据代理用 `HTTPS_PROXY` 等环境变量配置
|
||||||
|
|
||||||
### 计划
|
### 计划
|
||||||
- [x] 实现 CAS 存储引擎
|
- [x] 实现 CAS 存储引擎
|
||||||
- [x] 实现 Rust 官方资源同步核心链路
|
- [x] 实现 Rust 官方资源同步核心链路
|
||||||
|
|||||||
+1
-1
@@ -20,7 +20,7 @@ Rust 侧官方日服资源链路已经从实验验证推进到正式入口:
|
|||||||
4. 能生成官方全量 pull plan,执行真实下载,维护 release 内的 `official-download-manifest.json`。
|
4. 能生成官方全量 pull plan,执行真实下载,维护 release 内的 `official-download-manifest.json`。
|
||||||
5. 下载后使用本地 manifest 的 size + BLAKE3 校验复用文件;所有 `.zip` 在下载验收、复用、本地 audit/verify 时做 ZIP 结构校验;官方 seed `.hash` 使用标准 `xxHash32(seed=0)` 强校验(早期实现的非标准 avalanche 常量已修正)。
|
5. 下载后使用本地 manifest 的 size + BLAKE3 校验复用文件;所有 `.zip` 在下载验收、复用、本地 audit/verify 时做 ZIP 结构校验;官方 seed `.hash` 使用标准 `xxHash32(seed=0)` 强校验(早期实现的非标准 avalanche 常量已修正)。
|
||||||
6. 支持 `.part` 断点续传、失败后 clean retry、本地 manifest audit/repair、失败 staging 恢复复用、403/404/5xx 分类重试、下载 quarantine 诊断,以及旧 launcher 包官方 primary/backup CDN 切换。
|
6. 支持 `.part` 断点续传、失败后 clean retry、本地 manifest audit/repair、失败 staging 恢复复用、403/404/5xx 分类重试、下载 quarantine 诊断,以及旧 launcher 包官方 primary/backup CDN 切换。
|
||||||
7. 支持 curl 传输层本地代理:默认自动检测 `HTTPS_PROXY` / `ALL_PROXY` / `HTTP_PROXY` 及小写环境变量,可用 `--proxy <URL>` 显式指定代理,也可用 `--no-proxy` 强制直连;代理决策会写入 progress log、daemon log 和 `bat doctor` 诊断输出,带认证信息的代理 URL 会脱敏。
|
7. 支持 curl 传输层本地代理:默认自动检测 `HTTPS_PROXY` / `ALL_PROXY` / `HTTP_PROXY` 及小写环境变量(带凭据的代理推荐用环境变量配置),也可用 `--proxy <URL>` 显式指定或 `--no-proxy` 强制直连;代理决策会写入 progress log、daemon log 和 `bat doctor` 诊断输出。代理凭据不落世界可读位置:日志/`status` 脱敏,传给 curl 经 `ALL_PROXY` 环境变量而非 argv,`--daemon` 下经环境变量下传后台子进程、不进子进程 argv 或 `bat-status.json`,复用凭据存于 `bat-proxy.secret`(`0600`)且 `clean-stable` 会清除。
|
||||||
8. `bat --watch` 可常驻运行,`bat --daemon` 可后台运行并用 `bat status` / `bat stop` / `bat restart` / `bat reload` / `bat logs` 管理;daemon 使用 `bat.sock` Unix socket JSON-RPC 作为 live 控制通道,PID/状态/日志文件作为快照和 fallback,`bat-events.jsonl` 记录带轮转的结构化事件日志,`bat-control.lock` 串行化控制命令;正常检查默认每 1 小时一次;远端和本地一致时默认静默,失败后默认 60 秒快速重试;CLI 默认向 stdout 输出人类可读摘要,向 stderr 输出 ASCII banner、progress log、失败分类和 quarantine 状态,需要机器输出时使用 `--json --no-progress`。
|
8. `bat --watch` 可常驻运行,`bat --daemon` 可后台运行并用 `bat status` / `bat stop` / `bat restart` / `bat reload` / `bat logs` 管理;daemon 使用 `bat.sock` Unix socket JSON-RPC 作为 live 控制通道,PID/状态/日志文件作为快照和 fallback,`bat-events.jsonl` 记录带轮转的结构化事件日志,`bat-control.lock` 串行化控制命令;正常检查默认每 1 小时一次;远端和本地一致时默认静默,失败后默认 60 秒快速重试;CLI 默认向 stdout 输出人类可读摘要,向 stderr 输出 ASCII banner、progress log、失败分类和 quarantine 状态,需要机器输出时使用 `--json --no-progress`。
|
||||||
9. 远端 snapshot 未变化但输出目录为空时,会按首次运行执行全量拉取;官方 seed `.hash` 校验失败时会清理对应 manifest 条目,避免失败产物被后续本地 audit 误判为可复用。
|
9. 远端 snapshot 未变化但输出目录为空时,会按首次运行执行全量拉取;官方 seed `.hash` 校验失败时会清理对应 manifest 条目,避免失败产物被后续本地 audit 误判为可复用。
|
||||||
10. 默认资源目录是 `./bat-resources`,默认后台状态目录是 `/tmp/bat-pid`;资源目录是发布根目录,包含 `current` symlink、`versions/<id>` 和 `.staging/<id>`,非 dry-run 会先写 staging,校验完成后发布 versioned 目录并原子切换 `current`;如果上一轮同一 app version、bundle version 和 Addressables root 的 staging 失败但目录仍安全存在,下一轮会复用该 staging 并按 manifest 逐文件校验/补下载;后台状态目录包含 `bat.sock`、`bat.pid`、`bat-status.json`、`bat-daemon.log`、`bat-events.jsonl` 和短生命周期 `bat-control.lock`;非 dry-run 使用 `--output/.official-sync.lock` 防止并发写同一资源目录,live daemon 会阻止前台写命令直接修改它正在管理的同一目录。
|
10. 默认资源目录是 `./bat-resources`,默认后台状态目录是 `/tmp/bat-pid`;资源目录是发布根目录,包含 `current` symlink、`versions/<id>` 和 `.staging/<id>`,非 dry-run 会先写 staging,校验完成后发布 versioned 目录并原子切换 `current`;如果上一轮同一 app version、bundle version 和 Addressables root 的 staging 失败但目录仍安全存在,下一轮会复用该 staging 并按 manifest 逐文件校验/补下载;后台状态目录包含 `bat.sock`、`bat.pid`、`bat-status.json`、`bat-daemon.log`、`bat-events.jsonl` 和短生命周期 `bat-control.lock`;非 dry-run 使用 `--output/.official-sync.lock` 防止并发写同一资源目录,live daemon 会阻止前台写命令直接修改它正在管理的同一目录。
|
||||||
|
|||||||
@@ -9,3 +9,12 @@
|
|||||||
BAT_OUTPUT_ROOT=/var/lib/bluearchive-toolkit/official
|
BAT_OUTPUT_ROOT=/var/lib/bluearchive-toolkit/official
|
||||||
BAT_INTERVAL=1h
|
BAT_INTERVAL=1h
|
||||||
BAT_ERROR_RETRY=60s
|
BAT_ERROR_RETRY=60s
|
||||||
|
|
||||||
|
# Optional local proxy for curl transfers. Setting a standard proxy environment
|
||||||
|
# variable here is the recommended way to configure a credentialed proxy: bat
|
||||||
|
# auto-detects it and the credential never lands on the command line, process
|
||||||
|
# argv, or any state file. If the proxy URL contains credentials, install THIS
|
||||||
|
# file with mode 0600 (not 0644) so the secret is not world-readable.
|
||||||
|
#
|
||||||
|
# HTTPS_PROXY=http://user:pass@127.0.0.1:7890
|
||||||
|
# NO_PROXY=localhost,127.0.0.1,::1
|
||||||
|
|||||||
@@ -133,7 +133,7 @@
|
|||||||
10. 新下载写入 `.part`,成功并通过必要校验后原子 rename 到 staging 内最终路径;断点续传后的 `.zip` 如果结构无效,会删除 `.part` 并重新全量下载。
|
10. 新下载写入 `.part`,成功并通过必要校验后原子 rename 到 staging 内最终路径;断点续传后的 `.zip` 如果结构无效,会删除 `.part` 并重新全量下载。
|
||||||
11. 成功下载后更新本地下载清单。
|
11. 成功下载后更新本地下载清单。
|
||||||
12. 上一轮失败或中断留下的 staging 只有在 `official-version-state.json` 中存在同一 app version、bundle version 和 Addressables root 的失败记录,且 `<output>/.staging/<id>` 仍安全存在、`versions/<id>` 尚未发布时才会复用;复用后仍按 manifest、BLAKE3、ZIP 结构和官方 `.hash` 逐 URL 校验,不信任散落文件。
|
12. 上一轮失败或中断留下的 staging 只有在 `official-version-state.json` 中存在同一 app version、bundle version 和 Addressables root 的失败记录,且 `<output>/.staging/<id>` 仍安全存在、`versions/<id>` 尚未发布时才会复用;复用后仍按 manifest、BLAKE3、ZIP 结构和官方 `.hash` 逐 URL 校验,不信任散落文件。
|
||||||
13. curl 默认自动检测 `HTTPS_PROXY` / `ALL_PROXY` / `HTTP_PROXY` 及小写环境变量,保留 `NO_PROXY`;CLI 可用 `--proxy <URL>` 显式指定代理,或用 `--no-proxy` 强制直连。代理决策会进入 progress log、daemon log 和 `doctor` 诊断输出,带认证信息的代理 URL 在日志中会脱敏。
|
13. curl 默认自动检测 `HTTPS_PROXY` / `ALL_PROXY` / `HTTP_PROXY` 及小写环境变量,保留 `NO_PROXY`;带凭据的代理推荐用这些环境变量配置。CLI 也可用 `--proxy <URL>` 显式指定代理,或用 `--no-proxy` 强制直连。代理决策会进入 progress log、daemon log 和 `doctor` 诊断输出。代理凭据全程不落世界可读位置:日志与 `status` 输出脱敏;传给 curl 子进程时经 `ALL_PROXY` 环境变量而非 `--proxy` 参数,不进 curl 的 `/proc/<pid>/cmdline`;`--daemon` 模式下经环境变量下传后台子进程,不进子进程 argv 或 `bat-status.json`,复用凭据单独存于 `bat-proxy.secret`(`0600`),`clean-stable` 会在后台停止后清除。
|
||||||
14. curl 失败按 HTTP/网络类型分类:403/404/普通 4xx 不重试,5xx、429、DNS、连接、超时、中断和网络类错误按尝试次数重试。
|
14. curl 失败按 HTTP/网络类型分类:403/404/普通 4xx 不重试,5xx、429、DNS、连接、超时、中断和网络类错误按尝试次数重试。
|
||||||
15. 单个 URL 最终失败时写入 `official-download-quarantine.json`,发出 Failed progress,并阻止发布不完整资源。
|
15. 单个 URL 最终失败时写入 `official-download-quarantine.json`,发出 Failed progress,并阻止发布不完整资源。
|
||||||
16. 旧 launcher 包或 `resources.assets` 下载使用官方 launcher CDN 配置,primary CDN 失败后切换 official backup CDN;资源 patch host 不猜测非官方镜像。
|
16. 旧 launcher 包或 `resources.assets` 下载使用官方 launcher CDN 配置,primary CDN 失败后切换 official backup CDN;资源 patch host 不猜测非官方镜像。
|
||||||
|
|||||||
@@ -53,7 +53,15 @@ target/release/bat \
|
|||||||
|
|
||||||
`bat` 默认会自动读取当前进程环境中的 curl 代理变量:`HTTPS_PROXY`、`https_proxy`、`ALL_PROXY`、`all_proxy`、`HTTP_PROXY`、`http_proxy`,并保留 `NO_PROXY` / `no_proxy`。同步开始时会输出一条 `proxy` 进度日志;`bat doctor` 也会显示当前代理解析结果。
|
`bat` 默认会自动读取当前进程环境中的 curl 代理变量:`HTTPS_PROXY`、`https_proxy`、`ALL_PROXY`、`all_proxy`、`HTTP_PROXY`、`http_proxy`,并保留 `NO_PROXY` / `no_proxy`。同步开始时会输出一条 `proxy` 进度日志;`bat doctor` 也会显示当前代理解析结果。
|
||||||
|
|
||||||
手动指定本地代理:
|
**推荐:带凭据的代理优先用环境变量。** 如果代理 URL 里含有用户名/密码,优先通过标准代理环境变量配置,而不是命令行参数:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
HTTPS_PROXY=http://user:pass@127.0.0.1:7890 target/release/bat --auto-discover
|
||||||
|
```
|
||||||
|
|
||||||
|
生产环境用 systemd 时,把该变量写进 `EnvironmentFile=`(建议 `0600`),凭据就不会进入 shell 历史、`ps`、进程 argv 或任何状态文件。这是配置带凭据代理最简单也最安全的方式。
|
||||||
|
|
||||||
|
也可以用 `--proxy` 参数手动指定(无凭据的本地代理用这个最方便):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
target/release/bat \
|
target/release/bat \
|
||||||
@@ -75,7 +83,11 @@ target/release/bat \
|
|||||||
target/release/bat doctor --proxy http://127.0.0.1:7890
|
target/release/bat doctor --proxy http://127.0.0.1:7890
|
||||||
```
|
```
|
||||||
|
|
||||||
`--proxy auto` 会恢复默认环境变量自动检测;`--proxy none`、`--proxy direct`、`--proxy off` 和 `--proxy disabled` 等价于 `--no-proxy`。如果用 `--daemon` 启动并显式传入代理参数,该参数会写入后台子进程启动参数,后续 `restart` / `reload` 复用同一配置。代理只影响 curl 传输层,资源 URL 仍必须是官方域名;不要把代理配置成镜像、转写或非官方资源来源。
|
`--proxy auto` 会恢复默认环境变量自动检测;`--proxy none`、`--proxy direct`、`--proxy off` 和 `--proxy disabled` 等价于 `--no-proxy`。
|
||||||
|
|
||||||
|
**凭据处理**:无论用环境变量还是 `--proxy` 参数,代理凭据都不会以明文出现在世界可读的位置——日志和 `status` 输出中会脱敏;传给 curl 子进程时经 `ALL_PROXY` 环境变量而非 `--proxy` 参数,因此不落 curl 的 `/proc/<pid>/cmdline`;`--daemon` 模式下代理凭据经环境变量下传后台子进程,不进入子进程 argv 或 `bat-status.json`,复用所需的凭据单独存于后台状态目录下的 `bat-proxy.secret`(`0600`),`clean-stable` 会在后台停止后清除它。后续 `restart` / `reload` 会复用同一代理配置;若该凭据文件已被清除,复用型 `restart` 会明确报错要求重新传入代理。
|
||||||
|
|
||||||
|
代理只影响 curl 传输层,资源 URL 仍必须是官方域名;不要把代理配置成镜像、转写或非官方资源来源。
|
||||||
|
|
||||||
## 1. 当前流程
|
## 1. 当前流程
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user