Как стать автором
Обновить

Делаем медиа сервер из Orange Pi RV2

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров6.1K

Всем привет! Хочу поделиться своим опытом настройки медиасервера на базе 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 более чем устроил.

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

Теги:
Хабы:
+6
Комментарии17

Публикации

Ближайшие события