隔離網路下的 rust 開發
記錄一下隔離環境下的開發環境設置
動機
- 開發環境受限不能連上網際網路,也無法使用 proxy 連出,只能透過先準備好的檔案安裝。
- 工作環境有兩處需要:開發機與另一台 Gitlab CI runner 的建置機
- 開發的專案不只一個,彼此也有相依性
作法
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 解讀,因此用起來很不方便。