zerus
Lightweight tool for creating project-specific and/or general offline crates.io mirrors
Build zerus
Either build from published source in crates.io.
$ cargo install zerus --locked
Or download from github releases.
Usage
Download crates
Use zerus mirror to download .crate files for your project's dependencies.
$ zerus mirror new-mirror ../deku/Cargo.toml ../adsb_deku/Cargo.toml
Mirror individual crates by name (resolves to the latest version) or pinned to a specific version. When --crate is used, --get-feature-gated is implied.
$ zerus mirror new-mirror --crate reqwest --crate serde@1.0.210
Use --get-feature-gated to recursively expand and download all transitive dependencies, regardless of which features are currently enabled. This is useful when building a more complete mirror rather than one tailored to a specific project's current feature set — ensuring crates are available even if features change later.
$ zerus mirror new-mirror --get-feature-gated ../deku/Cargo.toml
Adding the top 100 rust crates used by rust-playground is easy:
$ git clone https://github.com/rust-lang/rust-playground
$ zerus mirror new-mirror rust-playground/top-crates/Cargo.toml
Transfer to offline network
Copy the mirror directory to your proxy or offline network.
Generate index
On the offline network, use update-index to generate a registry index from the .crate files.
$ zerus update-index new-mirror --dl-url http://[IP]
Serve mirror
Use zerus serve to host the registry with sparse index, crate downloads, and a search API.
$ zerus serve new-mirror --bind 0.0.0.0:8080
Enable request logging with:
$ RUST_LOG=tower_http=debug zerus serve new-mirror
Build with mirror
Add the following to .cargo/config.toml (replacing [IP] with your server address).
[]
= "sparse+http://[IP]/crates.io-index/"
[]
= "zerus"
[]
= "sparse+http://[IP]/crates.io-index/"
With the registries entry, you can search the mirror:
$ cargo search --registry zerus serde