Transmission: контроль за несколькими директориями

зкщпкфььук. текстЕсли вы читаете мой блог, то знаете, что я люблю расставлять мини-сервера без мониторов и под управлением Ubuntu. Сервера выполняют разнообразные задачи, начиная от видеонаблюдения и заканчивая обработкой событий на основе Node-RED. Помимо всего прочего, некоторые из моих серверов нагружаются еще и обязанностью по скачиванию через торрент протокол. Для чего они это делают — умолчим, а сама задача по скачиванию осуществляется посредством популярнейшего средства Transmission.

При установке торрент-клиента Transmission на сервере без монитора и вообще без графического интерфейса ему нужно как-то передавать торрент-файлы, того, что он должен скачать. Обычно эту операцию можно проделать через а) Web-интерфейс Transmission, б) RPC-вызов из внешнего приложения, например, Transmission Remote GUI, в) сохранить торрент-файл в папку на сервере за которой следит сам «демон» Transmission.

Через Web-интерфейс работать, конечно, можно. Но не удобно. Нужно сохранить файл к себе на компьютер, потом его загрузить через страничку. Вариант с приложением удобнее, особенно если оно вызывается как обработчик определенных файлов, в нашем случае — torrent-файлов. Ну и тот способ, которым пользуюсь я, подразумевает просто мониторинг папки на сервере. Мне достаточно сохранить torrent-файл в эту папку и далее «демон» автоматически его загрузит и начнет скачивать.

Мониторинг серверной папки — штука очень удобная. Не нужно делать никаких лишних телодвижений. Сохранил и забыл. Но есть у этого способа одно неудобство. Что складывается в эту папку, скачивается в одну директорию на сервере. Что, согласитесь, несколько неудобно. В одну папку складываются книги, программы, фильмы, телесериалы… Получается такой маленький коллапс и невыносимая мешанина. Тут бы организовать несколько папок слежения с последующим раскладыванием скачанного по разным папкам на сервере. К сожалению, Transmission не умеет мониторить сразу несколько папок и соответственно не умеет автоматически раскладывать скачиваемое по нужным папкам. Перенести укаченное по нужным директориям, разумеется, можно и позже. Но это же лишнее телодвижение.

"watch-dir": "/home/Ваш_пользователь/Torrents", 
"watch-dir-enabled": true

Таким образом происходит настройка директории для отслеживания torrent-файлов в конфиге Transmission.

Но программисты народ упорный. И если где-то можно себе облегчить жизнь, то они упарываются и изобретают что-то, что позволяет не жмакать лишний раз по клавиатуре. Вот и некий Тейлор, работающий на какой-то Bay Photo, решил исправить несправедливость мира и написал простейший скрипт, позволяющий мониторить дополнительные директории и если там появляются torrent-файлы, то передавать их в Transmission через RPC.

Установка скрипта происходит очень просто. У вас в системе уже должен быть установлен python, если нет, то вероятно, что он установится в процессе установки менеджера пакетов pip (используется для управления пакетами на Python). Соответственно, если менеджер пакетов не установлен, то устанавливаем его обычным способом, например, через apt install pip.

После установки pip необходимо установить пакет, позволяющий скриптам подключаться к Transmission посредством RPC. Осуществляется эта процедура через pip install transmissionrpc. Далее скрипты скачиваются с GitHub какого-то Тейлора (ссылку смотри в заключительной части) в виде архива (тогда их нужно будет распаковать) или прямо в виде скриптов. В комплекте идет два скрипта startup.sh и main.py. Первый это то, что будет непосредственно запускаться операционной системой, поэтому ему нужно установить признак исполняемого файла. Ставить ли признак исполняемости на пользователя, группу или всех, зависит от того, под кем будет запускаться скрипт в дальнейшем.

Затем необходимо отредактировать скрипт main.py, внести в него конкретные директории для отслеживания и конкретные директории куда Transmission будет складывать скаченное. Проделывается сия операция легко и просто, каталоги вносятся в следующие переменные:

# Watch directories
watch_tv = '/home/vlad/Tr_TV'
watch_movie = ''
watch_music = ''

