Всем привет! Хочу поделиться своим опытом настройки медиасервера на базе Orange Pi RV2. В статье другого автора описан опыт настройки на базе платы Orange Pi Zero 3, я решил пойти немного другим путем исходя из следующих требований:

  1. Хотелось нативной поддержки NVMe диска от платы

  2. Максимально компактное решение (только сама плата и диск, никаких внешних носителей/переходников по USB)

  3. Относительная дешевизна

Выбор платы

Изучив официальный сайт orange pi выделил следующие платы, которые подходили под п1:

  • Orange Pi 5

  • Orange Pi 5 Plus

  • Orange Pi 5 Pro

  • Orange Pi 3B 

  • Orange Pi 4A

  • Orange Pi RV2

Далее, изучив цены и характеристики, решил, что 5 версия достаточно дорога и, пожалуй, слишком мощная под планируемую задачу. Решил в итоге выбрать RV2 т.к.:

  • Целых два слота под диски (2230 и 2280 M.2), те возможен апгрейд и расширение

  • Достаточно бюджетна (если не самая бюджетная из всех, свой экземпляр на 4 Gb RAM я заказал на али за 4392 Р)

  • 8-core RISС-V процессор (не то, чтобы в дальнейшем при настройке linux это как-то сильно это влияло, но хотелось пощупать).

Фото из офф документации
Фото из офф документации

Систему я планировал ставить на NVMe диск, в качестве которого я выбрал Kingston SSD SNV3S1TB.

Важно! Поддержка загрузки системы есть только с заднего слота M2, что явно указано в документации.

Сборка корпуса

Под RV2 на али есть готовые акриловые корпуса, пример ниже.

Корпус с али
Корпус с али

Но я решил сделать кастомный для печати на 3d принтере в оранжевом цвете (Orange Pi же!). Предполагается крепление вентилятора 3010 для обдува процессора и остальных элементов сверху платы. Результат на фото:

Вид сбоку
Вид сбоку
Вид снизу
Вид снизу
Вид спереди
Вид спереди

Модель можно взять по ссылке: https://www.thingiverse.com/thing:7054834

Установка системы

Для первичной установки понадобится монитор с HDMI и USB клавиатура. Это, если как я, не хочется подключать плату к ethernet. При подключении к сети и успешной загрузке с TF плата будет сразу доступна по сети. Но у меня были проблемы из-за кривой TF и проще было убедится в успешной загрузке, подключив плату к монитору.

Сам процесс установки системы достаточно подробно описан в user manual по плате, и состоит из шагов:

  • Скачиваем образ системы по ссылкам с оф сайта. Я выбрал Orangepirv2_1.0.0_ubuntu_noble_server_linux6.6.63.zip, распаковываем его , получая образ .img

  • Через balenaEtcher записываем образ на TF карту. Важно! Явно в документации прописаны требования к карте, минимум 16 Гб и 10 класса или выше. Хоть образ около 2 гб, с картой на 8 ГБ плата у меня не завелась. С картой 16 Гб все прошло отлично.

  • Устанавливаем SSD в нижний слот. Вставляем карту TF в плату, подключаем через HDMI к монитору и USB клавиатуру, подключаем питание (5V/5A)

Плата должна загрузиться, дальше выполняем минимальные настройки для переноса образа на SPIFlash и NVMe SSD. Этот процесс так же детально описан со скриншотами в документации, и состоит из вызова команд.

Подготовка SSD:

sudo parted /dev/nvme0n1 mklabel gpt
sudo parted /dev/nvme0n1 mkpart primary ext4 8192s 100%

Запуск установщика:

sudo nand-sata-install

После установки и перезагрузки можно дополнительно настроить подключение к wifi через команду, открывающую графический интерфейс по настройке подключения к wifi сети:

sudo nmtui

Если предполагается использовать подключение через ethernet, то wifi можно и не настраивать, но я решил подключить плату именно по wifi. После подключения в роутере зафиксировал выделенный адрес за сервером, чтобы он уже не менялся.

После данного шага можно отключить плату от клавиатуры и монитора, дальнейшие настройки уже выполнять через ssh.

Установка и настройка Transmission, miniDLNA и Samba

Дальнейшие настройки предполагают, что сервер находится внутри домашней сети, соответственно я не менял дефолтовый логин/пароль orangepi/orangepi и не настраивал аутентификацию на transmission и samba для упрощения доступа к ресурсам.

