news 2026/9/18 15:38:33

Aptos Core 二进制发布快速上手:从一键安装到多平台 Release 流水线实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Aptos Core 二进制发布快速上手:从一键安装到多平台 Release 流水线实战

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界面或命令行驱动一次完整的多平台发布;理解toolperformance两种构建配置的本质差异,并学会用 SHA256 校验与 dry-run 保障发布安全。

一、二进制发布工作流全景

scripts/binary_release目录是 aptos-core 的"通用二进制发布工具箱",它不针对某个特定 crate,而是可以打包发布代码库中的任意可执行目标(executable target)。目录中的核心文件如下:

文件作用
QUICKSTART.md快速上手:安装与发布的极简指南
README.md完整文档:平台矩阵、参数、排障
CARGO_BINSTALL.mdcargo-binstall 集成配置指南
build_binary_release.shUnix/Linux/macOS 构建打包脚本
build_binary_release.ps1Windows 构建打包脚本
install_binary.shUnix/Linux/macOS 下载安装脚本
install_binary.ps1Windows 下载安装脚本

配合仓库根目录的 .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 源码,这个"一行命令"背后实际完成了一整套自动化流程:

  1. 解析参数:脚本接受--version <version>(默认latest)、--bin-dir <path>(默认~/.local/bin)、-f/--force(强制重装)、-y/--yes(跳过确认提示)、-h/--help
  2. 探测平台:通过uname -suname -m将本机映射为标准 Rust target triple(如 Linux x86_64 →x86_64-unknown-linux-gnu);
  3. 解析最新版本:当版本为latest时,脚本调用 GitHub Releases API(每页 100 条、最多翻 3 页),用正则"tag_name": "<binary-name>-v[0-9.]*"匹配出符合命名约定的最新 tag 并提取版本号;
  4. 重复安装检测:若目标二进制已存在且版本相同则直接退出;版本不同会提示升级确认(除非带-y);
  5. 下载与校验:在mktemp -d创建的临时目录中下载<binary-name>-v<version>-<target-triple>.zip与同名.sha256,优先用shasum -a 256 -c、其次sha256sum -c校验,校验失败立即终止(脚本中的set -e保证任何一步失败即退出);
  6. 解压与安装unzip -q解压后在当前目录或最多 3 层子目录中定位二进制,复制到安装目录并chmod +x
  7. 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 SHA256SUMS

Windows(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字段(取首个匹配项),并在非跳过模式下执行两级校验:

  1. 格式校验:EXPECTED_VERSION必须匹配^[0-9]+\.[0-9]+\.[0-9]+$(如1.2.3);
  2. 一致性校验:若与 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,查找顺序为:

  1. crates/<crate-name>/Cargo.toml
  2. <crate-name>/Cargo.toml
  3. aptos-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_namestring输出二进制名(如aptos-node
crate_namestring-p标志构建的 crate 名
build_profilechoicetooltoolperformance
release_versionstring发布版本,如1.2.3
source_git_ref_overridestringworkflow 的 Git REV覆盖构建来源(分支、tag 或 SHA)
release_titlestring<binary-name> v<version>自定义 Release 标题
dry_runbooleantrue勾选则只构建不创建 Release
skip_checksbooleanfalse勾选则跳过版本校验

填写示例:

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.04ubuntu-22.04-armmacos-15-intelmacos-latestwindows-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.0

Windows 等价命令:

.\scripts\binary_release\build_binary_release.ps1 ` -BinaryName <binary-name> ` -CrateName <crate-name> ` -BuildProfile <tool|performance> ` -Version <version> ` [-SkipChecks $true]

脚本构建流程的源码级细节(build_binary_release.sh):

  1. 本地探测 OS/架构并映射 target triple(不支持的系统直接报错退出);
  2. 执行cargo build -p "$CRATE_NAME" --profile "$BUILD_PROFILE"
  3. 根据 profile 定位产物目录:tooltarget/toolperformancetarget/performance
  4. 将二进制压缩为<binary-name>-v<version>-<target-triple>.zip;若二进制名与 crate 名不一致,会先复制改名再打包;
  5. shasumsha256sum生成同名.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_64x86_64-unknown-linux-gnu
Linux ARM64aarch64-unknown-linux-gnu
macOS x86_64x86_64-apple-darwin
macOS ARM64aarch64-apple-darwin
Windows x86_64x86_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 = 1overflow-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 triplex86_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 仅有toolperformance两种,传入其他值会直接被构建脚本以错误退出。

校验失败(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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/18 15:37:18

冷库监控系统flask框架机器学习模型计算机毕业设计项目

冷库监控系统是一个集成了现代传感器技术、数据采集与传输技术以及Web开发框架的综合系统&#xff0c;旨在实现对冷库环境参数的实时监控、数据管理和可视化展示。该系统通过部署在冷库内的各类传感器&#xff0c;实时采集温度、湿度、二氧化碳浓度、压力和氧气含量等关键环境参…

作者头像 李华
网站建设 2026/9/18 15:36:42

CANN Runtime aclnn 算子调用路径实战指南:应用开发新手的快速上手路线

CANN Runtime aclnn 算子调用路径实战指南&#xff1a;应用开发新手的快速上手路线 【免费下载链接】runtime 本项目提供CANN运行时组件和维测功能组件。 项目地址: https://gitcode.com/cann/runtime 导读 本文面向具备通用编程能力、但对 CANN 生态尚不熟悉的应用开发…

作者头像 李华
网站建设 2026/9/18 15:36:37

STM32CubeMX2与Keil µVision深度协同开发指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/18 15:32:35

Vue3 + MQTT.js 构建稳定 Web SCADA 实时通信实践

Vue3 MQTT.js 实现 SCADA 实时数据通信&#xff1a;从不稳定到稳定的完整实践1. 项目概述&#xff1a;从 HMI 到 Web SCADA 的通信架构演变先说结论&#xff1a;这个项目解决的问题&#xff0c;是把传统 SCADA&#xff08;数据采集与监控系统&#xff09;中依赖组态软件和专用…

作者头像 李华
网站建设 2026/9/18 15:29:18

工业无标注能耗识别与自监督负载均衡方案

简介&#xff1a;本资源是一份面向工业智能化领域研发工程师与能源优化算法工程师的深度技术方案文档&#xff0c;聚焦DeepSeek提出的跨设备能耗均衡方法&#xff0c;系统解决制造业车间因设备异构、负载不均导致的能效低下与运维成本攀升问题。全文363页&#xff0c;含50个逻辑…

作者头像 李华