Apache Reqsign 0.20.7 安装指南

Apache Reqsign 0.20.7 安装指南:rustup 安装 Rust 工具链(rustc 1.99.0)、系统依赖准备(pkg-config/libssl-dev)、cargo add 依赖引入与 cargo vendor 离线两种方案、编译验证与卸载,全程实测。

Apache ReqsignApache Reqsign2026/10/13

Apache Reqsign 0.20.7 安装指南

目标:在 Ubuntu 22.04 服务器上完成 Apache Reqsign 0.20.7(Rust 请求签名库,为 AWS S3 / 阿里云 OSS / 腾讯云 COS 等云服务生成签名请求)的安装与验证。本文给出 rustup 安装 Rust 工具链、系统依赖准备、cargo add 依赖引入与 cargo vendor 离线引入两种方案,以及编译验证与卸载方式。所有命令与回显均在 Ubuntu 22.04.5 + rustc 1.99.0 环境实测通过。

一、环境信息

  • 操作系统:Ubuntu 22.04.5 LTS(VERSION_CODENAME=jammy)
  • 架构:x86_64
  • Rust 工具链:rustup 1.29.1 + stable 工具链 rustc 1.99.0(2026-09-28)/ cargo 1.99.0
  • 系统构建库:pkg-config 0.29.2、libssl-dev 3.0.2(OpenSSL 3.0.2)
  • Reqsign 版本:0.20.7(crates.io 当前最新版,rust-version 要求 ≥ 1.86.0)
  • 演示账号:root
  • 示例工程目录:/root/reqsign-demo/

💡 说明:Apache Reqsign 是一个发布为 Rust crate 的请求签名库(reqsign),为 AWS(SigV4/SigV4a)、Azure、Google、华为云 OBS、阿里云 OSS、腾讯云 COS、Oracle、火山引擎 TOS 等云服务生成符合规范的签名请求。它没有可执行守护进程或服务端口,所谓「安装」本质是准备好 Rust 工具链与系统依赖,并把 reqsign 以依赖方式引入你的 Rust 工程。

二、前置条件

2.1 更新软件源

sudo apt-get update

2.2 安装系统构建依赖

reqsign 的 HTTP 组件基于 reqwest,编译需要 OpenSSL 开发头文件与 pkg-config:

sudo apt-get install -y pkg-config libssl-dev

实测安装结果:

libssl-dev:amd64 3.0.2-0ubuntu1.30
pkg-config 0.29.2-1ubuntu3

⚠️ 注意:缺少这两个包时,cargo build 会报 pkg-config could not be found 或找不到 OpenSSL,详见第八节常见问题 Q3。

2.3 安装 Rust 工具链(rustup,官方推荐)

Reqsign 0.20.7 要求 Rust 版本 ≥ 1.86.0(rust-version: 1.86.0)。Ubuntu 22.04 官方源自带的 rustc/cargo 为 1.75.0,无法编译新版依赖(详见第八节 Q1/Q2),因此推荐用 rustup 安装最新 stable 工具链:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal
source "$HOME/.cargo/env"

验证工具链(实测回显):

$ rustup --version
rustup 1.29.1 (d95a37b6a 2026-08-13)
info: This is the version for the rustup toolchain manager, not the rustc compiler.
info: the currently active `rustc` version is `rustc 1.99.0 (b940084d7 2026-09-28)`

$ rustc --version
rustc 1.99.0 (b940084d7 2026-09-28)

$ cargo --version
cargo 1.99.0 (5f94df478 2026-08-27)

三、版本选型说明

通过 crates.io 探测 Reqsign 当前版本与要求:

cargo search reqsign --limit 3
cargo info reqsign

实测回显:

reqsign = "0.20.7"                     # Signing HTTP requests for AWS, Azure, Google, Huawei, Aliyun, Tencent and Oracle service…
reqsign-http-send-reqwest = "4.0.7"    # Reqwest-based HTTP client implementation for reqsign.
reqsign-file-read-tokio = "3.0.7"      # Tokio-based file reader implementation for reqsign
... and 13 crates more (use --limit N to see more)
reqsign #http #requests #signing #aws #azure
Signing HTTP requests for AWS, Azure, Google, Huawei, Aliyun, Tencent and Oracle services
version: 0.20.7
license: Apache-2.0
rust-version: 1.86.0
documentation: https://docs.rs/reqsign
repository: https://github.com/apache/opendal-reqsign