Сценарий загрузки .torrent файлов и старт загрузки я решил сделать через watch-dir настройку transmission и директорию на сервере.

Подключаемся через putty или любой другой клиент по ip адресу, который я посмотрел в роутере, далее выполняем серию команд.

Создаем директории и настраиваем права:

mkdir /srv/media
chmod 777 /srv/media

mkdir /srv/watch
chmod 777 /srv/watch

Далее устанавливаем transmission

sudo apt install transmission-daemon

После установки останавливаем сервис sudo service transmission-daemon stop

и настраиваем конфиг sudo nano /etc/transmission-daemon/settings.json

Для примера, моя конфигурация

settings.json

{
"alt-speed-down": 50,
"alt-speed-time-begin": 540,
"alt-speed-time-day": 127,
"alt-speed-time-enabled": false,
"alt-speed-time-end": 1020,
"alt-speed-up": 50,
"announce-ip": "",
"announce-ip-enabled": false,
"anti-brute-force-enabled": false,
"anti-brute-force-threshold": 100,
"bind-address-ipv4": "0.0.0.0",
"bind-address-ipv6": "::",
"blocklist-enabled": false,
"blocklist-url": "http://www.example.com/blocklist",
"cache-size-mb": 256,
"default-trackers": "",
"dht-enabled": true,
"download-dir": "/srv/media",
"download-limit": 100,
"download-limit-enabled": 0,
"download-queue-enabled": true,
"download-queue-size": 5,
"encryption": 1,
"idle-seeding-limit": 30,
"idle-seeding-limit-enabled": false,
"incomplete-dir": "/var/lib/transmission-daemon/Downloads",
"incomplete-dir-enabled": false,
"lpd-enabled": true,
"max-peers-global": 200,
"message-level": 2,
"peer-congestion-algorithm": "",
"peer-limit-global": 200,
"peer-limit-per-torrent": 50,
"peer-port": 51415,
"peer-port-random-high": 65535,
"peer-port-random-low": 49152,
"peer-port-random-on-start": false,
"peer-socket-tos": "le",
"pex-enabled": true,
"port-forwarding-enabled": false,
"preallocation": 1,
"prefetch-enabled": true,
"queue-stalled-enabled": true,
"queue-stalled-minutes": 30,
"ratio-limit": 2,
"ratio-limit-enabled": false,
"rename-partial-files": false,
"rpc-authentication-required": false,
"rpc-bind-address": "0.0.0.0",
"rpc-enabled": true,
"rpc-host-whitelist": "",
"rpc-host-whitelist-enabled": false,
"rpc-password": "{a7d7118cc5c00f53aef172ff2ae09bf3e5ae379fMBw1QaKi",
"rpc-port": 9091,
"rpc-socket-mode": "0750",
"rpc-url": "/transmission/",
"rpc-username": "transmission",
"rpc-whitelist": "127.0.0.1",
"rpc-whitelist-enabled": false,
"scrape-paused-torrents-enabled": true,
"script-torrent-added-enabled": false,
"script-torrent-added-filename": "",
"script-torrent-done-enabled": false,
"script-torrent-done-filename": "",
"script-torrent-done-seeding-enabled": false,
"script-torrent-done-seeding-filename": "",
"seed-queue-enabled": false,
"seed-queue-size": 10,
"speed-limit-down": 100,
"speed-limit-down-enabled": false,
"speed-limit-up": 100,
"speed-limit-up-enabled": false,
"start-added-torrents": true,
"tcp-enabled": true,
"torrent-added-verify-mode": "fast",
"trash-original-torrent-files": true,
"umask": "022",
"upload-limit": 100,
"upload-limit-enabled": 0,
"upload-slots-per-torrent": 8,
"utp-enabled": true,
"watch-dir": "/srv/watch",
"watch-dir-enabled": true
}

Как раз настройка watch-dir и watch-dir-enabled позволяет при помещении файла в эту директорию автоматически стартовать загрузку. Аутентификация при входе в веб интерфейс по адресу http://{serviceIp}:9091 не требуется

Я этот сценарий использую следующим образом:

  1. На клиенте, где производится поиск и скачивание файлов .torrent создаю папку (например, на рабочем столе папка opi), куда скидываю все файлы, которые надо загрузить

  2. Далее скриптом их перекидываю в watch директорию сервера. На windows это простой bat файл с содержанием:

    move C:\Users\Username\Desktop\opi\*.torrent \192.168.1.100\watch

Чтобы это сработало дополнительно надо поставить samba и настроить директории.

