ZeroTier One 群晖 NAS 安装包构建指南:DSM 6 原生包与 DSM 7 Docker 镜像

发布时间:2026/9/14 7:55:39
ZeroTier One 群晖 NAS 安装包构建指南:DSM 6 原生包与 DSM 7 Docker 镜像
ZeroTier One 群晖 NAS 安装包构建指南DSM 6 原生包与 DSM 7 Docker 镜像【免费下载链接】ZeroTierOneA Smart Ethernet Switch for Earth项目地址: https://gitcode.com/GitHub_Trending/ze/ZeroTierOneZeroTier One 是面向地球级设备互联的智能以太网交换机本仓库的 pkg/synology 目录专门维护其在群晖SynologyNAS 上的交付形态一套面向 DSM 6 的 SPK 原生安装包构建链路以及一套面向 DSM 7 的 Docker 镜像构建链路。读完本文你将掌握从零构建zerotierSPK 包、一键生成多架构 Docker 镜像的完整流程并理解 TUN 设备初始化、CLI 符号链接与路由守护进程等包内脚本的核心实现。一、目录结构与两套交付方案Synology 是 NAS 市场占有率极高的品牌其操作系统分为 DSM 6 与 DSM 7 两代两者在软件包格式与权限模型上差异明显。仓库因此在 pkg/synology 下提供了两套并行的方案目录目标系统交付形式构建入口pkg/synology/dsm6-pkgDSM 6.xSPK 原生安装包pkg/synology/build.shpkg/synology/dsm7-dockerDSM 7Docker 容器镜像pkg/synology/dsm7-docker/build.sh根目录的 README.md 与 dsm7-docker/README.md 均给出了最核心的构建命令即./build.sh build详见下文。二、DSM 6 原生 SPK 包构建2.1 构建入口与版本信息确认进入pkg/synology目录后执行./build.sh build脚本 pkg/synology/build.sh 首先从 pkg/config.json 读取三个关键字段并回显随后交互式要求确认字段当前值说明version1.8.7ZeroTier 版本号写入 SPK 版本rev1包修订号用于同版本升级descSecurely connect any device, anywhere.安装包描述emailsupportzerotier.com维护者联系邮箱ZTO_VER$(jq -r .version synology/config.json) PKG_REV$(jq -r .rev synology/config.json) read -p Confirm details [y/n] ? -n 1 -r确认后build()会依次执行build_environment、generate_package_sources最后以 Docker 容器方式完成 SPK 编译pkg/synology/build.sh。2.2 构建环境spksrc DockerDSM 6 的 SPK 包不是手工打出来的而是依托 Synology 社区的开源构建框架spksrcbuild_environment() { git clone https://github.com/SynoCommunity/spksrc.git sudo docker build --load -t zt-spksrc -f Dockerfile.spksrc . }镜像由 pkg/synology/Dockerfile.spksrc 定义基础镜像为debian:buster预先安装make、imagemagick、curl、jq、wget、procps、intltool等构建依赖并将构建机上的spksrc源码目录以卷挂载进容器入口脚本为syn-pkg-entrypoint.sh。2.3 生成包源源码压缩包与交叉编译 Makefilegenerate_package_sources()pkg/synology/build.sh完成以下关键工作打包源码用git ls-files -z | xargs -0 tar -czvf source.tar.gz将当前仓库全部受版本管理的文件打成source.tar.gz放入spksrc/distrib/供 spksrc 下载编译。生成校验和向 spksrc/cross/zerotier/digests 写入 SHA1 / SHA256 / MD5 三种摘要spksrc 下载后据此校验源码完整性。生成交叉编译 Makefile动态写入spksrc/cross/zerotier/MakefilePKG_NAME ZeroTierOne PKG_VERS 1.8.7 PKG_EXT tar.gz PKG_DIST_NAME source.tar.gz GNU_CONFIGURE 1 CONFIGURE_ARGS HAVE_CXXyes INSTALL_TARGET zerotier_custom_install CONFIGURE_TARGET zerotier_custom_configure ENV ZT_SYNOLOGY1值得注意ENV ZT_SYNOLOGY1这是 ZeroTier 源码在群晖平台下的特有条件编译开关说明打包链路与核心代码是深度耦合的。编译完成后zerotier_custom_install将zerotier-one复制到目标bin/目录。生成 SPK 元数据 Makefilespksrc/spk/zerotier/Makefile关键项包括SPK_NAME zerotier SPK_VERS 1.8.7 SPK_REV 1 SPK_ICON /spksrc/dsm6-pkg/PACKAGE_ICON_256.png DISPLAY_NAME ZeroTier STARTABLE yes REQUIRED_DSM 6.2.4 SSS_SCRIPT ../../dsm6-pkg/start-stop-status.sh ENV ZT_SYNOLOGY1其中REQUIRED_DSM 6.2.4表明该包面向 DSM 6.2.4 及以上版本图标取自 PACKAGE_ICON_256.png服务启停交由 start-stop-status.sh 处理。2.4 多架构并行编译构建的最后一步以交互式容器方式运行 spksrc 构建sudo docker run -it -v $(pwd)/spksrc:/spksrc zt-spksrc /bin/bash容器内的入口脚本 pkg/synology/syn-pkg-entrypoint.sh 会遍历群晖的每一种 CPU 架构执行make arch-型号-6.2.4。当前启用的架构包括x64 系列x64、kvmx64、dockerx64、broadwell、broadwellnk、denverton、apollolake、geminilake、purley、grantley、avoton、bromolow、cedarview、evansport、v1000、armada370/375/37xx/38x/xp、armv7、aarch64、braswell、rtd1296、qoriq等被注释掉、需手动开启的架构如88f6281、monaco、hi3535、comcerto2k、alpine4k、alpine在注释中给出了构建注意事项例如monaco需要ZT_AES_NO_ACCEL1hi3535需要去掉-mfloat-abihard标志2.5 包内启停脚本的核心逻辑SPK 包安装后由 start-stop-status.sh 管理服务的生命周期其启动流程如下start ├─ configure_tun # 创建 /dev/net/tun 并加载 tun 内核模块 ├─ configure_cli # 建立 zerotier-cli / zerotier-idtool 符号链接 ├─ start_daemon # 启动 zerotier-one 守护进程 └─ configure_routes # 启动路由守护进程轮询并补加路由TUN 设备初始化configure_tunZeroTier 创建虚拟网卡依赖 TUN 驱动。脚本在/dev/net/tun不存在时先创建/dev/net目录再用mknod /dev/net/tun c 10 200建立字符设备若lsmod中尚无tun模块则insmod /lib/modules/tun.ko加载内核模块。CLI 符号链接configure_cli将包目录下的zerotier-one软链接到/usr/local/bin/zerotier-cli与/usr/local/bin/zerotier-idtool——这与零配置调用链一致因为zerotier-one会根据被调用的名称分派到对应子命令同时把/var/lib/zerotier-one软链接到包的数据目录/var/packages/zerotier/var使运行数据集中存储。路由守护进程apply_routes守护进程启动后等待 15 秒让 ZeroTier 上线随后每 15 秒循环执行zerotier-cli -j listnetworks用jq解析每个网络的routes对尚不存在的路由执行ip route add target dev portDeviceNamePID 记录在zerotier-watchdog.pid。stop_daemon则依次发送SIGTERM停止守护进程与路由看门狗。三、DSM 7 Docker 镜像构建DSM 7 起群晖收紧了对原生包的权限限制ZeroTier 官方选择以 Docker 容器方式交付。构建脚本 pkg/synology/dsm7-docker/build.sh 首先用 Git 标签自动确定版本ZTO_VER$(git describe --tags $(git rev-list --tags --max-count1)) ZTO_COMMIT$(git rev-parse HEAD)随后用docker buildx做多平台交叉构建并推送到镜像仓库sudo docker buildx build \ --push \ --platform linux/arm/v7,linux/arm64/v8,linux/amd64 \ --tag zerotier/zerotier-synology:${ZTO_VER} \ --tag zerotier/zerotier-synology:latest \ --build-arg ZTO_COMMIT${ZTO_COMMIT} \ --build-arg ZTO_VER${ZTO_VER} \ .一次构建即可产出linux/arm/v7、linux/arm64/v8、linux/amd64三个平台的镜像覆盖绝大多数群晖机型ARM 与 x86 均包含。Dockerfile 采用多阶段构建构建阶段基于alpine:latest安装rust、cargo、openssl-dev、alpine-sdk、linux-headers克隆 ZeroTierOne 仓库并git reset --hard到指定 commit再执行make -f make-linux.mk编译。运行阶段基于精简的alpine:latest安装bash、jq、libc6-compat、libstdc将编译产物zerotier-one拷入/usr/sbin/并建立zerotier-idtool、zerotier-cli符号链接最后以 entrypoint.sh 作为容器入口。镜像暴露9993/udp端口这是 ZeroTier 默认的加密 UDP 数据面端口。四、容器入口脚本健康检查与路由管理pkg/synology/dsm7-docker/entrypoint.sh 完整实现了一个容器的启动编排启动守护进程执行zerotier-one -d以后台方式运行并通过trap捕获SIGTERM/SIGQUIT/SIGINT实现优雅退出。等待上线以MAX_WAIT_SECS默认 90 秒为总超时、SLEEP_TIME默认 15 秒为间隔循环调用zerotier-cli -j info | jq .online探测服务是否在线超时未上线则以非零码退出。两个参数均可通过环境变量覆盖便于在 NAS 上按网络状况调整。路由守护上线后启动一个后台子进程每 15 秒拉取zerotier-cli -j listnetworks的 JSON逐网络、逐路由检查若目标路由为0.0.0.0/0默认路由且该网络allowDefault为false则跳过避免在未经授权的情况下抢占 NAS 默认网关若路由尚未存在且无via网关字段则用ip route add ROUTE dev portDeviceName补加与 DSM 6 方案一致的注释指出路由会在 ZeroTier 将接口关闭时自动删除无需手动清理。五、从构建产物到日常使用无论 SPK 还是 Docker 镜像安装完成后的使用方式完全相同加入网络zerotier-cli join network-id随后在 ZeroTier 管理后台授权该 NAS。查看状态zerotier-cli info查看身份、地址与在线状态。列出网络zerotier-cli listnetworks查看已加入网络及路由信息。身份管理zerotier-idtool用于生成/导出身份文件DSM 6 场景下身份持久化于/var/packages/zerotier/var即/var/lib/zerotier-one软链接指向的目录Docker 场景下应通过挂载卷持久化/var/lib/zerotier-one避免容器重建后身份丢失导致节点地址变化。六、小结本文完整梳理了 ZeroTier One 在群晖平台上的两套交付链路DSM 6 走 spksrc 交叉编译出 SPK 原生包覆盖从源码打包、校验和生成、多架构编译到启停脚本的全流程DSM 7 走 Docker 多平台镜像实现了zerotier-one的容器化与路由自管理。两套方案都贯彻了开箱即用的设计理念——TUN 设备自动初始化、CLI 符号链接自动建立、路由守护自动补全。若需构建自定义版本直接复用 build.sh 并修改 config.json 中的版本号与描述即可。【免费下载链接】ZeroTierOneA Smart Ethernet Switch for Earth项目地址: https://gitcode.com/GitHub_Trending/ze/ZeroTierOne创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考