UMGUM.COM 

uTorrent + RSync + Windows ( Реализуем раздачу контента на вторичном сервере под управлением Windows. )

3 сентября 2010  (обновлено 31 января 2015)

OS: Windows XP/2003.

Итак, мы имеем настроенный и функционирующий узел первичного распространения "торрент"-файлов и контента как такового. Теперь отработаем методику создания вспомогательных узлов раздачи контента под управлением Windows 2003/2008 в сегментах нашей сети.

Пусть распространяемые файлы будут располагаться в директории "c:\var\lib\share\files\", "торрент"-файлы в директории "c:\var\lib\share\torrents\", "торрент"-файлы подлежащие немедленному исполнению - в директории "c:\var\lib\share\active\", а временные файлы в директории "c:\var\lib\share\tmp\".

Считаю необходимым завести группу пользователей или пользователя урезанных в правах настолько, насколько возможно, лишь бы иметь возможность запустить рассматриваемые далее приложения; например: "btshare".

"Rsync" можно откомпилировать для исполнения в среде "cygwin" на платформах под управлением Windows. Можно установить отдельно все компоненты, а можно воспользоваться готовыми решениями, что мы и сделаем.


"Rsync" для Windows берём на сайте разработчиков по адресу http://www.itefix.no/i2/node/10650.

Инсталлируем "cwRsync" в директорию "c:\program files\rsync".

В комплекте идёт инструкция, описывающая методику интеграции приложения и среды "cygwin" в окружение Windows. На самом деле, можно всем этим не заниматься, а запускать приложение прямо из той директории, где и расположены все подключаемые библиотеки.

К актуализации мы готовы.

"Rtorrent" откомпилированный для исполнения в среде "cygwin" на платформе под управлением Windows взятый на сайте разработчиков по адресу http://rtwi.jmk.hu/wiki/rTorrentOnWindows (релиз: 0.12.6-0.8.6), оказался неприлично прожорливым до ресурсов сервера. Один-три процента загрузки двух ядерного Xeon промышленного сервера при утилизации двух-мегабитного канала - это одно, а тридцать процентов при килобитном ручейке - это команда приложению "на выход".

В общем, как бы не был хорош "rtorrent" на Linux, а для Windows мы применим "uTorrent".

Инсталляция клиента не мудрена совершенно и рассматривать её нет никакой необходимости.

По умолчанию uTorrent хранит файлы своих настроек в отдельной папке в профиле пользователя, основные конфигурационные (на самом деле конфигурировать uTorrent с помощью модификации этих файлов весьма неудобно) файлы в директории "disk:\Documents and Settings\\Application Data\uTorrent\":

"settings.dat" - файл с настройками;
"resume.dat"   - файл с информацией о заданиях;
".old"         - файлы постоянно обновляемых резервных копий.

Если при старте utorrent.exe обнаруживает settings.dat (даже пустой) в той же директории, из которой он запущен, то использует эту директорию для всех своих файлов настроек. Мы используем это для того, чтобы результаты настройки uTorrent под обычным пользователем были в дальнейшем просто применены для запуска его с привилегиями специально выделенного для этого пользователя.

И так, создаём пустой файл "settings.dat" в директории uTorrent и запускаем таковой.

Настраиваем приложение таким образом, чтобы по максимуму ограничить его энтузиазм:

