跳转至

KaliOS 机队管理平台

面向 KaliOS 设备的云端后台:设备心跳 / 配置 OTA / 状态地图 / 设备管理 / 远程操作。 设计取向:服务端零依赖、设备端拉取式(设备不需要 VPN 入网)。

架构

组件 位置 说明
控制台 fleet-server.py Python stdlib 单文件,无第三方依赖;官网 + 控制台 + API + 设备端接口都在里面
设备端 agent/ fleet-agent,拉取式上报与 OTA(≥ 1.16 推荐)
官网 www/ 对外展示页

拉取式是关键设计:设备只自己往外连,不要求公网可达、不需要 VPN —— 量产设备开箱即可上报。

云端拓扑

:80    fleet-server(systemd: fleet-server)   官网 + 控制台 + API
:8899  kalios-forward(80 → 8899 转发)
:8891  gcode 静态站(纯 http.server,挂 /opt/gcode-patterns)
  • 生产目录:ECS /opt/kalios/,FLEET_HOME=/opt/kalios,EnvironmentFile=/opt/kalios/env,MemoryMax=1G
  • ECS 环境:Alibaba Cloud Linux 4 · Python 3.11.6 · 2 核 / 1.7 GB

配置 OTA 机制

机制 说明
清单 云端 manifest.json + config-releases/ 保存全员配置基准
per-host 设备 GET /manifest.json?host=…,按主机名取配置
gate 配置版本门槛,未达标强制同步
版本要求 agent ≥ 1.16 才有 per-host / gate;1.9 等老版本只能用旧版全局 OTA

设备侧开关:/etc/kalios/fleet-agent.env 里的 FLEET_SKIP_OTA。 临时对齐云端配置:

FLEET_SKIP_OTA=0 kalios-fleet-agent --once --ota-only

远程重刷 MCU

  • 入口:/usr/local/bin/kalios-reflash-mcu(agent 1.17+ 可云端拉取)
  • Katapult 板走 lib/katapult/flashtool.py
  • ⚠️ out/klipper.bin 的 MCU 型号必须与目标板一致 —— 曾出现 bin 编的是 H723、板子是 F407,刷写直接拒绝

金镜像流程(量产)

  1. 样机 bake:写入 firstboot + PLACEHOLDER_HOST + /etc/kalios/site.env 模板 (agent/golden-image/bake-into-image.sh)
  2. 封镜像前清掉 firstboot.done 与主机身份 —— 否则所有量产机共用一台机的主机名
  3. 从 eMMC/TF 导出镜像 → 需要时 shrink
  4. 烧录验证:上电后能上报、云端地图可见

验收要点:主机名应为 firstboot 生成的 kali-*,不是样机旧名。

运维坑

坑 现象 正解
官网 303 本地隔离实例 / 跳到 /console 官网读 $FLEET_HOME/www/index.html,隔离目录里要 cp -r www 进去
读密码取不到 .admin-password 解析失败 内容是「用户名制表符密码」,要按 \t split
部署覆盖 直接覆盖线上文件 改前必须 cp xxx.bak.$(date +%Y%m%d%H%M%S)
本机与云端不同源 本机 8899 跑的是旧版 35 KB,云端是 275 KB 新版 核对文件指纹(md5/sha256)再判断"是不是同一份代码"

🔐 凭据一律不写进仓库、文档与镜像日志(FLEET_TOKEN、密码等)。

相关