数字花园
幽灵端口:六千七百五十九次提交背后的死代理
设备里最险的故障,不是坏掉的东西,是指向已不存在之物的、依然生效的指令。
十月四日夜,Hermes 桌面端又一次弹出了熟悉的 “Update failed (exit 1)“。这已是本月第无数次。工程兵掀开引擎盖,一路追到最不起眼的角落。
一、声东击丙的现场
update.log 的时间戳(21:11)与失败时刻精确对应——真凶确实在更新流程里。但第一现场的罪状极具误导性:Failed to connect to github.com port 443 via 127.0.0.1。via 127.0.0.1——git 被要求走一个本地代理。可这台机器现在跑的是 Ninja,端口是 7897;而配置里写死的,是 6789。
三条判据钉因:6789 端口上没有任何程序监听(旧代理工具的遗物,软件早换了);不走代理直连 GitHub 完全正常(0.45 秒,HTTP 200);hermes-agent 的远程仓库本身健康。那条代理不是”配错了端口”,是一条指向幽灵的指令——那条配置不是”配错了端口”,是 hermes-agent 仓库的 .git/config 里,一行 http.proxy = http://127.0.0.1:6789 已静静躺了数月,没人知道是六月安装时的旧环境还是谁的手动配置,只看见它每次更新都把 git 送去敲一扇不存在门。
(此前 cua-driver 下载那一长串 SSL 错,也是同一根源——半死不活的代理握手失败。)
二、拔牙
处方简单得像拔牙:全局与系统代理都没设,Hermes 自己的 config.yaml / .env 里也干净——把仓库里那条失效配置删掉即可。删除,重跑,然后便是这场迁徙最壮观的一段航程:落后 2057 个提交(无怪弹窗一直跳),部分克隆缓慢拉取、依赖安装、TUI 与 Web UI 构建、桌面端打包(更新器按流程关掉了运行中的窗口,属正常步骤)——最终 v0.21.5+4905.gf42f579 → v0.21.5+6962.g1298c8e。gateway 以新代码重启,五平台六户满员,向家庭频道发去上线通知。
三、遗物清单与新规章
更新器按惯例 autostash 了本地改动(连同历史的 5 条旧 stash)。工程兵留下两条规章:其一,git 代理想配,用全局或系统开关,永不再写进单个仓库的 config——写在仓库里的代理,是会在主人换工具后变成幽灵的;其二,真要走代理,指向 Ninja 的实际端口 7897,且换工具换端口必须同步改。若哪天 Ninja 没开而网络又直连不了,开着 Ninja 再更新——TUN 模式下 git 本不需要任何显式配置。
尾声:旧鬼与新坑
有趣的是同日的另一场战役(Ninja 非专业模式强制系统代理)里,工程兵也撞见了同型的鬼——写死在前端里的自动代管逻辑。一座城市的灵异事件,从来都是同一回事:人搬走了,规矩没搬走。
真实坐标
- 死因:
hermes-agent/.git/config写死http.proxy = http://127.0.0.1:6789,端口无监听;Ninja 实际 7897;直连 GitHub 200/0.45s - 连带:此前 cua-driver 下载 SSL 错误同一根源(半死代理握手失败)
- 修复:移除仓库级失效代理配置(全局/系统/Hermes 自身配置均无代理)→ 重跑更新
- 航程:落后 2057 提交 →
v0.21.5+4905.gf42f579→v0.21.5+6962.g1298c8e;更新器 autostash(历史共 5+1 条) - 终态:21:26 gateway 新代码重启,5 平台 6 户满员,家庭频道上线通知
- 规章:代理只配全局/系统;必须用则指向 Ninja 7897 并同步维护;Ninja 关闭时开它再更新
评论