Repository navigation
v1.1.15
修复 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 会抢同一批端口。