- PVSM.RU - https://www.pvsm.ru -
В данной заметке я хочу рассказать, как сделать универсальную торрентокачалку с управлением через интернет как с web интерфейса так и из Android приложения.
Тут будет рассказано о настройке связки rtorrent+rutorrent+nginx+php-fpm+transdroid на Debian Wheezy. Сразу отвечу на вопрос, почему не transmission, во первых при большом количестве раздач/закачек она падает, во вторых слабо кастомизируется и не имеет плагинов для автоматизации поиска и закачки новинок ну и просто лично мне не нравится.
В случае с rtorrent версия из репозитория собрана без xmlrpc-c, так что придется пересобрать самим, официальная документация проектов содержит только вариант настройки с apache, что мне не подошло о всех трудностях и их решении будет рассказано ниже.
Постараюсь максимально комментировать все настройки и конфиги, чтоб можно было понять как система работает, а не заниматься тупым копипастом.
Надеюсь владельцам собственных NASов и выделенных серверов будет интересно
Все команды для удобства привожу из под root, без использования sudo.
Картинок будет мало, в основном команды и пояснения, для максимально быстрого воспроизведения конфигурации.
В /etc/apt/sources.list добавим:
# Понадобится для некоторых плагинов.
deb http://www.deb-multimedia.org stable main non-free
# Свежая версия php и mysql
deb http://packages.dotdeb.org wheezy all
deb-src http://packages.dotdeb.org wheezy all
# Свежий nginx
deb http://nginx.org/packages/debian/ wheezy nginx
deb-src http://nginx.org/packages/debian/ wheezy nginx
Устанавливаем ключи
apt-get update && apt-get install deb-multimedia-keyring
wget http://www.dotdeb.org/dotdeb.gpg -O- |apt-key add -
gpg --keyserver hkp://keys.gnupg.net --recv-keys ABF5BD827BD9BF62
gpg -a --export 7BD9BF62 | apt-key add -
Обнобляемся.
apt-get update && apt-get upgrade
Ставим необходимые пакеты (надеюсь ничего не забыл)
apt-get install build-essential autoconf automake libtool libncurses5-dev libncursesw5-dev libcurl4-openssl-dev screen openssl php5 php5-cli curl libcppunit-dev libsigc++-2.0-dev subversion php5-cgi nginx php5-common php5-fpm php5-gd php-pear checkinstall git
Если в системе раньше стоял rtorrent из репозитория, удаляем его
apt-get purge rtorrent libtorrent*
При сборке всех трех пакетов может быть ошибка с номером версии, я предпочитаю задавать дату сборки, также при сборке может ругаться на отсутствие директорий, просто создать их и запустить заново.
Создадим директорию, где будут исходники
mkdir ~/svn
Перейдем в нее
cd ~/svn
Получим свежие сорсы
svn co https://xmlrpc-c.svn.sourceforge.net/svnroot/xmlrpc-c/advanced/ xmlrpc-c
Переходим в полученную директорию
cd xmlrpc-c
Собираем:
./configure --disable-cplusplus
make
checkinstall -D
cd ~/svn
git clone https://github.com/rakshasa/libtorrent
cd libtorrent
./autogen.sh
./configure
make
checkinstall -D
cd ~/svn
git clone https://github.com/rakshasa/rtorrent
cd rtorrent
./autogen.sh
./configure --with-xmlrpc-c
make
checkinstall -D
Подключаем нужные либы, без этого в дальнейшем rtorrent не запустится.
echo "include /usr/local/lib" | tee -a /etc/ld.so.conf
ldconfig
Пробуем запустить rtorrent, если все OK он запустится, но поругается на отсутствие конфигурационного файла, выйти можно по Ctrl+Q
Создадим пользователя (в моем примере это пользователь p2p ), домашней директорией которого будет наша папка с торрентами, группой для него сделаем www-data
adduser --home /hdd --shell /bin/bash --ingroup www-data p2p
перейдем в него
su p2p
Создадим конфиг для rtorrent
nano ~/.rtorrent.rc
#IP нашего сервера, на котором будет работать rtorrent, если таких несколько
bind = 192.168.0.2
ip = 192.168.0.2
#минимальное число пиров на торрент
min_peers = 1
#максимальное число пиров на торрент
max_peers = 100
#максимальная скорость загрузки. 0 — не ограничена
download_rate = 0
#максимальная скорость отдачи. 0 — не ограничена
upload_rate = 10000
#Устанавливает количество раздач с торрента
max_uploads = 50
#каталог для сохранения закачек или откуда будут сидироваться торренты.
directory = /hdd/torrent/download/
#Где будем хранить сессии
session = /hdd/torrent/.session/
#Если мало свободного места, останавливаем все закачки. Порог остановки задан close_low_diskspace=
schedule = low_diskspace,5,60,close_low_diskspace=30000M
# отображаем подробное содержание ошибок
#промежуток между стартом rTorrent и первым после этого стартом ruTorrent никакой полезной работы производиться
# не будет. Чтобы избежать этого, нужно добавить в конфигурационный файл rTorrent специально обученную строчку:
# Путь к php и путь к initplugins.php, содержащемуся в скриптах rutorrent
execute = {sh,-c,/usr/bin/php /var/www/rutorrent/php/initplugins.php &}
#Задаем порт (или нескольких портов) который открывает клиент для обмена данными
# (не забываем разрешить на фаирволе)
port_range = 40500-40999
# Каждый раз использовать случайный порт из диапазона.
port_random = yes
#проверять хэш торрента после закачки
check_hash = yes
#сохранять сессию
session_save = yes
#принимать зашифрованные входящие соединения, устанавливать не зашифрованные
#исходящие соединения, если возвращает ошибку, повторять с шифрованием,
#предпочитать открытый текст после установления зашифрованного соединения
encryption = allow_incoming,enable_retry,prefer_plaintext
#использовать udp
use_udp_trackers = yes
# Разрешает работу DHT для безтрекерных торрентов или для случаев,
# когда все ретрекеры лежат (не работают).
# Может принимать значения «disable» (для полного отключения DHT),
#«off» (не стартует с DHT), «auto» (Включает DHT при возможности),
# или «on» (принудительно включает DHT). Значение DHT по умолчанию «off».
# Для правильной работы DHT каталог сеансов «session» должен быть определен.
#
dht = auto
#
# UDP порт, используемый DHT.
#
dht_port = 6881
# Принудительно устанавливает кодировку UTF-8 для xmlrpc.
# Рекомендуется для устранения проблем при использовании
# в наименованиях торрентов символов кириллицы.
# Актуально для GUI, работающих через xmlrpc.
encoding_list = utf8
Снова пробуем запустить rtorrent, если какой-либо параметр в конфиге не верный, получим ошибку с номером строки, исправляем, пробуем снова, если все нормально, создадим скрипт автозапуска, для этого вернемся в root, команда exit в терминале, вернет нас из сессии p2p в сессию root.
wget http://libtorrent.rakshasa.no/raw-attachment/wiki/RTorrentCommonTasks/rtorrentInit.sh
mv rtorrentInit.sh /etc/init.d/rtorrent
chmod +x /etc/init.d/rtorrent
переходим в скрипт автозапуска
nano /etc/init.d/rtorrent
Изменяем строчку user=«p2p» на нашего пользователя.
Пробуем запуститься
/etc/init.d/rtorrent start
Проверяем что все запустилось
ps aux | grep rtorrent
Должны увидеть похожие строки
p2p 10443 0.0 0.0 23388 1516? Ss 13:17 0:00 SCREEN -dm -S rtorrent
p2p 10449 0.0 0.3 110904 7120 pts/2 Ssl+ 13:17 0:00 rtorrent
С rtorrent закончили, теперь перейдем к настройке фронтендов.
Для простоты я выложу содержание своих конфигов, с комментариями где это необходимо.
nano /etc/nginx/nginx.conf
# Это важный момент, помните мы задавали строку scgi_port в начале конфига .rtorrent.rc
# так вот тут в строке server введем те-же параметры. Необходимо будет для работы /RPC
upstream backendrtorrent {
server 127.0.0.1:5000;
}
##
# Настройка логов
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Настройки сжатия
gzip on;
gzip_disable «msie6»;
ssi on;
##
# Настройка виртуальных доменов
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
nano /etc/nginx/sites-enabled/000-default
#Замена .htaccess блокируем доступ к некоторым поддиректориям движка
location /conf/ {
deny all;
}
location /share/ {
deny all;
}
# А вот и /RPC2, через который наши фронтенды будут управлять rtorrent'ом
# Авторизация нужна обязательно, иначе кто угодно будет управлять вашей качалкой.
location /RPC2 {
auth_basic «Private ZONE.»;
auth_basic_user_file /var/www/rutorrent/.htpasswd;
include /etc/nginx/scgi_params;
scgi_pass backendrtorrent;
}
# Подключаем все шаблоны для проверки, на реальных хостах будем использовать только нужные.
include /etc/nginx/templates/default;
include /etc/nginx/templates/php;
}
nano /etc/nginx/templates/default
location / {
# Basic HTTP authentication закрываем паролем доступ к нашему rutorrent
auth_basic «Private ZONE.»;
# auth_basic on;
auth_basic_user_file /var/www/rutorrent/.htpasswd;
}
# Закрываем доступ к файлами .htaccess и .htpassword и не логируем лишнее.
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { allow all; access_log off; log_not_found off; }
location = /apple-touch-icon.png { access_log off; log_not_found off; }
location = /apple-touch-icon-precomposed.png { access_log off; log_not_found off; }
location ~ /. { deny all; access_log off; log_not_found off; }
#Усложняем жизнь скрипт-кидди и блочим популярные сканеры по UA
if ( $http_user_agent ~* (nmap|nikto|wikto|sf|sqlmap|bsqlbf|w3af|acunetix|havij|appscan) ) {
return 403;
}
nano /etc/nginx/templates/php
Настройки кеширования можно отключить или использовать другие параметры на свое усмотрение, я брал типовые.
Также желательно задать таймзону в настройках php, для этого в файлах /etc/php5/fpm/php.ini и /etc/php5/cli/php.ini
зададим переменную со своей зоной, в моем случае это киевское время.
date.timezone = "Europe/Kiev"
cd /var/www/
wget https://rutorrent.googlecode.com/files/rutorrent-3.5.tar.gz
tar -xzf rutorrent-3.5.tar.gz
rm rutorrent-3.5.tar.gz
cd rutorrent
Можно выкачивать плагины по одному с сайта [1]
Я предпочитаю скачать все сразу, а потом удалить ненужное (описание плагинов есть тут [2])
rmdir plugins
wget https://rutorrent.googlecode.com/files/plugins-3.5.tar.gz
tar -xzf plugins-3.5.tar.gz
rm plugins-3.5.tar.gz
Чуток подправим конфиг движка:
В файле
nano conf/config.php
меняем переменную на корень файлов с торрентами.
$topDirectory = '/hdd/torrent/';
Сгенерируем логин и пароль для доступа к движку, можно использовать htpasswd из поставки apache,
но у нас его нет, по-этому сгенерим подручными средствами:
echo -e "your-username:`perl -le 'print crypt("your-password","salt")'`" > /var/www/rutorrent/.htpasswd
В имени пользователя не забываем в конце оставить двоеточие.
Меняем владельца дирректории на нашего
chown -R p2p:www-data /var/www/rutorrent
Перезапускаем nginx и php
service nginx restart
service php5-fpm restart
В браузере набираем ip нашего сервера, вводим сгенерированные ранее логин и пароль, и попадаем в панель управления нашей качалкой.
Скачиваем на телефон и/или планшет
http://transdroid.org/latest [3]
http://transdroid.org/latest-search [4]
устанавливаем и запускаем.
Выбираем «Добавить новый сервер»
Имя: Любое на выбор
Тип сервера: rTorrent
Ip адрес или имя домена: свой ip сервера или домен
Порт: 80
Использовать авторизацию: ставим галочку
Указываем свои имя и пароль в соответствующих полях.
Папка: без изменений
В дополнительных настройках галочки на свой вкус
Операционная система: Linux
Адрес ftp: p2p [5]: пароль@ip_сервера/torrent/download/ (указываем доступ к ftp папке, об настройке ftp ниже.)
Так как ssl мы не использовали, остальное без изменений.
После этого можно зайти на свой сервер и увидеть текущие закачки, остальные настройки программы на свой вкус.
apt-get install proftpd
В стандартном конфиге /etc/proftpd/proftpd.conf меняем:
ServerName "My torrent server"
Раскоментируем
DefaultRoot ~ # Запираем пользователей в их домашних дирректориях
Добавляем
RootLogin off # запрещаем подключать от пользователя root
# определять имя хоста клиента по IP адресу (желательно отключать для ускорения доступа)
UseReverseDNS off
PassivePorts 40000 40499 # Чтоб не пересекались с rtorrent
Более тонкую настройку можно посмотреть в множестве статей на эту тему, в рамках данной статьи такого минимума достаточно
service proftpd restart
Необходима для удобства локального доступа, также очень кратко.
apt-get install samba
Приводим конфиг /etc/samba/smb.conf к виду:
Генерируем пароль для нашего пользователя
smbpasswd -a p2p
Включаем пользователя
smbpasswd -e p2p
И так в результате мы получили работающий торрент сервер, с богатыми возможностями управления, доступ к скачанным файлам по smb и ftp, из дополнительных удобств могу посоветовать использовать ряд плагинов для rutorrent, позволяющих автоматизировать закачку новинок. Из связных проектов хотел бы отменить torrentmonitor [6] от читателя KorP [7].
Всем спасибо за внимание.
Автор: RicoX
Источник [8]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/linux/36733
Ссылки в тексте:
[1] сайта: https://code.google.com/p/rutorrent/downloads/list
[2] тут: https://code.google.com/p/rutorrent/wiki/Plugins
[3] http://transdroid.org/latest: http://transdroid.org/latest
[4] http://transdroid.org/latest-search: http://transdroid.org/latest-search
[5] p2p: https://www.pvsm.ruftp://p2p
[6] torrentmonitor: http://blog.korphome.ru/torrentmonitor/
[7] KorP: http://habrahabr.ru/users/korp/
[8] Источник: http://habrahabr.ru/post/183626/
Нажмите здесь для печати.