新闻详情

新闻详情

首页 / 资讯中心 / 详情

Fleetd 开发与发布策略:Fleet 开源项目如何通过 TUF 自动更新保障前后兼容

发布时间:2026/9/20 14:07:39来源:尧图网络
Fleetd 开发与发布策略:Fleet 开源项目如何通过 TUF 自动更新保障前后兼容
后端前端企业应用运维网络安全【免费下载链接】fleetOpen device management项目地址https://gitcode.com/GitHub_Trending/fl/fleet点击查看免费下载本文基于 Fleet 仓库中的 fleetd 开发与发布策略 展开阐述 fleetdOrbit、Fleet Desktop 与 osqueryd 等设备端组件与 Fleet 服务器之间截然不同的更新机制以及由此衍生出的强制兼容性规则与发布流程。读完本文你将理解为何“新 fleetd 版本必须始终兼容旧 Fleet 服务器”是硬性要求掌握 fleetd 发布到 TUF 仓库、从 edge 提升到 stable、以及处理不支持旧 fleetd 场景时发布说明的写法。fleetd 与 Fleet 服务器两种截然不同的更新模型在 Fleet 生态中“fleetd”指部署在终端设备上的全部组件集合主要包括Orbit轻量级 osquery 安装器与自动更新器负责管理 osquery 的启动、配置与版本更新是 Fleet 推荐的设备端 agent见 orbit/README.mdFleet Desktop设备托盘菜单应用向终端用户展示设备合规状态等信息osqueryd由 Orbit 拉起并持续运行的 osquery 守护进程。而Fleet 服务器是负责集中管理、策略下发、查询汇总的服务端程序。这两种软件的更新模型根本不同见 策略文档维度fleetd 组件Fleet 服务器更新方式自动更新auto-update持续轮询 TUF 仓库获取新版本由管理员手动升级on-premises 部署场景更新触发者Orbit 在启动时及周期性检查 TUF 元数据管理员根据发布说明手动执行升级更新频率设备端自动收敛到最新版本由各企业自行安排维护窗口兼容性压力新组件必须兼容旧的服务器服务器应尽量兼容旧组件正是这种“组件自动更新、服务器手动升级”的异步节奏构成了制定发布策略的根本原因如果 fleetd 新版本依赖了服务器端尚不存在的能力那些还未升级服务器的自托管on-premisesFleet 部署就会被悄然破坏。TUF 更新机制fleetd 如何自动获取新版本fleetd 的自动更新并非简单地“下载最新二进制”而是基于TUFThe Update Framework更新框架的签名元数据机制。Fleet 托管了一个公开的 TUF 仓库Orbit 通过持续轮询该仓库来判断并拉取新版本。更新服务器地址在 orbit/pkg/update/update.go 中可以看到完整的地址定义当前生产仓库地址https://updates.fleetdm.comDefaultURL历史旧地址https://tuf.fleetctl.comOldFleetTUFURL自 orbit 1.38.0 起完成迁移元数据文件名由tuf-metadata.json迁移为updates-metadata.jsonMetadataFileName迁移期间为兼容旧版本下载包内会同时携带两个文件。该文件还内嵌了 TUF 的root元数据defaultRootMetadata包含 14 个 ed25519 公钥以及 root/snapshot/targets/timestamp 各角色的密钥与阈值配置用于引导首次信任。RootKeys作为 Options 的字段注入更新客户端确保客户端只信任由这些密钥签名的元数据。Orbit 的轮询行为Orbit 通过orbit/cmd/orbit的 CLI 参数控制更新行为见 orbit/cmd/orbit/orbit.go参数默认值说明--update-urlORBIT_UPDATE_URLhttps://updates.fleetdm.com更新服务器地址--orbit-channelORBIT_ORBIT_CHANNELstableOrbit 使用的更新通道--osqueryd-channelORBIT_OSQUERYD_CHANNELstableosqueryd 使用的更新通道--desktop-channelORBIT_DESKTOP_CHANNELstableFleet Desktop 使用的更新通道--update-intervalORBIT_UPDATE_INTERVAL15m检查更新的周期注意启动时会先检查一次之后每次检查带有随机化最多可能延长 10 分钟--disable-updatesORBIT_DISABLE_UPDATESfalse关闭自动更新更新检查的调度逻辑位于 orbit/pkg/update/runner.go其中刻意引入了随机化避免所有设备在同一时刻向 TUF 仓库发起同步请求形成“惊群效应”// Randomize the initial interval so that all agents dont synchronize their updates initialInterval : r.opt.CheckInterval每次检查时Orbit 会拉取 TUF 的 timestamp/snapshot/targets 元数据验证签名后与本地已安装版本比对并下载更新后的目标target。默认的目标配置见 orbit/pkg/update/options.go其中为每个平台定义了 Orbit、osqueryd、Fleet Desktop 等组件在 TUF 中的Platform、Channel与TargetFile例如macOS 上 osqueryd 的目标为osqueryd.app.tar.gz解压后从osquery.app/Contents/MacOS/osqueryd提取可执行文件Windows 上 Orbit 与 osqueryd 分别对应orbit.exe与osqueryd.exeLinux 上 Fleet Desktop 使用desktop.tar.gz并在启动新版本前通过--help做冒烟校验CustomCheckExec。这些目标在 TUF 中的命名常量定义于 orbit/pkg/constant/constant.goorbit、osqueryd、desktop。当前 TUF 仓库中的版本矩阵orbit/TUF.md由make fleetd-tuf自动生成请勿手工编辑列出了部署在stable与edge两个通道上的组件版本。以stable通道为例组件macOSLinuxWindowsLinux (arm64)Windows (arm64)orbit1.60.01.60.01.60.01.60.01.60.0desktop1.60.01.60.01.60.01.60.01.60.0osqueryd5.23.15.23.15.23.15.23.15.23.1nudge1.1.10.81462----swiftDialog2.5.6----escrowBuddy1.0.0----其中nudge、swiftDialog、escrowBuddy是仅面向 macOS 的组件。edge通道则承载尚未进入稳定版的新构建例如 orbit 1.61.0供早期验证使用。硬性规则Must rule新 fleetd 永远兼容旧 Fleet 服务器策略文档定义了一条不可妥协的规则“新 Fleetd 版本始终支持与旧 Fleet 服务器之间的通信与操作。”这条规则之所以是“必须”根源仍然在于更新模型的不对称fleetd 组件通过 TUF 自动更新Fleet 推送到 TUF 仓库的新版本会自动且不可控地扩散到所有已接入设备而 on-premises 的 Fleet 服务器由管理员手动升级升级节奏完全由企业 IT 决定一旦新 fleetd 依赖了旧服务器不支持的 API、接口或行为所有尚未升级服务器的企业部署都会立刻出现 agent 异常Fleet 无法在下发前甄别每个设备的服务器版本。因此每当为 fleetd 引入新特性时开发者都必须确保在旧版本 Fleet 服务器上新 fleetd 至少能保持“通信 基本操作”不出错。这条规则在 fleetd 开发与发布策略文档 中被明确为 Fleetd 开发者引入新特性时必须遵循的策略纲领。期望项Nice to have新 Fleet 服务器兼容旧 fleetd与上面的硬性规则相对文档将另一条规则列为“期望但非必须”“新 Fleet 服务器版本支持旧版本 fleetd。”它之所以不是必须是因为服务器升级由管理员控制、节奏可预期开发者可以在服务端与设备端特性的配合上保留一定灵活性——例如先让服务器具备新能力再在下一次 fleetd 发布中让设备端使用该能力。这也与发布流程中“fleetd 先发布、服务器后发布”的顺序约束相互呼应。发布流程先发 TUF再发服务器策略文档给出了两条发布顺序约束1. fleetd 组件必须先于服务器发布Fleetd 组件Orbit、Fleet Desktop、osqueryd必须先发布到 FleetDM 的 TUF 仓库之后新 Fleet 服务器版本才允许出现在 GitHub Releases 中。原因在于自动更新的时序设备端会自动拾取 TUF 上的新 fleetd若服务器版本先行发布而与其配套的 fleetd 尚未进入 TUF 自动更新通道则会形成“新服务器 旧 fleetd”的中间态反之先发布 fleetd 则能保证任何时刻设备的自动更新都指向“被服务器支持的组件版本”。2. 不兼容时必须在发布说明中标注最低 fleetd 版本当新 Fleet 服务器版本不再支持旧版 fleetd即无法满足“Nice to have”期望项时发布说明release notes必须明确记录该版本支持的最低 fleetd 版本。这条标注面向两类特殊用户关闭自动更新的用户通过--disable-updates或打包时禁用更新将组件固定到特定通道/版本的用户例如固定使用stable之外的自定义通道或人为锁定版本。这些用户的设备不会自动升级 fleetd因此在升级 Fleet 服务器之前必须先手动将设备上的 fleetd 升级到发布说明要求的最低版本再执行服务器升级否则设备端与服务器之间会因版本不匹配而失效。发布说明中的示例措辞可见 releasing-fleet.mdWhile newer versions of fleetd and fleetctl still function with older versions of the Fleet server (and vice versa), Fleet does not actively test these scenarios and some newer features wont be available.从源码看发布顺序的落地tools/tuf 发布脚本Fleet 仓库中与发布顺序直接对应的实现是 tools/tuf/README.md 描述的releaser.sh发布脚本。该脚本自动化完成“构建组件 → 签名 → 推送 TUF 仓库”的全过程是“fleetd 先发 TUF”这一规则的工程落地。发布环境与密钥管理发布脚本对签名密钥采用严格的 2FA 管理TUF 的targets、snapshot、timestamp三个角色的加密签名密钥存放在专用 USB 闪存盘如/Volumes/FLEET-UPD/keys解密口令与 GitHub API Token 存放在 1Password 私有保管库中路径形式如Private/UPDATES TARGETS/password首次加入时需由持有 TUFroot角色的成员对新增签名密钥完成tuf sign/tuf snapshot/tuf timestamp/tuf commit授权。依赖工具包括make、git、1Password CLIop、rclone、fleetctl、go-tuf 的tuf可执行文件以及ghCLI。先上 staging再同步生产所有发布先推送到 staging 仓库https://updates-staging.fleetdm.com完成冒烟测试smoke test验证后再通过服务端同步将 staging 与生产仓库https://updates.fleetdm.com对齐。这为 fleetd 发布增加了一道独立于 GitHub CI 的验证闸门。常用发布动作示例以发布 fleetd 1.23.0 到edge通道为例TUF_DIRECTORY/Users/foobar/updates-staging.fleetdm.com \ COMPONENTfleetd \ ACTIONrelease-to-edge \ VERSION1.23.0 \ KEYS_SOURCE_DIRECTORY/Volumes/FLEET-UPD/keys \ TARGETS_PASSPHRASE_1PASSWORD_PATHPrivate/UPDATES TARGETS/password \ SNAPSHOT_PASSPHRASE_1PASSWORD_PATHPrivate/UPDATES SNAPSHOT/password \ TIMESTAMP_PASSPHRASE_1PASSWORD_PATHPrivate/UPDATES TIMESTAMP/password \ GITHUB_USERNAMEfoobar \ GITHUB_TOKEN_1PASSWORD_PATHPrivate/Github Token/password \ ./tools/tuf/releaser.sh冒烟测试通过后推送到生产ACTIONrelease-to-production \ COMPONENTfleetd \ VERSION1.23.0 \ ./tools/tuf/releaser.sh随后创建发布 PR 并更新 CHANGELOGACTIONcreate-fleetd-release-pr \ VERSION1.23.0 \ ./tools/tuf/releaser.sh从 edge 提升到 stable当 fleetd 1.23.0 在edge通道验证充分后可通过promote-edge-to-stable动作将其提升到stable通道使所有使用默认stable通道的设备自动升级TUF_DIRECTORY/Users/foobar/updates-staging.fleetdm.com \ COMPONENTfleetd \ ACTIONpromote-edge-to-stable \ VERSION1.23.0 \ KEYS_SOURCE_DIRECTORY/Volumes/FLEET-UPD/keys \ TARGETS_PASSPHRASE_1PASSWORD_PATHPrivate/UPDATES TARGETS/password \ SNAPSHOT_PASSPHRASE_1PASSWORD_PATHPrivate/UPDATES SNAPSHOT/password \ TIMESTAMP_PASSPHRASE_1PASSWORD_PATHPrivate/UPDATES TIMESTAMP/password \ ./tools/tuf/releaser.sh提升同样遵循“staging 验证 → 同步生产”的两段式流程。osqueryd 的发布与提升过程与 fleetd 一致区别仅在于COMPONENTosqueryd此外 osqueryd 提升到 stable 后还需通过ACTIONupdate-osquery-schema同步 osquery 的 schema 与 flags。值得注意的是当某次发布只包含 Orbit 变更时脚本仍要求 Fleet Desktop 组件同步 bump 版本号以便用户在托盘图标中看到新的版本字符串如 “Fleet Desktop v1.21.0”。patch 版本发布fleetd 的 patch 发布流程与 minor 发布一致区别在于需从 patch 分支如rc-minor-fleetd-v1.41.1发起且VERSION需与 patch 版本号一致。若脚本重复运行且 PR 与 tag 已生成可设置SKIP_PR_AND_TAG_PUSH1跳过重复推送。macOS 专属组件的发布releaser.sh尚未支持全部组件nudge与escrowBuddy需要手工通过make nudge-app-tar-gz/make escrow-buddy-pkg构建再用fleetctl updates add添加到指定通道fleetctl updates add --target /path/to/escrowBuddy.pkg --platform macos --name escrowBuddy --version 1.0.0 -t stableswiftDialog则由专用的 GitHub Actions workflow 生成swiftDialog.app.tar.gz后通过ACTIONrelease-swiftDialog-to-stable发布。实战要点何时需要手动升级 fleetd结合策略与源码以下是设备端管理员最需要关注的三种场景默认场景自动更新开启设备上的 Orbit 会周期性轮询https://updates.fleetdm.com的stable通道并自动升级无需人工干预固定通道或关闭自动更新如果通过--orbit-channel/--osqueryd-channel/--desktop-channel固定了通道或使用--disable-updates关闭更新那么在升级 Fleet 服务器前必须核对新服务器版本的发布说明中标注的最低支持的 fleetd 版本并先在设备端完成 fleetd 升级自建 TUF 仓库大型企业可使用fleetctl updates系列命令自建/自管更新仓库对应文档中的“custom TUF”场景元数据文件同样采用updates-metadata.json此时发布节奏与兼容性约束由企业自行控制但硬性规则“新 fleetd 兼容旧服务器”仍然适用。小结Fleet 的 fleetd 发布策略本质上是对“自动更新”与“手动升级”两种节奏之间差异的系统性补偿硬性规则新 fleetd 必须兼容旧 Fleet 服务器防止 TUF 自动更新意外破坏 on-premises 部署期望项新服务器尽量兼容旧 fleetd为两端开发保留灵活性发布顺序fleetd 组件必须先进入 TUF 仓库服务器版本才可发布若服务器不兼容旧 fleetd发布说明必须写明最低支持的 fleetd 版本工程落地tools/tuf/releaser.sh以“USB 密钥 1Password 口令”的双因子签名、staging→production 两段式发布、edge→stable 通道提升保障了上述策略可被可靠执行。对于任何向 fleetd 贡献新特性的开发者这份策略就是引入变更前必须对照的检查清单先确认旧服务器下的通信与基本操作不受影响再按“先 TUF、后 GitHub”的顺序完成发布。赞分享后端前端企业应用运维网络安全【免费下载链接】fleetOpen device management项目地址https://gitcode.com/GitHub_Trending/fl/fleet点击查看免费下载相关推荐Fleet 中 fleetd 自动更新机制详解基于 TUF 的离线签名、渠道发布与 fleetctl updates 全操作指南Fleet 中 fleetd 自动更新机制详解基于 TUF 的离线签名、渠道发布与 fleetctl updates 全操作指南 fleetd 是 Fleet后端前端企业应用运维网络安全Fleetd 认证机制详解Fleet 终端 Agent 的 Enroll Secret、Node Key 与 TUF 安全更新Fleetd 认证机制详解Fleet 终端 Agent 的 Enroll Secret、Node Key 与 TUF 安全更新 Fleetd 是运行在每台终端后端前端企业应用运维网络安全如何在Photoshop中轻松处理WebP图像WebPShop插件完整使用指南如何在Photoshop中轻松处理WebP图像WebPShop插件完整使用指南 想要在Photoshop中无缝处理现代网页图像格式吗WebPShop插件为你图像处理上一篇CDCS项目平台对比分析天池、biendata、DataFountain优劣解析下一篇HandyControl高级技巧数据绑定与事件处理的最佳实践创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