Ставим через sudo apt install samba -y и настраиваем конфигурацию sudo nano /etc/samba/smb.conf

Привожу свою настройку для директорий watch и media

smb.conf

[media]
comment = media
path = /srv/media
browsable = yes
guest ok = yes
read only = no
unix extensions = no
directory mask = 0777

[watch]
comment = watch
path = /srv/watch
browsable = yes
writable = yes
guest ok = yes
read only = no
create mask = 0777
directory mask = 0777

Рестартуем самбу через sudo systemctl restart smbd , закидываем файл в \\{serviceIp}\watch и проверяем , что скачивание стартует.

Устанавливаем miniDLNA. Вводим sudoapt-get install minidlna Настраиваем файл конфигурации sudonano /etc/minidlna.conf Приводим строчку media_dir к виду media_dir=/srv/media

Мне не очень нравится стандартный веб интерфейс transmission и я решил поискать и установить альтернативное решение. Наиболее симпатичным мне показался TrguiNG , ниже привожу скрипт по его установке:

Переходим в tmp, скачиваем и разархивируем дистрибутив (на момент написания статьи последний релиз был 1.4.0)

cd /tmp
mkdir webui
cd webui
sudo wget
https://github.com/openscopeproject/TrguiNG/releases/download/v1.4.0/trguing-web-v1.4.0.zip
sudo unziptrguing-web-v1.4.0.zip

Останавливаем сервис
sudo service transmission-daemon stop

Бэкапим интерфейс по умолчанию. В последних версиях transmission он находится в папке public_html.

sudo tar -cvf /usr/share/transmission/public_html/backup.tar /usr/share/transmission/public_html/

Переносим новые файлы и настраиваем права

sudo cp -vr * /usr/share/transmission/public_html/
sudo chmod 755 -Rc /usr/share/transmission/public_html/


Стартуем сервис и проверяем, что он работает

sudo service transmission-daemon start
sudo service transmission-daemon status

По тому же урлу http://{serviceIp}:9091 будет доступен новый интерфейс

Пример интерфейса
Пример интерфейса

Есть и другие варианты по интерфейсу, но меня TrguiNG более чем устроил.

На этом все, надеюсь информация будет вам полезна!

Комментарии (17)


  1. durka
    17.06.2025 18:40

    Что интересно: если за основу взять mini-pc на базе процессора intel N100 (мощность 6 ватт), то будет дешевле и без "плясок с бубном". по энергопотреблению и шуму - примерно тоже самое. у меня есть такой комп - большую часть времени вентелятор выключен, хотя есть модели где полностью пассивное охолождение. цена - менее 12тр, и это вместе с 16гб ддр5 и 0,5тб накопителем. даже винда лицензионная в комплекте.


    1. PriFak
      17.06.2025 18:40

      я чет не пойму
      как одноплатник ценой менее 5к + диск + корпус стоят дороже пк на интел н100 ценой 12к. очень хочу понять


      1. durka
        17.06.2025 18:40

        прямо сейчас на озоне продают комп на проце интел5095 с 8гб озу и накопителем на 128гб за 6050руб. или на интел N95 с 8гб озу и накопителем на 256гб за 6556 руб. но лучше накинуть до 7700 и взять на N150 (8гб+256гб)

        PS: давно не смотрел цен, а за год они значительно снизились. вот и на алике нашёл за 8300 (N100+16ГБ, 512Гб). единственно нужно следить что бы ОЗУ было ДДР5, а то некоторые модели комплектуются ДДР4.


    1. Fox_exe
      17.06.2025 18:40

      А ещё есть такие вот интересные штуки на N100 (Вроде как и на N150 и N305 тоже есть): https://aliexpress.ru/item/1005008342452561.html?sku_id=12000044664993092

      Правда корпус придётся пилить самому, ну и размеры немаленькие.
      Зато вполне неплохой софтовый RAID на 6 дисков (ASM1166) и сразу 3 NMVE слота (PCIe 3.0 x2 каждый). Плюс возможность поставить Proxmox или другую виртуализацию со всем необходимым.

      Ps: Прямо сейчас пилю корпус под эту штуку для печати на 3D принтере. Потом выложу на Thingieverse, если кому надо будет.


      1. Dkstr Автор
        17.06.2025 18:40

        В рамках этого гайда хотел описать вариант прям суперкомпактного решения под один диск. Более объемное хранение да, стоит реализовывать на другом железе, напр как в моей предыдущей статье https://habr.com/ru/articles/716328/