Files
obsidian-vault/family/how-to/openmediavault-rpi5.md
T

14 KiB
Executable File
Raw Blame History

tags, created, updated, status, ip
tags created updated status ip
raspberry-pi
nas
openmediavault
how-to
2026-05-11 2026-05-12 hermes-pending 192.168.1.14

OpenMediaVault на Raspberry Pi 5

Статус: Контейнеры запущены, Time Machine pending (май 2026) Цель: NAS на RPi 5 — OS на SD-карте, хранилище на USB 3.0 HDD

Прогресс

Шаг Статус Заметки
1 — Флашим SD Bookworm 2025-05-13, RPi Imager
2 — Первый запуск + обновление apt upgrade выполнен
3 — Установка OMV OMV 7 установлен
4 — Первый вход в веб-интерфейс Пароль сменён
5 — Сеть DHCP static lease 192.168.1.14 (eth0 MAC 2c:cf:67:64:03:f3); WiFi отключён (modprobe blacklist brcmfmac/brcmutil)
6 — USB HDD 12TB Seagate ST12000NT001, EXT4, UUID 49e8f586-3839-4c5d-a1e1-58bfc3579ade, смонтирован через OMV в /srv/dev-disk-by-uuid-49e8f586-3839-4c5d-a1e1-58bfc3579ade
7 — omv-extras + Docker omv-extras 7.0.6, Docker 29.4.3, kraken в группе docker
8 — Контейнеры Все через отдельные docker compose, конфиги на HDD (см. ниже)
9 — Time Machine share mbentley/timemachine:smb, расписание 10:00-22:00 GMT+6, HDD/timemachine
10 — Перенос данных 🔲
11 — Hermes агент Кракен 🚧 Dockerfile + config готовы, нужно: заполнить .env, HA token, собрать образ
12 — Obsidian sync (Taiga↔Kraken↔Eagle) 🔲 Настроить синхронизацию vault между всеми тремя агентами

Железо

  • Raspberry Pi 5 (4 или 8 GB RAM)
  • SD-карта ≥16 GB (Samsung/SanDisk A1 Class 10+)
  • USB 3.0 HDD для хранения данных
  • Проводной Ethernet (обязателен)

Шаг 1 — Флашим SD-карту

Образ: Raspberry Pi OS Lite 64-bit (Bookworm / Debian 12)

⚠️ Брать именно Bookworm, не Trixie (Debian 13) — OMV не поддерживается на Trixie!

