From 0cb0156e2b69f890ffae1ec3314ec5bf7b14ce82 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Tue, 12 May 2026 21:16:38 +0600 Subject: [PATCH] =?UTF-8?q?2026-05-12=20kraken:=20full=20update=20?= =?UTF-8?q?=E2=80=94=20containers,=20compose=20structure,=20real=20command?= =?UTF-8?q?s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- family/how-to/openmediavault-rpi5.md | 183 ++++++++++----------------- 1 file changed, 69 insertions(+), 114 deletions(-) diff --git a/family/how-to/openmediavault-rpi5.md b/family/how-to/openmediavault-rpi5.md index 63d8ad24..ebff4bd4 100644 --- a/family/how-to/openmediavault-rpi5.md +++ b/family/how-to/openmediavault-rpi5.md @@ -6,12 +6,12 @@ tags: - how-to created: '2026-05-11' updated: '2026-05-12' -status: network-ready +status: containers-running ip: 192.168.1.14 --- # OpenMediaVault на Raspberry Pi 5 -**Статус:** Сеть настроена, готов к подключению HDD (май 2026) +**Статус:** Контейнеры запущены, Time Machine pending (май 2026) **Цель:** NAS на RPi 5 — OS на SD-карте, хранилище на USB 3.0 HDD ## Прогресс @@ -22,10 +22,10 @@ ip: 192.168.1.14 | 2 — Первый запуск + обновление | ✅ | apt upgrade выполнен | | 3 — Установка OMV | ✅ | OMV 7 установлен | | 4 — Первый вход в веб-интерфейс | ✅ | Пароль сменён | -| 5 — Подключить к роутеру, static IP | ✅ | `192.168.1.14` (MAC `2c:cf:67:64:03:f3`), static lease на роутере; WiFi отключён (modprobe blacklist) | -| 6 — USB HDD | ✅ | 12TB Seagate, EXT4, смонтирован через OMV в `/srv/dev-disk-by-uuid-49e8f586-3839-4c5d-a1e1-58bfc3579ade` | -| 7 — omv-extras + Docker + Portainer | ✅ | Docker 29.4.3, Portainer на :9000, данные на HDD | -| 8 — Контейнеры | ✅ | Watchtower, Home Assistant (:8123), Jellyfin (:8096), Transmission (:9091), Rclone (cron воскр. 03:00 → mailru-crypt:kraken/docker) | +| 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 | 🔲 | | | 10 — Перенос данных | 🔲 | | | 11 — Hermes агент Кракен | 🔲 | | @@ -115,135 +115,90 @@ Pi перезагрузится автоматически по окончани --- -## Шаг 5 — Подключить Pi к роутеру, настроить static IP, отключить WiFi +## Шаг 5 — Сеть: DHCP + static lease, отключить WiFi -1. Переключить ethernet-кабель: Pi → роутер (не Mac) -2. В роутере: DHCP reservation для MAC `2c:cf:67:64:03:f3` → выбрать постоянный IP (например `192.168.1.X`) -3. Отключить WiFi на Pi: -```bash -sudo nmcli radio wifi off +Переключить кабель Pi → роутер. Настроить DHCP через netplan (OMV управляет `/etc/netplan/20-openmediavault-eth0.yaml`): + +```yaml +network: + ethernets: + eth0: + match: + macaddress: "2c:cf:67:64:03:f3" + dhcp4: yes + dhcp6: no + link-local: [] ``` -4. Убедиться что Pi доступен по новому IP, проверить OMV web UI + +В роутере (ASUS): добавить static lease в `dhcp_staticlist` через nvram: +```bash +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): +```bash +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, форматировать, смонтировать +## Шаг 6 — USB HDD -1. Подключить HDD к USB 3.0 порту Pi (синий разъём) -2. OMV Web UI → Storage → Disks → убедиться что диск виден -3. Storage → File Systems → Create → выбрать диск → EXT4 → Save → Mount -4. Storage → Shared Folders → Add: - - `media` — для фильмов/музыки - - `timemachine` — для Time Machine бэкапов - - `docker` — для данных контейнеров +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. Форматировать (агент не может — только вручную или через скрипт): + ```bash + 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-/` + +> ⚠️ Не монтировать вручную через fstab — OMV должен управлять монтированием сам --- -## Шаг 7 — omv-extras + Docker + Portainer - -Установить omv-extras (даёт доступ к Docker плагину): -```bash -wget -qO- https://github.com/OpenMediaVault-Plugin-Developers/packages/raw/master/install | sudo bash -``` - -В OMV Web UI: -- System → Plugins → найти `openmediavault-compose` → установить -- Или через SSH: установить Docker + Portainer вручную: +## Шаг 7 — omv-extras + Docker ```bash -curl -fsSL https://get.docker.com | sudo bash -sudo usermod -aG docker kraken +# omv-extras +wget -qO- https://github.com/OpenMediaVault-Plugin-Developers/packages/raw/master/install | sudo bash < /dev/null -# Portainer -sudo docker volume create portainer_data -sudo docker run -d \ - --name portainer \ - --restart always \ - -p 9000:9000 \ - -v /var/run/docker.sock:/var/run/docker.sock \ - -v portainer_data:/data \ - portainer/portainer-ce:latest +# 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 ``` -Portainer UI: `http://kraken.local:9000` - --- ## Шаг 8 — Docker контейнеры -Все контейнеры управляются через Portainer или `docker compose`. -Данные хранить на HDD в `/srv//docker/`. +Каждый сервис — отдельный `docker-compose.yml` в `/home/kraken//`. +Все конфиги на HDD: `/srv/dev-disk-by-uuid-49e8f586-3839-4c5d-a1e1-58bfc3579ade/docker//` -### Watchtower (авто-обновление контейнеров) -```yaml -watchtower: - image: containrrr/watchtower - restart: always - volumes: - - /var/run/docker.sock:/var/run/docker.sock - environment: - - WATCHTOWER_CLEANUP=true - - WATCHTOWER_SCHEDULE=0 0 4 * * * # каждую ночь в 4:00 +| Сервис | 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 | + +Управление: +```bash +cd /home/kraken/ && sudo docker compose up -d # запустить +cd /home/kraken/ && sudo docker compose restart # рестарт +cd /home/kraken/ && sudo docker compose pull && sudo docker compose up -d # обновить ``` -### Home Assistant -```yaml -homeassistant: - image: ghcr.io/home-assistant/home-assistant:stable - restart: always - network_mode: host - volumes: - - /srv/.../docker/homeassistant:/config - privileged: true -``` - -### Zigbee2MQTT -```yaml -zigbee2mqtt: - image: koenkk/zigbee2mqtt - restart: always - volumes: - - /srv/.../docker/zigbee2mqtt:/app/data - - /run/udev:/run/udev:ro - devices: - - /dev/ttyUSB0:/dev/ttyUSB0 # Zigbee адаптер -``` - -### Jellyfin -```yaml -jellyfin: - image: jellyfin/jellyfin - restart: always - ports: - - 8096:8096 - volumes: - - /srv/.../docker/jellyfin:/config - - /srv/.../media:/media:ro -``` - -### Transmission -```yaml -transmission: - image: lscr.io/linuxserver/transmission - restart: always - ports: - - 9091:9091 - - 51413:51413 - volumes: - - /srv/.../docker/transmission:/config - - /srv/.../media/downloads:/downloads -``` - -### Rclone (бэкап на облако) -```yaml -rclone: - image: rclone/rclone - restart: unless-stopped - volumes: - - /srv/.../:/data:ro - - /home/kraken/.config/rclone:/config/rclone - command: sync /data remote:backup --progress -``` +> ⚠️ Watchtower: нужна переменная `DOCKER_API_VERSION=1.54` — иначе крашится (API mismatch) +> ⚠️ sudo через SSH требует `< /dev/null` для каждой команды с tee/pipe ---