CC Switch 里 TaoToken 档:Claude Code 与 Codex 切 GLM 5.3 Flash 2026/9/20 15:01:54

CC Switch 里 TaoToken 档:Claude Code 与 Codex 切 GLM 5.3 Flash

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
全流程端到端交付管理:从合同到回款的项目闭环实战指南 2026/9/20 15:01:54

全流程端到端交付管理:从合同到回款的项目闭环实战指南

简介:《华为的全流程端到端交付管理》以客户需求为导向,系统梳理了企业必须回答的5个核心问题:产品稳定性、核心技术领先、成本具有竞争力、客户投资保护以及及时有效的售后服务,并结合华为1997年引入IBM诊断、经过八年探索实践的…

阅读更多 →
1000MW凝汽式机组全厂原则性热力系统设计全解析 2026/9/20 15:01:54

1000MW凝汽式机组全厂原则性热力系统设计全解析

简介:这份课程设计围绕1000MW凝汽式发电机组全厂原则性热力系统展开,适合能源与动力工程、热能与动力工程专业学生及电厂设计入门者参考。方案以N1000-26.25/600/600型超超临界汽轮机、HG2953/27.46YM1型直流锅炉为对象,详细给出了八级回热抽…

阅读更多 →
Matlab实现法诺共振拟合与Q因子计算 2026/9/20 15:01:54

