В воздухе давно витала идея, перенести Air Video Server HD с моего ноутбука, по вполне понятным причинам, куда-то в другое место… Но, во-первых, толком-то нема куды было, а, во-вторых, не хотелось связываться с геморроем, т.к. беглый поиск по этим вашим Интернетам, производимый с некой периодичностью в надежде, что наконец-то появится что-то стоящее, не давал никаких внятных результатов, кроме обещания без срока, что InMethod все же выпустят сервер под никсы.
В итоге я устранил первое «во-», приобретя Raspberry Pi 4 Model B под контроллер умного дома и установив на него Raspberry Pi OS 11 (bullseye), частично1) пренебрег вторым «во-» и понеслась…
Задача стояла простая – все семейство без танцев с бубном должно мочь смотреть и, что важнее, сохранять на свои иФоны фильмики, сериальчики, да аниме. Последнее еще и с субтитрами2)! Бонусом хотелось, чтобы была авторизация с разграничением доступа к контенту3). Ну и суровой вишенкой на всем этом торте было мое требование – простота, изящность и легкость!
Любое хранилище начинается… аха, с хранилища! Я взял из закромов первый попавшийся HDD 2,5 и переходник USB → SATA. Очень дешево с сердито, т.к. все уже было в наличии.
Чтобы все было по фэншую, желательно удалить все старые разделы с диска и создать нативный том:
lsblk -f
;sudo fdisk /dev/sda
;d
;p
;o
;w
;sudo wipefs -a /dev/sda
;sudo mkfs -t ext4 /dev/sda
;sudo e2label /dev/sda DATA
.Оказалось, что в Линухе даже банальное монтирование диска… не так тривиально, как хотелось бы – пока разобрался, в очередной раз чуть не поседел!
Помимо первоочередного втыкания жесткого в разъем, нужно5):
sudo mkdir -m 777 /mnt/usb-hdd
;sudo chown :adm /mnt/usb-hdd
;sudo mount /dev/sda /mnt/usb-hdd
!
Все, как в Винде – вставил и играй, бля! Если бы! Еще нужно настроить автомонтирование:
sudo nano /etc/fstab
;/dev/sda /mnt/usb-hdd ext4 defaults 0 0
;sudo mount -a
.
Все это очень упрощенно, в жизни может что-то пойти не так – самое банальное, это несколько разделов или другая файловая система… Все это, конечно, побарывается, но… Но, ну и хрен с ним!
Вот тут, что интересно, быстро и легко нашелся подходящий и устраивающий меня вариант – Transmission, имеющий daemon, web, rpc! Даже под Windows он есть и хорошо работает!
В данном контексте нужен только демон:
sudo apt update && sudo apt upgrade
;sudo apt install transmission-daemon
.Тут есть один нюанс – перед изменением конфигурации, демона нужно остановить, или после ее изменения не забыть заставить его перечить конфиг, иначе при остановке он его, тихо перепишет!
sudo systemctl stop transmission-daemon
;sudo nano /etc/transmission-daemon/settings.json
;sudo systemctl start transmission-daemon
.
Но можно и просто после изменений перечитать конфигурацию – sudo invoke-rc.d transmission-daemon reload
.
В базовом варианте, можно поменять только эти параметры:
"bind-address-ipv6": "fe80::", "download-dir": "/mnt/usb-hdd/torrents", "rpc-password": "$tR0nG-PvvD", "rpc-username": "my-user", "rpc-whitelist-enabled": false, "umask": 0,
Первое, это отключение IPv68), а последнее – установка демоном нормальных прав на каталоги и файлы при их создании. Остальное и так понятно.
Однажды, давным-давно, в qBittorrent я наткнулся на очень удобную функцию – отправку уведомлений на электронную почту при завершении загрузки, которой ни у какого другого клиента до этого и после не встречал! А в данном контексте… это просто очень нужная штука! Но как?
Да просто – пишем лог, следим за ним syslog-ng и, когда надо, отправляем уведомление9).
Нужно учесть, что Transmission не может сам создать файл лога10) и не может писать в «/var/log»11), поэтому12):
sudo mkdir -m 765 /mnt/usb-hdd/log
;sudo touch /mnt/usb-hdd/log/daemon.log
;sudo chown -R debian-transmission:debian-transmission /mnt/usb-hdd/log
.Далее необходимо поменять настройки запуска демона:
sudo nano /lib/systemd/system/transmission-daemon.service
;ExecStart=/usr/bin/transmission-daemon -f --log-info --logfile /mnt/usb-hdd/log/daemon.log
Теперь перечитываем настройки и перезапускаем процесс:
sudo systemctl daemon-reload
;sudo systemctl restart transmission-daemon
.
Посмотреть правильность аргументов можно выполнив ps -eF | grep "transmission"
.
Информация из лога нужна только раз, поэтому хранить его никакого смысла нет – храним только один, сдвигаем при достижении 200 килобайт, создаем пустой файл с правами (разрешения, владелец и группа).
Раздел не написан!
О настройке syslog-ng написано тут, а в рамках этой статьи нужно только создать дополнительную конфигурацию, выполнив sudo nano /etc/syslog-ng/conf.d/torrents.conf
и добавить в нее следующее:
source s_my_torrent { file( "/mnt/usb-hdd/log/daemon.log" flags( no-parse ) ); }; filter f_my_torrent { message( ".+(State changed from \"Incomplete\").+" ); }; destination d_my_torrent { smtp( host( "smtp.domain.int" ) port( 25 ) from( "Syslog-NG" "syslog-ng@server.zone" ) to( "Admin" "admin@server.zone" ) subject( "=?UTF-8?B?<<<кОДИРОВАННЫЙтЕКСТ>>>?=" ) body( "$MSG" ) ); }; log { source( s_my_torrent ); filter ( f_my_torrent ); destination( d_my_torrent ); };
В соответствии с моими требованиями, обозначенными в начале статьи, я пошел по пути наименьшего сопротивления и выбрал демона, не обладающего ни чем, кроме главного – раздачей контента. Им оказался – MiniDLNA.
Установка и настройка крайне проста:
sudo apt install minidlna
;sudo nano /etc/minidlna.conf
;sudo rm /var/cache/minidlna/files.db
;sudo systemctl restart minidlna
.media_dir=/mnt/data/torrents merge_media_dirs=yes root_container=B network_interface=eth0 friendly_name=MiniDLNA
Немного покопавшись в App Store и позагружав всякую гадость с неадекватным ценником или тонной рекламы, случайно вспомнил про так не любимый мной13) VLC, который и попробовал, да на котором и остановился. Мало того, на ноутбуке заменил им14) привычный уже15) MPC-HC!
Если на Windows-машине VLC не видит по Wi-Fi-сети DLNA/UPnP-сервер, нужно изменить имя сетевого адаптера на английское, можно с проблемами, и включить IPv6 в настройках подключения. Ошибка старая…
sudo umount /mnt/usb-hdd
или sudo umount /dev/sda
.
Обсуждение
Спрашиваю, тк говорят у малинки нет отдельного контроллера sata, что может влиять на домашний видеохостинг.
Нет, не пробовал, не на чем и не за чем. )
Но да, у Pi 4 Model B нет на борту SATA, поэтому используется переходник SATA -> USB, от которого и будет зависеть производительность - в Pi 4 есть USB 3.x и, скорее всего, если нормальный переходник, то проблем с производительностью не должно быть. Но это теория, никогда не заморачивался практикой в этом плане. )