mirror of
https://codeberg.org/postscriptum/gemlog.git
synced 2026-03-11 12:02:40 +00:00
45 lines
No EOL
3.2 KiB
Text
45 lines
No EOL
3.2 KiB
Text
# Не верифіковане проксі Kellnr на базі власного індексу
|
||
|
||
> Повний аудит рішення не проводився, зокрема обробка [config.json](https://github.com/rust-lang/crates.io-index/blob/master/config.json). Візуально, лічильники завантажень в ланцюгу проксі працюють коректно, підміна фіктивним індексом - не дозволяє оновлень.
|
||
|
||
У попередньому гайді, я описав базове встановлення Kellnr в режимі локального та віддаленого проксі сервера:
|
||
=> rust-crates-mirroring-with-kellnr.gmi Організація локального дзеркала залежностей Cargo з Kellnr
|
||
|
||
Утім, мені не давало спокою питання потенційної компрометації дзеркала, через що я декілька днів поспіль намагався відокремити індекс з контрольними сумами від джерела кешованих пакунків.
|
||
|
||
Нарешті, мені це вдалося. Схема з'єднання виглядає наступним чином:
|
||
|
||
```
|
||
crates.io > -|- out proxy > kellnr server > kellnr client > cargo
|
||
crates.io-index > _↑ |
|
||
↑_________________[--proxy-index]__________________↓
|
||
```
|
||
|
||
У цьому ланцюгу, `kellnr server` ми не довіряємо, оскільки той ходить через не відомий нам вихідний проксі. Натомість, піднімаємо додатковий локальний інстанс `kellnr client`, який звертається до першого але використовує власний `--proxy-index`:
|
||
|
||
``` /etc/systemd/system/kellnr.service
|
||
kellnr start \
|
||
--proxy-index https://index.crates.io/ \
|
||
--proxy-url http://[202:68d0:f0d5:b88d:1d1a:555e:2f6b:3148]:8180/api/v1/cratesio/dl/ \
|
||
```
|
||
* це просто фрагмент команди `kellnr start` з файлу `/etc/systemd/system/kellnr.service`, де ми задіюємо офіційний індекс, але у вас це може бути локальне дзеркало репозиторію
|
||
* `http://[202:68d0:f0d5:b88d:1d1a:555e:2f6b:3148]:8180` - не верифікований `kellnr server` на схемі
|
||
|
||
Відповідно, в локальному `~/.cargo/config.toml` вказуємо `kellnr client`, якому довіряємо:
|
||
|
||
``` ~/.cargo/config.toml
|
||
[registries.kellnr]
|
||
index = "sparse+http://127.0.0.1:8000/api/v1/cratesio/"
|
||
|
||
[source.crates-io]
|
||
replace-with = "kellnr"
|
||
|
||
[http]
|
||
timeout = 180
|
||
```
|
||
|
||
Нагадаю, що окремий індекс використовувати не обов'язково, якщо ваша копія проєкту містить файл `Cargo.lock` з хешами, що дозволяє звіряти їх аргументом `--locked`.
|
||
|
||
## Дивіться також
|
||
|
||
=> kellnr-storage-on-usb-drive.gmi Спільне сховище Kellnr на флешці USB |