mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-11-05 08:47:27 +00:00
fix(update): 统一 dataDir 推导,三端共用 update.ResolveDataDir
范围说明:本 commit 与 H1 属同一缺陷的另一面。Apply 现在会拒绝空
dataDir,而三端各自的推导逻辑此前会**真的返回空**(或写死生产路径),
不一起改则 H1 会把所有升级都拒掉、或让 pending 落到内核读不到的地方。
三处原来的推导:
· cmd/homed-upgrade/main.go env → 写死 /home/newqqagent
· pluginmgr/kernel_update.go env → Dir(pluginDir)
· webui/kernel_update.go env → 空(由调用方报错)
问题:① 硬编码 /home/newqqagent 在目录/用户迁移后指向不存在的路径;
② 从 pluginDir 反推与 webui 侧不一致,同一台机器两条升级通道算出
两个 dataDir ⇒ 标记落在 A、第 0 层 update 从 B 读 ⇒ 升级启动
失败时静默不回滚(症状是崩溃循环,极难反查到标记)。
现在三端统一调用 update.ResolveDataDir(exePath):
① HOMEAGENT_DATA_DIR(部署方显式声明,唯一可靠来源)
② <exe 所在目录>/data 兜底(替代原先的硬编码生产路径)
并删掉 cmd/homed-upgrade 里写死的 /home/newqqagent。
本 commit 可单独回退:回退后仅剩「各端自己推导」,与 H1 组合会退化为
「空 dataDir 一律拒绝升级」(安全侧失败,不会产生无回滚能力的升级)。
This commit is contained in:
@ -42,20 +42,17 @@ import (
|
||||
)
|
||||
|
||||
// fail 打印错误并以非零退出(CLI 专属;库内部一律返回 error)。
|
||||
// upgradeDataDir 推导数据目录(升级确认标记的落点)。
|
||||
// upgradeDataDir 推导数据目录(升级确认标记 / 备份的落点)。
|
||||
//
|
||||
// 与生产一致:内核按 `--data <dir>` 运行,标记必须落在同一个 dataDir 下,
|
||||
// 否则 update 模块读不到它。推导规则:
|
||||
// 否则 update 模块读不到它。
|
||||
//
|
||||
// ① 环境变量 HOMEAGENT_DATA_DIR(部署方显式指定)
|
||||
// ② 二进制同级的 ../newqqagent(/usr/local/bin/homed → /home/newqqagent)
|
||||
// —— 太脆弱,改为最常见的部署形态:/usr/local/bin/homed → /home/newqqagent
|
||||
// ③ 退回 /home/newqqagent(本仓默认部署路径)
|
||||
// ★ 三端共用 update.ResolveDataDir(CLI / WebUI / agent 工具),
|
||||
// 不再在这里写死 /home/newqqagent:硬编码在生产目录迁移后会让标记和备份
|
||||
// 落到一个**不存在的路径**,而第 0 层 update 从真实的 --data 读 ⇒ 永远
|
||||
// 读不到 ⇒ 升级失败时静默不回滚(2026-10-26 迁移教训)。
|
||||
func upgradeDataDir(binPath string) string {
|
||||
if d := strings.TrimSpace(os.Getenv("HOMEAGENT_DATA_DIR")); d != "" {
|
||||
return d
|
||||
}
|
||||
return "/home/newqqagent"
|
||||
return update.ResolveDataDir(binPath)
|
||||
}
|
||||
|
||||
func fail(format string, a ...interface{}) {
|
||||
|
||||
Reference in New Issue
Block a user