Fleet 本地开发指南:用 fleetd-linux 构建并运行 Linux 版 fleetd Docker 容器 📅 发布时间:2026/9/21 4:00:35 👁 浏览次数: 后端前端企业应用运维网络安全【免费下载链接】fleetOpen device management项目地址https://gitcode.com/GitHub_Trending/fl/fleet点击查看免费下载在 Fleet 的日常开发与测试中常常需要快速模拟一批连接到本地 Fleet 实例的 Linux 主机。tools/fleetd-linux目录正是为此准备的它提供了一套脚本与 Dockerfile把安装好 fleetd即 orbit osqueryd Fleet Desktop的 Linux 镜像构建出来并让容器内的 fleetd 通过host.docker.internal直连宿主机上运行的 Fleet 服务。读完本文你将掌握如何一键构建覆盖 Ubuntu、Fedora、Debian、CachyOS 四种发行版的 fleetd 镜像如何通过环境变量切换 Fleet 服务地址与 TUF 更新通道以及如何用docker compose拉起这些容器完成注册入网与脚本执行联调。一、fleetd-linux 是什么容器化的 Linux 测试主机tools/fleetd-linux是 Fleet 仓库中的一个开发工具目录定位与 tools/osquery 类似后者用容器化osqueryd实例来测试 Fleet而前者更进一步——容器里装的不是裸的 osquery而是完整的 fleetd 组件栈orbit 守护进程、osqueryd、Fleet Desktop因此可以用于演示和验证更多端到端能力例如在 Linux 主机上执行脚本、下发配置等。在 tools/README.md 的工具总表中fleetd-linux/被归类为 Release Distribution发布与分发下的 Linux fleetd packaging其目录构成如下tools/fleetd-linux/ ├── README.md # 构建与运行说明本文主体 ├── build-all.sh # 一键构建脚本打包 构建 4 个发行版镜像 ├── docker-compose.yml # 批量拉起容器并注册到本地 Fleet ├── run-fleetd.sh # 容器 ENTRYPOINT注入 enroll secret 后启动 orbit ├── ubuntu-24.04/Dockerfile ├── fedora-43/Dockerfile ├── debian-13.4/Dockerfile └── cachyos/DockerfileREADME 中也给出了项目作者对未来的设想原文 PS 说明将来可以把这些镜像推送到 Docker Hub并把其中一部分接入fleetctl preview用于在预览环境里演示 Linux 主机上的脚本执行能力。这解释了该工具链的存在动机——为 Linux 侧的脚本执行、策略下发等特性准备可复现的演示与联调环境。二、构建 fleetd Docker 镜像2.1 一键构建全部镜像在仓库根目录执行./tools/fleetd-linux/build-all.sh该命令会依次完成两阶段工作见 build-all.sh用fleetctl package分别生成三种 Linux 包fleet-osquery_amd64.debDebian/Ubuntu 系fleet-osquery_amd64.rpmFedora 系fleet-osquery_amd64.pkg.tar.zstArch 系CachyOS 使用依次构建四个 Docker 镜像均为linux/amd64平台fleetd-ubuntu-24.04fleetd-fedora-43fleetd-debian-13.4fleetd-cachyos执行脚本前需要本地已安装fleetctl与 Docker。脚本开头的set -euo pipefail保证任一步失败即中断避免带着残缺的中间产物继续构建。2.2 打包参数详解build-all.sh中每个包都通过fleetctl package生成核心参数保持一致含义如下参数说明--typedeb/rpm/pkg.tar.zst目标包格式与各 Dockerfile 中的安装命令一一对应--enable-scripts在包中启用脚本执行能力是容器内演示 Linux 脚本功能的前提--fleet-url$FLEET_URLfleetd 连接的 Fleet 服务地址默认见下文--enroll-secretplaceholder先用占位符placeholder写入配置容器启动时由run-fleetd.sh用真实密钥替换--disable-open-folder关闭安装后的打开文件夹行为避免在容器/CI 环境中产生副作用--fleet-certificate../osquery/fleet.crt仅本地地址时传入指定 Fleet 服务的 TLS 证书--update-url$UPDATE_URL覆盖 fleetd 组件的 TUF 更新仓库地址--orbit-channel/--desktop-channel/--osqueryd-channel分别指定 orbit、Fleet Desktop、osqueryd 的更新通道--debug输出打包调试日志2.3 指向本地 Fleet 服务FLEET_URL与自签名证书构建脚本默认值定义在 build-all.shFLEET_URL${FLEET_URL:-https://host.docker.internal:8080}即默认让容器内的 fleetd 连接宿主机:8080端口运行的 Fleet 开发实例。由于host.docker.internal是 Docker DesktopmacOS/Windows提供的宿主机别名开发环境一般用自签证书脚本专门做了处理using_localhost()函数会判断FLEET_URL是否以https://localhost:、https://127.0.0.1:或https://host.docker.internal:开头命中本地地址时追加--fleet-certificate../osquery/fleet.crt参数指向 tools/osquery/fleet.crt。该证书与密钥tools/osquery/fleet.key是专门为host.docker.internal域名签发的本地测试自签名证书tools/osquery/README.md 中明确强调它仅用于本地测试严禁在生产环境使用。如果要把容器连到其他 Fleet 服务非本地地址直接覆盖FLEET_URL即可此时脚本不会附带任何--fleet-certificateFLEET_URLhttps://fleet.example.com ./tools/fleetd-linux/build-all.sh2.4 使用 staging TUF 的 edge 通道Fleet 的组件更新走 TUFThe Update Framework机制仓库内对应工具位于 tools/tuf。若希望容器内的 fleetd 从 staging 环境拉取edge通道的最新构件可同时覆盖三个通道变量UPDATE_URLhttps://updates-staging.fleetdm.com ORBIT_CHANNELedge DESKTOP_CHANNELedge OSQUERYD_CHANNELedge ./tools/fleetd-linux/build-all.shUPDATE_URL会通过--update-url写入包配置ORBIT_CHANNEL、DESKTOP_CHANNEL、OSQUERYD_CHANNEL则分别控制 orbit、桌面端、osqueryd 的通道。这是开发人员在发布新版本前先在容器化 Linux 主机上验证 edge 构建的常用手段。三、四个发行版镜像的构建细节每个 Dockerfile 都遵循同一模式把上一步生成的安装包和run-fleetd.sh拷入镜像、安装ca-certificates、执行系统对应的包安装命令最后以run-fleetd.sh作为ENTRYPOINT。Ubuntu 24.04ubuntu-24.04/DockerfileFROM ubuntu:24.04 COPY fleet-osquery_amd64.deb / COPY run-fleetd.sh / RUN chmod x /run-fleetd.sh RUN apt-get update apt-get install -y ca-certificates RUN dpkg --install /fleet-osquery_amd64.deb ENTRYPOINT [/run-fleetd.sh]Debian 13.4debian-13.4/Dockerfile与 Ubuntu 相同使用deb包与apt-get但基础镜像通过 digest 固定版本debian:13.4sha256:...保证构建可复现。Fedora 43fedora-43/Dockerfile使用rpm包安装命令为dnf install --assumeyes /fleet-osquery_amd64.rpm同样通过 digest 固定基础镜像。CachyOScachyos/Dockerfile使用 Arch 系打包格式pkg.tar.zst先pacman -Sy --noconfirm --needed ca-certificates再pacman -U --noconfirm安装本地包基础镜像同样以 digest 固定。可以看到镜像内容非常精简——只额外安装了ca-certificatesfleetd 连接 Fleet 服务与 TUF 仓库都需要验证 TLS 证书其余运行依赖全部由 fleetd 安装包自包含。四、运行 fleetd 容器并注册到本地 Fleet4.1 拉起全部容器构建完成后向本地 Fleet 实例注册这些容器化 Linux 主机ENROLL_SECRET... docker compose -f ./tools/fleetd-linux/docker-compose.yml upENROLL_SECRET是 Fleet 的注册密钥可在 Fleet UI 的 Manage hosts 页面获取或通过fleetctl get enroll-secret查询见 tools/osquery/README.md 中的说明。compose 文件docker-compose.yml中通过${ENROLL_SECRET:?ENROLL_SECRET must be set for server authentication}强制要求该变量存在未设置时启动会直接报错。四个服务ubuntu24.04-fleetd、fedora43-fleetd、debian13.4-fleetd、cachyos-fleetd共享同一份默认配置platform: linux/amd64environment注入ENROLL_SECRETcap_add: [SYS_PTRACE]restart: unless-stopped其中SYS_PTRACE的用途在 compose 文件注释里有明确解释允许 osquery 读取它并不拥有的进程的/proc/pid/io否则日志会出现Cannot read /proc/50/io。注释还特别强调刻意避免使用privileged: true因为在 Docker Desktop for Mac 上同时运行多个 privileged 服务会互相冲突、导致环境崩溃——这是该工具链针对 macOS 开发环境的务实取舍。4.2 容器启动流程run-fleetd.sh 如何工作每个容器的ENTRYPOINT都是 run-fleetd.sh它完成了占位符密钥替换 → 加载环境文件 → 启动 orbit三步#!/bin/bash set -euo pipefail : ${ENROLL_SECRET:?ENROLL_SECRET must be set} awk -v s$ENROLL_SECRET {gsub(/placeholder/, s)}1 \ /etc/default/orbit /etc/default/orbit.new \ mv /etc/default/orbit.new /etc/default/orbit set -a; . /etc/default/orbit; set a exec /opt/orbit/bin/orbit/orbit首先校验ENROLL_SECRET必须存在然后用awk把打包阶段写入/etc/default/orbit环境文件中的placeholder字符串原位替换成真实注册密钥通过set -a; . /etc/default/orbit把环境文件内容导入当前 shell 环境最后exec启动/opt/orbit/bin/orbit/orbitorbit 守护进程后续由 orbit 拉起 osqueryd。/etc/default/orbit正是 fleetd 在 Linux 上的系统级环境文件orbit 的 systemd unit 模板orbit/pkg/packaging/linux_shared.go中通过EnvironmentFile/etc/default/orbit加载它并以ExecStart/opt/orbit/bin/orbit/orbit启动服务。容器内的执行路径与真实 Linux 主机上的 systemd 服务完全一致只是绕过了 systemd、由exec直接接管为 PID 1 进程。4.3 注册后可以验证什么容器成功注册后Fleet UI 的 Manage hosts 页面会看到多台 Linux 主机。由于打包时带了--enable-scripts你可以直接对这些主机执行脚本例如通过 Fleet 的策略自动化或手动运行脚本验证 Linux 平台的脚本执行链路——这正是 README 中提到让 fleetd 镜像接入fleetctl preview以演示 Linux 脚本执行的初衷。五、使用技巧与注意事项本地 vs 远端 Fleet 地址默认https://host.docker.internal:8080仅适用于宿主机上跑本地 Fleet 的场景指向远端服务器时用FLEET_URLhttps://fleet.example.com覆盖此时不再附带自签名证书build-all.sh。本地证书仅限测试tools/osquery/fleet.crt 与fleet.key是专为host.docker.internal签发的测试证书README 明确警告不可用于生产tools/osquery/README.md。Windows 包格式差异fleetd 打包支持多种格式Linux 侧在本工具中只用deb、rpm、pkg.tar.zst其他平台如 Windows MSI由 tools/wix-docker 等相关工具处理。与 tools/osquery 的关系tools/osquery 是更早期的容器化测试方案裸osquerydfleetd-linux是它的完整 fleetd升级版——两者都以 Docker 快速模拟多台 Linux 主机为手段区别在于后者含 orbit 与 Fleet Desktop能覆盖更完整的 agent 生命周期。重复使用与清理docker compose up会复用既有容器保留状态需要全新状态时参考 tools/osquery/README.md 的做法docker compose down/docker compose rm后重新up若想单独拉起某个发行版也可docker compose run ubuntu24.04-fleetd按需启动。六、总结tools/fleetd-linux为 Fleet 开发者提供了一条构建 → 注册 → 联调的完整容器化 Linux 测试链路build-all.sh负责用fleetctl package生成三种 Linux 安装包并构建四个发行版镜像docker-compose.yml配合ENROLL_SECRET一键把容器注册进本地 Fleetrun-fleetd.sh则在容器启动时完成注册密钥注入并接管 orbit 进程。掌握FLEET_URL、UPDATE_URL、ORBIT_CHANNEL、DESKTOP_CHANNEL、OSQUERYD_CHANNEL等环境变量的组合用法你就能在几分钟内搭起一套覆盖多发行版、可随时重置的 Linux 测试主机环境为脚本执行、策略下发、edge 通道验证等开发工作提供可靠支撑。赞分享后端前端企业应用运维网络安全【免费下载链接】fleetOpen device management项目地址https://gitcode.com/GitHub_Trending/fl/fleet点击查看免费下载相关推荐在 Fleet 中运行本地构建的 fleetd基于本地 TUF 仓库的 macOS 开发调试完整指南在 Fleet 中运行本地构建的 fleetd基于本地 TUF 仓库的 macOS 开发调试完整指南 本文面向 Fleet 开源项目的 macOS 贡献者完后端前端企业应用运维网络安全Fleet 中如何卸载 fleetdFleet 代理macOS、Windows、Linux 本地与远程卸载完整指南Fleet 中如何卸载 fleetdFleet 代理macOS、Windows、Linux 本地与远程卸载完整指南 Fleet 的设备管理代理 fleet后端前端企业应用运维网络安全Fleetd for Chrome在 ChromeOS 设备上运行 Fleet 代理的构建、调试与发布指南Fleetd for Chrome在 ChromeOS 设备上运行 Fleet 代理的构建、调试与发布指南 导读 本文以开源仓库 ee/fleetd chr后端前端企业应用运维网络安全上一篇2025最强Ebitengine学习路线从零基础到独立开发跨平台2D游戏下一篇如何快速配置Hydra LauncherJSON URL下载源管理完全指南 创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考