版本对照与选型建议:

组件版本要求结论
reqsign(crates.io 最新)0.20.7Rust ≥ 1.86.0新工程直接用 0.20.x
旧工程锁定版本如 0.19.x按原版本要求升级前先核对 rustc 版本
apt 源 rustc/cargo1.75.0低于 1.86.0不可编译 reqsign 0.20.7,需 rustup

💡 版本选择建议:先确认服务器 rustc 版本。若 rustc --version 低于 1.86.0,先按 2.3 用 rustup 升级;本指南全程按 rustc 1.99.0 + reqsign 0.20.7 实测。多个工具链并存与切换见第八节 Q5。

四、方案 A:cargo add 依赖引入(官方推荐)

Reqsign 官方推荐通过 Cargo 以依赖方式引入,便于统一版本与传递依赖。本方案从零创建一个工程并验证依赖可用。

4.1 创建工程

mkdir -p /root/reqsign-add-demo
cd /root/reqsign-add-demo
cargo init --name reqsign-add-demo

实测回显:

    Creating binary (application) `reqsign-add-demo` package

💡 说明:也可用 cargo new reqsign-add-demo --bin 一步完成创建。

4.2 引入 reqsign 依赖

使用 cargo add 引入,按需开启 feature(AWS SigV4 对应 aws-v4):

cargo add reqsign --features aws-v4

实测回显:

      Adding reqsign v0.20.7 to dependencies
    Updating crates.io index
     Locking 135 packages to highest Rust 1.99.0 compatible versions

Cargo.toml 生成结果:

[package]
name = "reqsign-add-demo"
version = "0.1.0"
edition = "2024"

[dependencies]
reqsign = { version = "0.20.7", features = ["aws-v4"] }

常用 feature 一览(cargo info reqsign 实测):aws-v4(AWS SigV4)、aws-v4a(AWS SigV4a)、aws(= aws-v4)、aliyun(阿里云 OSS)、tencent(腾讯云 COS)、azure、google、huaweicloud、oracle、volcengine、default-context(默认开启,提供基于 reqwest/tokio 的现成上下文)、full(全量开启)。

4.3 编译验证

cd /root/reqsign-demo
cargo build

实测回显:

   Compiling reqsign-demo v0.1.0 (/root/reqsign-demo)
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 1.58s

依赖解析结果(cargo tree,节选):

reqsign-demo v0.1.0 (/root/reqsign-demo)
├── http v1.5.0
├── reqsign v0.20.7
│   ├── reqsign-aws-v4 v3.3.1
│   │   ├── reqsign-aws-core v3.2.0
│   │   │   ├── reqsign-core v3.3.2
│   ├── reqsign-command-execute-tokio v3.0.7
│   ├── reqsign-core v3.3.2
│   ├── reqsign-file-read-tokio v3.0.7
│   ├── reqsign-http-send-reqwest v4.0.7

五、方案 B:cargo vendor 离线依赖(内网/断网场景)

内网环境无法访问 crates.io 时,可在可联网机器上把全部依赖打包进工程,离线编译。

5.1 生成 vendor 目录

cd /root/reqsign-demo
cargo vendor --locked vendor

实测回显(尾部):

   Vendoring zmij v1.0.23 (/root/.cargo/registry/src/index.crates.io-1949cf8c6b5b557f/zmij-1.0.23) to vendor/zmij
To use vendored sources, add this to your .cargo/config.toml for this project:

[source.crates-io]
replace-with = "vendored-sources"

[source.vendored-sources]
directory = "vendor"

vendor/ 目录包含全部依赖源码(本工程实测约 240 MB,含 anyhow、base64、bitflags、bytes 等)。

5.2 配置 .cargo/config.toml

按 cargo 提示在工程下创建 .cargo/config.toml:

[source.crates-io]
replace-with = "vendored-sources"

[source.vendored-sources]
directory = "vendor"

5.3 离线编译验证

cargo build --offline

离线模式下 cargo 从 vendor/ 读取依赖,不再访问 crates.io;--offline 可加在任何构建命令后强制离线。将整个工程目录(含 vendor/)拷入内网服务器后即可直接编译。