отключаем проверки ассоциаций;
отключаем автозагрузку;
отключаем автоматическое обновление;
отключаем управление спящим режимом;
отключаем разного рода запросы на подтверждение (удаление/модификация);
отключаем функционал работу с "треем";
отключаем запрос на подтверждение при добавлении нового задания;
указываем месторасположение файлов загрузок (например: "c:\var\lib\share\files\");
указываем директорию "c:\var\lib\share\tmp\" в качестве месторасположения сохранения клиентом "торрент"-файлов (в нашем случае за хранение отвечает другое приложение и разводить ещё одно хранилище совершенно ни к чему);
указываем месторасположение "торрент"-файлов, подлежащих автоматической загрузке (в нашем случае: "c:\var\lib\share\active\"), указываем удалять "торрент"-файлы отработанных загрузок;
отключаем UPnP, NAT, Proxy и динамическое назначение порта для входящих подключений (как никак сеть у нас корпоративная) и указываем определённый порт (например: "6998");
отключить все ограничения на скорость загрузки и отдачи;
отключаем DHT, работу "локальных торрентов", всю автоматику управления загрузками и "пирами";
отключаем работу по расписанию;
включаем поддержку "web-интерфейса", применяем имя и пароль доступа к нему, указываем порт доступа (имеет смысл указать что нибудь из редко используемого, например: "2898");
ограничиваем доступ к "web-интерфейсу" перечнем IP или диапазонов, например: 127.0.0.1, 192.168.1.0/24;
имеет смысл зачистить список поисковых систем, хотя бы и для того, чтобы клиент не делал попыток обратится за пределы сети.

Организовать работу связки приложений так же красиво, как и с "linux + rsync + rtorrent" для Windows у меня не вышло. В результате практических экспериментов остановился на регулярной, примерно раз в три-четыре часа, отработке скрипта с последовательным исполнением следующих инструкций:

останавливаем запущенный uTorrent (или отрабатываем "в холостую", неважно);
производим синхронизацию с центральным хранилищем "торрент"-файлов с помощью Rsync;
очищаем от содержимого директорию временного хранения "торрент"-файлов;
удаляем файлы восстановления сессий "resume.dat" и "resume.dat.old" uTorrent, чтобы он не искал удалённые нами "торрент"-файлы;
копируем актуальный список "торрент"-файлов в директорию немедленной загрузки "c:\var\lib\share\active\";
запускаем uTorrent.

После каждого запуска и постоянно, в процессе работы, uTorrent проверяет, нет ли "торрент"-файлов в директории "c:\var\lib\share\active\". В случае обнаружения таковых, будет осуществлена попытка загрузки соответствующего ресурса, если он не был ранее загружен. В том случае, если загрузка уже была осуществлена ранее, uTorrent просто проведёт проверку изменений (весьма быстро, что похвально). После загрузки ресурса соответствующий ему "торрент"-файл будет перемещён из директории "c:\var\lib\share\active\" в определённую нами директорию временных файлов.

Создаём исполняемый файл "c:\var\lib\share\actualisation.bat":

@echo off

taskkill /F /IM "utorrent.exe"

chdir "c:\program files\rsync\bin"
"c:\program files\rsync\bin\rsync" --checksum --recursive --delete rsync://share.storage.local:8730/torrents/ /cygdrive/c/var/lib/share/torrents

del /F /Q c:\var\lib\share\tmp\*.*
del /F /Q "c:\program files\utorrent\resume.dat"
del /F /Q "c:\program files\utorrent\resume.dat.old"

copy "c:\var\lib\share\torrents\*.*" "c:\var\lib\share\active\" /Y

start "" /B "c:\program files\utorrent\utorrent.exe"

exit 0

Стоит обратить внимание на часть целевого пути в командной строке "cwrsync", а именно "/cygdrive/c". Это своего рода обёртка данной реализации "cygwin" над файловой системой Windows. В нашем случае это путь "c:\".

Запускать скрипт проще всего с помощью встроенного "Планировщика задач" Windows ("Пуск" => "Настройка" => "Панель управления" => "Назначенные задания" => "Добавить задание").

Создаём задание на исполнение с требуемыми нам параметрами (естественно то, что задание необходимо запускать от имени специально созданного для этого пользователя, имеющего ограниченные права доступа):

"c:\windows\system32\cmd.exe" /Q /C "c:\var\lib\share\actualisation.bat"

Лучше создать два задания с одинаковой исполняемой составляющей. Одно отрабатывает при запуске системы, а другое с заданной периодичностью.

Вот и всё. Достаточно просто и эффективно.

Обратится к uTorrent в то время, как он запущен планировщиком в качестве "фоновой" задачи можно через заранее включённый нами "web"-интерфейс по следующему адресу:

http://<адрес сервера|127.0.0.1>:<2898>/gui


Заметки и комментарии к публикации:


Оставьте свой комментарий ( выразите мнение относительно публикации, поделитесь дополнительными сведениями или укажите на ошибку )