[2026-05-12] kraken NAS: обновлён план настройки OMV, шаги 5-11
This commit is contained in:
@@ -5,11 +5,12 @@ tags:
|
||||
- openmediavault
|
||||
- how-to
|
||||
created: '2026-05-11'
|
||||
status: in-progress
|
||||
updated: '2026-05-12'
|
||||
status: omv-installed
|
||||
---
|
||||
# OpenMediaVault на Raspberry Pi 5
|
||||
|
||||
**Статус:** В процессе настройки (май 2026)
|
||||
**Статус:** OMV установлен (май 2026)
|
||||
**Цель:** NAS на RPi 5 — OS на SD-карте, хранилище на USB 3.0 HDD
|
||||
|
||||
---
|
||||
@@ -19,58 +20,69 @@ status: in-progress
|
||||
- Raspberry Pi 5 (4 или 8 GB RAM)
|
||||
- SD-карта ≥16 GB (Samsung/SanDisk A1 Class 10+)
|
||||
- USB 3.0 HDD для хранения данных
|
||||
- Проводной Ethernet (обязателен при установке)
|
||||
- Проводной Ethernet (обязателен)
|
||||
|
||||
---
|
||||
|
||||
## Шаг 1 — Флашим SD-карту
|
||||
|
||||
**Образ:** 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**
|
||||
- Прямая ссылка: 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-карту в мак и запустить:
|
||||
```bash
|
||||
bash ~/Downloads/setup-kraken-sdcard.sh
|
||||
```
|
||||
**Настройки (Edit Settings → шестерёнка):**
|
||||
- Hostname: `kraken`
|
||||
- Username: `kraken` (не `admin` — зарезервировано для OMV!)
|
||||
- Password: сохранён в 1Password (запись "Kraken RPi")
|
||||
- SSH: Enable → Allow public-key authentication → вставить `~/.ssh/id_rsa.pub`
|
||||
|
||||
Что скрипт настраивает:
|
||||
- **Hostname:** `kraken`
|
||||
- **Username:** `kraken` (не `admin` — зарезервировано для OMV!)
|
||||
- **SSH:** включён, ключ `id_rsa` добавлен автоматически
|
||||
- **Подключение:** `ssh kraken@kraken.local`
|
||||
- Пароль сохранён в 1Password (запись: "Kraken RPi")
|
||||
После флаша вставить карту в Pi и включить.
|
||||
|
||||
---
|
||||
|
||||
## Шаг 2 — Первый запуск и обновление
|
||||
## Шаг 2 — Первый запуск, обновление и настройка сети
|
||||
|
||||
SSH подключение (пока через WiFi/роутер):
|
||||
```bash
|
||||
ssh <username>@<Pi-IP>
|
||||
|
||||
sudo apt-get update
|
||||
sudo apt-get upgrade -y
|
||||
ssh -i ~/.ssh/id_rsa kraken@kraken.local
|
||||
```
|
||||
|
||||
Обновление системы:
|
||||
```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
|
||||
# Pre-install (настраивает сеть, grub и т.д.)
|
||||
wget -O - https://github.com/OpenMediaVault-Plugin-Developers/installScript/raw/master/preinstall | sudo bash
|
||||
# Pre-install
|
||||
wget -qO- https://github.com/OpenMediaVault-Plugin-Developers/installScript/raw/master/preinstall | sudo bash
|
||||
sudo reboot
|
||||
|
||||
# После перезагрузки — основная установка (~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 перезагрузится автоматически по окончании.
|
||||
@@ -79,24 +91,198 @@ Pi перезагрузится автоматически по окончани
|
||||
|
||||
## Шаг 4 — Первый вход в веб-интерфейс
|
||||
|
||||
- URL: `http://<Pi-IP>`
|
||||
- URL: `http://192.168.100.2` (или `http://kraken.local`)
|
||||
- Логин: `admin`
|
||||
- Пароль: `openmediavault`
|
||||
- **Сразу сменить пароль!**
|
||||
- **Сразу сменить пароль!** (System → General Settings → Web Administrator Password)
|
||||
|
||||
---
|
||||
|
||||
## Шаг 5 — Подключение USB HDD
|
||||
## Шаг 5 — Подключить Pi к роутеру, настроить static IP, отключить WiFi
|
||||
|
||||
1. Подключить HDD после установки OMV
|
||||
2. Storage → Disks → инициализировать диск
|
||||
3. Storage → File Systems → создать EXT4, смонтировать
|
||||
4. Storage → Shared Folders → создать шары
|
||||
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
|
||||
```
|
||||
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
|
||||
- RPi Imager: https://www.raspberrypi.com/software/
|
||||
- RPi Downloads: https://www.raspberrypi.com/software/operating-systems/
|
||||
|
||||
@@ -7,7 +7,7 @@ confidence: 1.0
|
||||
|
||||
# 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
|
||||
|
||||
@@ -44,7 +44,7 @@ VALUES (current_date, EXTRACT(WEEK FROM current_date)::int,
|
||||
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`
|
||||
|
||||
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)
|
||||
- Writes `~/context/status.md` and `~/Developer/personal-os/asana_context.md`
|
||||
- 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
|
||||
- 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)
|
||||
- Logs corrections to `corrections_log` table (SQL INSERT, silently on pushback)
|
||||
- **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
|
||||
→ ~/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)
|
||||
→ Retrospector reads weekly
|
||||
|
||||
|
||||
Reference in New Issue
Block a user