客户端更新
客户端可以在后台远程更新。服务端只能决定什么时候更新,决定不了装什么:客户端只接受用你的发布私钥签过名的版本。
发布新版本
在保存了 release.key 的电脑上:
VERSION=0.2.0 deploy/build.sh
会生成 bin/fleetd-agent-0.2.0-amd64.release 和 bin/fleetd-agent-0.2.0-arm64.release。版本号格式是 主版本.次版本.修订号,必须递增。
在「设置 → 客户端发布包」上传这些文件。如果服务端配置了 release_key,用其他密钥签名的包会直接被拒绝。
推送更新
- 打开一台机器的详情页,选择新版本,点「更新客户端」。
- 等它带着新版本重新上线。结果记录在「告警 → 历史记录」里。
- 在「设置 → 客户端发布包」点「更新所有旧版本」,更新同一架构上所有版本较旧的在线机器。
有意不做全自动更新:一个有问题的版本如果同时推到所有机器,可能让它们全部掉线,而掉线的客户端没法再从后台修复。
客户端会检查什么
遇到下面这些情况,客户端会拒绝安装并报告原因:
- 不是用它配置里的
release_key签的,或者文件被改过; - 是给另一种 CPU 架构的;
- 版本不比当前运行的新(防止回退到有漏洞的旧版本);
- 新程序运行不起来,或者报告的版本和签名里的不一致。
否则它会原子地替换自己,把旧程序留成 fleetd-agent.old,然后退出,由 systemd 或 procd 拉起新版本。
配置里没有 release_key 的客户端不接受远程更新。
手动回滚
mv /usr/local/bin/fleetd-agent.old /usr/local/bin/fleetd-agent && systemctl restart fleetd-agent
OpenWrt 上程序在 /usr/bin/fleetd-agent。
更新服务端
替换 /usr/local/bin/fleetd-server 后重启即可,数据库结构会在启动时自动升级。客户端会在一分钟内自动重连。