Создано в рамках статьи для блога: Домашний Сервер: Часть 4 – Настройка Transmission daemon в контейнере LXC Proxmox-VE
Пример Debug
лога обработки одного файла
- Описание
- Установка скрипта
- Обновление скрипта
- Алгоритм обработки торрентов
- Правила именования торрентов для корректной работы скрипта
- Ротация логов
- Лицензирование
Основной кодовой базой является программная платформа Node.js основанная на движке V8 который был разработан в компании Google.
Данное приложение выполняется после завершения скачивания каждого торрента в сервисе Transmission daemon
Для его работы он должен быть настроен в файле конфигурации Transmission settings.json
через параметры
script-torrent-done-enabled
и script-torrent-done-filename
"script-torrent-done-enabled": true,
"script-torrent-done-filename": "/opt/torrentdone/index.js",
"umask": 0,
История версий:
- v3.2.0 - (26.11.2024) - Исправена проблема обхода торрента директории с вложенными директориями.
- v3.1.2 - (30.09.2024) - Улучшены тесты. Поправлены обработки релизеров по итогам тестов. Мелкие исправления. Обновление библиотек.
- v3.1.1 - (22.09.2024) - Поправлено получение имени сериала. Изменено регулярное выражение для обработки сериалов
LostFilm. Изменился формат. Пример
The Penguin S01E01.1080p.rus.LostFilm.TV.mkv
- v3.0.0 - (21.04.2024) - Изменена архитектура итогового приложения. Теперь нет необходимости ставить зависимости. Все
собрано в единый
index.js
файл. Достаточно только базового Node.js. Дополнительно осуществлен переход на новую библиотеку логирования, покрытие юнит тестами и прочее. - v2.0.2 - (19.08.2023) - Обновлено совпадение для файлов сериалов. Ранее учитывался только вариант с малыми буквами
сезона и эпизода. Теперь учитываются и большие буквы. Также не учитывался разделитель сезона и эпизода. Ранее:
s01e01
. Теперь возможны варианты:S01E01
,S01e01
,S01.E01
,S01-E01
,S01_E01
- v2.0.1 - (20.12.2022) Параметры перенесены из окружения в конфигурационный файл для удобства. Используется пакет
nconf
. Поправлены команды дляtransmission-remote
- v2.0.0 - (12.01.2022) Полностью заменен файл torrentdone.sh на Node.js проект. Изменена и расширена логика обработки, улучшено логирование (уровни info, debug, etc) и многое другое. Для разработчиков доступно тестирование через Jest.
- v1.2.4 - (17.10.2022) Поправлена обработка имени для папки сериала если это папка с целым сезоном. Вместо имени папки теперь используется имя торрента.
- v1.2.3 - (11.02.2021) Поправлены regex_film и regex_film_dir для определения фильмов. Bash не хочет понимать \d, хотя норм понимает \s. Странности.
- v1.2.2 - (08.02.2021) Поправлено определение фильм или сериал после определения файл или дирректория. Теперь коллекции необходимо корректно именовать.
- v1.2.1 - (26.01.2021) Удален параметр CLEARFLAG т.к. не используется.
- v1.2.0 - (19.01.2021) Доработаны функции обработки файлов сериалов и фильмов. Поправлена работа с именем файла.
- v1.1.0 - (09.01.2021) Переработан алгоритм и функции для работы с торрентами в которых загружаются несколько файлов сразу (т.е. они загружаются папкой с файлами)
- v1.0.0 - (31.03.2020) Исправлена ошибка с кириллическими символами в имени файла при переходе в функцию
- v0.9.16 - (24.03.2020) Улучшено комментирование кода
- v0.9.15 - (21.03.2020) Добавлена обработка торрентов с несколькими файлами (папками). Изменен принцип логирования
- v0.0.8 - (18.04.2018) Изменено регулярное выражение regex_film
- v0.0.7 - (18.04.2018) Улучшено структурирование и комментирование кода
- v0.0.6 - (17.04.2018) Улучшено комментирование кода
- v0.0.5 - (17.04.2018) Изменена версия на корректную
- v0.0.4 - (17.04.2018) Поправлено регулярное выражение regex_film
- v0.0.3 - (17.04.2018) Улучшено комментирование кода
- v0.0.2 - (17.04.2018) Улучшено комментирование кода
- v0.0.1 - (17.04.2018) Исправлены условия определяющие корректно ли перемещен файл
- NV - (17.04.2018) Первая версия
Перед стартом скрипта, transmission генерирует переменные в Environment:
Для версии 3.00 набор такой
- TR_APP_VERSION: версия Transmission
- TR_TORRENT_ID: идентификатор (ID) торрента
- TR_TORRENT_NAME: имя торента в том виде, как оно отображается в интерфейсе Transmission Remote GUI
- TR_TORRENT_DIR: текущая папка торрента
- TR_TORRENT_HASH: хэш торрента
- TR_TIME_LOCALTIME: дата и время запуска скрипта
- TR_TORRENT_LABELS: тэги/метки присвоенные торренту
Начиная с версии 4.0.0 добавляются еще две
- TR_TORRENT_BYTES_DOWNLOADED: размер загруженных данных в байтах
- TR_TORRENT_TRACKERS: список URL анонсированных трекеров
Нужно поставить Node.js, скачать исполняемый файл скрипта и создать для него конфигурацию.
Команды для Proxmox LXC Debian под root:
apt update && apt upgrade -y && apt install -y curl wget
Ставим Node.js
Пойти в https://github.com/nodesource/distributions/blob/master/README.md
Выбрать LTS версию
curl -fsSL https://deb.nodesource.com/setup_20.x -o nodesource_setup.sh
bash nodesource_setup.sh
apt update && apt install -y nodejs
node -v
v20.17.0
Далее создаем папку под приложение, делаем файл исполняемым. Создаем фейковый файл package.json
(нужно для корректного
определения корневой дирректории и нахождения файла конфигурации)
mkdir /opt/torrentdone
cd /opt/torrentdone
wget https://raw.githubusercontent.com/GregoryGost/transmission-torrentdone/refs/heads/main/dist/index.js
chmod +x index.js
echo '{"version":"3.1.1"}' > package.json
Создаем файл настроек и указываем свои параметры
nano /opt/torrentdone/config.json
{
"login": "transmission_login",
"password": "<your_password>"
}
Назначаем папку и файлы пользователю Transmission
chown -R debian-transmission:debian-transmission /opt/torrentdone
Обязательные:
login
- Логин авторизации для transmission-remote. Прописан в файлеsettings.json
самого Transmission. Как правило располагается по пути/etc/transmission-daemon/
password
- Пароль авторизации для transmission-remote
Опциональные:
node_env
- Режим использования приложения. Задатьdevelopment
если режим разработки. Default:production
log_level
- Уровень логирования. Default:info
. Для режима разработкиtrace
log_file_path
- Путь до файла сохранения логов. Default:/var/log/transmission/torrentdone.log
media_path
- Путь хранения медиа файлов. Default/mnt/data/media
serials_root_dir
- Название базовой директории для сохранения файлов сериалов. Default:TV Shows
films_root_dir
- Название базовой директории для сохранения файлов фильмов. Default:Movies
date_format
- Формат вывода даты в логе и в приложении. Для форматирования в log4js используется модуль date-format Default:dd.MM.yyyy_hh:mm:ss.SSS
Example: 12.11.2022_21:54:03.789ip_address
- IP адрес для доступа к transmission. Default:127.0.0.1
tcp_port
- TCP порт для доступа к transmission. Default:9091
allowed_media_extensions
- Расширения файлов перечисленные через запятую для которых осуществляется обработка. Default:mkv,mp4,avi
Настройки будут считываться при каждом запуске скрипта по окончании процесса скачивания торрента.
Стоит обновить Node.js если скрипт поддерживает новую версию (отражено в файле package.json
в репозитории). Как пример
обновление на 20 LTS версию.
curl -fsSL https://deb.nodesource.com/setup_20.x -o nodesource_setup.sh
bash nodesource_setup.sh
apt update && apt upgrade -y
Для обновления можно просто перекачать index.js
файл
wget -O index.js https://raw.githubusercontent.com/GregoryGost/transmission-torrentdone/refs/heads/main/dist/index.js
Если вы хотите обновить из другой ветки, просто поменяйте её название в пути скачивания
wget -O index.js https://raw.githubusercontent.com/GregoryGost/transmission-torrentdone/refs/heads/develop/dist/index.js
Нельзя просто так добавлять торренты в Transmission remote GUI или кидать торрент файлы в папку отслеживания с
данным скриптом.
Если вы хотите, чтобы парсинг файлов и папок выполнялся корректно, необходимо соблюдать простые правила именования
торрентов.
Сериалы обрабатываются с помощью регулярных выражений
Первично определяется релизер. На текущий момент в коде определяется только два релизера LostFilm.TV
и NovaFilm.TV
:
Если Вы наблюдаете проблемы с определением, то можете создать запрос в ISSUE
- индивидуальные файлы LostFilm.TV:
The.Mandalorian.S02E07.1080p.rus.LostFilm.TV.mkv
The.Handmaid's.Tale.S05E03.1080p.rus.LostFilm.TV.mkv
Andor.S01E10.720p.rus.LostFilm.TV.mp4
- директория LostFilm.TV (сезон полностью):
Obi-Wan Kenobi 1 - LostFilm.TV [1080p]
Breaking Bad 5 - LostFilm.TV [1080p]
Peaky Blinders 6 - LostFilm.TV [1080p]
Соответственно в директории файлы имеют названия, как это описано для отдельных файлов сериала.
- индивидуальные файлы NovaFilm.TV:
californication.s06e08.hdtv.rus.eng.novafilm.tv.avi
Фильмы также обрабатываются с помощью регулярных выражений
Но важно понимать, что учесть все возможные варианты наименований с торрент трекеров достаточно сложно. Именно поэтому
нужно при добавлении одиночного фильма, корректно его назвать.
Год может обрамляться:
- скобками
(2021)
- нижними подчеркиваниями
_2021_
- точками
.2021.
- просто пробелами
2021
- комбинациями этих обрамлений
Т.е. любой файл, где год обрамлен этими знаками будет корректно вырезан из имени файла. Причём год должен быть ближе к концу названия файла.
Корректные примеры названия фильмов:
Blade Runner 2049 (2017).mkv
Аватар 3D (2009).mkv
Для отдельных релизеров реализована отделная обработка файлов фильмов
All.Quiet.on.the.Western.Front.1080p.rus.LostFilm.TV.mkv
Bullet.Train.1080p.rus.LostFilm.TV.avi
Т.е. можно как обычно переименовать файл в понятное и обрабатываемое название, тогда фильм будет сохранен как и
положено. Но если ничего не менять, то фильм будет сохранен в папку 2D
и год будет взят текущий.
Если фильмы скачиваются трилогиями, дилогиями и т.д., то необходимо проверять внутренние файлы на наличие в них года. Иначе файл не будет скопирован так как не определится год.
Скрипт по умолчанию пишет результат своей работы в LOG файл torrentdone.log
Log файл расположен по пути, где обычно хранятся все лог файлы самого transmisson-daemon:
/var/log/transmission/torrentdone.log
Начиная с версии 2.0.0 скрипта torrentdone
расположение лог файла можно задавать самому через конфигурацию.
Соответственно необходимо изменять настройки ротации с учётом нового расположения.
Ротация лог файлов обеспечивается базовой подсистемой самой ОС logrotate.
Ротация происходит для всех лог файлов в папке /var/log/transmission/
Расположение файла настройки ротации логов:
/etc/logrotate.d/transmission
После создания или загрузки файла настройки, необходимо перезапустить службу logrotate:
systemctl restart logrotate.service
systemctl status logrotate.service
Все исходные материалы для проекта распространяются по лицензии GPL v3.
Вы можете использовать проект в любом виде, в том числе и для коммерческой деятельности, но стоит помнить, что автор
проекта не дает никаких гарантий на работоспособность исполняемых файлов, а так же не несет никакой ответственности по
искам или за нанесенный ущерб.
Этот репозиторий содержит сторонние модули. Авторы этих модулей самостоятельно несут (или не несут) ответственность за
качество, стабильность и работу этих модулей и их принципы лицензирования. Используемые модули находятся в зависимостях
в файле package.json
GregoryGost - https://gregory-gost.ru