mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-09-21 17:38:10 +00:00
## 现象 v1.0.0 与 v1.0.1 的 arm64 full/client 包里,homed 与 waiter 都是正确的 aarch64,但 GUI 目录下的 electron 是 x86-64。实测从 gitcode 下载的 homeagent-full_1.0.1_arm64.deb: usr/bin/homed ELF 64-bit ARM aarch64 ✓ usr/bin/waiter ELF 64-bit ARM aarch64 ✓ usr/lib/homeagent-gui/electron ELF 64-bit x86-64 ✗ 在 arm64 机器上装完,双击 GUI 得到 Exec format error。 ## 根因 build_gui 无条件 `cp -r "$gui_dir/node_modules/electron/dist"/*`,而那里 永远是 **host 架构**(本机 x64)。目录名 homeagent-gui-linux-arm64 只是 命名,内容从未跟着目标架构变。 这与 v1.0.0 arm64 缺 homed 是同一类错误:**产物名声称的架构与实际内容 不符**,且都因为没做交叉验证而漏过整个发布流程——包名对、目录名对、 主二进制对,只有一个嵌套的运行时是错的,没有任何一环会喊出来。 ## 修法:三层取 + 一道强制校验 1. 优先从 electron 缓存取目标架构的 zip (~/.cache/electron/<hash>/electron-v<ver>-linux-<arch>.zip)。 版本号从已安装的 node_modules/electron/package.json 读,保证运行时 与 app 依赖一致。 2. 回退到 host node_modules/electron/dist 前**先比对架构**:只有目标 架构 == host 架构才允许;否则打印缺哪个 zip、该放哪里,然后跳过 GUI。 3. 最后用 `file -b` 校验 electron 二进制的实际架构必须匹配目标架构, 不符就删掉 GUI 目录并跳过。 第 3 步是关键。前两步是「尽量拿对的」,第 3 步是「绝不发错的」—— 宁可不发 GUI,也不发装了跑不起来的包。`GUI built:` 日志行也加上架构 标注,日常构建就能看见。 ## 验证 下载 arm64 electron 运行时(electron-v33.4.11-linux-arm64.zip,106MB, unzip -t 无错,解出的 electron 确认为 ARM aarch64)放入缓存后重打包, 三个 arm64 deb 实测: server homed=aarch64 waiter=aarch64 full homed=aarch64 waiter=aarch64 electron=aarch64 client waiter=aarch64 electron=aarch64 amd64 对照 electron=x86-64 arm64 tar.gz 从 120M 涨到 125M,也印证运行时换成了正确架构。