Skip to content

v1.1.15

Choose a tag to compare

@phenix3443 phenix3443 released this 11 Sep 10:15
· 2 commits to master since this release
f58734a

修复 v1.1.14 的自动升级链路,并加入控制台下发目标版本的能力。

为什么紧接着发

v1.1.14 里「控制台下发版本」这条链路根本不通:target_version 只加进了 JSON DTO,而节点拉配置时无条件请求 protobuf(setProtobufResponseAccept),所以它永远读不到——控制台显示已下发、库里也存了,节点却什么都不做,且没有任何日志能看出为什么。

本版包含

接受控制台下发的目标版本:proto 补 target_version = 10(与 ppanel-server 字段号一致),拉配置时读到且与当前不同就切过去。判据是「不等」不是「更新」——新版出问题要能回退,回退和升级走同一条路。

先验证再替换:下载后先跑一次 version,确认能执行且自报版本就是目标版本,通过才动现役二进制并留 .bak。回滚在这个场景不可靠——节点起不来就拉不到配置,也就再也收不到「换回去」的指令。先验证能挡住架构不匹配(armv6 拿到 v7a 包会 SIGILL)和资产损坏。

失败指数退避(1 分钟起、30 分钟封顶),而不是「只试一次」——后者会被一次网络抖动永久钉死,清空期望版本再设回同一个值也不重试。

ppanel-node upgrade 命令:--check / 指定版本 / --restart / --repo。

三个会静默出事的修复

  • ProtectSystem=strict 只放行 /var/log:自升级必然 EROFS,而且 ACME 证书目录也只读——TLS 节点会在证书到期后突然挂掉。cert.go 的证书目录还是大写 /etc/PPanel-node,一并改小写。
  • systemctl restart 重启自己会被 systemd 连同 cgroup 一起杀掉,err 恒为 signal: terminated——重启其实成功却永远报失败。改用 --no-block。
  • Replace 缺 fsync:rename 元数据原子但数据落盘不是,写完 rename 立刻掉电会在目标路径留下 0 字节文件。

install.sh

下载源改指本仓库(原来写死上游,ppnode update 只会装回缺 REALITY 修复的版本);服务名和路径统一小写,并显式清理老的大写 PPanel-node.service——否则升级后两个 unit 会抢同一批端口。