ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

ZeroTierOne 构建与部署实操指南:从 make 到入网 3 步走通

2026/9/10 11:01:42 拓冰建站 浏览量
ZeroTierOne 构建与部署实操指南:从 make 到入网 3 步走通 ZeroTierOne 构建与部署实操指南从 make 到入网 3 步走通【免费下载链接】ZeroTierOneA Smart Ethernet Switch for Earth项目地址: https://gitcode.com/GitHub_Trending/ze/ZeroTierOne在团队里装过 ZeroTierOne 的人多半被一个问题绊过同一个仓库有人make出来的 daemon 能直接管网络有人用 CMake 出来的却多出一段商业许可代码分发出去差点踩了法务红线。这个差异不是玄学是构建选项的默认值决定的。读完这篇指南你能在 30 分钟内走完克隆 → 构建 → 起服务 → 加入网络全流程并且说得清 README.md 里 MPL-2.0 核心与 nonfree/ 商业控制器之间的许可边界在哪条线上。默认构建到底编译了什么先给结论再拆机制。ZeroTierOne 和典型 C 网络项目的差异集中在三件事上维度ZeroTierOne 的做法同类项目通用做法构建入口官方构建走各平台 makefileCMake 只是便利替代路径build.mdCMake 单一入口许可边界核心引擎 MPL-2.0nonfree/控制器为 source-available两套许可同一仓库README.md单一许可证全仓统一运行形态单个 daemonzerotier-one状态全在 home 目录JSON API 挂在 127.0.0.1:9993build.mdsystemd unit 分散配置文件一个容易忽略的默认值差异make 路径下非免费控制器默认不参与编译要显式传ZT_NONFREE1make-linux.mk而 CMake 路径下ZT_NONFREE选项默认是ONCMakeLists.txt。两条路默认产物不一样这是后文所有坑的源头。4 个容易踩坑的机制逐条拆控制器代码默认值两条构建路径相反出处CMakeLists.txt 中option(ZT_NONFREE ... ON)对照 make-linux.mk 的ifeq ($(ZT_NONFREE),1)。大白话CMake 用户不传参数就拿到了带 FileDB 控制器的完整版make 用户不传参数拿到的是纯核心版。同样一句用默认配置构建两个同事得到的是两种二进制。踩坑场景⚠️ 你用 CMake 默认 preset 打了包内网分发nonfree/的控制器代码受 source-available 许可约束商业用途需要单独的商业协议nonfree/LICENSE.md 明确ANY COMMERCIAL USE ... REQUIRES A SEPARATE COMMERCIAL LICENSE法务事后找你。正确做法不需要控制器就显式关掉cmake -DZT_NONFREEOFF ...或用官方*-free-releasepresetbuild.md。CMake 构建缺依赖先跑 bootstrap 脚本出处build.md 标注 CMake 是 optional 路径且要求 OpenTelemetry API 头文件存在于CMAKE_PREFIX_PATHscripts/bootstrap-deps.sh 负责把它装进./.deps。大白话CMake 不会自己拉依赖脚本先把钉死版本的 OTel 头文件装好并打印出该用的-DCMAKE_PREFIX_PATH。踩坑场景直接cmake -S . -B buildconfigure 阶段报找不到 opentelemetry新手容易误以为是编译器问题去换 GCC。正确做法# 1. 先装依赖默认模式只装 header-only OTel API很快 scripts/bootstrap-deps.sh # 2. 按脚本打印的 PREFIX_PATH 再 configure cmake -DZT_NONFREEOFF -DCMAKE_PREFIX_PATH$PWD/.deps -S . -B build cmake --build build -j8 # 3. 新平台/新架构先跑自测build.md L109 make selftestLinux 下的编译器与第三方库全自动探测出处make-linux.mk 自动优先 clang 与 devtoolset-8 的 GCCmake-linux.mk 自动探测系统 miniupnpc / natpmp找不到就静态编入仓库自带版本。大白话不用你管 UPnP 端口映射库有没有装make 会自己决定链系统的还是编自带的。踩坑场景交叉编译或容器环境里系统库版本很旧你以为链了系统库实际编进去的是ext/miniupnpc自带版行为差异排查半天。正确做法确认产物行为前先看构建日志里有没有ZT_USE_SYSTEM_MINIUPNPC这个宏make-linux.mk。服务起来后怎么控制JSON API 与 local.conf出处build.md 说明默认管理接口在127.0.0.1:9993令牌在 home 目录的authtoken.secretservice/README.md 给出local.conf全部可调项。大白话daemon 起来后配置主要靠两样东西——home 目录里的local.confJSON管物理链路黑白名单、端口、trusted path和 9993 上的 JSON API配zerotier-cli用。踩坑场景local.conf手写成非法 JSON服务不报错但配置不生效zerotier-cli info -j一看根本没加载。正确做法改完配置用zerotier-cli info -j验证是否被读取service/README.md。三种典型部署沙盘推演一遍使用场景关键动作依据文件自建控制器给团队管网络sudo ./zerotier-one -d起服务控制器数据落在 home 目录controller.d高可用靠整目录复制到备机nonfree/controller/README.md只要免费核心不涉及商业许可风险CMake 用linux-free-releasepresetZT_NONFREEOFF或 make 默认构建build.md二次开发 / 支持新平台先make selftest跑单元自测再用local.conf调路径与端口验证行为build.md、service/README.md补充一点运维细节home 目录位置各平台不同Linux 是/var/lib/zerotier-onebuild.md做备份和容器化映射时别硬编码成其他平台的路径。部署前核对6 个可执行动作克隆仓库git clone https://gitcode.com/GitHub_Trending/ze/ZeroTierOne确认目标产物里要不要控制器make 路径查 make-linux.mkCMake 路径查 CMakeLists.txt默认值相反若走 CMake先跑scripts/bootstrap-deps.shconfigure 时带上它打印的CMAKE_PREFIX_PATH构建完成后跑make selftest在新架构上尤其不能省build.mdsudo ./zerotier-one -d启动用zerotier-cli info确认节点地址再zerotier-cli join 网络ID入网build.md需要改行为时写/var/lib/zerotier-one/local.conf改完必须用zerotier-cli info -j验证加载 ✅service/README.md回到开头那个问题默认构建到底编译了什么答案是取决于你走 make 还是 CMake控制器代码的默认去留正好相反。把ZT_NONFREE的取值当成发布流程里的必查项这个坑就永远不会落在你头上。建议把上面 6 条核对清单存进团队的发布 checklist下次构建前逐条过一遍。【免费下载链接】ZeroTierOneA Smart Ethernet Switch for Earth项目地址: https://gitcode.com/GitHub_Trending/ze/ZeroTierOne创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考