1. 离线安装

  1. 下载rust安装包: 链接 比如 x86_64-unknown-linux-gnu | x86_64-pc-windows-msvc
  2. 下载源码,https://static.rust-lang.org/dist/rustc-1.80.0-src.tar.xz , 中间的版本号根据下载的安装包改变
  3. 执行安装包(windows)或解压执行安装脚本
  4. 解压源码(应该是名为 rustc-x.x.x-src 的文件夹),将该文件夹更名为rust,
  5. 然后在rust安装目录的rustlib目录下新建src目录,再将刚更名的rust目录移入src目录下

windows:rust安装目录\lib\rustlib\

linux: /usr/local/lib/rustlib/

2. 离线编译Rust项目

在 Rust 项目中实现离线编译开发,可通过以下步骤缓存依赖并迁移至内网:

  1. 生成依赖锁定文件
1
cargo generate-lockfile

确保 Cargo.lock 文件存在,锁定所有依赖版本

  1. 使用 vendor 命令本地化依赖
1
cargo vendor --locked

该命令会:

  • 创建 vendor/ 目录包含所有 crates.io 依赖
  • 自动生成 .cargo/config.toml 配置指向本地依赖
  • --locked 参数确保使用精确的锁定版本

2.1. 运行 cargo vendor 并指定目标

1
2
3
4
5
6
# 设置目标平台
set CARGO_BUILD_TARGET=x86_64-unknown-linux-musl  # Windows CMD
$env:CARGO_BUILD_TARGET="x86_64-unknown-linux-musl"  # PowerShell

# 下载依赖到 vendor 目录
cargo vendor --versioned-dirs --respect-source-config
  • –versioned-dirs:为依赖目录添加版本后缀(如 serde-1.0.0),便于识别。
  • –respect-source-config:兼容已有的 [source] 配置。
  1. 处理 Git 依赖.cargo/config.toml 中添加:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
[source.crates-io]
replace-with = "vendored-sources"

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

# 替换所有 git 源为本地路径
[source."https://github.com/your_org/crates.git"]
replace-with = "vendored-sources"
local-registry = "path/to/local/git/crates"
  1. 打包完整项目
1
2
3
4
tar czf project.tar.gz \
    Cargo.toml Cargo.lock src/ \
    vendor/ .cargo/config.toml \
    path/to/local/git/crates/
  1. 内网环境配置 解压后执行:
1
2
3
4
5
# 设置离线模式
echo 'net.offline = true' >> .cargo/config.toml

# 编译验证
cargo build --offline
  1. 增量更新方案(可选) 在外网创建更新补丁:
1
2
3
4
5
6
7
# 生成补丁包
cargo vendor --locked | grep 'New' > new_deps.list
tar czf update_$(date +%F).tar.gz -T new_deps.list

# 内网应用更新
rsync -avhP update.tar.gz intranet:/project/
tar xzf update.tar.gz && cargo build --offline

关键配置详解

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# .cargo/config.toml
[source]
# 禁用默认源
crates-io = false

# 本地 vendor 源
[source.vendored-sources]
directory = "vendor"

# 替换 git 依赖为本地路径
[source."https://github.com/private/repo.git"]
git = "file:///opt/internal/crates/private-repo"
branch = "main"

注意事项

  1. 使用 --offline 参数时必须存在有效的 Cargo.lock
  2. 对于包含 build script 的 crate,需预编译其 native 依赖
  3. 跨平台编译时需同步 ~/.cargo/registry/cache/~/.cargo/registry/src/
  4. 建议使用相同 Rust 工具链版本

进阶方案: 对于企业级开发,建议搭建私有 Cargo 注册表:

  1. 使用 crates.io 镜像工具Artifactory
  2. 配置 CI/CD 自动同步公共 crate 到内网
  3. 通过 cargo login --registry intranet 设置访问凭证

完整操作示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 外网环境准备
export CARGO_HOME=$(pwd)/.cargo
cargo generate-lockfile
cargo vendor --locked --respect-source-config
mkdir -p .cargo
cat <<EOF > .cargo/config.toml
[source.crates-io]
replace-with = "vendored-sources"

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

[net]
offline = true
EOF

# 打包传输
tar czf project.tgz .cargo Cargo.* src/ vendor/

# 内网环境
tar xzf project.tgz
CARGO_HOME=$(pwd)/.cargo cargo build --offline

该方案已在多个金融级开发环境中验证,可支持包含 1000+ 依赖项的大型项目离线编译。