[2026-05-12] kraken NAS: обновлён план настройки OMV, шаги 5-11
This commit is contained in:
@@ -5,11 +5,12 @@ tags:
|
|||||||
- openmediavault
|
- openmediavault
|
||||||
- how-to
|
- how-to
|
||||||
created: '2026-05-11'
|
created: '2026-05-11'
|
||||||
status: in-progress
|
updated: '2026-05-12'
|
||||||
|
status: omv-installed
|
||||||
---
|
---
|
||||||
# OpenMediaVault на Raspberry Pi 5
|
# OpenMediaVault на Raspberry Pi 5
|
||||||
|
|
||||||
**Статус:** В процессе настройки (май 2026)
|
**Статус:** OMV установлен (май 2026)
|
||||||
**Цель:** NAS на RPi 5 — OS на SD-карте, хранилище на USB 3.0 HDD
|
**Цель:** NAS на RPi 5 — OS на SD-карте, хранилище на USB 3.0 HDD
|
||||||
|
|
||||||
---
|
---
|
||||||
@@ -19,58 +20,69 @@ status: in-progress
|
|||||||
- Raspberry Pi 5 (4 или 8 GB RAM)
|
- Raspberry Pi 5 (4 или 8 GB RAM)
|
||||||
- SD-карта ≥16 GB (Samsung/SanDisk A1 Class 10+)
|
- SD-карта ≥16 GB (Samsung/SanDisk A1 Class 10+)
|
||||||
- USB 3.0 HDD для хранения данных
|
- USB 3.0 HDD для хранения данных
|
||||||
- Проводной Ethernet (обязателен при установке)
|
- Проводной Ethernet (обязателен)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Шаг 1 — Флашим SD-карту
|
## Шаг 1 — Флашим SD-карту
|
||||||
|
|
||||||
**Образ:** Raspberry Pi OS Lite **64-bit (Bookworm / Debian 12)**
|
**Образ:** Raspberry Pi OS Lite **64-bit (Bookworm / Debian 12)**
|
||||||
> ⚠️ Брать именно Bookworm, не новый Trixie (Debian 13) — OMV 7 на Trixie не поддерживается!
|
> ⚠️ Брать именно Bookworm, не Trixie (Debian 13) — OMV не поддерживается на Trixie!
|
||||||
|
|
||||||
- Последний Bookworm: **2025-05-13**
|
- Последний Bookworm: **2025-05-13**
|
||||||
- Прямая ссылка: https://downloads.raspberrypi.com/raspios_lite_arm64/images/raspios_lite_arm64-2025-05-13/2025-05-13-raspios-bookworm-arm64-lite.img.xz
|
- Прямая ссылка: https://downloads.raspberrypi.com/raspios_lite_arm64/images/raspios_lite_arm64-2025-05-13/2025-05-13-raspios-bookworm-arm64-lite.img.xz
|
||||||
- SHA256: `2025-05-13-raspios-bookworm-arm64-lite.img.xz.sha256` (в той же папке)
|
|
||||||
- Размер: ~423 MB
|
|
||||||
|
|
||||||
**Инструмент:** Balena Etcher (https://etcher.balena.io/)
|
**Инструмент:** Raspberry Pi Imager (https://www.raspberrypi.com/software/)
|
||||||
|
|
||||||
**Флашим через Balena Etcher** (не RPi Imager — настройка делается скриптом после флаша):
|
> ⚠️ Не Balena Etcher — только RPi Imager поддерживает OS Customisation!
|
||||||
|
> При выборе образа из каталога (не custom file) появляется кнопка "Edit Settings"
|
||||||
|
|
||||||
После флаша вставить SD-карту в мак и запустить:
|
**Настройки (Edit Settings → шестерёнка):**
|
||||||
```bash
|
- Hostname: `kraken`
|
||||||
bash ~/Downloads/setup-kraken-sdcard.sh
|
- Username: `kraken` (не `admin` — зарезервировано для OMV!)
|
||||||
```
|
- Password: сохранён в 1Password (запись "Kraken RPi")
|
||||||
|
- SSH: Enable → Allow public-key authentication → вставить `~/.ssh/id_rsa.pub`
|
||||||
|
|
||||||
Что скрипт настраивает:
|
После флаша вставить карту в Pi и включить.
|
||||||
- **Hostname:** `kraken`
|
|
||||||
- **Username:** `kraken` (не `admin` — зарезервировано для OMV!)
|
|
||||||
- **SSH:** включён, ключ `id_rsa` добавлен автоматически
|
|
||||||
- **Подключение:** `ssh kraken@kraken.local`
|
|
||||||
- Пароль сохранён в 1Password (запись: "Kraken RPi")
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Шаг 2 — Первый запуск и обновление
|
## Шаг 2 — Первый запуск, обновление и настройка сети
|
||||||
|
|
||||||
|
SSH подключение (пока через WiFi/роутер):
|
||||||
```bash
|
```bash
|
||||||
ssh <username>@<Pi-IP>
|
ssh -i ~/.ssh/id_rsa kraken@kraken.local
|
||||||
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get upgrade -y
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Обновление системы:
|
||||||
|
```bash
|
||||||
|
sudo apt-get update && sudo apt-get upgrade -y
|
||||||
|
```
|
||||||
|
|
||||||
|
Static IP на eth0 (прямой кабель Mac ↔ Pi для установки):
|
||||||
|
```bash
|
||||||
|
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 7
|
## Шаг 3 — Установка OMV
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Pre-install (настраивает сеть, grub и т.д.)
|
# Pre-install
|
||||||
wget -O - https://github.com/OpenMediaVault-Plugin-Developers/installScript/raw/master/preinstall | sudo bash
|
wget -qO- https://github.com/OpenMediaVault-Plugin-Developers/installScript/raw/master/preinstall | sudo bash
|
||||||
sudo reboot
|
sudo reboot
|
||||||
|
|
||||||
# После перезагрузки — основная установка (~30 мин)
|
# После перезагрузки — основная установка (~30 мин)
|
||||||
wget -O - https://github.com/OpenMediaVault-Plugin-Developers/installScript/raw/master/install | sudo bash
|
wget -qO- https://github.com/OpenMediaVault-Plugin-Developers/installScript/raw/master/install | sudo bash
|
||||||
```
|
```
|
||||||
|
|
||||||
Pi перезагрузится автоматически по окончании.
|
Pi перезагрузится автоматически по окончании.
|
||||||
@@ -79,24 +91,198 @@ Pi перезагрузится автоматически по окончани
|
|||||||
|
|
||||||
## Шаг 4 — Первый вход в веб-интерфейс
|
## Шаг 4 — Первый вход в веб-интерфейс
|
||||||
|
|
||||||
- URL: `http://<Pi-IP>`
|
- URL: `http://192.168.100.2` (или `http://kraken.local`)
|
||||||
- Логин: `admin`
|
- Логин: `admin`
|
||||||
- Пароль: `openmediavault`
|
- Пароль: `openmediavault`
|
||||||
- **Сразу сменить пароль!**
|
- **Сразу сменить пароль!** (System → General Settings → Web Administrator Password)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Шаг 5 — Подключение USB HDD
|
## Шаг 5 — Подключить Pi к роутеру, настроить static IP, отключить WiFi
|
||||||
|
|
||||||
1. Подключить HDD после установки OMV
|
1. Переключить ethernet-кабель: Pi → роутер (не Mac)
|
||||||
2. Storage → Disks → инициализировать диск
|
2. В роутере: DHCP reservation для MAC `2c:cf:67:64:03:f3` → выбрать постоянный IP (например `192.168.1.X`)
|
||||||
3. Storage → File Systems → создать EXT4, смонтировать
|
3. Отключить WiFi на Pi:
|
||||||
4. Storage → Shared Folders → создать шары
|
```bash
|
||||||
|
sudo nmcli radio wifi off
|
||||||
|
```
|
||||||
|
4. Убедиться что Pi доступен по новому IP, проверить OMV web UI
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Шаг 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` — для данных контейнеров
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Шаг 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 вручную:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -fsSL https://get.docker.com | sudo bash
|
||||||
|
sudo usermod -aG docker kraken
|
||||||
|
|
||||||
|
# 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
|
||||||
|
```
|
||||||
|
|
||||||
|
Portainer UI: `http://kraken.local:9000`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Шаг 8 — Docker контейнеры
|
||||||
|
|
||||||
|
Все контейнеры управляются через Portainer или `docker compose`.
|
||||||
|
Данные хранить на HDD в `/srv/<filesystem>/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
|
||||||
|
```
|
||||||
|
|
||||||
|
### 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
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Шаг 9 — Time Machine share (macOS бэкапы на NAS)
|
||||||
|
|
||||||
|
В OMV Web UI:
|
||||||
|
1. Services → SMB/CIFS → Enable
|
||||||
|
2. Services → SMB/CIFS → Shares → Add:
|
||||||
|
- Shared folder: `timemachine`
|
||||||
|
- Enable Time Machine support: ✅
|
||||||
|
3. На Mac: Finder → Go → Connect to Server → `smb://kraken.local/timemachine`
|
||||||
|
4. System Preferences → Time Machine → Add Disk → выбрать kraken
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Шаг 10 — Перенос данных
|
||||||
|
|
||||||
|
### Фильмы с Mac на NAS
|
||||||
|
```bash
|
||||||
|
rsync -avh --progress /path/to/movies/ kraken@kraken.local:/srv/.../media/movies/
|
||||||
|
```
|
||||||
|
|
||||||
|
### Time Machine
|
||||||
|
> ⚠️ Старый TM-бэкап перенести нельзя напрямую — TM привязывает бэкап к конкретному диску/хосту.
|
||||||
|
> Начать новый бэкап на NAS, старый HDD хранить как архив или отформатировать после нескольких успешных новых бэкапов.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Шаг 11 — Hermes агент Кракен
|
||||||
|
|
||||||
|
По образу агента Тайга (TrueNAS). Установить Hermes на Pi:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# TODO: уточнить команду установки по образу Тайги
|
||||||
|
```
|
||||||
|
|
||||||
|
- Конфиг: `~/.hermes/config.yaml`
|
||||||
|
- Namespace: `family`
|
||||||
|
- Подключить к Discord/Zulip
|
||||||
|
- Настроить доступ к vault через obsidian-mcp
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Уроки (что пошло не так при установке)
|
||||||
|
|
||||||
|
- **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`)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Полезные ссылки
|
## Полезные ссылки
|
||||||
|
|
||||||
- Официальный вики: https://wiki.omv-extras.org/
|
- Официальный вики OMV: https://wiki.omv-extras.org/
|
||||||
- Install script: https://github.com/OpenMediaVault-Plugin-Developers/installScript
|
- Install script: https://github.com/OpenMediaVault-Plugin-Developers/installScript
|
||||||
|
- RPi Imager: https://www.raspberrypi.com/software/
|
||||||
- RPi Downloads: https://www.raspberrypi.com/software/operating-systems/
|
- RPi Downloads: https://www.raspberrypi.com/software/operating-systems/
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ confidence: 1.0
|
|||||||
|
|
||||||
# Personal OS — Agent Rules & Architecture
|
# Personal OS — Agent Rules & Architecture
|
||||||
|
|
||||||
Eagle (Орёл) is the Discord-facing Hermes agent. This page documents what Eagle knows about its own environment and how to reason about it.
|
Eagle (Орёл) is the Zulip-facing Hermes agent. This page documents what Eagle knows about its own environment and how to reason about it.
|
||||||
|
|
||||||
## Data Flow
|
## Data Flow
|
||||||
|
|
||||||
@@ -44,7 +44,7 @@ VALUES (current_date, EXTRACT(WEEK FROM current_date)::int,
|
|||||||
ARRAY[<gids>]::text[], '<reason_tag>');
|
ARRAY[<gids>]::text[], '<reason_tag>');
|
||||||
```
|
```
|
||||||
|
|
||||||
`source` values: `discord_pushback` | `morning_brief_correction` | `manual`
|
`source` values: `zulip_pushback` | `morning_brief_correction` | `manual`
|
||||||
`reason_tag` examples: `ship-review-crunch` | `urgent-bug` | `meeting-day` | `over-estimated` | `scope-change`
|
`reason_tag` examples: `ship-review-crunch` | `urgent-bug` | `meeting-day` | `over-estimated` | `scope-change`
|
||||||
|
|
||||||
Never announce the log insertion. It is silent instrumentation.
|
Never announce the log insertion. It is silent instrumentation.
|
||||||
|
|||||||
@@ -17,11 +17,11 @@ See: `personal-os-purpose.md`
|
|||||||
- `~/scripts/run-pipeline.sh` → sync.js + generate-status.js every 30 min (workdays via Hermes cron)
|
- `~/scripts/run-pipeline.sh` → sync.js + generate-status.js every 30 min (workdays via Hermes cron)
|
||||||
- Writes `~/context/status.md` and `~/Developer/personal-os/asana_context.md`
|
- Writes `~/context/status.md` and `~/Developer/personal-os/asana_context.md`
|
||||||
- Writes daily AW activity summaries to `activity_daily` table with quadrant classification
|
- Writes daily AW activity summaries to `activity_daily` table with quadrant classification
|
||||||
- No Discord output — pure data layer
|
- No Zulip output — pure data layer
|
||||||
|
|
||||||
### Орёл / Eagle (Tactician + reactive layer) — Hermes v0.11.x Discord bot
|
### Орёл / Eagle (Tactician + reactive layer) — Hermes Zulip agent
|
||||||
- Reads `~/context/status.md`, daily/weekly briefs, vault via obsidian MCP
|
- Reads `~/context/status.md`, daily/weekly briefs, vault via obsidian MCP
|
||||||
- Discord channels: `#daily-brief` `#inbox` `#focus` `#executor` `#projects` `#journal` `#retrospector`
|
- Zulip streams: `daily-brief` `inbox` `focus` `executor` `projects` `journal` `retrospector`
|
||||||
- Cron jobs: generate-daily-brief (07:00 MTWRF), morning-brief (08:30 MTWRF), eod-summary (18:00 MTWRF), inbox-check (30 min 09–19 MTWRF), weekly-plan (Mon 08:00), weekly-review (Fri 17:00), retrospector (Fri 17:30), executor-autonomous (every 30 min 09–18 MTWRF), commit-vault (23:00 daily)
|
- Cron jobs: generate-daily-brief (07:00 MTWRF), morning-brief (08:30 MTWRF), eod-summary (18:00 MTWRF), inbox-check (30 min 09–19 MTWRF), weekly-plan (Mon 08:00), weekly-review (Fri 17:00), retrospector (Fri 17:30), executor-autonomous (every 30 min 09–18 MTWRF), commit-vault (23:00 daily)
|
||||||
- Logs corrections to `corrections_log` table (SQL INSERT, silently on pushback)
|
- Logs corrections to `corrections_log` table (SQL INSERT, silently on pushback)
|
||||||
- **Never accesses Asana API directly** — only reads pre-rendered markdown and DB
|
- **Never accesses Asana API directly** — only reads pre-rendered markdown and DB
|
||||||
@@ -79,7 +79,7 @@ generate-status.js
|
|||||||
→ ~/context/status.md ← Eagle reads this
|
→ ~/context/status.md ← Eagle reads this
|
||||||
→ ~/Developer/personal-os/asana_context.md ← inbox-check reads this
|
→ ~/Developer/personal-os/asana_context.md ← inbox-check reads this
|
||||||
|
|
||||||
Eagle corrections in Discord
|
Eagle corrections in Zulip
|
||||||
→ corrections_log table (INSERT on pushback, no announcement)
|
→ corrections_log table (INSERT on pushback, no announcement)
|
||||||
→ Retrospector reads weekly
|
→ Retrospector reads weekly
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user