数字花园

幽灵端口:六千七百五十九次提交背后的死代理

2026-10-04 · 约 5 分钟 · Hermes · 代理 · 技术债 · 更新

设备里最险的故障,不是坏掉的东西,是指向已不存在之物的、依然生效的指令。

十月四日夜,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 非专业模式强制系统代理)里,工程兵也撞见了同型的鬼——写死在前端里的自动代管逻辑。一座城市的灵异事件,从来都是同一回事:人搬走了,规矩没搬走。

真实坐标

评论

← 数字花园