六、配置说明

Reqsign 作为 Rust 库,核心配置通过 Cargo.toml 的依赖声明与代码内的 Context / Signer / 凭据提供者完成,没有服务端配置文件。关键点:

  • Rust 工具链:使用 rustup 安装的 stable 工具链(rustc --version ≥ 1.86.0);当前会话如默认仍是旧版,可执行 source "$HOME/.cargo/env" 或 export PATH="$HOME/.cargo/bin:$PATH" 切换。
  • 依赖版本:reqsign = { version = "0.20.7", features = ["aws-v4"] },按需开启云服务 feature。
  • 系统依赖:pkg-config 与 libssl-dev 是 reqwest 的编译前置,缺一不可。
  • 凭据与签名参数在代码中配置(StaticCredentialProvider / RequestSigner 等),详见《Apache Reqsign 0.20.7 配置参数详解》篇。

七、注意事项

⚠️ 注意:

  1. reqsign 0.20.7 要求 Rust ≥ 1.86.0,Ubuntu 22.04 官方源的 rustc 1.75.0 不满足,务必用 rustup 安装。
  2. 首次编译耗时较长(需下载约 135 个依赖 crate),属正常现象;cargo build 成功即依赖可用。
  3. 演示用访问密钥 AKIDEXAMPLE 为 AWS 官方文档示例值,仅用于签名演示,不代表真实凭据。
  4. 选择 default-context feature 后,签名器默认使用 reqwest + tokio 的现成实现;不开启则需自行组装 Context。

八、常见问题

Q1:cargo build 报 failed to parse lock file、lock file version 4 requires -Znext-lockfile-bump? 原因:Cargo.lock 由新版 cargo 生成(lock 文件 v4 格式),当前 cargo 过旧。解决:确认 cargo --version ≥ 1.85 并切换到 rustup 工具链(source "$HOME/.cargo/env"),再用同一工具链重跑 cargo build。

Q2:报 feature edition2024 is required / not stabilized in this version of Cargo (1.75.0)? 原因:新版传递依赖(如 cpufeatures 0.3.1)使用 edition2024,需要 cargo ≥ 1.85。解决:按 2.3 用 rustup 安装最新 stable 工具链(实测 1.99.0),不要使用 apt 版 cargo 1.75.0。

Q3:报 pkg-config could not be found / 找不到 OpenSSL? 原因:未安装编译依赖。解决:sudo apt-get install -y pkg-config libssl-dev,然后重跑 cargo build。

Q4:如何锁定或升级/降级 reqsign 版本? Cargo.toml 中写 reqsign = "0.20.7" 即锁定 0.20.7;升级到更新版本用 cargo update -p reqsign(按 Cargo.lock 解析),降级则改版本号后 cargo update -p reqsign --precise <版本>。reqsign 相关子 crate(reqsign-aws-v4 等)由主 crate 传递依赖锁定,一般无需单独管理。

Q5:如何管理多个 Rust 工具链版本? rustup 支持并存多版本:rustup install 1.86.0 安装指定版本,rustup default 1.86.0 切换默认,rustup toolchain list 查看已装版本(实测回显 stable-x86_64-unknown-linux-gnu (active, default)),卸载用 rustup toolchain uninstall <版本>。

九、卸载方式

若仅移除 Reqsign 依赖:删除 Cargo.toml 中对应 [dependencies] 条目,或用 cargo 命令移除:

cd /root/reqsign-add-demo
cargo remove reqsign

实测回显:

    Removing reqsign from dependencies

清理演示工程与本地缓存:

rm -rf /root/reqsign-demo /root/reqsign-add-demo
rm -rf ~/.cargo/registry/src/index.crates.io-*/reqsign-*

若同时移除 Rust 工具链与系统依赖:

rustup self uninstall
sudo apt-get remove -y pkg-config libssl-dev
sudo apt-get autoremove -y

十、参考链接

  • Reqsign crates.io 页面:https://crates.io/crates/reqsign
  • Reqsign 官方文档:https://docs.rs/reqsign
  • 源码仓库(Apache OpenDAL 组织):https://github.com/apache/opendal-reqsign
  • Rust 官方安装(rustup):https://rustup.rs/