#mirror #repository #rustup #cargo #offline #io #sync

app panamax

镜像 rustup 和 crates.io 仓库,以支持离线使用 rustup 和 Cargo

20 个版本 (稳定)

1.0.14 2024年6月6日
1.0.12 2023年2月4日
1.0.6 2022年5月8日
1.0.4 2021年11月23日
0.1.0 2019年7月13日

#97 in 开发工具

Download history 4/week @ 2024-05-13 27/week @ 2024-05-20 23/week @ 2024-05-27 211/week @ 2024-06-03 40/week @ 2024-06-10 32/week @ 2024-06-17 16/week @ 2024-06-24 180/week @ 2024-07-01 12/week @ 2024-07-08 8/week @ 2024-07-15 10/week @ 2024-07-22 34/week @ 2024-07-29 16/week @ 2024-08-05 8/week @ 2024-08-12

每月下载量:69

MIT/Apache

430KB
3K SLoC

包含 (WOFF 字体,85KB) static/fonts/FiraSans-Medium.woff,(WOFF 字体,84KB) static/fonts/FiraSans-Light.woff,(WOFF 字体,84KB) static/fonts/FiraSans-Regular.woff

Panamax

crates.io Docker Image Version (latest semver)

image

Panamax 是一个用于镜像 Rust 和 crates.io 仓库的工具,以便离线使用 rustupcargo

安装

Panamax 本身可在 crates.io 上找到,可以通过以下方式安装:

$ cargo install --locked panamax

或者,您可以克隆此仓库并在其中使用 cargo buildcargo run

使用方法

Docker

Panamax 作为一个 Docker 镜像提供,因此您可以运行:

$ docker run --rm -it -v /path/to/mirror/:/mirror --user $(id -u) panamaxrs/panamax init /mirror
(Modify /path/to/mirror/mirror.toml as needed)
$ docker run --rm -it -v /path/to/mirror/:/mirror --user $(id -u) panamaxrs/panamax sync /mirror
(Once synced, serve the mirror)
$ docker run --rm -it -v /path/to/mirror/:/mirror --user $(id -u) -p8080:8080 panamaxrs/panamax serve /mirror

或者,您可以在以下裸机环境中运行 Panamax。

初始化

在 Panamax 中,镜像由自包含目录组成。要创建一个镜像目录 my-mirror

$ panamax init my-mirror
Successfully created mirror base at `my-mirror`.
Make any desired changes to my-mirror/mirror.toml, then run panamax sync my-mirror.

现在您的当前目录中将有 my-mirror 目录。

修改 mirror.toml

在该目录中,您会找到一个 mirror.toml 文件。此文件包含镜像的完整配置,尽管它有合理的默认值,但您应确保设置的值符合您的需求。

另一个重要的设置参数是 base_url,它在 [crates] 部分。在 cargo 获取索引后,它将尝试使用此 URL 下载 crates。这个值必须准确,否则 cargo 可能无法与镜像一起工作。

您可以在镜像同步后的任何时候修改 mirror.toml

同步

一旦您对mirror.toml进行了修改,就到了同步您的镜像的时候了!

$ panamax sync my-mirror
Syncing Rustup repositories...
[1/5] Syncing rustup-init files... ██████████████████████████████████████████████████████████████ 27/27 [00:00:06]
[2/5] Syncing latest stable...     ████████████████████████████████████████████████████████████ 602/602 [00:09:02]
[3/5] Syncing latest beta...       ████████████████████████████████████████████████████████████ 524/524 [00:07:29]
[4/5] Syncing latest nightly...    ████████████████████████████████████████████████████████████ 546/546 [00:08:56]
[5/5] Cleaning old files...        ████████████████████████████████████████████████████████████ 546/546 [00:00:00]
Syncing Rustup repositories complete!
Syncing Crates repositories...
[1/3] Fetching crates.io-index...  ██████████████████████████████████████████████████████████ 1615/1615 [00:00:02]
[2/3] Syncing crates files...      ██████████████████████████████████████████████████████████ 6357/6357 [00:00:05]
[3/3] Syncing index and config...
Syncing Crates repositories complete!
Sync complete.

这一步骤完成后(没有下载错误),您将拥有所有使用rustupcargo所需文件的完整同步副本,充分发挥它们的功能!

现在可以将其复制到USB驱动器上,或使用rsync在其他地方同步,甚至可以直接使用 - 完美适合长途飞行!

此外,该镜像将来可以持续同步 - 一个建议是每晚运行此命令一次,以保持镜像的相对最新。

同步选择依赖项

可选地,panamax可以告诉它只获取构建单个项目所需的crate。使用cargo vendor创建一个包含所有所需依赖项的文件夹,然后panamax命令可以解析创建的目录,并仅获取那些crate及其版本。

# Only grab crates needed for panamax, as an example
$ cargo vendor
$ panamax sync my-mirror vendor

服务器

Panamax提供了一个基于warp的HTTP(S)服务器,可以快速且大规模地处理Rust镜像的提供。这是推荐提供镜像的方式。

$ panamax serve my-mirror
Running HTTP on [::]:8080

服务器的索引页面提供了设置使用此镜像的Rust客户端所需的所有说明。

如果您希望将这些说明放在其他地方,本README的其余部分将更详细地描述设置过程。

此外,如果您希望使用nginx托管服务器,仓库中提供了一个nginx配置示例,位于nginx.sample.conf

配置rustupcargo

一旦您设置了镜像服务器并运行起来,就是告诉您的Rust组件使用它的时间了。

设置环境变量

为了确保rustup知道Rust组件的位置,我们需要设置一些环境变量。假设镜像托管在http://panamax.internal/

export RUSTUP_DIST_SERVER=http://panamax.internal
export RUSTUP_UPDATE_ROOT=http://panamax.internal/rustup

这些需要在每次使用rustup时设置,因此应将其添加到您的.bashrc文件(或等效文件)中。

安装rustup

如果您已经安装了rustup,此步骤不是必需的,但如果您无法访问https://rustup.rs,镜像还包含安装rustup所需的rustup-init文件。

假设镜像托管在http://panamax.internal/,您可以在http://panamax.internal/rustup/dist/找到rustup-init文件。您想要的rustup-init文件取决于您的架构。假设您正在64位桌面Linux机器上运行

wget http://panamax.internal/rustup/dist/x86_64-unknown-linux-gnu/rustup-init
chmod +x rustup-init
./rustup-init

这将使您能够按照https://rustup.rs中的步骤安装rustup。这将还使您能够使用rustup在将来保持您的Rust安装更新。

配置cargo

Cargo也需要配置以指向该镜像。可以通过将以下行添加到~/.cargo/config(如果不存在则创建文件)来完成此操作

[source.my-mirror]
registry = "http://panamax.internal/crates.io-index"
[source.crates-io]
replace-with = "my-mirror"

Cargo现在应指向使用镜像的正确位置。

测试配置

您现在已经设置了一个Rust镜像!为了确保一切设置正确,您可以运行一个简单的测试

$ cargo install ripgrep

这将安装类似grep的工具rg(这是一个非常好的工具——致敬burntsushi!)。如果cargo成功下载和构建一切,您就拥有了一个工作的镜像。恭喜您!

代理

如果您需要通过代理运行Panamax,您需要在两个地方设置您的配置选项。

首先,您需要设置环境变量http_proxy为类似https://your.proxy:1234的值(可以是http或https)。

其次,您需要在您的~/.gitconfig中设置一个http代理,如下所示

[http]
    proxy = https://your.proxy:1234

设置这两个参数后,Panamax应该可以通过HTTP代理工作。

许可证

根据MIT许可证和Apache许可证(版本2.0)的条款授权

有关详细信息,请参阅LICENSE-MITLICENSE-APACHE

贡献

除非您明确声明,否则根据Apache-2.0许可证定义,您提交的任何有意包含在作品中的贡献将根据上述条款双许可,不附加任何额外条款或条件。

依赖项

~28–45MB
~828K SLoC