[英]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 本身中:
首先,運行cargo vendor
。 這將在您的 crate 的根目錄中設置一個名為vendor
的新目錄。 然后它將從 crates.io 和 git 下載依賴項,並將它們存儲在這個新目錄中。
當cargo vendor
完成下載所有必需的依賴項后,它將打印一組您需要遵循的說明。 在撰寫本文時,您只需將幾行復制到.cargo/config.toml
。 請注意, config.toml
與您的 crate 的根目錄相關,而不是您的主目錄中的根目錄。
完成后,就依賴項而言,您的 crate 將是完全獨立的。 您可以將此方法與 Rust 的離線安裝程序結合使用,以完全離線構建 Rust 程序。
查看新發布的romt
-Rust 離線鏡像工具。
Romt(Rust 離線鏡像工具)有助於在離線環境中使用 Rust 編程語言。 提供了以下說明和工具:
我可以通過在我的項目中添加這個 .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.