mirror of
https://codeberg.org/postscriptum/gemlog.git
synced 2026-03-11 12:02:40 +00:00
121 lines
No EOL
6.3 KiB
Text
121 lines
No EOL
6.3 KiB
Text
# Спільне сховище Kellnr на флешці USB
|
||
|
||
Оскільки мій імпровізований сервер ARM наказав довго жити, постала задача десь розмістити локальний кеш крейтів на випадок відсутності Інтернет та можливості розробки Rust офлайн. Kellnr мені сподобався своєю гнучкістю і не вибагливістю до диску, за рахунок кешування тільки тих даних, які використовуються. З ним легко збудувати децентралізовані ланцюги проксі і так само легко переключатись у разі не доступності одного з них.
|
||
|
||
Для локального кеш-сервера, першою опцією в мене був сам комп'ютер, але єдиний його HDD (запакований в iMac) майже заповнений, до того ж повільний. Інший комп'ютер PC - наразі не зручно запускати через перебої живлення і його апетити до UPS.
|
||
|
||
Тому вирішив застосувати свій старий лайф-хак з розширенням пам'яті засобами звичайної флешки USB (Kellnr пише дані тільки при першому запиті крейту, тому проблем з живучістю SSD не повинно бути). Також, цей сценарій дозволяє тягати флешку між компами без жодної залежності від стаціонарного сервера чи локальної мережі.
|
||
|
||
## Підготовка USB
|
||
|
||
Фактично, я користуюсь флешкою 32 GB, яка при ~1к крейтів заповнена на 30%. Тобто підійде сама чіпова флешка, і зовсім не обов'язково спеціально купувати заявлені 300 Гб станом на 2024-2026. При першій ініціалізації реєстру, відбувається пікове зростання споживання диску через внутрішні залежності усіх запитаних крейтів, але потім воно збалансовується і тримається на згаданому вище рівні.
|
||
|
||
### Файлова система
|
||
|
||
Спочатку я відформатував накопичувач в FAT, оскільки мені набридло морочитись з правами. Утім, як виявилося згодом, Kellnr якось там залежить від мета-даних і сипле в журнали помилки. Тому згодом я обрав формат Ext4, створивши для сховища простір імен `kellnr/data`, розмістивши в `kellnr/` переносний бінарник та пам'ятку для швидкого розгортання на іншому комп'ютері.
|
||
|
||
## Системний сервіс
|
||
|
||
Перший час, крутив кеш-проксі через CLI, але згодом вирішив організувати для нього сервіс:
|
||
|
||
``` /etc/systemd/system/kellnr.service
|
||
[Unit]
|
||
After=network.target
|
||
Wants=network.target
|
||
RequiresMountsFor=/mnt/usb1/kellnr/data
|
||
|
||
[Service]
|
||
Type=simple
|
||
|
||
User=kellnr
|
||
Group=kellnr
|
||
|
||
ExecStart=/usr/local/bin/kellnr start --registry-data-dir /mnt/usb1/kellnr/data \
|
||
--proxy-enabled true \
|
||
--proxy-download-on-update true \
|
||
--local-ip 127.0.0.1 \
|
||
-l warn
|
||
|
||
Environment="NO_COLOR=1"
|
||
StandardOutput=file:///var/log/kellnr/debug.log
|
||
StandardError=file:///var/log/kellnr/error.log
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
```
|
||
* зверніть увагу: якщо не вказати `--local-ip` то стандартно Kellnr працюватиме на `0.0.0.0`
|
||
|
||
Хоча сервіс локальний, я також за звичкою створюю для процесу окремого користувача:
|
||
|
||
``` bash
|
||
sudo useradd -s /usr/sbin/nologin -Mr kellnr
|
||
```
|
||
|
||
І відповідні теки для монтування та журналів:
|
||
|
||
``` bash
|
||
sudo mkdir /var/log/kellnr
|
||
sudo chown kellnr:kellnr /var/log/kellnr
|
||
mkdir /mnt/usb1
|
||
```
|
||
|
||
Отримуємо UUID пристрою для прив'язки його в `/etc/fstab`:
|
||
|
||
``` bash
|
||
lsblk -f
|
||
```
|
||
|
||
Додаємо в кінець файлу`/etc/fstab` новий пристрій, замінивши `xxxx-xxxx-xxxx-xxxx-xxxx` на ваше значення:
|
||
|
||
``` /etc/fstab
|
||
UUID=xxxx-xxxx-xxxx-xxxx-xxxx /mnt/usb1 ext4 defaults,nofail 0 0
|
||
```
|
||
* важливо вказати `nofail`, інакше система без флешки (або після її пошкодження) може не завантажитись!
|
||
|
||
Перевіряємо конфігурацію і монтуємось:
|
||
|
||
``` bash
|
||
sudo systemctl daemon-reload
|
||
sudo findmnt --verify --verbose
|
||
sudo mount -a
|
||
```
|
||
|
||
Kellnr запускатиметься від однойменного користувача, тому для теки сховища потрібні відповідні права:
|
||
|
||
``` bash
|
||
sudo mkdir -p /mnt/usb1/kellnr
|
||
sudo chown kellnr:kellnr -R /mnt/usb1/kellnr
|
||
sudo chmod 0755 -R /mnt/usb1
|
||
```
|
||
|
||
Тепер можна запустити сервіс:
|
||
|
||
``` bash
|
||
sudo systemctl restart kellnr
|
||
```
|
||
|
||
Автозапуск з системою:
|
||
|
||
``` bash
|
||
sudo systemctl enable kellnr
|
||
```
|
||
|
||
## Клієнт
|
||
|
||
Для цієї конфігурації, мною використовується наступна конфігурація:
|
||
|
||
``` ~/.cargo/config.toml
|
||
[registries.kellnr]
|
||
index = "sparse+http://127.0.0.1:8000/api/v1/cratesio/"
|
||
|
||
[source.crates-io]
|
||
replace-with = "kellnr"
|
||
|
||
[http]
|
||
timeout = 900
|
||
```
|
||
|
||
## Дивіться також
|
||
|
||
=> rust-crates-mirroring-with-kellnr.gmi Організація локального дзеркала залежностей Cargo з Kellnr
|
||
=> kellnr-proxy-verification-using-local-index.gmi Не верифіковане проксі Kellnr на базі власного індексу |