zerus 0.14.0

Lightweight tool for creating project-specific and/or general offline crates.io mirrors
zerus-0.14.0 is not a library.

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).

[source.zerus]
registry = "sparse+http://[IP]/crates.io-index/"

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

[registries.zerus]
index = "sparse+http://[IP]/crates.io-index/"

With the registries entry, you can search the mirror:

$ cargo search --registry zerus serde