隔離網路下的 rust 開發

記錄一下隔離環境下的開發環境設置

動機

作法

Rust Toolchain

外網rustup 安裝完後直接整包 .rustup, .cargo 資料夾打包。

內網 解開後,將 .cargo/bin 加入 $PATH 後,用 rustup default stable 確認

Cargo & crates

外網 cargo new 建立專案後,手動攥寫 Cargo.toml ,用 cargo update 後,再用 cargo-local-registry --no-delete -s Cargo.lock REGISTRY_DIR 來建立 local registry,最後再打包整個 REGISTRY_DIR

內網 .cargo/config.toml 加入 Installing Rust Offline 文中摘錄

[source.offline]
local-registry = "PATH_TO_REGISTRY_DIR"

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

private registry

現在的 private registry 選項不算多,因為沒有太多需求,我這邊只用了 estuary 來簡單架設

歿案

(crates) cargo vendor

vendor 就是把需要的套件下載到專案資料夾,但是這樣但是用 vendor 來管理套件相依性實在是很麻煩,而且為了 CI 還得將 vendor 一起進版本控制,不是很乾淨。

(toolchain/crates) Panamax

Panamax 是一個獨立的打包工具,可以指定需要的 rust 版本並將 https://crates.io 整個下載回來的工具,作為完全隔離的狀況下倒是一個不錯的選項,但是對我來說打包整個 https://crates.io,而不能只選需要的部份還是太多了。

(private registry) git

Cargo.toml 在指定套件時雖然可以指定 git 作為來源,但是因為其會將每個不同的 commit 作為不相容的版本,而無法將 tag 作為 semvar 解讀,因此用起來很不方便。