29cf67154a
基于 v46 正式版(mt76)只恢复 UI 层: - luci-theme-argon 2.4.3: local-background-wins 登录页 + bg1.jpg fallback - luci-app-argon-config: 去 ui.changes.apply, ACL mutator 移 write - luci-app-wgtunnel: rpcd ucode 后端(get/status/prepare/apply/rollback/reconnect), JSONMap 前端, 60s 一次性 token, 快照回滚, 无全局 network ACL - luci-app-tr3000-status: 只读 rpcd ucode + 5s 轮询仪表盘 - tools/: audit_ui_packages.py + install_preview.sh + rollback_watchdog.sh - docs/: 开发经历与翻车记录 + 固件哈希记录 固件本体(含烤入 WG 私钥/PSK)不入 git, 仅 K 盘保存. kernel 成员与 v46 byte-identical; 尚未刷机.
Link Health 插件修正(离线版)
范围
本次离线变更只覆盖 luci-app-tr3000-status:
- 后端只读探测与三态语义
- 前端显示与轮询
- 静态审计、合成 fixture、安装/回滚脚本
- 文档
明确不做:
- 不改
/etc/config/networkfirewalldhcpwireless - 不动
rc.local、VXLAN/MSS hotplug、nft include - 不操作 WG/VXLAN 隧道、MTU、kill switch、MSS
- 不重载
networkfirewallwireless - 不登录或修改办公室 OpenWrt
192.168.1.1 - 不替换
libcrpcducodenetifdfw4mt76kmod-*等核心包
变更摘要
后端
luci.tr3000_status的get现在返回schema_version: 2。- 新增字段:
wireguard.interface_up∈{true, false, null}vxlan.invariants.{master_ok, mtu_ok, vni_ok, port_ok, nolearning_ok, local_ok, remote_ok}vxlan.all_invariants_okacceleration.*.status∈{enabled, enabled_unverified, disabled, disabled_by_design, unavailable, healthy, ok, degraded}summary.{ok, status, wg_ok, link_ok, route_ok, vxlan_ok, invariant_ok, wg_status}
- 探测命令统一为只读
ip -j+nft -j,不再使用目标 query 语法。 - 移除
wg show wg0 dump。 - “按设计禁用” (flowtable / HNAT / WARP / full-cone / masquerade) 不再误报为
unavailable,而是disabled_by_design。
前端
- 三态徽章:
Pass/Fail/Unknown。 - 顶栏新增
summary.status总览徽章。 - 加速卡标题改为
Data path & TCP。 - 删掉原先的
wg0:fail重复摘要。 - “Active interfaces” 在 link JSON 不可用时显示
Unavailable,不再显示误导性的0 / 2。
审计
tests/audit_tr3000_status.py:- 禁止模式:
wg dump、ifup/ifdown、ip link set、uci set/commit、network/firewall/wifi restart、reload、fs.exec/fs.write/fs.remove/fs.mkdir、writefile/unlink/rename、敏感 key literal、MAC literal。 - 强制包含的只读命令、ACL 仅
get、菜单依赖luci-app-tr3000-status、Makefile 依赖项。 - 当前结果:
OK: luci-app-tr3000-status passes static audit。
- 禁止模式:
合成 fixture
tests/fixtures/12 份期望,覆盖:all_healthywg_interface_downwg_stale_handshakeroute_missingvxlan_missingvxlan_wrong_vninft_unavailableno_hwmonip_unavailablemalformed_jsonmss_missingdesign_invariant_violation
安装与回滚
tests/install_preview.sh:仅升级luci-app-tr3000-status;备份/etc/config/*与 hotplug;opkg install --force-reinstall;仅rpcd+uhttpdreload;调用ubus call luci.tr3000_status get冒烟。tests/rollback_preview.sh:根据prev_version还原。tests/verify_immutable.sh:升级前后必须维持 v46 frozen hash。
待执行(受工具限制暂未跑)
scp同步源码到 build serverpackage/custom/luci-app-tr3000-status。- build server 重新编译
luci-app-tr3000-statusIPK。 - 把 IPK 与 frozen hash 拉到本机。
- 在路由器执行
install_preview.sh,记录ubus call luci.tr3000_status get完整输出。 - 在路由器执行
verify_immutable.sh,确认零漂移。 - 浏览器强制刷新
/admin/status/tr3000,记录截图。 - 若
summary.status≠healthy或不可变文件 hash 漂移,执行rollback_preview.sh。
风险
- 升级期间若
rpcd重启瞬间有浏览器轮询,理论上会造成一次 RPC 失败;前端L.resolveDefault(callStatus(), {})已吞掉此失败。 - 若
install_preview.sh备份脚本因权限或 BusyBox 限制失败,需要先解决再继续;不要在没有 backup 的情况下继续。
不变项
- v46 frozen network/firewall/dhcp/wireless、rc.local、hotplug、MSS 1330、br-lan master、wg0/WG 路线、VXLAN 10/4789/nolearning/MTU 1500、kill switch 均不修改。