Ставим BitTorrent-клиент

Опубликовано

Обещанное вчера HowTo по установке BitTorrent-клиента rTorrent и web-интерфейса к нему rtGUI. Буду рад если кому-нибудь поможет. Установка производилась на VDS под управлением FreeBSD 6.3. Получить такой можно, например, на FirstVDS.Ru.

Ставим rTorrent из портов

# cd /usr/ports/net-p2p/rtorrent-devel# make install clean

Внимание собирать его надо gcc42 или выше, если в системе его изначально нет, то лучше поставить из пакетов, потому как собирать его долго

# pkg_add -r gcc42

В меню конфигурирования порта отмечаем единственную опцию XMLRPC-C, вообще она по умолчанию отмечена. Ждем пока соберется, выбираем под каким пользователем будем запускать (допустим rtorrent), создаем директорию для сохранения сессий

# su -l rtorrent# mkdir sessions

Берем пример конфигурационного файла .rtorrent.rc здесь и правим под наши нужды. Потребуется исправить эти строчки указав актуальные пути, все остальное по желанию

directory = ./session = ./sessionschedule = watch_directory,5,5,load_start=./watch/*.torrent

Плюс к этому для работы web-интерфейса нужно добавить вот такую строчку

scgi_local = /home/rtorrent/data/tmp/rpc.socket

А для того чтобы торрент не падал встречая символы отличные от латиницы еще и вот такую

encoding_list = UTF-8

С самим клиентом все, им уже можно пользоваться. Сделаем скрипт для автоматического запуска. Как я уже говорил работать в виде демона он не умеет, но для нас это не проблема. Заставить работать в screen у меня, как и у моего коллеги (он правда на домашнем сервере пробовал) не получилось, но есть и другой способ.

# cd /usr/ports/misc/dtach# make install

Утилита dtach - это усеченный screen, собственно кроме возможности отцепить сессию от терминала она ничего не умеет, а нам больше ничего и не надо.Пишем скрипт для старта rTorrent, сохраняем его куда-нибудь в /root/bin/, например, и прописываем в /etc/rc.local. Вот что получилось у меня

#!/bin/shexport HOME=/home/rtorrent/data//bin/rm /home/rtorrent/data/tmp/rpc.socket/bin/sleep 5/usr/bin/su -m rtorrent -c '/usr/local/bin/dtach -n /home/rtorrent/data/tmp/rtorrent.sock /usr/local/bin/rtorrent'/bin/sleep 20/bin/chmod 777 /home/rtorrent/data/tmp/rpc.socket

Теперь переходим к web-интерфейсу для его работы понадобятся пхпшный экстеншен xmlrpc.so и http-сервер с поддержкой SCGI. С первым проблем никаких

# cd /usr/ports/net/php5-xmlrpc# make install clean

SCGI поддерживается из коробки в Apache, а вот любимый всеми nginx его не умеет, однако есть соответсвующий модуль, который попахивает душком. В общем я с этим заморачиваться не стал, а обратил свой взор в сторону прямого конкурента nginx, используемого на таких сервисах как YouTube и wikipedia - Lighttpd.С переходом проблем не возникло, но об этом как-нибудь в другой раз. Собственно для работы потребуется добавить в конфигурацию лайти SCGI-сервер, который будет работать с сокетом rTorrent'а. Лучше всего повесить его на какой-нибудь нестандартный порт, и закрыть этот порт фаерволом от подключений извне, я сделал так

#### SCGI for rTorrent$SERVER["socket"] == "82.146.33.122:81" {scgi.server = ("/" =>( "127.0.0.1" =>("socket" => "/home/rtorrent/data/tmp/rpc.socket","check-local" => "disable","disable-time" => 0, # don't disable scgi if connection fails)))}

Не забудьте в массив server.modules добавить mod_scgi, иначе работать не будет.Дело осталось за малым. Качаем последнюю версию rtGUI c официального сайта, распаковываем архив в директорию любого сайта с поддержкой php, правим config.php, указав путь до нашего SCGI

$rpc_connect="http://82.146.33.122:81";

И, по желанию прописываем путь до директории в которой клиент ищет torrent-файлы, если конечно вы ее задали в .rtorrent.rc

$watchdir="/home/rtorrent/data/watch"

Все, пользуемся.P.S. Есть во всей этой связке один неприятный момент. Из-за баги в библиотеке xmlrpc-c размер файлов более 2 Гб в веб-интресфейсе отражается некорректно. В новых версиях либы этот баг забороли, но в портах их нет, а сборка втупую результатов не дала, так что ждем пока обновится порт.