Инструмент: Raspberry Pi Imager (https://www.raspberrypi.com/software/)

⚠️ Не Balena Etcher — только RPi Imager поддерживает OS Customisation! При выборе образа из каталога (не custom file) появляется кнопка "Edit Settings"

Настройки (Edit Settings → шестерёнка):

  • Hostname: kraken
  • Username: kraken (не admin — зарезервировано для OMV!)
  • Password: сохранён в 1Password (запись "Kraken RPi")
  • SSH: Enable → Allow public-key authentication → вставить ~/.ssh/id_rsa.pub

После флаша вставить карту в Pi и включить.


Шаг 2 — Первый запуск, обновление и настройка сети

SSH подключение (пока через WiFi/роутер):

ssh -i ~/.ssh/id_rsa kraken@kraken.local

Обновление системы:

sudo apt-get update && sudo apt-get upgrade -y

Static IP на eth0 (прямой кабель Mac ↔ Pi для установки):

sudo nmcli con add type ethernet ifname eth0 con-name eth0-static \
  ipv4.method manual \
  ipv4.addresses 192.168.100.2/24 \
  ipv4.gateway 192.168.100.1 \
  ipv4.never-default yes \
  connection.autoconnect yes
sudo nmcli con up eth0-static

⚠️ ipv4.never-default yes — обязательно! Иначе интернет пойдёт через Mac, а не WiFi, и установка зависнет.


Шаг 3 — Установка OMV

# Pre-install
wget -qO- https://github.com/OpenMediaVault-Plugin-Developers/installScript/raw/master/preinstall | sudo bash
sudo reboot

# После перезагрузки — основная установка (~30 мин)
wget -qO- https://github.com/OpenMediaVault-Plugin-Developers/installScript/raw/master/install | sudo bash

Pi перезагрузится автоматически по окончании.


Шаг 4 — Первый вход в веб-интерфейс

  • URL: http://192.168.100.2 (или http://kraken.local)
  • Логин: admin
  • Пароль: openmediavault
  • Сразу сменить пароль! (System → General Settings → Web Administrator Password)

Шаг 5 — Сеть: DHCP + static lease, отключить WiFi

Переключить кабель Pi → роутер. Настроить DHCP через netplan (OMV управляет /etc/netplan/20-openmediavault-eth0.yaml):

network:
  ethernets:
    eth0:
      match:
        macaddress: "2c:cf:67:64:03:f3"
      dhcp4: yes
      dhcp6: no
      link-local: []

В роутере (ASUS): добавить static lease в dhcp_staticlist через nvram:

ssh -i ~/.ssh/id_rsa admin@192.168.1.1 \
  "nvram set dhcp_staticlist='...<2C:CF:67:64:03:F3>192.168.1.14>kraken>' && nvram commit && service restart_dnsmasq"

Отключить WiFi навсегда (modprobe blacklist):

sudo sh -c 'echo blacklist brcmfmac > /etc/modprobe.d/disable-wifi.conf' < /dev/null
sudo sh -c 'echo blacklist brcmutil >> /etc/modprobe.d/disable-wifi.conf' < /dev/null
sudo update-initramfs -u -k all < /dev/null

⚠️ Все sudo команды через SSH требуют < /dev/null — иначе sudo ждёт stdin и зависает


Шаг 6 — USB HDD

  1. Подключить HDD к синему (USB 3.0) порту Pi
  2. Проверить скорость: sudo apt install hdparm && sudo hdparm -t --direct /dev/sda → должно быть ~200-250 MB/s
  3. Разметить: sudo parted -s /dev/sda mklabel gpt mkpart primary 0% 100%
  4. Форматировать (агент не может — только вручную или через скрипт):
    sudo bash /tmp/fmt.sh  # скрипт с mkfs.ext4 -L storage /dev/sda1
    
  5. OMV Web UI → Storage → File Systems → выбрать /dev/sda1 → Mount
  6. OMV монтирует в: /srv/dev-disk-by-uuid-<UUID>/

⚠️ Не монтировать вручную через fstab — OMV должен управлять монтированием сам


Шаг 7 — omv-extras + Docker

# omv-extras
wget -qO- https://github.com/OpenMediaVault-Plugin-Developers/packages/raw/master/install | sudo bash < /dev/null

# Docker
curl -fsSL https://get.docker.com -o /tmp/get-docker.sh && sudo sh /tmp/get-docker.sh < /dev/null
sudo usermod -aG docker kraken < /dev/null

Шаг 8 — Docker контейнеры

Каждый сервис — отдельный docker-compose.yml в /home/kraken/<name>/. Все конфиги на HDD: /srv/dev-disk-by-uuid-49e8f586-3839-4c5d-a1e1-58bfc3579ade/docker/<name>/

Сервис Compose URL Данные
Portainer /home/kraken/portainer/ :9000 HDD/docker/portainer
Watchtower /home/kraken/watchtower/ stateless
Home Assistant /home/kraken/homeassistant/ :8123 HDD/docker/homeassistant
Jellyfin /home/kraken/media/ :8096 HDD/docker/jellyfin, media:ro
Transmission /home/kraken/media/ :9091 HDD/docker/transmission, HDD/media/downloads
Rclone /home/kraken/rclone/ cron воскр. 03:00 → mailru-crypt:kraken/docker

Управление:

cd /home/kraken/<name> && sudo docker compose up -d    # запустить
cd /home/kraken/<name> && sudo docker compose restart  # рестарт
cd /home/kraken/<name> && sudo docker compose pull && sudo docker compose up -d  # обновить

⚠️ Watchtower: нужна переменная DOCKER_API_VERSION=1.54 — иначе крашится (API mismatch) ⚠️ sudo через SSH требует < /dev/null для каждой команды с tee/pipe


Шаг 9 — Time Machine share

Контейнер: mbentley/timemachine:smb Compose: /home/kraken/timemachine/docker-compose.yml Данные: /srv/dev-disk-by-uuid-49e8f586-3839-4c5d-a1e1-58bfc3579ade/timemachine/

Расписание (crontab kraken-пользователя):

  • 0 4 * * * UTC (10:00 GMT+6) → /usr/local/bin/tm-start.sh — поднять контейнер
  • 0 16 * * * UTC (22:00 GMT+6) → /usr/local/bin/tm-stop.sh — остановить контейнер
  • restart: no — при загрузке Pi не стартует автоматически

Credentials:

  • Пользователь: timemachine
  • Пароль: timemachine ⚠️ сменить позже

Подключение с Mac:

  1. Finder → ⌘Ksmb://192.168.1.14
  2. Логин: timemachine / timemachine
  3. System Preferences → Time Machine → Add Disk → выбрать kraken

Лог cron: /var/log/timemachine-cron.log


Шаг 10 — Перенос данных

Фильмы с Mac на NAS

rsync -avh --progress /path/to/movies/ kraken@kraken.local:/srv/.../media/movies/

Time Machine

⚠️ Старый TM-бэкап перенести нельзя напрямую — TM привязывает бэкап к конкретному диску/хосту. Начать новый бэкап на NAS, старый HDD хранить как архив или отформатировать после нескольких успешных новых бэкапов.


Шаг 11 — Hermes агент Кракен

Файлы

/home/kraken/hermes/
  Dockerfile           — образ на базе node:20-slim + hermes-agent + obsidian-mcp
  docker-compose.yml   — restart: unless-stopped, network_mode: host
  .env                 — API ключи (заполнить вручную)
  config.yaml          → копируется в /srv/.../docker/hermes/config/config.yaml

Модели (проверено 2026-05-12)

Бесплатные модели с tool calling на OpenRouter:

Модель Статус
nvidia/nemotron-3-super-120b-a12b:free работает
openrouter/free fallback (авто-роутинг)
deepseek/deepseek-chat-v3-0324:free 404
qwen/qwen3-235b-a22b:free 404
google/gemma-4-31b-it:free 429 rate limit

Primary: nvidia/nemotron-3-super-120b-a12b:free (262K ctx, tools ) Auxiliary/Fallback: openrouter/free Рекомендуется: добавить GOOGLE_API_KEY → Gemini Flash как auxiliary

Telegram бот

  • Имя: Кракен
  • Bot: @kraken_htpc_bot
  • Token: 8750114596:AAH625OBSdb_Bn7ZSwshjDD3mbENnkSRYag

Toolsets

hermes-cli, terminal, file, web, web_crawler, memory, spotify, homeassistant

Деплой (после заполнения .env)

# Заполнить ключи:
nano /home/kraken/hermes/.env
# OPENROUTER_API_KEY=sk-or-...
# GOOGLE_API_KEY=...
# HASS_TOKEN=... (создать в HA UI → Profile → Long-Lived Access Tokens)

# Собрать и запустить:
cd /home/kraken/hermes
sudo docker compose build
sudo docker compose up -d

# Проверить:
sudo docker logs hermes-kraken --tail 20

TODO

  • Заполнить .env (OPENROUTER_API_KEY, GOOGLE_API_KEY)
  • Настроить HA → создать Long-Lived token → вписать в HASS_TOKEN
  • Собрать и запустить контейнер
  • Настроить obsidian-mcp (vault path = /vault)
  • Перенести Spotify auth с Eagle (или запарить заново)

Шаг 12 — Obsidian sync (Taiga ↔ Kraken ↔ Eagle)

Все три агента должны работать с одним vault. Варианты:

  • Git sync — vault в git repo, каждый агент делает pull/push
  • rsync — периодическая синхронизация через SSH
  • Syncthing — p2p sync без облака

Текущее состояние vault:

  • Eagle (Mac): ~/obsidian/ — git repo, auto-commit 23:00
  • Taiga (TrueNAS): /mnt/RED_2TB/storage/obsidian/ — read-only mount
  • Kraken (RPi): /vault — пока не подключён

Следующие шаги:

  • Определить схему sync (git vs syncthing vs rsync)
  • Настроить write-доступ на Тайге и Кракене
  • Автоматический pull на всех агентах при изменениях

Уроки (что пошло не так при установке)

  • Balena Etcher не поддерживает OS Customisation — использовать только RPi Imager
  • userconf.txt deprecated на Bookworm — правильный способ через RPi Imager (он пишет custom.toml)
  • systemd.run= в cmdline.txt нужно указывать /usr/lib/raspberrypi-sys-mods/firstboot, а не свой скрипт
  • ipv4.never-default yes при настройке static IP на eth0 — обязательно, иначе интернет идёт через Mac и установка зависает
  • OMV install script при зависании — скорее всего нет интернета, проверить маршруты (ip route)

Полезные ссылки