Приветствую, уважаемые читатели на четвертой части цикла!
В прошлый раз мы установили и настроили локальные доменные имена на базе сервиса BIND9 в LXC контейнере.
Список цикла статей:
- Домашний Сервер: Часть 1 – Предисловие, аппаратная и софтовая начинка
- Домашний Сервер: Часть 2 – Установка системы виртуализации Proxmox
- Домашний Сервер: Часть 3 – Внутренний DNS сервис на BIND9 или свои доменные имена в локальной сети
- Домашний Сервер: Часть 4 – Настройка Transmission daemon в контейнере LXC Proxmox-VE (вы тут)
- Домашний Сервер: Часть 5 – Установка и настройка Plex Media Server в контейнере LXC Proxmox-VE
Предисловие
По аналогии с предыдущей статьей, мы установим LXC контейнер и в нем установим и настроим «торрент качалку» Transmission
Официальный сайт: transmissionbt.com
Вы спросите: «А чем не устраивает торрент на обычном ПК?»
Так вот тем, что это не удобно при работе с локальным сервером. Да, варианты есть, но если честно… такое себе.
Гораздо удобнее, когда скачивание идет сразу на сервере и более того, я могу подключаться к своей системе не только через Desktop приложение, но и через мобильное приложение.
Т.е. фактически из любого места где есть интернет. А про локальную сеть я уже молчу )
Также в моей топологии сети, при этом, не задействуется Wi-Fi, все скачивание и раздача идет по кабельному каналу. (У меня тариф 500 Мбит/сек)
Это значит, что я также расскажу, как использовать приложение Transmission GUI на ПК и Transmission Remote на Android.
Ну и как бонус покажу немного автоматизации обработки торрентов. Мы ведь не хотим сами создавать все эти папки согласно иерархии хранения? 🙂
Кому стало интересно, приятного чтения !!!
Be careful! Много текста и работы с терминалом!
Установка и настройка Torrent сервиса Transmission-daemon
Процесс установки контейнера я опущу т.к. он разбирался в статье: Домашний Сервер: Часть 3 – Внутренний DNS сервис на BIND9 или свои доменные имена в локальной сети
Принцип аналогичен, разве что параметры контейнера можно немного изменить:
Memory — 2.00 GiB
DNS — 192.168.88.7, 192.168.88.1 (помним, что мы запустили свой DNS)
Самый важный момент!
Нам необходимо сохранять файлы на RAID массив, который мы создали в процессе установки и настройки основной хост системы.
Домашний Сервер: Часть 2 – Установка системы виртуализации ProxmoxПункт: Подключение четырех дисков как ZFS массив RAID-5 (raidz1)
Но перед этим необходимо определиться со структурой хранения данных.
Для себя я определил следующую структуру:
rpoolz
├─data
| └─media
| ├─serials
| | ├─serial_name_1
| | | ├─season_1
| | | └─season_2
| | └─serial_name_2
| └─films
| ├─2D
| | ├─year_2019
| | └─year_2020
| └─3D
| ├─year_2019
| └─year_2020
└─root
└─backup
Далее будем следовать данной структуре.
Как можно видеть, я создал специальную папку media для хранения всей мультимедиа информации.
И пока мы не запустили наш контейнер вопрос: «Как подключить массив к контейнеру?»
Делается это достаточно просто. Переходим в консоль основного сервера pve1
Настройки LXC контейнеров лежат по пути:
/etc/pve/lxc/
А там уже файлы конфигураций согласно номеру контейнера 100.conf, 101.conf и т.д.
Открываем файл настроек нашего контейнера:
nano /etc/pve/lxc/101.conf
Номер 100.conf это наш контейнер под DNS, а новый созданный это 101.conf
Добавляем в него такую строку:
mp0: /rpoolz/data,mp=/mnt/data
Т.е. у нас будет доступ из контейнера в файловую систему хостовой машины через точку монтирования(mp = Mount Point), при этом нам самим не нужно ничего монтировать, система сама обо всем позаботится.
В контейнере файлы мы будем сохранять по пути /mnt/data
Вы можете указать свой путь, как вам нравится.
Я же, создал базовую папку /rpoolz/data в которой будут храниться мои файлы
mkdir -m 777 /rpoolz/data
Запустим контейнер и перейдем к установке и настройке Transmission уже непосредственно внутри контейнера
Проверим смонтированную папку
ls -l /mnt/
Создадим базовые папки
mkdir -m 777 -p /mnt/data/media/serials
mkdir -m 777 -p /mnt/data/media/films/2D
mkdir -m 777 /mnt/data/media/films/3D
Обновим контейнер и установим transmission-daemon
apt update && apt full-upgrade -y
apt install -y transmission-daemon net-tools
Остановим сервис, для изменения настроек
service transmission-daemon stop
Производим настройки transmission-daemon
Открываем файл настроек:
nano /etc/transmission-daemon/settings.json
Файл настроек представлен в формате JSON, необходимо поправить ряд параметров:
Сохраняем настройки и запускаем transmission-daemon
service transmission-daemon start
Проверяем работу
service transmission-daemon status
netstat -nltp4
Если видим в ответе netstat слова «transmission«, значит сервис точно запущен и работает.
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:13003 0.0.0.0:* LISTEN 782/transmission-da
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 9440/nginx: master
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 137/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 292/master
tcp 0 0 0.0.0.0:9091 0.0.0.0:* LISTEN 782/transmission-da
На этом настройку можно считать завершенной.
Дополнительная настройка nginx для Transmission
Стандартно ставим nginx
apt install nginx
Удаляем базовый сайт
rm /etc/nginx/sites-enabled/default
Перезапускаем nginx
service nginx restart
После этого можно обращаться к transmission и rpc по доменному имени.
Теперь перейдем к средствам удаленного управления.
Удаленное управление Transmission
Transmission удобен тем, что работает на сервере в виде службы и потребляет минимум ресурсов. Также основной ПК освобождается от торрента и хранимых медиа файлов )
Для управления можно использовать утилиту для Windows x86, Windows x64, Linux x86, Linux x64, Linux на ARM6L, Linux на ARM7L, MacOS (.dmg пакет)
Для Android и iOS также существуют приложения разработанные сторонними разработчиками
Даже на мощных роутерах таких компаний как Asus иногда можно встретить Torrent качалку на базе Transmission.
Т.е. это говорит о высокой интеграции данного сервиса во все известные системы и эта кроссплатформенность дает нужное удобство.
Рассмотрим приложения на базе Windows и Android. С остальными системами полагаю будет аналогично.
Применение Transmission Remote GUI
Что такое Transmission Remote GUI?
Transmission Remote GUI — это многофункциональный кроссплатформенный интерфейс для удаленного управления демоном Transmission через его протокол RPC. Он быстрее и обладает большей функциональностью, чем встроенный веб-интерфейс Transmission.
Transmission Remote GUI разработан с использованием Lazarus RAD и компилятора Free Pascal.
Обладает интерфейсом почти как у uTorrent (uTorrent-like interface)
Transmission Remote GUI можно скачать на гитхабе в разделе с релизами:
github.com/transmission-remote-gui/transgui/releases
По той же ссылке располагаются варианты для других систем, они там все скопом.
Установка и настройка выполняется как с обычной программой.
Я скачиваю exe файл, устанавливаю, запускаю и иду в настройки приложения.
Далее вы уже можете производить индивидуальные настройки аналогично обычному торрент клиенту по типу того же uTorrent.
И еще, как вы могли заметить программа поддерживает Русский язык, что конечно радует 🙂
Теперь перейдем к мобильной части…
Применение приложения на Android, iOS
Я опишу одно приложение, которым пользуюсь сам и т.к. у меня телефон на дройде, то прошу владельцев iOS не переживать. Полагаю для яблочных систем должно быть аналогично.
Оно так и называется Transmission Remote.
Чтобы не ошибиться, вот ссылка на приложение: Transmission Remote
Вот немного скриншотов
Мне достаточно зайти на нужный сайт, скачать торрент файл и запустить его выбрав это приложение. Сервер далее уже сам все сделает.
Можно спокойно закрыть приложение, по окончании скачивания придет push уведомление об окончании.
За время скачивания можно налить чаю, устроиться поудобнее и запустить кино/сериал на просмотр 🙂
Скрипты обработки торрентов для Transmission-daemon
А теперь настала пора автоматизации.
Скажите, вам ведь не хочется самостоятельно раскладывать каждый файл фильма или сериала по папкам? Если не хочется, то вы можете либо свалить все в кучу и тогда в один прекрасный день будет такая же история, как у многих с музыкой в начале 2000х 🙂
Было бы здорово, чтобы фильмы хранились с определенной иерархией. В начале статьи мы определили иерархию для хранения фильмов в 2D, в 3D и сериалов, но как заставить Transmission самостоятельно их переносить в нужные папки сразу после окончания и при этом не переставать раздавать в самой программе?
Как заставить торренты удаляться после наступления определенных условий, скажем рейтинг скачал/отдал был бы равен 2, а если рейтинг никогда не доберется до значения 2, то удалить торрент через 7 дней после добавления?
Как видим задач для автоматизации не много. Приступить к созданию автоматической обработки торрентов меня подтолкнула строка в настройках transmission-daemon
«script-torrent-done-filename»: «»
Тут мы можем указать путь к файлу, который transmission-daemon исполнит по окончании загрузки торрента, при этом он передаст скрипту некоторые переменные окружения, чтобы в скрипте ими можно было пользоваться.
Скажу сразу, приложение можно дорабатывать, возможно с некоторыми пунктами в нем вы будете не согласны, но написание красивого кода я своей целью не ставил, целью было выполнение нужных функций и скрипт с этим прекрасно справляется.
Я загрузил файлы на Github. Там вы можете скачать последние версии данных файлов.
Приложение TorrentDone: https://github.com/GregoryGost/transmission-torrentdone
Приложение TorrentClear: https://github.com/GregoryGost/transmission-torrentclear
Кратко опишу, какое приложение, что делает:
Приложение TorrentDone
Данное приложение ранее было написано на простом Bash, но мне захотелось рюшечек и некоторого ООП в придачу. И вот свет увидела версия написанная на NodeJS (тут вы тоже можете со мной не согласиться, но я писал на том, что знаю лучше всего)
Все инструкции и тонкости по установке находятся прям в репозитории в README.md файле.
Достаточно следовать им (ну или делать что-то под себя)
Приложение определяет, что мы скачиваем, файл или папку с файлами. Далее переносит файл(файлы) по месту их корректного хранения.
Из определений, есть определение сериал это или фильм. И для фильмов есть разделение 2D или 3D фильм.
Приложение также создает все необходимые пути согласно принятой мной системе хранения.
Краткое описание алгоритма обработки
── Check File or Directory
├─ IS FILE
| └─ Check file extensions (mkv,avi,mp4)
| └─ Check Releaser (LostFilm, NovaFilm, etc ...)
| └─ Check Serial or Film
| ├─ IS SERIAL => serialProcess()
| | ├─ If season directory (DIR_FLAG) - copy torrent files
| | └─ Else simple file - move torrent file
| └─ IS FILM => filmProcess()
| └─ Check 2D or 3D
| ├─ If directory (DIR_FLAG) - copy torrent files
| └─ Else simple file - move torrent file
└─ IS DIRECTORY (set DIR_FLAG)
└─ Foreach directory
└─ Repeat until we find the File in the directory (back to IS FILE processing)
Замечательно, фильмы и сериалы сами складываются в нужные папки, скачивание идет, мы можем удаленно управлять всем этим.
Осталось сделать так, чтобы торренты сами еще и удалялись, но конечно без удаления самого скачанного файла!
Приложение TorrentClear
Тут произошла аналогичная история. Я решил и этот сервис переписать на NodeJS, получилось довольно гибко.
Проверка каждого торрента проводится с помощью консольной утилиты transmission-remote
Приложение перебирает все активные торренты и проверяет каждый медиа файл (mkv,mp4,avi) на соответствие рейтинга скачал/отдал >= 2 (двум, т.е. отдал в два раза больше чем скачал), либо прошло ли 7 дней с момента добавления торрента (по умолчанию). Эти параметры конечно можно менять, ratio в конфигурации самого transmission, кол-во дней в конфигурации приложения.
Если одно из условий выполнено, торрент удаляется, но при этом сам скачанный файл остается не тронутым.
Для целой папки торрент удаляется вместе с файлами т.к. в TorrentDone данные файлы просто копируются, а не переносятся.
Вот мы и закончили с автоматизацией обработки торрентов.
Теперь торренты будут удаляться автоматически и у нас не будет болеть голова об этом. Просто добавили и все.
Куда сохраняются сами файлы торрента? Нужно ли их удалять?Торрент файлы с расширением «.torrent» сохраняются по пути:
/var/lib/transmission-daemon/.config/transmission-daemon/torrents/
и удаляются при удалении торрента из программы.
Отдельно контролировать их нет необходимости.
Ротация логов logrotate.d/transmission
Дополнительно можно автоматизировать обработку создаваемых лог файлов. Т.е. обеспечить их ротацию.
Скачиваем файл с настройками
cd /etc/logrotate.d
wget https://raw.githubusercontent.com/GregoryGost/Transmission/master/logrotate.d/transmission
logrotate будет следить за тем, чтобы лог файл не превышал размер 10 Mb. А если и превысит, то он создаст отдельный файл со старым логом.
А еще позже будет уже сжимать совсем старые логи в архивы.
Заключение
Что хотелось бы сказать в заключении — а сказать особо и нечего, я все постарался описать в самой статье.
С помощью функционала Proxmox я реализовал торрент качалку в LXC контейнере, в которую можно добавлять торренты по дороге домой с работы, чтобы вечером с женой/детьми/родственниками/друзьями сесть за хороший фильм или сериал.
Такое решение сильно упрощает управление скачиванием и сохранением медиа файлов. Она работает автоматически в том числе на распределение файлов по нужным папкам, чистит торренты, чтобы они не занимали ресурсы системы.
В общем и целом я считаю, что своей цели в этой статье я достиг. Буду ждать от вас интересных идей для развития данной системы, в особенности скриптов по автоматизации 😉
Ну и конечно делитесь своими фишками, хаками, способами использования Transmission в комментариях!
Благодарю за ваше время!
Всего хорошего на просторах Интернета 😉
UPD 29.11.2022:
Изменен раздел «Скрипты обработки торрентов для Transmission-daemon» т.к. скрипты были обновлены до состояния NodeJS приложений.
UPD 21.03.2020:
Изменен раздел «Скрипты обработки торрентов для Transmission-daemon» т.к. были обновлены скрипты.