尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

ZeroTier One 官方发布流程全解析:版本号提升、多平台签名构建与质量检查

ZeroTier One 官方发布流程全解析:版本号提升、多平台签名构建与质量检查 ZeroTier One 官方发布流程全解析版本号提升、多平台签名构建与质量检查【免费下载链接】ZeroTierOneA Smart Ethernet Switch for Earth项目地址: https://gitcode.com/GitHub_Trending/ze/ZeroTierOne本文档以仓库根目录下的 OFFICIAL-RELEASE-STEPS.md 为主体骨架系统讲解 ZeroTier One 从确定新版本号到产出带数字签名的 macOS/Windows 安装包的完整官方发布流程。这份指南最初面向 ZeroTier 内部发布人员但其中涉及的构建变量、签名工具链和安装包工程文件对任何希望自行构建、打包或复刻官方二进制产出物的开发者同样具有直接参考价值。读完本文你将掌握版本号在仓库中的分布位置与修改方法、make official在 macOS 上的真实执行序列以及 Windows MSI 安装包的构建、签名与验收要点。发布流程概览与前提条件ZeroTier One 的官方发布流程分为两大阶段版本号提升与安装包工程文件准备、分平台构建与签名。整个流程高度依赖持证密钥Note: Many of these steps will require GPG and other signing keys that are kept in cold storage and must be mounted.也就是说发布前需要将存放在冷存储cold storage中的 GPG 及其他签名密钥挂载到构建机上。这些密钥用于macOS 安装包的 Developer ID 签名与 Apple 公证notarizationWindows MSI 文件的 DigiCert 产品签名源码发布时对 tarball 的 GPG 签名在 debian 包等场景中同样会用到 GPG 身份参见 debian/changelog 中的签名者信息。因此普通开发者即使只做非官方自用构建也不需要这些密钥只有产出对外分发、可被系统信任安装的官方级安装包时才必须持有。第一步提升版本号并准备安装器工程必须同步修改的版本文件清单新版本发布时版本号必须在以下全部文件中递增任何一处遗漏都会导致二进制内部版本与安装包显示版本不一致文件仓库根相对路径作用version.hC/C 源码中的版本宏编译期写入二进制zerotier-one.specRPM 打包规格Version:字段debian/changelogDebian/Ubuntu 包的变更日志与版本号ext/installfiles/mac/ZeroTier One.pkgprojmacOS Packages 工程文件中的版本号ext/installfiles/windows/ZeroTier One.aipWindows Advanced Installer 工程文件../DesktopUI/mac-app-template/ZeroTier.app/Contents/Info.plistmacOS 桌面 UIDesktopUI的CFBundleShortVersionString位于本仓库之外的 DesktopUI 仓库注意最后一项位于../DesktopUI即 ZeroTier 的 DesktopUI 仓库中——这是发布流程中唯一不在本仓库内的修改点发布时需单独检出该仓库并同步提升版本。从源码看版本号的真实构成version.h 中的宏定义揭示了 ZeroTier 版本号的完整语义#define ZEROTIER_ONE_VERSION_MAJOR 1 #define ZEROTIER_ONE_VERSION_MINOR 16 #define ZEROTIER_ONE_VERSION_REVISION 2 #define ZEROTIER_ONE_VERSION_BUILD 0其中BUILD字段的注释明确说明它在每个major.minor.rev组合内从 0 开始可仅通过递增它来强制触发一次小更新而不改变对外版本号且它不参与实际对外版本字符串version.h。对外版本串由 version.h 拼接生成#define ZEROTIER_ONE_VERSION_STR _ZT_STR(ZEROTIER_ONE_VERSION_MAJOR) . _ZT_STR(ZEROTIER_ONE_VERSION_MINOR) . _ZT_STR(ZEROTIER_ONE_VERSION_REVISION)即形如1.16.2。修改版本号时只需更新前三个宏多数情况下无需动BUILD并同步更新其他五个文件中的对应字段。作为对照当前仓库的 debian/changelog 首行与 zerotier-one.spec 分别记录了1.16.2与Version: 1.16.2三者保持一致。Windows AIP 工程的特殊要求OFFICIAL-RELEASE-STEPS.md 特别强调最终的.AIP文件只能在 Windows 上使用 Advanced Installer Enterprise 编辑。除了递增版本号还必须生成一个新的product code而upgrade code GUID 则永远不能改变。这是 Windows Installer 的语义约束UpgradeCode标识产品的家族保持不变才能让新版安装包正确覆盖旧版ProductCode每次发布必须变更Windows 才认为这是新版本而非同名安装。第二步macOS 官方构建一条命令的入口make official原文档对 macOS 构建的描述非常简洁——Macs easy. Just type:make official。但这条命令背后隐藏着完整的构建流水线可从 make-mac.mk 的official目标还原# For ZeroTier, Inc. to build official signed packages official: FORCE cd ../DesktopUI ; make ZT_OFFICIAL_RELEASE1 make clean make ZT_OFFICIAL_RELEASE1 -j 8 one ZT_NONFREE1 make ZT_OFFICIAL_RELEASE1 mac-dist-pkg依次执行四步构建 DesktopUI进入仓库外的 DesktopUI 目录以ZT_OFFICIAL_RELEASE1环境编译桌面界面清理make clean确保无旧对象残留清理规则见 make-mac.mk编译守护进程make ZT_OFFICIAL_RELEASE1 -j 8 one ZT_NONFREE1其中-j 8为 8 路并行编译ZT_NONFREE1表示将非 MPL 的商用组件一并编译进二进制详见下文构建变量一节打发布包执行mac-dist-pkg生成并签名 pkg 安装器。mac-dist-pkg打包、签名与公证official目标的最后一步展开自 make-mac.mk# Requires Packages: http://s.sudre.free.fr/Software/Packages/about.html mac-dist-pkg: FORCE packagesbuild ext/installfiles/mac/ZeroTier One.pkgproj rm -f ZeroTier One Signed.pkg $(PRODUCTSIGN) --sign $(CODESIGN_INSTALLER_CERT) ZeroTier One.pkg ZeroTier One Signed.pkg if [ -f ZeroTier One Signed.pkg ]; then mv -f ZeroTier One Signed.pkg ZeroTier One.pkg; fi $(NOTARIZE) submit --apple-id ... --team-id ... --wait ZeroTier One.pkg echo *** When Apple notifies that the app is notarized, run: xcrun stapler staple ZeroTier One.pkg这条目标完整印证了原文档的说明并揭示了更多细节依赖Packages工具packagesbuild读取 ext/installfiles/mac/ZeroTier One.pkgproj 生成ZeroTier One.pkg。这就是为什么原文档要求构建机装有 Packages安装包签名$(PRODUCTSIGN) --sign $(CODESIGN_INSTALLER_CERT)使用 keychain 中的 release signing key即我们的 release signing key in the keychain所指对 pkg 签名Apple 公证notarization$(NOTARIZE) submit ... --wait将 pkg 提交给 Apple 进行公证并等待结果随后仍需手动执行xcrun stapler staple ZeroTier One.pkg将公证票据钉入安装包——这一步是官方流程的收尾动作在 make 输出中会有明确提示。因此完整的 macOS 官方构建条件为安装Packages、release 签名密钥在 keychain 中、配置好 Apple ID/Team ID 公证凭据然后执行make official。第三步Windows 官方构建Windows 侧的官方发布流程与 macOS 完全不同它不走 Makefile而是基于两个 GUI 工具链分三步1. 用 Visual Studio 编译三架构 Release 二进制原文档要求First load the Visual Studio solution and rebuild the UI and ZeroTier One in both x64, i386, and arm64Releasemode.即加载 windows/ZeroTierOne.sln在x64、i386、arm64三种架构下分别以Release配置重新编译UI 与 ZeroTier One 守护进程。对应的工程文件为 windows/ZeroTierOne/ZeroTierOne.vcxproj其中已预置ZT_NONFREE_CONTROLLER1;ZT_NONFREE1;ZT_SSO_ENABLED1等官方构建宏见该文件中的PreprocessorDefinitions。2. 用 Advanced Installer Enterprise 构建安装包随后加载 ext/installfiles/windows/ZeroTier One.aip检查版本号正确后执行构建。原文档特别警告The build will fail if any build artifacts are missing.即 AIP 工程会校验所有构建产物三架构的可执行文件、驱动等是否齐全缺少任何工件都会直接导致构建失败。这一步也正是前文第一步中要求在 Windows 上用 Advanced Installer Enterprise 更新版本号与 product code 的原因。3. 代码签名与干净 VM 验收签名Windows 构建机必须持有来自DigiCert的产品签名证书product signing key用于对生成的MSI 文件进行 Authenticode 签名验收签名后的 MSI 必须至少在若干台全新CLEAN的 Windows 虚拟机上安装测试以确认安装器有效且签名正确。干净 VM 的意义在于排除目标机恰好已装过旧版/已有环境依赖造成的假阳性结果。构建变量官方构建与普通构建的差异根源原文档虽未展开但make official中出现的ZT_OFFICIAL_RELEASE、ZT_OFFICIAL、ZT_NONFREE三个变量是理解官方构建与普通构建差异的关键均可在仓库源码中验证ZT_NONFREE是否编译内置网络控制器在 make-mac.mk、make-linux.mk 等平台 Makefile 中ifeq ($(ZT_NONFREE),1)会追加-DZT_NONFREE_CONTROLLER宏定义该宏在 one.cpp 与 service/OneService.cpp 等多处控制内置 FileDB 网络控制器的编译分支CMake 侧对应 CMakeLists.txtZT_NONFREE拉入 bundled FileDB 控制器且controller 隐含 ZT_NONFREE1并注释说明其为官方构建所需RELEASE-NOTES.md 明确默认二进制不再包含控制器make ZT_NONFREE1用于构建包含非 MPL 组件的版本且以该变量构建出的可执行文件采用专有商业许可而非 MPL。ZT_OFFICIAL与ZT_OFFICIAL_RELEASE官方构建标记Linux 侧official目标为make -j\nproc ZT_OFFICIAL1 ZT_NONFREE1 allmake-linux.mk即并行全量编译并强制启用非 MPL 控制器组件Debian 包构建同样走该路径见 debian/rulesmake ZT_OFFICIAL1 ZT_NONFREE1 allmacOS 侧使用ZT_OFFICIAL_RELEASE1并在 make-mac.mk 附近影响额外定义。非官方 / 快速构建的替代路径对于不需要官方签名和控制器组件的场景仓库同样提供了轻量入口纯自由软件构建不含控制器make one或 CMake 下通过 CMakePresets.json 的linux-free-release/macos-free-release预设以-DZT_NONFREEOFF关闭非自由组件参见 CMakeLists.txt调试构建make ZT_DEBUG1 onemake-linux.mkDocker 镜像构建make dockermake-linux.mk。这些路径适合个人验证但它们不产出带官方签名的安装包也无法替代上述官方流程。发布后的配套工作变更日志与质量门禁版本号与构建流程之外一次完整的官方发布还涉及配套文档的同步更新这些都可在仓库中找到对应物发布说明RELEASE-NOTES.md 按版本记录功能变更、修复与已知注意事项如 1.16.0 的许可证变更、1.16.2 的ZT_MAX_NETWORK_SPECIALISTS上限提升等是发布公告的素材来源Debian changelogdebian/changelog 每个版本条目包含版本号、urgency 与签名者信息其中 1.16.2 条目直接注明 See RELEASE-NOTES.md for release notes说明两者需保持同步GPG 签名密钥正式发布源码包时同样依赖冷存储中的 GPG 密钥doc/contactzerotier.com.gpg 为签名公钥。小结一次官方发布的完整检查清单综合原文档与源码实现可将 ZeroTier One 官方发布浓缩为以下检查清单供发布人或希望产出类官方构建的开发者对照使用版本号同步依次更新 version.h、zerotier-one.spec、debian/changelog、ext/installfiles/mac/ZeroTier One.pkgproj、ext/installfiles/windows/ZeroTier One.aip 及 DesktopUI 的Info.plistWindows AIP在 Advanced Installer Enterprise 中重新生成ProductCode保持UpgradeCode不变macOS 构建确保Packages与 release 签名密钥就绪执行make official内部为 DesktopUI → clean → 并行编译ZT_OFFICIAL_RELEASE1 ZT_NONFREE1→mac-dist-pkg签名公证公证通过后手工执行xcrun stapler stapleWindows 构建VS 下编译 x64/i386/arm64 三套 Release 产物 → Advanced Installer 检查版本并构建 → DigiCert 证书签名 MSI → 在若干干净 Windows VM 上安装验收文档配套更新 RELEASE-NOTES.md 与 debian/changelog。其中第 3、4 步均以ZT_NONFREE1为前提——它决定了二进制中是否包含内置网络控制器也决定了产物的许可证属性MPL 还是专有商用许可是官方构建与非官方构建之间最实质的分界线。【免费下载链接】ZeroTierOneA Smart Ethernet Switch for Earth项目地址: https://gitcode.com/GitHub_Trending/ze/ZeroTierOne创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表