Предисловие
Не так давно я начал пользоваться Plex media server для просмотра видео на ТВ через Amazon fire stick. Plex server был настроен на десктопе, а файлы с видео были подключены через внешний USB диск и такая связка меня впринципе устраивала. Однако при выключенном ПК доступа к контенту нет и каждый раз включать ПК только для того что бы посмотреть фильм или послушать музыку уже стало напрягать. Поэтому решил настроить plex на raspberry и подключить к нему внешний USB с уже имеющимся контентом. А уже в процессе понял, что еще бы не плохо иметь доступ к файлам и качалку для торентов и заодно упростить процесс настройки с помощью автоматизации на Ansible. Playbook выложил на GitHub.
Что портебуется (железо / софт)
-
Window и Ubuntu Desktop. В принципе можно только что то одно, но мне привычнее какие то вещи делать на Window, а какие то на Ubuntu. (Ubuntu установлена через VirtualBox на Windows). Все тоже самое думаю удастся без проблем и на Mac.
-
Raspberry Pi Imager под Windows. Можно скачать с официального сайта.
-
Образ Raspberry Pi OS Lite. Тоже с официального сайта. Быстрее скачать через торрент, чем по прямой ссылке.
-
Raspberry pi 3/4. Изначально проводил опыты на третьей версии, но потом закупил четвертую.
-
SD карта 8Gb или больше. (USB кардридер)
-
Ansible под Ubuntu описание и установка здесь.
-
USB диск. Желательно с USB 3.0 если собираете на pi 4.
-
Блок питания на 3A что бы хватало мощности для подключенного USB диска.
-
Возможно потребуется подключение дисплея и клавиатуры. (настройка статического IP в первый раз)
-
Playbook для Ansible с GitHub.
-
Ansible. Установка описана здесь.
-
Git.
Подготовка raspberry pi
Для начала зальем скаченный образ с ОС на SD карту с помощью Pi Imager. В пункте Choose image выбираем Use custom и выбираем тот образ что скачали. Можно выбрать тот же образ в самой программе, но тогда он будет скачивать его из интернета, у меня процесс закачки занимал очень длительное время, поэтому снача попробовал скачать по прямой ссылке с сайта, но это тоже оказалось медленно и в итоге скачал через торрент. Указываем нашу SD карту и жмем write.
Дальше отформатируем внешний USB накопитель в NTFS и присвоим ему понятный лейбел (например usb_750g), который будем использовать в дальнейшем для монтирования диска на raspberry. У меня внеший USB накопитель был уже с данными и отформатирован в NTFS поэтому просто списал название лейбла. Можно так же отформатировать в диск в exFAT, но в таком случае на raspberry придется ставить дополнительный пакет, поэтому в данной статье рассмотрю только случай с NTFS. Возможно в дальнейшем добавлю и для других.
На данном этапе работа с Windows заканчивается и дальнейшие действия будут производиться на Ubuntu.
Подключаем нашу SD карту к компьютеру с Ubuntu или переподключаем устройство на гостевую систему в VirtualBox. Должны появиться два подматированных диска boot
и rootfs
. Через терминал зайдем сначала в boot cd /media/ваш_пользователь/boot/
. и положим туда файл ssh который при первом запуске даст понять raspberry что нужно включить ssh соединения.
Для подключения к raspberry я буду пользоваться ssh ключем, он так же понадобится для плейбука на Ansible, поэтому создадим его командой cd ~/.ssh && ssh-gen
в папке для ключей (если ее нет то создайте ее). Дайте понятное имя ключу напимер raspberry, на вопросе о секретной фразе жмем enter. На выходе получим два ключа raspberry и raspberry.pub приватный и публичный. С помощью приватного будем подключаться, а публичный положим скопируем на сам raspberry. Для этого зайдем в папку rootfs cd /media/ваш_пользователь/rootfs/
и создадим папку для ключа авторизации mkdir home/pi/.ssh
и скопируме сам ключ cp ~/.ssh/raspberry.pub home/pi/.ssh/authorized_keys
.
Вставляем SD карту в raspberry, подключем сетевой кабель, USB диск и питание. У меня в домашней сети IP адреса раздает роутер, если у вас такая же конфигурация и в интерфейсе роутера можно посмотреть какой IP адресс выдан устройству и его MAC адрес, то установть выдачу постоянного IP вашему raspberry по MAC адресу. MAC адресс можно посмотреть и на самом raspberry. Подключаем монитор с клавиатурой и запускаем команду cat /sys/class/net/eth0/address
. Либо же выставить статический IP на самом raspberry воспользовавшись этой статьей с официального сайта.
Установка и настройка
Если на Ubuntu еще не установлен Ansible, то сделать это можно по ссылке выше. Клонируем репозиторий git clone https://github.com/notfoundsam/raspberry-plex-ansible.git
и заходим в папку с плейбуками cd raspberry-plex-ansible
.
Для начала установим статический IP адресс нашего raspberry в файле hosts.ini
к которому будет обращаться Ansible для настройки. Можно указать и группу адресов если необходимо настроить сразу несколько устройств.
В файле group_vars/all.yml
если вы не изменяли имя пользователя на raspberry, то ansible_user
оставляем без изменений. Укажем путь к ssh ключу в переменной ansible_ssh_private_key_file
. Если все делали по шагам как описано выше, то оставляем без изменений. Установим имя хоста в переменной host_name
. В переменную usb_volume_label
запишем имя лейбла подключенного USB диска. Монтирование диска будет производиться как раз по этому лейблу. Если предполагается использовать transmission для закачки торентов то установите в переменные transmission_username
, transmission_password
, transmission_white_list
свои значения. Для transmission_white_list
обязвтельно оставьте адрес 127.0.0.1.
Установка Plex и монтирование диска. Запустите плейбук plex.yml
командой ansible-playbook plex.yml
который установит необходимые пакеты, сам Plex изменит имя хоста и сделает перезагрузку. После завершения работы скрипта запустите другой плейбук ansible-playbook usb-volume.yml
который подмонтирует наш USB диск и добавит автоматическое монтирование при старте. Зайдем на веб интерфейс плекса raspberry_ip:32400/web
и пройдем шаги которые plex предлагает. На некоторых шагах бывало что plex выдавал ошибку что нет доступа, но после обновления страницы все отображалось или повторного перехода на raspberry_ip:32400/web
все корректно отображалось. Я думаю это связано с тем, что при первом запуске plex сервер не успевает ответить клиенту из за большой нагрузки. Дальше в интерфейсе plex уже можно выбрать наш USB диск.
Установка Samba сервера. Заливать файлы на raspberry удобнее по сети, поэтому добавил плейбук который установит Samba сервер и расшарит USB диск в локальной сети. Для установки запускаем ansible-playbook samba.yml
. Замечание, если ваш Windows хост принадлежит группе отличной от workgroup, то поправте на свою в файле /etc/samba/smb.conf
на raspberry. Теперь можно зайти по IP и проверить доступ \\raspberry_ip
в проводнике Windows.
Установка Transmission. Запустите плейбук который установит transmission демон и утилиту для работы с iptables, добавит папку downloads на USB диск для загрузок и сделает ее папкой по умолчанию для загружаемых торентов. Папка для временных файлов таже самая, но transmission будет добавлять .part к еще незавершенным файлам. Так же откроет порт 51413 для входящих подключений. Проверим доступ зайдя на raspberry_ip:9091/transmission
, логин и пароль для входа те что прописаны в файле group_vars/all.yml
. В настройках клиента на вкладке Network проверим что порт 51413 открыт, если написано closed, то нужно настроить перенаправление этого порта на вашем роутере.
Сравнение raspberry 3 с raspberry 4
Проводил проверку работы на raspberry pi 3B / 3B+/ 4B. У pi 3 сетевой интерфейс поддерживает только 100Mbs поэтому скопировать туда 100-200GB данных займет много времени. С 3B+ ситуация уже по лучше, потому что установлен сетевой интерфейс на 1Gbs. Plex сервер достаточно хорошо себя показал на нем, особенно если видео файлы в формате H.264, но на некоторых avi файлах сжатых MPEG4(XVID) кодеком, процессор еле-еле тянул, открывал видео долго, и порой не успевал отдавать видео и картинка останавливалась. Впринципе такие файлы можно заранее оптимизировать в плексе под TV и тогда эта проблема уйдет, но потребуется больше менста для перекодированных файлов.
После некоторого времени использования pi 3B+, все таки стал замечать что обновление библиотеки с несколькой сотней файлов занимае приличное время и редкие залипания, например ни как не может открыть фильм, решил заказать себе pi 4B. У pi 4B процессор уже по мощнее и это решило проблему с MPEG4 уже можно было смотреть файлы без сильных задержек и при перемотке не ждать по 10-15 секунд. USB 3.0 добавил быстроты работы с диском при обновлении библиотеки.
После прочтения этой статьи решил преобрести себе Samsung Evo+ вместо ScanDisk Ultra. И по ощущениям загрузка ОС стала быстрее.
Стоимость / Комплектущие
-
Raspberry pi 4B 4GB RAM ~ $62
-
SD карта Samsung Evo+ ~ $8
-
Металлический корпус с пассивным охлаждением ~ $17
-
USB 3.0 жесткий диск 750GB (покупал 4 года назад) ~ $50
-
Питание Anker PowerPort 6 (покупал 3 года назад) ~ $30
Если какие то комплектующие уже есть в наличии, то и список можно сократить. В моем случае получилось $87.
Выводы
За небольшую сумму удалось собрать медиа центр, который на данный момент удовлетворяет все мои потребности. При выходе из строя внешнего накопителя я согласен с полной или частичной потерей данных. Для снижения нагрузки на внешний диск медиа-сервера, собрал еще один комплект USB диск + Samba + Transmission на raspberry pi 3B, но передача данных по сети со скоростью 100Mbs начинает напрягать, планирую перенести на pi 3B+. Благодаря созданному скрипту на Ansible процесс настройки стал занимать гораздо меньше времени.
Плейбуки написаны по отдельности, что бы можно было использовать в различных комбинациях, например только для настройки Samba с подключением внешнего диска, для организации простого сетевого хранилища.
Надеюсь что данный материал поможет быстрее справиться с аналогичной задачей. Если есть предложения по улучшению, критика или ошибки пишите в коментариях.
Дальнейшие планы
Объем данных постоянно растет, поэтому планирую докупить стойку с USB хабом и несколькими отсеками для HDD дисков. В планах приобрести что то из этого Yottamaster Hard Drive с 4мя отсеками. Есть уже со встроенным RAID контроллером, но наверное возьму без него, если потребуется RAID, то настрою его на raspberry и только для двух дисков остальные оставлю как single. А старый 750GB диск переключу на закачку торрентов.
ссылка на оригинал статьи https://habr.com/ru/post/548660/
Добавить комментарий