Aptos Core 二进制发布快速上手:从一键安装到多平台 Release 流水线实战
【免费下载链接】aptos-coreAptos is a layer 1 blockchain built to support the widespread use of blockchain through better technology and user experience.项目地址: https://gitcode.com/GitHub_Trending/ap/aptos-core
导读
Aptos 是一个致力于以更好的技术与用户体验支撑区块链广泛落地的 Layer 1 公链,其核心代码库aptos-core中包含大量可执行程序:从aptos-node(节点服务)、aptos-debugger(调试工具)到 CLI 与各类索引器。本文以仓库中的 scripts/binary_release/QUICKSTART.md 为骨架,完整讲解"用户如何一键安装已发布二进制"与"维护者如何通过 GitHub Actions 产出多平台 Release"两条主线,并结合 README.md、CARGO_BINSTALL.md、binary-release.yaml 及四个 Shell/PowerShell 脚本,深入到构建、校验、安装的源码级实现。读完本文,你将能够:用一行命令安装任意已发布的 Aptos 二进制;从workflow_dispatch界面或命令行驱动一次完整的多平台发布;理解tool与performance两种构建配置的本质差异,并学会用 SHA256 校验与 dry-run 保障发布安全。
一、二进制发布工作流全景
scripts/binary_release目录是 aptos-core 的"通用二进制发布工具箱",它不针对某个特定 crate,而是可以打包发布代码库中的任意可执行目标(executable target)。目录中的核心文件如下:
| 文件 | 作用 |
|---|---|
| QUICKSTART.md | 快速上手:安装与发布的极简指南 |
| README.md | 完整文档:平台矩阵、参数、排障 |
| CARGO_BINSTALL.md | cargo-binstall 集成配置指南 |
| build_binary_release.sh | Unix/Linux/macOS 构建打包脚本 |
| build_binary_release.ps1 | Windows 构建打包脚本 |
| install_binary.sh | Unix/Linux/macOS 下载安装脚本 |
| install_binary.ps1 | Windows 下载安装脚本 |
配合仓库根目录的 .github/workflows/binary-release.yaml,这套体系具备五个关键能力:
- 多平台构建:Linux、macOS、Windows,同时覆盖 x86 与 ARM 架构;
- SHA256 校验和:每个产物附带独立
.sha256文件,并提供合并的SHA256SUMS; - cargo-binstall 支持:已发布到 crates.io 的 crate 可直接下载预编译二进制;
- 下载脚本:一行命令完成安装、校验、解压与 PATH 配置;
- 标准 Rust target triple 命名:产物名、Release tag 全程遵循统一约定。
二、用户视角:三种方式安装已发布二进制
2.1 一行命令安装(Unix/Linux/macOS)
curl -fsSL https://raw.githubusercontent.com/aptos-labs/aptos-core/main/scripts/binary_release/install_binary.sh | sh -s -- <binary-name>例如安装节点程序:sh -s -- aptos-node。该命令将脚本经管道交给sh执行,--之后的参数会传递给脚本本身。
结合 install_binary.sh 源码,这个"一行命令"背后实际完成了一整套自动化流程:
- 解析参数:脚本接受
--version <version>(默认latest)、--bin-dir <path>(默认~/.local/bin)、-f/--force(强制重装)、-y/--yes(跳过确认提示)、-h/--help; - 探测平台:通过
uname -s与uname -m将本机映射为标准 Rust target triple(如 Linux x86_64 →x86_64-unknown-linux-gnu); - 解析最新版本:当版本为
latest时,脚本调用 GitHub Releases API(每页 100 条、最多翻 3 页),用正则"tag_name": "<binary-name>-v[0-9.]*"匹配出符合命名约定的最新 tag 并提取版本号; - 重复安装检测:若目标二进制已存在且版本相同则直接退出;版本不同会提示升级确认(除非带
-y); - 下载与校验:在
mktemp -d创建的临时目录中下载<binary-name>-v<version>-<target-triple>.zip与同名.sha256,优先用shasum -a 256 -c、其次sha256sum -c校验,校验失败立即终止(脚本中的set -e保证任何一步失败即退出); - 解压与安装:
unzip -q解压后在当前目录或最多 3 层子目录中定位二进制,复制到安装目录并chmod +x; - PATH 提示:若安装目录不在 PATH 中,脚本会给出
export PATH="$BIN_DIR:$PATH"的配置建议。
2.2 Windows(PowerShell)
iwr https://raw.githubusercontent.com/aptos-labs/aptos-core/main/scripts/binary_release/install_binary.ps1 -OutFile install.ps1; .\install.ps1 -BinaryName <binary-name>对应的 install_binary.ps1 提供等价参数:-BinaryName(必填)、-Version(默认latest)、-BinDir(默认$env:USERPROFILE\.local\bin)、-Force、-Yes以及-Repo(默认aptos-labs/aptos-core)。脚本以$ErrorActionPreference = "Stop"开启严格错误模式,并用 ANSI 颜色输出区分错误/成功/警告信息。
2.3 指定版本与自定义安装目录
两个安装脚本都支持更精细的控制(Unix 示例):
# 安装特定版本 curl -fsSL https://raw.githubusercontent.com/aptos-labs/aptos-core/main/scripts/binary_release/install_binary.sh | sh -s -- aptos-node --version 1.2.3 # 安装到自定义目录 curl -fsSL https://raw.githubusercontent.com/aptos-labs/aptos-core/main/scripts/binary_release/install_binary.sh | sh -s -- aptos-node --bin-dir /usr/local/bin# Windows 等价用法 .\install.ps1 -BinaryName aptos-node -Version 1.2.3 .\install.ps1 -BinaryName aptos-node -BinDir "C:\Tools\bin"2.4 手动安装与校验
如需完全手动安装,流程是:下载对应平台的 ZIP 与.sha256文件 → 校验 → 解压 → 放入 PATH。
# Unix/Linux/macOS 校验 shasum -a 256 -c aptos-node-v1.2.3-x86_64-unknown-linux-gnu.zip.sha256 # 用合并校验和文件校验全部产物 shasum -a 256 -c SHA256SUMSWindows(PowerShell)侧可逐字节比对:
$expected = (Get-Content aptos-node-v1.2.3-x86_64-pc-windows-msvc.zip.sha256).Split()[0] $actual = (Get-FileHash aptos-node-v1.2.3-x86_64-pc-windows-msvc.zip -Algorithm SHA256).Hash.ToLower() if ($expected -eq $actual) { "OK" } else { "FAILED" }需要说明的是,官方安装脚本会自动执行上述校验逻辑,手动校验适用于脚本不可用或需要额外审计的场景。
三、维护者视角:创建一次多平台发布
3.1 前置准备:确认 crate 版本
发布前先确认目标 crate 的Cargo.toml版本号正确,它必须与将要发布的版本一致:
[package] name = "my-tool" version = "1.2.3" # 必须与 release_version 一致从 build_binary_release.sh 的源码看,脚本会用sed从 crate 的Cargo.toml中提取version字段(取首个匹配项),并在非跳过模式下执行两级校验:
- 格式校验:
EXPECTED_VERSION必须匹配^[0-9]+\.[0-9]+\.[0-9]+$(如1.2.3); - 一致性校验:若与 Cargo.toml 中的版本不符,直接以退出码 2 失败并提示
Wanted to release for X, but Cargo.toml says the version is Y。
因此发布前要么先更新 Cargo.toml 版本并提交,要么(不推荐用于生产)在 workflow 中勾选skip_checks绕过校验。
3.2 crate 定位机制
脚本会自动搜索目标 crate 的Cargo.toml,查找顺序为:
crates/<crate-name>/Cargo.toml<crate-name>/Cargo.tomlaptos-move/<crate-name>/Cargo.toml
此外脚本内置了"目录名与 crate 名不一致"的覆盖映射(如aptos-move-flow对应aptos-move/flow/Cargo.toml);若以上位置都未命中,会进一步在crates/与aptos-move/下递归搜索name = "<crate-name>"精确匹配的 Cargo.toml。这与 aptos-core 的实际目录结构吻合:aptos-node位于 aptos-node/Cargo.toml,aptos-debugger位于 aptos-move/aptos-debugger/Cargo.toml。
3.3 通过 GitHub Actions 发起发布
进入仓库的 Actions 页面,选择Binary Release工作流,点击Run workflow,填写以下参数(定义于 binary-release.yaml 的workflow_dispatch输入):
| 参数 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
binary_name | string | 是 | — | 输出二进制名(如aptos-node) |
crate_name | string | 是 | — | 用-p标志构建的 crate 名 |
build_profile | choice | 是 | tool | tool或performance |
release_version | string | 是 | — | 发布版本,如1.2.3 |
source_git_ref_override | string | 否 | workflow 的 Git REV | 覆盖构建来源(分支、tag 或 SHA) |
release_title | string | 否 | <binary-name> v<version> | 自定义 Release 标题 |
dry_run | boolean | 否 | true | 勾选则只构建不创建 Release |
skip_checks | boolean | 否 | false | 勾选则跳过版本校验 |
填写示例:
binary_name: aptos-debugger crate_name: aptos-debugger build_profile: tool release_version: 1.0.0 dry_run: false从工作流定义可以看到完整的发布拓扑:五个并行构建 job(Linux x86、Linux ARM64、macOS x86、macOS ARM64、Windows x86)分别在ubuntu-22.04、ubuntu-22.04-arm、macos-15-intel、macos-latest、windows-2025上执行对应的构建脚本,将产物以binary-builds-*命名上传为 artifacts;全部成功后,release-binariesjob(仅当dry_run == false时执行)合并下载全部产物,拼接生成统一的SHA256SUMS,再以automatic_release_tag: <binary-name>-v<version>调用 marvinpinto/action-automatic-releases 创建正式 GitHub Release。若指定了release_title则使用自定义标题,否则默认为<binary-name> v<version>。
3.4 本地构建(不经过 CI)
在 aptos-core 仓库根目录可直接调用构建脚本,适合在发布前本地预检:
# Unix/Linux/macOS ./scripts/binary_release/build_binary_release.sh \ <binary-name> <crate-name> <tool|performance> <version> [skip_checks] # 示例:以 performance 配置构建 aptos-node ./scripts/binary_release/build_binary_release.sh \ aptos-node aptos-node performance 1.2.3 # 示例:以 tool 配置构建 aptos-debugger ./scripts/binary_release/build_binary_release.sh \ aptos-debugger aptos-debugger tool 1.0.0Windows 等价命令:
.\scripts\binary_release\build_binary_release.ps1 ` -BinaryName <binary-name> ` -CrateName <crate-name> ` -BuildProfile <tool|performance> ` -Version <version> ` [-SkipChecks $true]脚本构建流程的源码级细节(build_binary_release.sh):
- 本地探测 OS/架构并映射 target triple(不支持的系统直接报错退出);
- 执行
cargo build -p "$CRATE_NAME" --profile "$BUILD_PROFILE"; - 根据 profile 定位产物目录:
tool→target/tool,performance→target/performance; - 将二进制压缩为
<binary-name>-v<version>-<target-triple>.zip;若二进制名与 crate 名不一致,会先复制改名再打包; - 用
shasum或sha256sum生成同名.sha256校验文件,最终将 ZIP 与校验文件移动到仓库根目录。
3.5 发布前的安全演练:dry_run
发布前务必先用 dry-run 模式做完整演练。勾选dry_run: true(或手动构建时直接本地跑脚本)会构建全部平台产物并上传 artifacts,但不会创建 GitHub Release:
binary_name: my-tool crate_name: my-tool build_profile: tool release_version: 1.2.3 dry_run: true # ← 测试模式,只构建不发布dry_run在工作流中的默认值就是true,即默认不直接发布,必须显式取消勾选才会真正产出 Release,从机制上避免误操作。
四、发布产物:tag、归档与校验文件
以发布my-tool版本1.2.3为例,一次发布会产生:
Release Tag
my-tool-v1.2.3命名格式固定为<binary-name>-v<version>,这是安装脚本解析"最新版本"时依赖的约定,也是 cargo-binstall 元数据中 URL 模板的基础。
5 个平台的二进制归档
my-tool-v1.2.3-x86_64-unknown-linux-gnu.zip my-tool-v1.2.3-aarch64-unknown-linux-gnu.zip my-tool-v1.2.3-x86_64-apple-darwin.zip my-tool-v1.2.3-aarch64-apple-darwin.zip my-tool-v1.2.3-x86_64-pc-windows-msvc.zip对应完整平台矩阵(见 README.md):
| 平台 | Rust Target Triple |
|---|---|
| Linux x86_64 | x86_64-unknown-linux-gnu |
| Linux ARM64 | aarch64-unknown-linux-gnu |
| macOS x86_64 | x86_64-apple-darwin |
| macOS ARM64 | aarch64-apple-darwin |
| Windows x86_64 | x86_64-pc-windows-msvc |
校验文件
my-tool-v1.2.3-x86_64-unknown-linux-gnu.zip.sha256 my-tool-v1.2.3-aarch64-unknown-linux-gnu.zip.sha256 my-tool-v1.2.3-x86_64-apple-darwin.zip.sha256 my-tool-v1.2.3-aarch64-apple-darwin.zip.sha256 my-tool-v1.2.3-x86_64-pc-windows-msvc.zip.sha256 SHA256SUMS (combined)其中合并文件SHA256SUMS由 CI 的release-binariesjob 通过cat <binary-name>-*.zip.sha256 > SHA256SUMS生成。
五、构建配置:tool 与 performance 的取舍
QUICKSTART 区分了两类构建场景,其底层差异由仓库根 Cargo.toml 中的两个 profile 直接定义:
tool—— 面向 CLI 工具与命令行程序
- 目标:二进制体积最小、启动快、便于分发;
- 特性:
opt-level = "z"(为体积优化)、lto = "thin"(薄 LTO 链接期优化)、strip = true(剥离调试符号)、codegen-units = 1; - 适用:CLI 工具、实用程序、独立可执行文件(如
aptos-debugger)。
该 profile 与[profile.cli]几乎一致,可视为 CLI 构建配置的同族方案。
performance—— 面向服务与守护进程
- 目标:最大化运行时性能,面向长期运行的进程;
- 特性:
opt-level = 3(最大优化)、lto = "thin"、codegen-units = 1、overflow-checks = true,并保留调试信息(debug = true,便于 profiling); - 适用:
aptos-node、索引器等性能敏感的长驻服务。
从源码注释看,Cargo.toml 中注明该构建配置"尚未被广泛测试、当前不推荐用于生产部署",发布时需结合自身场景评估。选择依据可概括为:分发型 CLI 选tool,性能型服务选performance。
六、进阶:cargo-binstall 集成,让用户跳过编译直接安装
6.1 为什么需要配置
cargo binstall <crate-name>能为发布在 crates.io 的 crate 直接下载预编译二进制,省去本地漫长编译。但 cargo-binstall 的默认URL 约定与本仓库的命名格式不一致:
# cargo-binstall 默认格式 {repo}/releases/download/v{version}/{name}-{target}-v{version}.{archive-format} # 本仓库实际格式 {bin}-v{version}(tag) + {bin}-v{version}-{target}.zip(归档)两处的 Release tag 与归档名顺序都不同,因此必须显式配置元数据(详见 CARGO_BINSTALL.md)。
6.2 Cargo.toml 配置
[package.metadata.binstall] pkg-url = "{ repo }/releases/download/{ bin }-v{ version }/{ bin }-v{ version }-{ target }.zip" bin-dir = "{ bin }{ binary-ext }" pkg-fmt = "zip" [package.metadata.binstall.overrides.x86_64-pc-windows-msvc] pkg-url = "{ repo }/releases/download/{ bin }-v{ version }/{ bin }-v{ version }-{ target }.zip"模板变量含义:
| 变量 | 含义 | 示例 |
|---|---|---|
{repo} | Cargo.toml 中的 repository 字段 | https://github.com/aptos-labs/aptos-core |
{bin} | 二进制名 | aptos-node |
{version} | Cargo.toml 中的版本号 | 1.2.3 |
{target} | Rust target triple | x86_64-unknown-linux-gnu |
{binary-ext} | Windows 上为.exe,其他平台为空 | — |
6.3 完整示例与验证
以aptos-node为例的完整Cargo.toml:
[package] name = "aptos-node" version = "1.2.3" edition = "2021" repository = "https://github.com/aptos-labs/aptos-core" [package.metadata.binstall] pkg-url = "{ repo }/releases/download/{ bin }-v{ version }/{ bin }-v{ version }-{ target }.zip" bin-dir = "{ bin }{ binary-ext }" pkg-fmt = "zip" [package.metadata.binstall.overrides.x86_64-pc-windows-msvc] pkg-url = "{ repo }/releases/download/{ bin }-v{ version }/{ bin }-v{ version }-{ target }.zip"配置并发布后按以下步骤验证:
cargo install cargo-binstall # 首次使用需安装 cargo binstall <crate-name> # 应下载预编译产物而非本地编译 cargo binstall <crate-name> --log-level debug # 查看下载细节常见排障:提示 "Could not find a matching binary" 时,检查 Release 是否确实存在、URL 模式是否与实际命名一致、repository字段是否指向正确仓库;cargo-binstall 查找的校验文件名为<archive-name>.sha256/.sha512/SHA256SUMS/SHA512SUMS,而本工作流恰好同时产出独立.sha256与合并SHA256SUMS,可被直接识别。
七、常见问题排查
版本不匹配(Version mismatch error)
若 CI 报版本不一致:优先更新 crate 的Cargo.toml版本使其与目标release_version一致;生产环境不建议勾选skip_checks: true绕过校验。
二进制找不到(Binary not found)
依次排查:crate 名是否正确(可用cargo metadata或查看 Cargo.toml);crate 是否产出二进制目标而非纯库;二进制目标名是否与binary_name参数(或 crate 名)一致。
构建配置不存在(Build profile not found)
确认 profile 存在于仓库根 Cargo.toml 中。当前支持的 profile 仅有tool与performance两种,传入其他值会直接被构建脚本以错误退出。
校验失败(Checksum verification fails)
重新下载归档与校验文件;确认文件在传输中未损坏;确认使用的是与归档匹配的校验文件。
八、快速决策参考
| 场景 | 推荐做法 |
|---|---|
| 终端用户安装最新版二进制 | 一行安装脚本(Unix/Windows) |
| 用户希望跳过编译 | cargo binstall <crate-name>(需 crates.io 发布 + binstall 元数据) |
| 发布 CLI 工具 | build_profile: tool |
| 发布节点/索引器等长驻服务 | build_profile: performance |
| 发布前验证流水线 | dry_run: true,只构建不发布 |
| 本地预构建 | 直接调用 build_binary_release.sh /.ps1 |
| 下载后安全校验 | 独立.sha256或合并SHA256SUMS |
本目录的全部机制都围绕"任何可执行目标都可被多平台构建、校验、发布、安装"这一目标设计:标准 target triple 命名保证了构建端与安装端的无缝对接,<binary-name>-v<version>的 tag 约定让"最新版本解析"与 cargo-binstall 下载得以自动化,而 SHA256 双形态校验文件则为供应链安全提供了双重保障。若需要完整的参数说明、平台矩阵与更多排障细节,可直接阅读 scripts/binary_release/README.md。
【免费下载链接】aptos-coreAptos is a layer 1 blockchain built to support the widespread use of blockchain through better technology and user experience.项目地址: https://gitcode.com/GitHub_Trending/ap/aptos-core
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考