簡體   English   中英

如何在離線環境下使用 Cargo 構建項目?

[英]How to build a project using Cargo in an offline environment?

我有一台帶有 OS X 系統的筆記本電腦,可以訪問互聯網,還有一台 Linux 服務器,由於某些安全原因無法訪問互聯網。

我想構建一個依賴於 Linux 服務器的 Rust 項目。 由於Linux服務器無法上網,我在OSX筆記本上運行cargo build命令,將依賴源文件下載到.cargo目錄下,然后將這些文件拷貝到Linux服務器,放到/root/.cargo目錄下。

我使文件結構相同,但是當我在 Linux 服務器上運行cargo build時,它仍然嘗試連接到網站並且構建失敗。 盡管 dep 源文件已經在.cargo目錄中,但cargo build命令總是嘗試連接互聯網。

如何在離線環境中構建具有依賴項的 Rust 項目? 為什么復制依賴的源文件不起作用?

對於 Rust 1.37+,請參閱: https ://stackoverflow.com/a/65254702/147192


簡短的回答是:高達 1.37(不包括),這很復雜。

長的答案是cargo將嘗試連接到github以檢查Cargo.toml文件引用的 crate 的索引。

我建議你檢查cargo-vendor原型來解決這個問題(由 aturon,Rust 工具子團隊的成員),否則你可以看看有些人如何為 crates.io 創建鏡像以避免依賴於互聯網。

需要 Rust 構建不需要互聯網,並且有人在為它工作,但是目前沒有幸運的解決方案。

好消息! 從 Rust 1.37 開始,您可以使用 Cargo 自己的vendor命令來下載您的 crate 的依賴項並將其捆綁在 crate 本身中:

  1. 首先,運行cargo vendor 這將在您的 crate 的根目錄中設置一個名為vendor的新目錄。 然后它將從 crates.io 和 git 下載依賴項,並將它們存儲在這個新目錄中。

  2. cargo vendor完成下載所有必需的依賴項后,它將打印一組您需要遵循的說明。 在撰寫本文時,您只需將幾行復制到.cargo/config.toml 請注意, config.toml與您的 crate 的根目錄相關,而不是您的主目錄中的根目錄。

完成后,就依賴項而言,您的 crate 將是完全獨立的。 您可以將此方法與 Rust 的離線安裝程序結合使用,以完全離線構建 Rust 程序。

查看新發布的romt -Rust 離線鏡像工具

Romt(Rust 離線鏡像工具)有助於在離線環境中使用 Rust 編程語言。 提供了以下說明和工具:

  • Rust 生態系統工件的鏡像:
    • 工具鏈(Rustc、Cargo、庫等)
    • Rustup(工具鏈多路復用器)
    • Crates.io(社區提供的 Crates)
  • 增量工件下載。
  • 增量工件轉移到離線網絡。
  • 在離線環境(離線計算機、斷開網絡)中提供工件。

我可以通過在我的項目中添加這個 .cargo/config 文件來替換官方 crates.io 注冊表使用(在 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

我可以通過在我的項目中(或在 $CARGO_HOME%\\.cargo 下)添加這個 .cargo/config 文件來替換官方 crates.io 注冊表的使用:

[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 下載

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM