mirror of
https://codeberg.org/postscriptum/gemlog.git
synced 2026-03-11 12:02:40 +00:00
add kellnr-storage-on-usb-drive.gmi
This commit is contained in:
parent
95d35ca7cd
commit
677a06b776
4 changed files with 128 additions and 2 deletions
117
public/uk/kellnr-storage-on-usb-drive.gmi
Normal file
117
public/uk/kellnr-storage-on-usb-drive.gmi
Normal file
|
|
@ -0,0 +1,117 @@
|
|||
# Спільне сховище Kellnr на флешці USB
|
||||
|
||||
Оскільки мій домашній сервер ARM наказав довго жити, постала задача десь розмістити локальний кеш крейтів на випадок відсутності Інтернет та можливості розробки Rust офлайн. Kellnr мені сподобався своєю гнучкістю і не вибагливістю до диску, за рахунок кешування тільки тих даних, які використовуються. З ним легко збудувати децентралізовані ланцюги проксі і так само легко переключатись у разі не доступності одного з них.
|
||||
|
||||
Для локального сервера Kellnr, першою опцією в мене був сам комп'ютер, але єдиний його HDD (запакований в iMac) майже заповнений, до того ж повільний. Інший комп'ютер PC - наразі не зручно запускати через перебої живлення і його апетити до UPS. Тому я вирішив застосувати свій старий лайф-хак з розширенням пам'яті засобами звичайної флешки USB (Kellnr пише дані тільки при першому запиті крейту, тому проблем з живучістю SSD не повинно бути). Також, цей сценарій дозволяє тягати флешку між компами без жодної залежності від стаціонарного сервера чи локальної мережі.
|
||||
|
||||
## Підготовка USB
|
||||
|
||||
Фактично, я користуюсь флешкою 32 GB, яка при ~1к крейтів заповнена на 30%. Тобто підійде сама чіпова флешка, і зовсім не обов'язково спеціально купувати заявлені 300 Гб станом на 2024-2026. При першій ініціалізації реєстру, відбувається пікове зростання споживання диску через внутрішні залежності усіх запитаних крейтів, але потім воно збалансовується і тримається на згаданому вище рівні.
|
||||
|
||||
### Файлова система
|
||||
|
||||
Накопичувач я спочатку відформатував в FAT, оскільки мені набридло морочитись з правами. Утім, як виявилось, Kellnr якось там залежить від мета-даних і сипле в журнали помилки. Тому згодом я обрав формат Ext4, створивши для сховища простір імен `kellnr/data`.
|
||||
|
||||
## Системний сервіс
|
||||
|
||||
Перший час, крутив кеш-проксі через 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`:
|
||||
|
||||
``` ~/.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 на базі власного індексу
|
||||
Loading…
Add table
Add a link
Reference in a new issue