Matlab实现法诺共振拟合与Q因子计算

1. 法诺共振现象与微观世界探测法诺共振(Fano resonance)是量子系统中一种特殊的干涉现象,表现为非对称的线型谱线特征。这种独特的共振模式最早由意大利物理学家Ugo Fano在1961年提出,用来解释原子光谱中的非对称峰。与常见的洛伦…

阅读更多 →
高中数学知识点全总结:八大板块知识框架与复习文档制作指南 2026/9/20 15:01:54

高中数学知识点全总结:八大板块知识框架与复习文档制作指南

简介:这是一份面向高中生与高考复习者的数学知识点系统梳理文档,将高中数学九大章节的核心考点按模块归类,涵盖函数与导数、三角函数与平面向量、数列、立体几何、概率统计、解析几何、参数方程等,并配有学习策略与易错点提醒&…

阅读更多 →
通达信VOL量价监测公式:一眼识别主力吸筹与出货 2026/9/20 14:58:53

通达信VOL量价监测公式:一眼识别主力吸筹与出货

以前盯盘的时候,我也跟很多人一样,扫一眼成交量柱子高低就完事。红柱高就是放量上涨,绿柱高就是放量下跌,这种看法不能说完全没用,但放到真正的主力资金面前,基本等于只看表情不看动作——表情可以演&#…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