crates.io 易斷線、checksum 爭議與 Cargo.lock 不一致。本文給鏡像 registry 域名、CARGO_NET_RETRY 等參數、lockfile 決策矩陣、CI 三步、FAQ,以及子模組與 monorepo 注意。延伸:依賴拉取 FAQ、部落格列表;節點與套餐見首頁、購買頁(免登入)。
為何遠端 Mac 上的 Cargo 特別容易「拉不動」?
- 網路路徑長:跨境 RTT 高,預設重試不足時 job 易失敗。
- 索引型態混用:sparse 與舊式 git 索引若在不同機器切換,可能觸發解析差異。
- lockfile 治理:多倉庫或子模組各自
Cargo.lock,與公司私有 registry 並存時更易衝突。
選型決策矩陣(2026):鏡像源、重試與 lockfile 一致性
先決定「誰有權改 lock」與「索引來源是否全隊一致」,再選鏡像與重試策略。
| 情境 | 建議做法 | lockfile 策略 | 風險提示 |
|---|---|---|---|
| 開放原始碼庫、需可重現建置 | 全隊同一稀疏鏡像域名;CI 設 CARGO_NET_RETRY | 提交 Cargo.lock;CI 使用 cargo build --locked | 鏡像延遲同步可能導致短暫 checksum 不符 |
| 內部二進位產品、依賴變更少 | 固定 .cargo/config.toml;可搭配 net.git-fetch-with-cli = true | 僅允許維護者在乾淨環境執行 cargo update 並審 PR | 混用多個鏡像域名會放大不一致 |
| 企業 HTTPS 代理/攔截 | 設定 CARGO_HTTP_CAINFO 或系統信任;Git 走代理 | 鎖定 lock 並在代理環境驗證 --locked | 忽略憑證校驗僅宜本機除錯 |
鏡像域名範例:mirrors.tuna.tsinghua.edu.cn、mirrors.ustc.edu.cn、rsproxy.cn(路徑依官方文件)。
遠端 Mac CI 三步配置(可複製環境變數)
步驟一:網路韌性。 在 CI 與遠端 Mac shell 設定 export CARGO_NET_RETRY=10(或對應 config.toml 的 [net] retry),並視情況加入 export CARGO_HTTP_TIMEOUT=300 拉長單次逾時。
步驟二:鏡像與索引。 在專案或全域 .cargo/config.toml 將 crates-io replace-with 指向自訂 [source.*],registry 鍵使用鏡像提供的 sparse+https://…/crates.io-index/ 形式(域名同上表範例)。全 pipeline 必須同一組設定。
步驟三:鎖定建置。 主要建置步驟使用 cargo build --locked 或 cargo test --locked;若失敗,先比對是否有人未在鏡像環境更新 lock。
步驟四(選用):Git 後端拉 crate。 若 HTTP 層仍不穩,可設 net.git-fetch-with-cli = true 讓下載改走系統 Git,並沿用既有 http_proxy/HTTPS_PROXY。
步驟五:快取。 CI 掛載可重用 CARGO_HOME/registry cache 以縮短冷啟動。
# GitHub Actions 片段示例(YAML) env: CARGO_NET_RETRY: "10" CARGO_HTTP_TIMEOUT: "300" # 若有內部根憑證: # CARGO_HTTP_CAINFO: "/path/to/company-ca.pem" steps: - run: cargo build --locked --release
逾時/憑證/代理 FAQ
提高 CARGO_NET_RETRY、拉長 CARGO_HTTP_TIMEOUT,並檢查是否需 net.git-fetch-with-cli 讓流量走企業 Git 代理。
匯出內部根憑證後以 CARGO_HTTP_CAINFO 指定 PEM;或在 macOS 鑰匙圈正確信任。避免在正式 CI 關閉校驗。
鏡像應與官方索引語意一致;若出現 checksum 不符,先確認鏡像同步與是否混用 sparse/git 索引,再決定是否由維護者重產 lock。
與 Git 子模組/monorepo 並存注意
子模組內獨立 Rust 專案各自 Cargo.lock;workspace 通常共用根 lock。CI 對每個含 Cargo.toml 路徑分別 --locked 建置;勿在父層覆寫子模組 .cargo/config.toml 除非要統一鏡像。monorepo 多 crate 時,鏡像與 CARGO_NET_RETRY 建議設全域環境變數。
可引用清單(審計/Runbook)
- 參數:
CARGO_NET_RETRY、CARGO_HTTP_TIMEOUT、CARGO_HTTP_CAINFO。 - 建置旗標:正式 pipeline 預設
--locked。 - 鏡像:全團隊單一稀疏索引域名,與 2026 年 Cargo 預設稀疏索引行為對齊檢查。
小結與下一步
2026 年遠端 Mac跑 Rust CI:以決策矩陣統一鏡像與 lock,用 CARGO_NET_RETRY 與逾時扛跨境波動,FAQ 排查憑證與代理。延伸Git 鏡像與代理對比;節點說明見說明中心。試用 MacPull 請至定價、購買頁,免登入可瀏覽。