如何在离线环境中使用Cargo构建项目?

时间:2015-08-28 09:03:22

标签: linux macos rust

我的笔记本电脑配有可以访问互联网的OS X系统,以及因某些安全原因无法访问互联网的Linux服务器。

我想构建一个依赖于Linux服务器的Rust项目。由于Linux服务器无法访问Internet,因此我在OSX笔记本电脑上运行cargo build命令并将依赖关系源文件下载到.cargo目录,然后将这些文件复制到Linux服务器并将其放入{ {1}}目录。

我使文件结构相同,但是当我在Linux服务器上运行/root/.cargo时,它仍然尝试连接到this网站,并且构建失败。尽管dep源文件已经在cargo build目录中,但cargo build命令始终尝试连接Internet。

如何在脱机环境中构建具有依赖项的Rust项目?为什么复制依赖项的源文件不起作用?

5 个答案:

答案 0 :(得分:5)

简短的回答是:现在,这很复杂。

答案很长,cargo会尝试连接到github,以便检查Cargo.toml文件引用的包的索引。

我建议你检查cargo-vendor原型来解决这个问题(由aturon,Rust工具子团队的成员),否则你可以看看有些人created a mirror如何处理crates.io为了避免依赖互联网。

需要Rust版本不需要互联网,而且人们正在努力,但目前还没有幸福的解决方案。

答案 1 :(得分:0)

查看新发布的romt - Rust Offline Mirror Tool

Romt(Rust脱机镜像工具)有助于在脱机环境中使用Rust编程语言。提供以下说明和工具:

  • Rust生态系统工件的镜像:
    • 工具链(Rustc,货物,库等)
    • Rustup(工具链多路复用器)
    • Crates.io(社区提供的箱子)
  • 增量工件下载。
  • 增量工件转移到离线网络。
  • 在离线环境(离线计算机,网络断开连接)中投放的工件。

答案 2 :(得分:0)

好消息!从rust 1.37开始,您可以使用货物自己的vendor command下载并捆绑您的板条箱相关性到板条箱中:

  1. 首先,运行cargo vendor。这将在板条箱的根目录中建立一个名为vendor的新目录。然后它将从crates.io和git下载依赖项,并将它们存储在此处。

  2. 完成cargo vendor后,它将打印您需要遵循的指示。当前,它将指示您将一些配置文本复制到项目的.cargo/config.toml(相对于板条箱的根目录,而不是主目录)。

完成后,就货物而言,您的板条箱将完全独立。如果将其与offline installers结合使用,则可以完全安装rust并离线构建rust程序。

答案 3 :(得分:0)

我可以通过添加这个来替换官方 crates.io 注册表的使用 我的项目中的 .cargo/config 文件(在 windows %USERPROFILE%\.cargo\config 下似乎被忽略了):

[source]

[source.mirror]
registry = "http://localhost:8185/auser/crates.io-index.git"

[source.crates-io]
replace-with = "mirror"

也可以使用基于文件的 git 注册表克隆:

registry = "file://c:/github/crates.io-index.git"

使用 git clone --bare 或 --mirror 下载

货物建造现在打印 Updating 'c:\github\crates.io-index.git' index 而不是 Updating crates.io index

答案 4 :(得分:0)

我可以通过添加这个来替换官方 crates.io 注册表的使用 我的项目中的 .cargo/config 文件(或在 $CARGO_HOME%\.cargo 下):

[source]

[source.mirror]
registry = "http://localhost:8185/auser/crates.io-index.git"

[source.crates-io]
replace-with = "mirror"

也可以使用基于文件的 git 注册表克隆:

registry = "file://c:/github/crates.io-index.git"

使用 git clone --bare 或 --mirror 下载