Skip to content

fix: 校验控制面板更新结果#5193

Open
eyaeya wants to merge 1 commit into
vernesong:devfrom
eyaeya:codex/dashboard-update-atomic
Open

fix: 校验控制面板更新结果#5193
eyaeya wants to merge 1 commit into
vernesong:devfrom
eyaeya:codex/dashboard-update-atomic

Conversation

@eyaeya

@eyaeya eyaeya commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

背景

更新 Zashboard / Metacubexd 控制面板时,当前脚本只校验 zip 可解压以及预期顶层目录存在;复制到最终目录后没有验证 index.html 和入口静态资源是否完整。这样在以下场景中可能出现“日志显示下载成功,但控制面板无法正常访问”:

  • 304 / ETag 命中时,仅因目标目录存在就直接返回成功,即使目录已经残缺;
  • zip 内容缺少入口文件或入口引用的 JS/CSS 资源时仍可能进入成功路径;
  • 先删除旧面板再复制新面板,复制失败或中断可能破坏已有可用面板。

现场验证显示当前远端 zashboard/metacubexd 包本身层级正常,但 OpenClash 的成功判定和替换流程存在通用健壮性问题,不是单台路由器环境特有问题。

修改

  • 新增面板目录校验:要求 index.html 存在,并校验其本地 src / href 引用的 JS/CSS 文件非空;同时要求至少发现并验证一个本地 JS 入口。
  • 304 未更新路径也复用面板目录校验,避免残缺目录被误报为成功。
  • 下载解压先进入 staging 目录,校验通过后再在目标父目录内切换新旧目录,失败时保留/恢复旧面板。
  • 清理下载临时文件和本次 staging 目录,避免历史残留污染下一次更新。
  • 新增脚本级回归测试,覆盖残缺 304、缺 index.html、缺入口资源、单双引号引用、单行多资源引用、正常 Zashboard / Metacubexd 安装和 staging 目录位置。

验证

  • bash tests/openclash_download_dashboard_test.sh
  • bash -n luci-app-openclash/root/usr/share/openclash/openclash_download_dashboard.sh
  • bash -n tests/openclash_download_dashboard_test.sh
  • git diff --check -- luci-app-openclash/root/usr/share/openclash/openclash_download_dashboard.sh tests/openclash_download_dashboard_test.sh
  • 下载并检查当前 Dashboard / Yacd / Zashboard / Metacubexd 六个远端包,均包含可被新校验识别的本地 JS 入口。
  • OpenWrt 0.47.110 环境用临时脚本验证:Zashboard 和 Metacubexd Official 更新均返回 0,index.html md5 未变化,无 .openclash_dashboard_* 残留,关键静态资源 HTTP 200。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant