add panamax
This commit is contained in:
parent
8386d56c38
commit
9a062cbfed
1 changed files with 136 additions and 0 deletions
136
technology/applications/web/panamax.md
Normal file
136
technology/applications/web/panamax.md
Normal file
|
@ -0,0 +1,136 @@
|
|||
---
|
||||
obj: application
|
||||
repo: https://github.com/panamax-rs/panamax
|
||||
---
|
||||
|
||||
# Panamax
|
||||
Panamax is a tool to mirror the Rust and crates.io repositories, for offline usage of `rustup` and `cargo`.
|
||||
|
||||
## Usage
|
||||
## Docker
|
||||
Panamax is available as a docker image, so you can run:
|
||||
|
||||
```
|
||||
$ 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
|
||||
```
|
||||
|
||||
Alternatively, you can run panamax in a bare-metal environment like below.
|
||||
|
||||
### Init
|
||||
In Panamax, mirrors consist of self-contained directories. To create a mirror directory `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.
|
||||
```
|
||||
|
||||
There will now be a `my-mirror` directory in your current directory.
|
||||
|
||||
### Modify mirror.toml
|
||||
Within the directory, you'll find a `mirror.toml` file. This file contains the full configuration of the mirror, and while it has sane defaults, you should ensure the values are set to what you want.
|
||||
|
||||
The other important parameter to set is the `base_url` within the `[crates]` section. After `cargo` fetches the index, it will try to use this URL to actually download the crates. It's important this value is accurate, or `cargo` may not work with the mirror.
|
||||
|
||||
You can modify `mirror.toml` at any point in time, even after the mirror is synchronized.
|
||||
|
||||
### Sync
|
||||
Once you have made the changes to `mirror.toml`, it is time to synchronize your mirror!
|
||||
|
||||
```
|
||||
$ 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.
|
||||
```
|
||||
|
||||
Once this is step completes (without download errors), you will now have a full, synchronized copy of all the files needed to use `rustup` and `cargo` to their full potential!
|
||||
|
||||
This directory can now be copied to a USB or rsync'd somewhere else, or even used in place - perfect for long plane trips!
|
||||
|
||||
Additionally, this mirror can continually by synchronized in the future - one recommendation is to run this command in a cronjob once each night, to keep the mirror reasonably up to date.
|
||||
|
||||
### Sync Select Dependencies
|
||||
Optionally, panamax can be told to only grab crates needed to build a singular project.
|
||||
`cargo vendor` is used to create a folder with all needed dependencies,
|
||||
then a panamax command can parse the created directory and only grab those crates and versions.
|
||||
```
|
||||
# Only grab crates needed for panamax, as an example
|
||||
$ cargo vendor
|
||||
$ panamax sync my-mirror vendor
|
||||
```
|
||||
|
||||
## Server
|
||||
Panamax provides a warp-based HTTP(S) server that can handle serving a Rust mirror fast and at scale. This is the recommended way to serve the mirror.
|
||||
|
||||
```
|
||||
$ panamax serve my-mirror
|
||||
Running HTTP on [::]:8080
|
||||
```
|
||||
|
||||
The server's index page provides all the instructions needed on how to set up a Rust client that uses this mirror.
|
||||
|
||||
If you would prefer having these instructions elsewhere, the rest of this README will describe the setup process in more detail.
|
||||
|
||||
Additionally, if you would prefer hosting a server with nginx, there is a sample nginx configuration in the repository, at `nginx.sample.conf`.
|
||||
|
||||
## Configuring `rustup` and `cargo`
|
||||
Once you have a mirror server set up and running, it's time to tell your Rust components to use it.
|
||||
|
||||
### Setting environment variables
|
||||
In order to ensure `rustup` knows where to look for the Rust components, we need to set some environment variables. Assuming the mirror is hosted at http://panamax.internal/:
|
||||
|
||||
```
|
||||
export RUSTUP_DIST_SERVER=http://panamax.internal
|
||||
export RUSTUP_UPDATE_ROOT=http://panamax.internal/rustup
|
||||
```
|
||||
|
||||
These need to be set whenever `rustup` is used, so these should be added to your `.bashrc` file (or equivalent).
|
||||
|
||||
### Installing `rustup`
|
||||
If you already have `rustup` installed, this step isn't necessary, however if you don't have access to https://rustup.rs, the mirror also contains the `rustup-init` files needed to install `rustup`.
|
||||
|
||||
Assuming the mirror is hosted at http://panamax.internal/, you will find the `rustup-init` files at http://panamax.internal/rustup/dist/. The `rustup-init` file you want depends on your architecture. Assuming you're running desktop Linux on a 64-bit machine:
|
||||
|
||||
```
|
||||
wget http://panamax.internal/rustup/dist/x86_64-unknown-linux-gnu/rustup-init
|
||||
chmod +x rustup-init
|
||||
./rustup-init
|
||||
```
|
||||
|
||||
This will let you install `rustup` the similarly following the steps from https://rustup.rs. This will also let you use `rustup` to keep your Rust installation updated in the future.
|
||||
|
||||
### Configuring `cargo`
|
||||
`Cargo` also needs to be configured to point to the mirror. This can be done by adding the following lines to `~/.cargo/config` (creating the file if it doesn't exist):
|
||||
|
||||
```
|
||||
[source.my-mirror]
|
||||
registry = "http://panamax.internal/crates.io-index"
|
||||
[source.crates-io]
|
||||
replace-with = "my-mirror"
|
||||
```
|
||||
|
||||
`Cargo` should now be pointing to the correct location to use the mirror.
|
||||
|
||||
### Testing configuration
|
||||
You've now set up a Rust mirror! In order to make sure everything is set up properly, you can run a simple test:
|
||||
|
||||
```
|
||||
$ cargo install ripgrep
|
||||
```
|
||||
|
||||
This will install the grep-like `rg` tool (which is a great tool - props to burntsushi!). If `cargo` successfully downloads and builds everything, you have yourself a working mirror. Congratulations!
|
Loading…
Add table
Add a link
Reference in a new issue