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 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.7 | Rust ≥ 1.86.0 | 新工程直接用 0.20.x |
| 旧工程锁定版本 | 如 0.19.x | 按原版本要求 | 升级前先核对 rustc 版本 |
| apt 源 rustc/cargo | 1.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 配置参数详解》篇。
七、注意事项
⚠️ 注意:
- reqsign 0.20.7 要求 Rust ≥ 1.86.0,Ubuntu 22.04 官方源的 rustc 1.75.0 不满足,务必用 rustup 安装。
- 首次编译耗时较长(需下载约 135 个依赖 crate),属正常现象;
cargo build成功即依赖可用。- 演示用访问密钥
AKIDEXAMPLE为 AWS 官方文档示例值,仅用于签名演示,不代表真实凭据。- 选择
default-contextfeature 后,签名器默认使用 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/