# Complete download directories
download_dir_tv = '/home/vlad/Trans_TV'
download_dir_movie = ''
download_dir_music = ''

На примере выше для отслеживания скриптом у меня выбрана директория /home/vlad/Tr_TV и торренты из нее будут скачиваться в /home/vlad/Trans_TV. Но заполнить переменные недостаточно. Нужно добавить их в пул отслеживания, а делается это вот такой вот строчкой add(watch_tv, download_dir_tv), которая добавляется почти в конец скрипта (там они уже есть для указанных выше строчек). Важно, если у вас не заполнены какие-то переменные, в приведенном примере то watch_movie, watch_music, download_dir_movie и download_dir_music, то нужно либо закомментировать (символ # в начале строки) либо просто удалить соответствующие им команды add. Т.е. в моем случая мне необходимо избавиться от вот этих вот строчек:

add(watch_movie, download_dir_movie)
add(watch_music, download_dir_music)

Иначе, скрипт будет выдавать ошибку. Еще одним моментом которому стоит уделить внимание является настройка скрипта на конкретную инсталляцию Transmission:

client = transmissionrpc.Client(
address='127.0.0.1',
port='9091',
user='',
password=''
)

В этой секции address и port указывают, где именно слушает Transmission вызовы RPC. В данном случае он запущен на том же сервере, что и скрипт, поэтому указывается адрес loopback интерфейса. Важно не забыть про user и password иначе подключиться к Transmission по RPC не выйдет. Со стороны Transmission за настройку RPC отвечают следующие параметры:

"rpc-authentication-required": false, 
"rpc-bind-address": "0.0.0.0", 
"rpc-enabled": true, 
"rpc-password": "Пароль", 
"rpc-port": 9091, 
"rpc-url": "/transmission/", 
"rpc-username": "Пользователь", 
"rpc-whitelist": "127.0.0.*,192.168.1.*", 
"rpc-whitelist-enabled": true,

Если вы действуете в небезопасном окружении, то лучше настроить безопасность максимально, включая отключение беспарольного входа, добавление адресов откуда разрешено подключение, включение аутентификации через логин/пароль.

В скрипте main.py можно обратить внимание еще на один параметр time.sleep(60), идущий самой последней строкой. Это интервал в секундах, через который происходит пересканирование всех указанных в скрипте директорий. После настроек можно запустить скрипт и проверить работоспособность всей схемы: скопировать torrent-файл в нужную директорию, убедиться, что через некоторое время Transmission его подхватил. Если вносились измерения в конфигурации Samba или Transmission, то их следует перезапустить перед проверкой. Затем можно настроить автоматический запуск скрипта при старте системы. Я сделал это при помощи systemd.

Итак, создаем от суперпользователя в каталоге /etc/system/system файл, ну например, myscript.service и заполняем его примерно следующим:

[Unit]
Description=Transmission multiple dir watch
After=multi-user.target

[Service]
Type=idle
ExecStart=/home/vlad/trms/startup.sh

[Install]
WantedBy=multi-user.target

Далее файл сохраняем и запускаем следующие команды (все из контекста суперпользователя):

  • systemctl daemon-reload — перезагружаем описания процессов «демонов»;
  • systemctl enable mysrcipt — разрешаем запуск нашего скрипта;
  • systemctl start mysrcipt — запускаем наш скрипт прямо сразу;
  • systemctl status mysrcipt — проверяем, что все запустилось чётко, если нет, то проверяем, где у нас вкралась опечатка.

После установки скрипта жить стало немного проще, прекратилось скопище различных по типу скаченных файлов.

Полезные ссылки:

  1. GitHub страничка некоего Тейлора.
  2. Какой-то Bay Photo на который работает какой-то Тейлор.
  3. Страничка какого-то Тейлора, работающего на какой-то Bay Photo, со скриптом мониторинга за несколькими каталогами.
  4. «Хомяк» Transmission и их же GitHub.
  5. Transmission Remote GUI.
  6. Менеджер пакетов pip.


Добавить комментарий