From ea9b7bacd0c22ada024e6ea5018cb611cc115f08 Mon Sep 17 00:00:00 2001 From: embeddevio Date: Fri, 9 Oct 2026 21:27:26 +0300 Subject: [PATCH] vault backup: 2026-10-09 21:27:26 --- .obsidian/workspace.json | 70 +-- .../Hermes Agent - Настройка.md | 0 Hermes/guide-hermes-lxc-server-desktop.md | 452 ++++++++++++++++++ .../hermes-desktop-connect-guide.md | 0 {HomeLab/Hermes => Hermes}/oled_cpu_mon.py | 0 ... Services.md => Services - description.md} | 2 - HomeLab/guide-nfs-omv-pve-pbs.md | 325 +++++++++++++ {HomeLab => SBC - Hardware}/Radxa E25.md | 0 .../Raspberry PI5 + 3.2 SPI TFT (ILI9341).md | 0 .../ssd1306-rpi5-guide.md | 0 {HomeLab => VPN}/Amnezia for Keenetic.md | 0 .../amnezia-vpn-keenetic-kn1011.md | 0 12 files changed, 820 insertions(+), 29 deletions(-) rename HomeLab/Hermes/Hermes Agent.md => Hermes/Hermes Agent - Настройка.md (100%) create mode 100644 Hermes/guide-hermes-lxc-server-desktop.md rename {HomeLab/Hermes => Hermes}/hermes-desktop-connect-guide.md (100%) rename {HomeLab/Hermes => Hermes}/oled_cpu_mon.py (100%) rename HomeLab/{! Services.md => Services - description.md} (99%) create mode 100644 HomeLab/guide-nfs-omv-pve-pbs.md rename {HomeLab => SBC - Hardware}/Radxa E25.md (100%) rename {HomeLab => SBC - Hardware}/Raspberry PI5 + 3.2 SPI TFT (ILI9341).md (100%) rename {HomeLab/Hermes => SBC - Hardware}/ssd1306-rpi5-guide.md (100%) rename {HomeLab => VPN}/Amnezia for Keenetic.md (100%) rename {HomeLab/Hermes => VPN}/amnezia-vpn-keenetic-kn1011.md (100%) diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index 4af8d86..8233141 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -13,15 +13,30 @@ "state": { "type": "markdown", "state": { - "file": "HomeLab/Proxmox/Proxmox - Installation - Backups.md", + "file": "SBC - Hardware/Radxa E25.md", "mode": "source", "source": false }, "icon": "lucide-file", - "title": "Proxmox - Installation - Backups" + "title": "Radxa E25" + } + }, + { + "id": "bfbd778442b4387f", + "type": "leaf", + "state": { + "type": "markdown", + "state": { + "file": "SBC - Hardware/ssd1306-rpi5-guide.md", + "mode": "source", + "source": false + }, + "icon": "lucide-file", + "title": "ssd1306-rpi5-guide" } } - ] + ], + "currentTab": 1 } ], "direction": "vertical" @@ -188,39 +203,40 @@ "obsidian-excalidraw-plugin:New drawing": false } }, - "active": "26f4162438aca424", + "active": "512da625ab202830", "lastOpenFiles": [ - "HomeLab/! Services.md", + "Hermes/hermes-desktop-connect-guide.md", + "Hermes/Hermes Agent - Настройка.md", + "Hermes/guide-hermes-lxc-server-desktop.md", + "VPN/amnezia-vpn-keenetic-kn1011.md", + "VPN/Amnezia for Keenetic.md", + "HomeLab/Valtwarden.md", + "HomeLab/wireshark.md", + "VPN/VPN (WireGuard & 3x-UI VLESS Reality).md", + "SBC - Hardware/Raspberry PI5 + 3.2 SPI TFT (ILI9341).md", + "SBC - Hardware/Radxa E25.md", + "Git/Git.md", + "SBC - Hardware", + "HomeLab AI Analisys.md", + "Network/Settings.md", + "HomeLab/Proxmox/HAOS.md", + "HomeLab/Proxmox/Gitea.md", + "SBC - Hardware/ssd1306-rpi5-guide.md", + "HomeLab/Services - description.md", + "HomeLab/guide-nfs-omv-pve-pbs.md", + "HomeLab/omv-qbittorrent-guide.md", + "HomeLab/Docker - qBittorent.md", + "HomeLab/Proxmox/Proxmox - Installation - Backups.md", "HomeLab/Proxmox/Proxmox - settings.md", "! Tasks - planned action.md", - "HomeLab/omv-qbittorrent-guide.md", - "HomeLab/Proxmox/Proxmox - Installation - Backups.md", - "HomeLab/Hermes/hermes-desktop-connect-guide.md", - "HomeLab/Hermes/Hermes Agent.md", "HomeLab/Docker - General.md", - "HomeLab/Docker - qBittorent.md", - "HomeLab AI Analisys.md", - "HomeLab/Raspberry PI5 + 3.2 SPI TFT (ILI9341).md", "Linux Embedded/Linux - GPIO.md", - "HomeLab/Proxmox/Gitea.md", - "HomeLab/Hermes/amnezia-vpn-keenetic-kn1011.md", "HomeLab/Proxmox/Proxmox HA manual install.md", - "HomeLab/Proxmox/HAOS.md", - "HomeLab/HomePage.md", - "HomeLab/Nginx Proxy Manager.md", - "HomeLab/ssh config.md", - "HomeLab/Hermes/ssd1306-rpi5-guide.md", - "HomeLab/Hermes/oled_cpu_mon.py", - "HomeLab/Hermes", - "().md", + "Hermes/oled_cpu_mon.py", + "Hermes", "HomeLab/Files/Pasted image 20260427212721.png", "HomeLab/Files/Pasted image 20260426160841.png", "Pasted image 20260901214038.png", - "HomeLab/Radxa E25.md", - "HomeLab/wireshark.md", - "HomeLab/Valtwarden.md", - "HomeLab/Amnezia for Keenetic.md", - "Linux/CLI/СLI FileSystem.md", "Pasted image 20260517222623.png", "VPN/XRAY VLESS Guide.pdf", "VPN", diff --git a/HomeLab/Hermes/Hermes Agent.md b/Hermes/Hermes Agent - Настройка.md similarity index 100% rename from HomeLab/Hermes/Hermes Agent.md rename to Hermes/Hermes Agent - Настройка.md diff --git a/Hermes/guide-hermes-lxc-server-desktop.md b/Hermes/guide-hermes-lxc-server-desktop.md new file mode 100644 index 0000000..b39f8d2 --- /dev/null +++ b/Hermes/guide-hermes-lxc-server-desktop.md @@ -0,0 +1,452 @@ +# Гайд: Установка Hermes Agent на LXC Debian и подключение с Windows Desktop + +> Схема: Debian LXC (сервер Hermes) ↔ Windows ПК (Hermes Desktop) + +--- + +## 1. Подготовка LXC контейнера + +### 1.1. Создать LXC (если ещё нет) + +На **хосте PVE**: + +```bash +pveam update +pveam available | grep debian +pveam download local debian-12-standard_12.7-1_amd64.tar.zst + +pct create 300 local:vztmpl/debian-12-standard_12.7-1_amd64.tar.zst \ + --hostname hermes-server \ + --storage local-lvm \ + --memory 4096 \ + --cores 4 \ + --net0 name=eth0,bridge=vmbr0,ip=dhcp \ + --password \ + --start + +pct enter 300 +``` + +### 1.2. Настроить внутри контейнера + +```bash +# Стандартное обновление +apt update && apt upgrade -y + +# Зависимости Hermes +apt install -y git curl build-essential python3 python3-pip python3-venv + +# uv (менеджер Python для Hermes) +curl -fsSL https://astral.sh/uv/install.sh | bash +source ~/.bashrc +``` + +--- + +## 2. Установка Hermes Agent из GitHub + +### 2.1. Ручной clone + установка (рекомендуется для сервера) + +```bash +cd /opt +git clone --recurse-submodules https://github.com/NousResearch/hermes-agent.git +cd hermes-agent + +# Создать venv через uv +uv venv venv --python 3.11 +export VIRTUAL_ENV="$(pwd)/venv" + +# Установить со всеми extras +uv pip install -e ".[all,dev]" + +# Опционально: browser tools +npm install +``` + +> **Альтернатива (проще, но через инсталлятор):** +> ```bash +> curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash +> ``` +> После этого репозиторий лежит в `~/.hermes/hermes-agent/`. Этот вариант тоже устанавливает `hermes` команду. + +### 2.2. Создать конфигурацию + +```bash +# Создать структуру директорий +mkdir -p ~/.hermes/{cron,sessions,logs,skills} + +# Если ставили вручную — симлинк для `hermes` команды +mkdir -p ~/.local/bin +ln -sf /opt/hermes-agent/venv/bin/hermes ~/.local/bin/hermes +export PATH="$HOME/.local/bin:$PATH" +echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc + +# Базовая конфигурация +cp /opt/hermes-agent/cli-config.yaml.example ~/.hermes/config.yaml + +# API-ключи +cat >> ~/.hermes/.env <<'EOF' +# Минимум — один LLM провайдер: +OPENROUTER_API_KEY=sk-or-v1-xxxxxxxxxxxx + +# Опционально: +# ANTHROPIC_API_KEY=sk-ant-... +# OPENAI_API_KEY=sk-... +EOF +chmod 600 ~/.hermes/.env +``` + +### 2.3. Проверка установки + +```bash +hermes doctor +hermes chat -q "Привет, проверка связи" +# Если работает — всё ок, выйти через /exit +``` + +--- + +## 3. Запуск Hermes как сервера (hermes serve) + +### 3.1. Настройка аутентификации + +В `~/.hermes/.env` добавить: + +```bash +cat >> ~/.hermes/.env <<'EOF' +# Учётные данные для подключения Desktop +HERMES_DASHBOARD_BASIC_AUTH_USERNAME=admin +HERMES_DASHBOARD_BASIC_AUTH_PASSWORD=придумайте-надёжный-пароль +# Стабильный ключ — чтобы сессии сохранялись после перезапуска +HERMES_DASHBOARD_BASIC_AUTH_SECRET=$(openssl rand -base64 32) +EOF +chmod 600 ~/.hermes/.env +``` + +### 3.2. Запуск вручную (проверка) + +```bash +hermes serve --host 0.0.0.0 --port 9119 +``` + +Должно запуститься без ошибок. Проверить: + +```bash +# Из контейнера +curl -s http://127.0.0.1:9119/api/status + +# С другого узла в сети (PVE, Windows) +curl -s http://:9119/api/status +``` + +> **Примечание:** `hermes serve` — это головной backend, к которому подключается Desktop. Если нужны также Telegram/Discord — их gateway запускается отдельно (`hermes gateway start`). + +### 3.3. systemd-сервис для автозапуска + +```bash +cat > /etc/systemd/system/hermes-serve.service <<'EOF' +[Unit] +Description=Hermes Agent Serve Backend +After=network-online.target +Wants=network-online.target + +[Service] +Type=simple +User=root +Group=root +WorkingDirectory=/root +ExecStart=/root/.local/bin/hermes serve --host 0.0.0.0 --port 9119 +Restart=always +RestartSec=10 +Environment=HERMES_HOME=/root/.hermes +# Timeout для graceful shutdown +TimeoutStopSec=30 + +[Install] +WantedBy=multi-user.target +EOF +``` + +> Если ставили через официальный инсталлятор, путь к `hermes` может быть другим. Проверить: +> ```bash +> which hermes +> # или +> find / -name hermes -type f 2>/dev/null +> ``` + +Активация: + +```bash +systemctl daemon-reload +systemctl enable hermes-serve +systemctl start hermes-serve +systemctl status hermes-serve +``` + +Логи: + +```bash +journalctl -u hermes-serve -f +``` + +### 3.4. Запуск Dashboard (веб-интерфейс) + +Если нужен ещё и веб-интерфейс для администрирования, запустить отдельно: + +```bash +hermes dashboard --host 0.0.0.0 --port 9120 --no-open +# Доступно: http://:9120 +``` + +Тоже можно под systemd (аналогично `hermes-serve`, только ExecStart поменять). + +--- + +## 4. Подключение NFS-шары OMV к LXC + +Чтобы конфигурация, сессии и навыки сохранялись даже после пересоздания контейнера — хранить `~/.hermes/` на NFS. + +### 4.1. Монтирование NFS в LXC + +Внутри **LXC-контейнера**: + +```bash +# Установить NFS-клиент +apt install -y nfs-common + +# Создать точку монтирования +mkdir -p /mnt/hermes-data + +# Проверить монтирование +mount -t nfs 192.168.1.73:/export/hermes-data /mnt/hermes-data \ + -o rw,vers=4,hard,timeo=600,no_root_squash + +ls -la /mnt/hermes-data/ +``` + +### 4.2. Перенос данных на NFS + +```bash +# Если в ~/.hermes/ уже есть данные +cp -a ~/.hermes/* /mnt/hermes-data/ +# Или если NFS шара пустая — просто создать структуру +mkdir -p /mnt/hermes-data/{cron,sessions,logs,skills} +``` + +### 4.3. Переместить HERMES_HOME на NFS + +```bash +# Переместить домашнюю директорию Hermes +mv ~/.hermes ~/.hermes.bak +ln -s /mnt/hermes-data ~/.hermes + +# Проверить +ls -la ~/.hermes +hermes doctor +``` + +**Или** без симлинка — через переменную окружения: + +```bash +echo 'HERMES_HOME=/mnt/hermes-data' >> ~/.bashrc +source ~/.bashrc +# + обновить systemd unit +# Environment=HERMES_HOME=/mnt/hermes-data +``` + +### 4.4. Автомонтирование NFS (fstab) + +В `/etc/fstab` LXC: + +```bash +192.168.1.73:/export/hermes-data /mnt/hermes-data nfs4 rw,hard,timeo=600,rsize=1048576,wsize=1048576,_netdev 0 0 +``` + +**Внимание:** если NFS не смонтируется — `hermes serve` не запустится. Можно сделать `After=mnt-hermes-data.mount` в systemd unit, но проще сделать startup script, который ждёт mount. + +--- + +## 5. Установка Hermes Desktop на Windows + +### 5.1. Скачать и установить + +**Способ 1 (рекомендуется):** +1. Скачать установщик с [hermes-agent.nousresearch.com/desktop](https://hermes-agent.nousresearch.com/desktop) (MSIX/App Installer) +2. Запустить, пройти установку + +**Способ 2 (через PowerShell):** +```powershell +iex (irm https://hermes-agent.nousresearch.com/install.ps1) +``` + +### 5.2. Первый запуск + +1. Запустить Hermes Desktop +2. Пропустить Onboarding / Choose provider later +3. Открыть **Settings → Gateways** + +### 5.3. Подключение к серверу в LXC + +**Settings → Gateways → Connection mode → Remote gateway** + +| Поле | Значение | +|------|---------| +| Remote URL | `http://:9119` (например `http://192.168.1.200:9119`) | +| Имя соединения | `hermes-server` (произвольно) | + +Нажать **Connect / Sign in** → ввести: +- **Username:** `admin` (из `HERMES_DASHBOARD_BASIC_AUTH_USERNAME`) +- **Password:** (из `HERMES_DASHBOARD_BASIC_AUTH_PASSWORD`) + +После успешного входа — Desktop подключён к удалённому серверу. Профили, сессии, скиллы — всё с сервера. + +> **Проблема с HTTP:** если сервер без HTTPS, Desktop может ругаться на небезопасное соединение. Решения: +> - Обернуть через Tailscale (см. раздел 7) +> - Использовать SSH-туннель (раздел 6) +> - Включить разрешение HTTP в настройках Windows Desktop (Settings → Advanced → Allow insecure connections) + +--- + +## 6. SSH-туннель (альтернатива прямому HTTP) + +Если не хотите открывать порт 9119 наружу или HTTPS нет: + +### На Windows (PowerShell или WSL2) + +```bash +# SSH-туннель: локальный порт 9119 → LXC:9119 +ssh -L 9119:localhost:9119 root@ -N +``` + +После этого в Desktop указать `http://127.0.0.1:9119`. Трафик идёт через SSH. + +### Автоматизация через systemd на Windows (WSL) + +Создать скрипт `/etc/systemd/system/hermes-tunnel.service`: + +```ini +[Unit] +Description=SSH tunnel to Hermes LXC +After=network.target + +[Service] +ExecStart=/usr/bin/ssh -L 9119:localhost:9119 root@ -N -o ExitOnForwardFailure=yes +Restart=always +RestartSec=10 +User=<ваш-user> +``` + +--- + +## 7. Tailscale вариант (рекомендуется) + +Если Tailscale уже настроен — просто используйте Tailscale IP вместо локального. + +```bash +# Установить Tailscale на LXC +curl -fsSL https://tailscale.com/install.sh | sh +tailscale up + +# На Windows — установить Tailscale, войти в ту же сеть +``` + +В Desktop указать: `http://:9119` + +Tailscale даёт: +- **Автоматический HTTPS** (магически, через `https://.ts.net`) +- **Zero-trust сеть** — порт не нужно открывать в локальной сети +- **Постоянные IP**, даже если LXC пересоздаётся + +> После Tailscale можно использовать HTTPS: `https://.ts.net:9119` — Desktop не будет ругаться на небезопасное соединение. + +--- + +## 8. Полная проверка + +### 8.1. На LXC + +```bash +# Сервер работает? +systemctl status hermes-serve + +# Порт открыт? +ss -tlnp | grep 9119 + +# NFS смонтирована? +df -h | grep nfs +ls -la ~/.hermes/ +``` + +### 8.2. С Windows + +```bash +# Проверить TCP-доступность +Test-NetConnection -ComputerName -Port 9119 + +# Или через curl (если есть) +curl http://:9119/api/status +``` + +### 8.3. В Desktop + +1. Открыть чат — должна появиться сессия на сервере +2. Отправить сообщение — должен прийти ответ от агента +3. Файлы перетаскиваются через Desktop → загружаются на LXC +4. Скиллы, настройки, сессии — все на сервере + +--- + +## 9. Типовые проблемы и решения + +| Проблема | Причина | Решение | +|----------|---------|---------| +| `hermes serve` не запускается | Нет API-ключа в `.env` | Проверить `~/.hermes/.env`, добавить `OPENROUTER_API_KEY` | +| Desktop: "Connection refused" | Порт 9119 не открыт / LXC не доступен | `systemctl status hermes-serve`, проверить firewall на PVE | +| Desktop: "Unauthorized" | Неверный логин/пароль | Проверить `HERMES_DASHBOARD_BASIC_AUTH_USERNAME/PASSWORD` в `.env` | +| После перезапуска LXC всё сбросилось | `HERMES_HOME` на локальной FS | Переместить на NFS (раздел 4), проверить fstab | +| Desktop: "Cannot connect to insecure backend" | HTTP без HTTPS | Использовать Tailscale HTTPS или `Allow insecure connections` | +| LXC не может смонтировать NFS | OMV NFS шара без `no_root_squash` | Включить `no_root_squash` в настройках NFS на OMV | +| `hermes doctor` ругается на зависимости | Часть пакетов не установлена | `apt install -y build-essential git curl python3 python3-pip` | +| Медленная загрузка файлов через Desktop | Rsize/wsize малые | В fstab на LXC: `rsize=1048576,wsize=1048576` | +| Desktop обновляется, а сервер нет | Разные версии | `hermes update` на LXC, потом перезапустить `systemctl restart hermes-serve` | + +--- + +## 10. Структура сервера (итог) + +``` +LXC Debian (192.168.1.xxx) +├── /opt/hermes-agent/ — исходники (git clone) +├── /opt/hermes-agent/venv/ — виртуальное окружение Python +├── /root/.local/bin/hermes — симлинк на исполняемый файл +├── ~/.hermes/ → /mnt/hermes-data/ — конфиг, сессии, скиллы на NFS +├── /etc/systemd/system/hermes-serve.service — сервис автозапуска +└── systemd: hermes-serve (порт 9119) + +OMV (192.168.1.73) +├── NFS export: /export/hermes-data → LXC /mnt/hermes-data + +Windows ПК +└── Hermes Desktop → remote gateway: http://:9119 +``` + +## 11. Команды для быстрого старта (шпаргалка) + +```bash +# LXC — установка +git clone --recurse-submodules https://github.com/NousResearch/hermes-agent.git /opt/hermes-agent +cd /opt/hermes-agent && uv venv venv --python 3.11 +export VIRTUAL_ENV="$(pwd)/venv" && uv pip install -e ".[all,dev]" +ln -sf /opt/hermes-agent/venv/bin/hermes ~/.local/bin/hermes + +# LXC — конфиг +echo 'OPENROUTER_API_KEY=sk-or-v1-...' >> ~/.hermes/.env +echo 'HERMES_DASHBOARD_BASIC_AUTH_USERNAME=admin' >> ~/.hermes/.env +echo 'HERMES_DASHBOARD_BASIC_AUTH_PASSWORD=my-password' >> ~/.hermes/.env +chmod 600 ~/.hermes/.env + +# LXC — запуск сервера +hermes serve --host 0.0.0.0 --port 9119 + +# Desktop (Windows) — Settings → Gateways → Remote → http://:9119 +``` \ No newline at end of file diff --git a/HomeLab/Hermes/hermes-desktop-connect-guide.md b/Hermes/hermes-desktop-connect-guide.md similarity index 100% rename from HomeLab/Hermes/hermes-desktop-connect-guide.md rename to Hermes/hermes-desktop-connect-guide.md diff --git a/HomeLab/Hermes/oled_cpu_mon.py b/Hermes/oled_cpu_mon.py similarity index 100% rename from HomeLab/Hermes/oled_cpu_mon.py rename to Hermes/oled_cpu_mon.py diff --git a/HomeLab/! Services.md b/HomeLab/Services - description.md similarity index 99% rename from HomeLab/! Services.md rename to HomeLab/Services - description.md index f15845d..1d705e2 100644 --- a/HomeLab/! Services.md +++ b/HomeLab/Services - description.md @@ -1,7 +1,5 @@ #homelab #proxmox #Gitea #homeassistant #haos #adguard #wireguard - - ### Useful resources Про домашнюю лабораторию: [Prohomelab](https://prohomelab.com/) Proxmox Community Scripts [Proxmox Community-scripts](https://community-scripts.org/) diff --git a/HomeLab/guide-nfs-omv-pve-pbs.md b/HomeLab/guide-nfs-omv-pve-pbs.md new file mode 100644 index 0000000..c20f2ad --- /dev/null +++ b/HomeLab/guide-nfs-omv-pve-pbs.md @@ -0,0 +1,325 @@ +# Гайд: Разшаривание NFS на OMV и подключение к PVE + PBS + +> Инфраструктура: OMV 8 (192.168.1.73), Proxmox VE, Proxmox Backup Server (отдельная VM/CT) + +--- + +## 1. Настройка NFS-шары на OMV + +### 1.1. Через веб-интерфейс + +**Services → NFS → Settings** +- [x] Enable NFS v4 +- [x] Enable async (повышает производительность) +- Порт: 2049 (по умолчанию) +- Apply + +**Services → NFS → Shares → Add** + +| Поле | Значение | +|------|---------| +| Shared folder | `/путь/к/шаре` (создать заранее через Storage → Shared Folders) | +| Client | `192.168.1.0/24` — вся локальная сеть | +| Options | `rw,subtree_check,no_root_squash` | + +> **`no_root_squash` критически важен для LXC**: без него клиентский root внутри контейнера будет преобразован в nobody и не сможет писать в шару. + +**Применить**: кнопка `Apply` (галочка) вверху. + +### 1.2. Через CLI — проверка + +```bash +# Убедиться, что NFS запущен +systemctl status nfs-server + +# Просмотреть экспорты +showmount -e localhost + +# Или файл конфигурации +cat /etc/exports + +# Пример содержимого: +# /srv/mergerfs/pool/backup 192.168.1.0/24(rw,subtree_check,no_root_squash,sync) +``` + +> **Важно**: после каждого Apply в веб-UI OMV переписывает `/etc/exports`. Ручные правки там не переживают следующего Apply. + +--- + +## 2. Подключение NFS к PVE и проброс в LXC + +### 2.1. Создание PVE Storage для NFS + +**Datacenter → Storage → Add → NFS** + +| Поле | Значение | +|------|---------| +| ID | `nfs-omv` (произвольное имя) | +| Server | `192.168.1.73` | +| Export | Путь из `/etc/exports` на OMV (например `/export/backup`) | +| Content | Выбрать, для чего это хранилище: `Container template`, `ISO image`, `VZDump backup file`, `Container`, `Snippets` | + +**Через CLI** (альтернатива): + +```bash +pvesm add nfs nfs-omv --server 192.168.1.73 --path /mnt/pve/nfs-omv --export /export/backup +``` + +**Проверка**: +```bash +pvesm status | grep nfs-omv +# Должно показать storage nfs-omv online +``` + +> **Ограничение**: PVE NFS storage не позволяет пробросить NFS-шару напрямую в LXC как bind mount. Для LXC нужен ручной mount на **хосте** PVE, потом `mp0` проброс. + +--- + +### 2.2. Монтирование NFS на хосте PVE (для LXC) + +Создаём точку монтирования на **хосте Proxmox**: + +```bash +# Создать директорию +mkdir -p /mnt/nfs-omv-backup + +# Монтировать (проверка) +mount -t nfs 192.168.1.73:/export/backup /mnt/nfs-omv-backup -o rw,vers=4,hard,timeo=600,rsize=1048576,wsize=1048576,no_root_squash + +# Проверить +ls -la /mnt/nfs-omv-backup +df -h /mnt/nfs-omv-backup +``` + +> **Варианты опций**: +> - `vers=4` — NFSv4 (безопаснее, быстрее) +> - `vers=3` — NFSv3 (если v4 не работает) +> - `hard` — процессы ждут восстановления соединения (vs `soft` — таймаут с ошибкой) +> - `no_root_squash` — root на LXC может писать как root +> - `rsize,wsize=1048576` — максимальный размер блока (1 МБ) для производительности + +Если шару надо использовать как хранилище **CT templates** или **VZDump backup**, лучше сначала смонтировать, потом добавить через `pvesm add dir`: + +```bash +pvesm add dir nfs-omv-lxc --path /mnt/nfs-omv-backup --content vztmpl,backup,snippets +``` + +#### 2.2.1. Автомонтирование (fstab) + +Добавить в `/etc/fstab` на **хосте PVE**: + +```bash +# OMV NFS share — для проброса в LXC +192.168.1.73:/export/backup /mnt/nfs-omv-backup nfs4 rw,hard,timeo=600,rsize=1048576,wsize=1048576,_netdev 0 0 +``` + +Проверка автомонтирования: +```bash +umount /mnt/nfs-omv-backup +mount -a +df -h | grep nfs +``` + +> **`_netdev`** — система не пытается монтировать NFS до поднятия сети. + +--- + +### 2.3. Проброс NFS-шары в LXC контейнер + +Редактировать конфиг контейнера `/etc/pve/lxc/.conf`: + +```bash +# Синтаксис: mp0: /путь/на/хосте,mp=/путь/в/LXC +mp0: /mnt/nfs-omv-backup,mp=/mnt/backup +``` + +**Через CLI**: +```bash +pct set -mp0 /mnt/nfs-omv-backup,mp=/mnt/backup +``` + +**В веб-интерфейсе PVE**: выбрать контейнер → Resources → Add → Mount Point. + +**Проверка внутри LXC**: +```bash +pct enter +ls -la /mnt/backup +touch /mnt/backup/test-root && rm /mnt/backup/test-root +``` + +> Если `touch` выдаёт `Permission denied` — на OMV включено `root_squash` (сменить на `no_root_squash`). + +--- + +### 2.4. Полный пример: LXC с backup-шара + +```bash +# Хост PVE: монтируем NFS +mkdir -p /mnt/nfs-omv-backup +echo '192.168.1.73:/export/backup /mnt/nfs-omv-backup nfs4 rw,hard,timeo=600,_netdev 0 0' >> /etc/fstab +mount -a + +# Пробрасываем в LXC (ID = 200) +pct set 200 -mp0 /mnt/nfs-omv-backup,mp=/mnt/backup + +# Внутри LXC: проверяем +pct enter 200 +df -h | grep /mnt/backup +``` + +--- + +## 3. Подключение NFS к PBS (Proxmox Backup Server) + +### 3.1. Вариант A: Через веб-интерфейс PBS + +**Server → Storage → Add → NFS** + +| Поле | Значение | +|------|---------| +| Server | `192.168.1.73` (OMV) | +| Export | `/export/backup` или путь из OMV | +| Content | `backup` (основное) | +| Node | выбрать текущую ноду PBS | +| Enable | [x] | + +**Важно для NFS на PBS:** +- PBS хранит данные в собственной структуре (`.chunk` +datastore). **Не надо** указывать уже существующую директорию с файлами — PBS создаст свою иерархию. +- NFS-шара НЕ может одновременно быть datastore PBS **и** использоваться для чего-то другого (в PBS своя структура хранения). + +### 3.2. Вариант B: Через CLI на PBS + +```bash +pvesm add nfs pbs-nfs-omv \ + --server 192.168.1.73 \ + --export /export/pbs-datastore \ + --content backup +``` + +**Проверка:** +```bash +pvesm status | grep pbs-nfs-omv +# Должно показать status: available +``` + +### 3.3. Настройка бэкапа на NFS datastore + +После добавления storage в PBS: + +1. **В PVE**: Datacenter → Backup → Add + - Storage: выбрать `pbs-nfs-omv` (имя storage в PBS) + - Schedule: по необходимости + - Selection Mode: Include/Exclude + - Compression: ZSTD (рекомендуется) + - Encryption: по желанию + - Enable: [x] + +2. **Или ручной бэкап через CLI на PVE**: +```bash +# Полный бэкап VM 100 в PBS-storage +vzdump 100 --mode snapshot --compress zstd --storage pbs-nfs-omv + +# Или с указанием PBS напрямую +proxmox-backup-client backup \ + --backup-id "vm-100" \ + --backup-type "qemu" \ + --repository 192.168.1.73:datastore:pbs-nfs-omv +``` + +### 3.4. Особенности NFS c PBS + +| Аспект | Комментарий | +|--------|------------| +| **Производительность** | NFS добавляет latency — для PBS лучше локальный диск (ZFS/SATA SSD) | +| **Надёжность** | `soft,timeo=600` на PBS клиенте — при временной потере NFS бэкап упадёт с ошибкой, а не зависнет (`hard`) | +| **GC (Garbage Collection)** | PBS периодически чистит expired backup snapshots. Убедиться, что NFS шара смонтирована **с опцией `rw`** | +| **Verification** | PBS verifying jobs будут читать данные бэкапов — NFS latency замедлит. Нормально для периодических verify | +| **Multi-node access** | PBS поддерживает кластер — NFS datastore доступен всем нодам | + +**Рекомендуемый fstab на PBS** (с `soft` для бэкапов): + +```bash +192.168.1.73:/export/pbs-datastore /mnt/datastore nfs4 soft,timeo=600,retrans=2,rsize=1048576,wsize=1048576,_netdev 0 0 +``` + +--- + +## 4. Проверка работоспособности + +### 4.1. Доступность NFS + +```bash +# С любого узла (PVE, PBS, LXC) +showmount -e 192.168.1.73 + +# Должен показать: +# Export list for 192.168.1.73: +# /export/backup 192.168.1.0/24 +``` + +### 4.2. Монтирование + +```bash +# На PVE хосте +mount | grep nfs +df -h | grep nfs +``` + +### 4.3. Проброс в LXC + +```bash +pct enter +df -h | grep /mnt/backup # Должна быть видна шара +touch /mnt/backup/test && rm /mnt/backup/test # root должен писать +``` + +### 4.4. Бэкап через PBS + +```bash +# В PVE сделать пробный бэкап на PBS storage +vzdump --mode snapshot --compress zstd --storage pbs-nfs-omv +# Убедиться, что exit code = 0 +``` + +--- + +## 5. Типовые ошибки и решения + +| Проблема | Причина | Решение | +|----------|---------|---------| +| `mount.nfs: access denied by server` | IP клиента не в списке Client NFS шары | Проверить OMV NFS Share → Client | +| `Permission denied` при записи из LXC | `root_squash` на OMV | Включить `no_root_squash` в Options NFS шары | +| LXC не стартует с mp0 | Путь на хосте не смонтирован | `mount -a`, проверить `fstab` | +| PBS: datastore недоступен | NFS шара упала | `systemctl restart proxmox-backup` | +| NFS mount зависает (`hung` | Потеря сети, опция `hard` | `umount -f /mnt/nfs-...` или `soft` опция | +| LXC: mount inside container readonly | LXC не имеет `privileged: 1` | Использовать привилегированный контейнер или настроить device cgroup | + +--- + +## 6. Сводная схема + +``` +OMV (192.168.1.73) +├── NFS export: /export/backup (no_root_squash, rw) +│ +├── PVE host +│ ├── mount /mnt/nfs-omv-backup +│ ├── pvesm dir → templates/snippets +│ └── mp0 проброс → LXC контейнер /mnt/backup +│ +├── PBS node +│ ├── mount /mnt/datastore (export: /export/pbs-datastore) +│ ├── pvesm add nfs pbs-nfs-omv +│ └── datastore для backup/verify/GC +│ +└── Другие клиенты (RPi5, VM) + └── mount -t nfs 192.168.1.73:/export/backup /mnt/shared +``` + +## 7. Ограничения и рекомендации + +- **NFS → PBS**: для продакшена используйте локальные SSD/NVMe, NFS добавляет latency и риск потери связи во время бэкапа +- **no_root_squash**: безопасно только в доверенной подсети (192.168.1.0/24) +- **Автомонтирование**: `_netdev` обязателен, иначе система может зависнуть при загрузке до поднятия сети +- **PBS datastore**: выделите отдельную NFS-шару для PBS — не смешивайте с общими файлами +- **Бэкап конфига OMV**: `omv-confbackup` сохраняет настройки NFS-шар \ No newline at end of file diff --git a/HomeLab/Radxa E25.md b/SBC - Hardware/Radxa E25.md similarity index 100% rename from HomeLab/Radxa E25.md rename to SBC - Hardware/Radxa E25.md diff --git a/HomeLab/Raspberry PI5 + 3.2 SPI TFT (ILI9341).md b/SBC - Hardware/Raspberry PI5 + 3.2 SPI TFT (ILI9341).md similarity index 100% rename from HomeLab/Raspberry PI5 + 3.2 SPI TFT (ILI9341).md rename to SBC - Hardware/Raspberry PI5 + 3.2 SPI TFT (ILI9341).md diff --git a/HomeLab/Hermes/ssd1306-rpi5-guide.md b/SBC - Hardware/ssd1306-rpi5-guide.md similarity index 100% rename from HomeLab/Hermes/ssd1306-rpi5-guide.md rename to SBC - Hardware/ssd1306-rpi5-guide.md diff --git a/HomeLab/Amnezia for Keenetic.md b/VPN/Amnezia for Keenetic.md similarity index 100% rename from HomeLab/Amnezia for Keenetic.md rename to VPN/Amnezia for Keenetic.md diff --git a/HomeLab/Hermes/amnezia-vpn-keenetic-kn1011.md b/VPN/amnezia-vpn-keenetic-kn1011.md similarity index 100% rename from HomeLab/Hermes/amnezia-vpn-keenetic-kn1011.md rename to VPN/amnezia-vpn-keenetic-kn1011.md