From 677a06b7764bf1431cdfe8fd9595d1fcf5fd887d Mon Sep 17 00:00:00 2001 From: postscriptum Date: Tue, 3 Mar 2026 18:20:27 +0200 Subject: [PATCH] add `kellnr-storage-on-usb-drive.gmi` --- public/uk/index.gmi | 1 + ...r-proxy-verification-using-local-index.gmi | 6 +- public/uk/kellnr-storage-on-usb-drive.gmi | 117 ++++++++++++++++++ .../uk/rust-crates-mirroring-with-kellnr.gmi | 6 +- 4 files changed, 128 insertions(+), 2 deletions(-) create mode 100644 public/uk/kellnr-storage-on-usb-drive.gmi diff --git a/public/uk/index.gmi b/public/uk/index.gmi index 91e7115..978c4b2 100644 --- a/public/uk/index.gmi +++ b/public/uk/index.gmi @@ -16,6 +16,7 @@ ### Нотатки +=> kellnr-storage-on-usb-drive.gmi 2026-03-03 Спільне сховище Kellnr на флешці USB => tarball-from-nautilus-context-menu.gmi 2026-03-02 Створення Tarball з контекстного меню Nautilus / GNOME => radicle-kick-starter.gmi 2026-03-02 Пуш Radicle з толкача => notblood-multiplayer-with-ipv6-support.gmi 2026-03-02 Збірка NotBlood з підключенням до серверів IPv6 diff --git a/public/uk/kellnr-proxy-verification-using-local-index.gmi b/public/uk/kellnr-proxy-verification-using-local-index.gmi index 279a4c2..5c96357 100644 --- a/public/uk/kellnr-proxy-verification-using-local-index.gmi +++ b/public/uk/kellnr-proxy-verification-using-local-index.gmi @@ -38,4 +38,8 @@ replace-with = "kellnr" timeout = 180 ``` -Нагадаю, що окремий індекс використовувати не обов'язково, якщо ваша копія проєкту містить файл `Cargo.lock` з хешами, що дозволяє звіряти їх аргументом `--locked`. \ No newline at end of file +Нагадаю, що окремий індекс використовувати не обов'язково, якщо ваша копія проєкту містить файл `Cargo.lock` з хешами, що дозволяє звіряти їх аргументом `--locked`. + +## Дивіться також + +=> kellnr-storage-on-usb-drive.gmi Спільне сховище Kellnr на флешці USB \ No newline at end of file diff --git a/public/uk/kellnr-storage-on-usb-drive.gmi b/public/uk/kellnr-storage-on-usb-drive.gmi new file mode 100644 index 0000000..4b68aff --- /dev/null +++ b/public/uk/kellnr-storage-on-usb-drive.gmi @@ -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 на базі власного індексу \ No newline at end of file diff --git a/public/uk/rust-crates-mirroring-with-kellnr.gmi b/public/uk/rust-crates-mirroring-with-kellnr.gmi index 55f92ee..0a04868 100644 --- a/public/uk/rust-crates-mirroring-with-kellnr.gmi +++ b/public/uk/rust-crates-mirroring-with-kellnr.gmi @@ -321,4 +321,8 @@ crates.io-index > _↑ | ``` rad:z4VnEyS5YXnFpEgY1iheHneRPeSX6 -``` \ No newline at end of file +``` + +### Дивіться також + +=> kellnr-storage-on-usb-drive.gmi Спільне сховище Kellnr на флешці USB \ No newline at end of file