July 31, 2011

SeedBox с rTorrent / ruTorrent на базе Apache под Debian своими руками

В этом журнале уже была статья об установке rTorrent и веб-интерфейса ruTorrent к нему под FreeBSD своими руками, теперь пришла очередь Debian.

Открываем консоль с root-доступом (или кто у вас там с привилегиями) по SSH.

Чиним ключи, если надо.
apt-get install debian-archive-keyring
Обновляем список пакетов:
apt-get update

Сервер Apache и PHP5

apt-get install -y apache2 php5

XMLRPC-C нужной версии

apt-get remove libxmlrpc-c*

apt-get install -y gcc g++ php5-xmlrpc

cd /usr/src && wget http://dfn.dl.sourceforge.net/sourceforge/xmlrpc-c/xmlrpc-c-1.16.38.tgz && tar xvf xmlrpc-c-1.16.38.tgz && cd xmlrpc-c-1.16.38 && ./configure --disable-cplusplus && make && make install && cd ~

SCGI-шлюз для Apache

Устанавливаем SCGI шлюз для Apache2:
apt-get install -y libapache2-mod-scgi

Теперь включим этот модуль создав файл scgi.conf:
touch /etc/apache2/mods-available/scgi.conf && echo 'SCGIMount "/RPC2" 127.0.0.1:5000'>>/etc/apache2/mods-available/scgi.conf

Проверьте существует ли в директории /etc/apache2/mods-available/ файл scgi.load, если нет — создайте его:
touch /etc/apache2/mods-available/scgi.load && echo 'LoadModule scgi_module /usr/lib/apache2/modules/mod_scgi.so'>>/etc/apache2/mods-available/scgi.load

И добавим модуль в автозагрузку Apache:
ln -s ../mods-available/scgi.conf /etc/apache2/mods-enabled/ && ln -s ../mods-available/scgi.load /etc/apache2/mods-enabled/

Перезапустим Apache чтобы изменения вступили в силу:
/etc/init.d/apache2 restart

Собственно rTorrent

Устанавливаем rTorrent:
apt-get install -y rtorrent

Настраиваем запуск rtorrent:
cd /etc/init.d/ && wget -O ./rtorrent http://libtorrent.rakshasa.no/raw-attachment/wiki/RTorrentCommonTasks/rtorrentInit.sh?format=raw && sed -i 's/user="user"/user="seedbox"/g' ./rtorrent && chmod +x ./rtorrent && cd ~

Внимание! Если установка осуществляется на сервер под управлением Debian 6, внесите в свежесозданный файл /etc/init.d/rtorrent следующие строки сразу после #!/bin/sh:
### BEGIN INIT INFO
# Provides:          rtorrent_autostart
# Required-Start:    $local_fs $remote_fs $network $syslog $netdaemons
# Required-Stop:     $local_fs $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: rtorrent script using screen(1)
# Description:       rtorrent script using screen(1) to keep torrents working without the user logging in
### END INIT INFO
Добавим rtorrent в автозапуск системы:
update-rc.d rtorrent defaults
В предыдущем действии присутствует команда sed -i 's/user="user"/user="seedbox"/g' ./rtorrent, выполняющая автозамену стандартного значения параметра user на seedbox. Этот параметр — имя пользователя, из-под которого будет запускаться rtorrent. Сейчас мы его создадим. Если автозамена по каким-либо причинам не сработала, удалите её из списка команд, откройте файл /etc/init.d/rtorrent и отредактируйте его вручную.
Создаем пользователя seedbox специально для торрентов. Можно это сделать через ISPmanager, можно вручную через консоль:
useradd seedbox -U -d /var/www/seedbox && mkdir /var/www/seedbox && chown seedbox:seedbox /var/www/seedbox

Переходим в консоль этого пользователя:
su seedbox

Создаём .rtorrent.rc:
wget -O ~/.rtorrent.rc http://libtorrent.rakshasa.no/export/1257/trunk/rtorrent/doc/rtorrent.rc

Дописываем в него наш SCGI-шлюз:
echo 'scgi_port = localhost:5000'>>~/.rtorrent.rc

Если нужно повесить rtorrent на определенный IP-адрес, измените директивы bind и ip:
# The ip address reported to the tracker.
ip = %НУЖНЫЙ_IP_АДРЕС%

# The ip address the listening socket and outgoing connections is
# bound to.
bind = %НУЖНЫЙ_IP_АДРЕС%
Также рекомендуется сменить стандартный диапазон портов с 6890 — 6999 на какой-либо другой:
# Port range to use for listening.
port_range = 40000-50000
Напомню, что все эти настройки указываются в файле rtorrent.rc

WEB-интерфейс ruTorrent

Не выходите из консоли пользователя seedbox.
Необходимо создать домен, по которому будет доступен ruTorrent. Это можно сделать через ISPmanager, любую другую панель управления сервером, или же вручную. Переходим в папку домена (в нашем примере это /var/www/seedbox/data/www/seedbox-web). Если папка ещё не существует — создадим её одной командой:
mkdir -p /var/www/seedbox/data/www/seedbox-web
В команде выше флаг (параметр) -p говорит mkdir создать папку рекурсивно, т.е. не обращая внимание что родительских папок (как, например, /var/www/seedbox/data/) не существует, и не выдавать по этому поводу ошибок.

Теперь загрузим сам ruTorrent:
cd /var/www/seedbox/data/www/seedbox-web && wget http://rutorrent.googlecode.com/files/rutorrent-3.4.tar.gz -O rutorrent.tar.gz && tar xvf rutorrent.tar.gz -C ./ && rm rutorrent.tar.gz

На момент написания статьи последней версией ruTorrent была 3.3 уже 3.4.
Веб-интерфейс лежит в папке ./rutorrent в корне домена. Чтобы попадать в него сразу при заходе на домен, создадим index.php с переадресацией:
touch ./index.php && echo '<?php header("Location: ./rutorrent/"); ?>'>>./index.php

Теперь создадим рабочие директории для rtorrent. Это можно было сделать и раньше, но я предпочитаю держать их доступными по http, поэтому отложил этот шаг до этапа когда домен будет создан.
mkdir ./downloads && mkdir ./session

Также внесем изменения в .rtorrent.rc:
sed -i 's/#directory = .\//directory = \/var\/www\/seedbox\/data\/www\/seedbox-web\/downloads/g' ~/.rtorrent.rc && sed -i 's/#session = .\/session/session = \/var\/www\/seedbox\/data\/www\/seedbox-web\/session/g' ~/.rtorrent.rc

Если автозамена не сработала, внесите изменения вручную: выставьте папки directory и session (мы их создали выше, это downloads и session соответственно).
Если все предыдущие действия выполнялись не из-под пользователя seedbox, нужно назначить ему права владельца. Не изменяя текущую директорию, выполните:
chown -R seedbox:seedbox ./

Выставляем права на папку share:
cd ./rutorrent/share && find . -type d -exec chmod 0777 {} ';' && cd ../../

Установим плагин EraseData, позволяющий удалить закачку вместе с файлами, а не только сам .torrent-файл:
cd ./rutorrent/plugins && wget http://rutorrent.googlecode.com/files/erasedata-3.4.tar.gz -O erasedata.tar.gz && tar xzvf erasedata.tar.gz && rm erasedata.tar.gz

Установим плагин Create, позволяющий создавать .torrent-файлы:
cd ./rutorrent/plugins && wget http://rutorrent.googlecode.com/files/create-3.4.tar.gz -O create.tar.gz && tar xzvf create.tar.gz && rm create.tar.gz

Установим плагин Edit, позволяющий редактировать список трекеров, который пригодится если новые, одинаковые закачки не добавляются в ruTorrent по причине совпадения хэша (см. Общее - Hash):
cd ./rutorrent/plugins && wget http://rutorrent.googlecode.com/files/edit-3.4.tar.gz -O edit.tar.gz && tar xzvf edit.tar.gz && rm edit.tar.gz

Установим плагин RSS, позволяющий автоматизировать закачку ruTorrent'ом всех раздач, появляющихся в RSS-лентах:
cd ./rutorrent/plugins && wget http://rutorrent.googlecode.com/files/rss-3.4.tar.gz -O rss.tar.gz && tar xzvf rss.tar.gz && rm rss.tar.gz

Если же вы таки работали от seedbox, вернитесь в консоль root:
exit

Запускаем rtorrent:
/etc/init.d/rtorrent start

Доступ к веб-интерфейсу ruTorrent

Если домен не создавали, или нужно обойтись без доменов вообще, добавим alias к нашему IP-адресу:
echo -e "Alias /rutorrent /var/www/seedbox/data/www/seedbox-web\n<Directory \"/var/www/seedbox/data/www/seedbox-web\">\n\tAllowOverride All\n</Directory>">/etc/apache2/conf.d/rutorrent
Предупреждаю: поскольку Alias /rutorrent ведет на /var/www/seedbox/data/www/seedbox-web, а в этой папке, в свою очередь лежит еще раз ./rutorrent (распакованный веб-интерфейс из архива, помните?), то в адресной строке в результате мы увидим ВАШ.IP.АДРЕС/rutorrent/rutorrent :)

Ограничиваем доступ через htaccess/htpasswd

Для этого в папке с веб-интерфейсом ruTorrent потребуется создать два файла: .htaccess и .htpasswd. Подробнее об этом — см. статью «как поставить пароль на папку в .htaccess». В .htpasswd нужно будет указать логин и пароль которым будет предоставлен доступ. В .htaccess мы включим эту самую проверку доступа, сошлемся на вышеупомянутый .htpasswd и укажем web-серверу снять ограничение по логину (т.е. он будет принимать только те имена пользователей и пароли, которые указаны в .htpasswd, в результате чего не будет необходимости повторно перечислять в "Require User" в htaccess'е все разрешенные логины).
cd /var/www/seedbox/data/www/seedbox-web && echo "seeduser:\$apr1\$aJ.utc3n\$30XkDugWyT7bG109N1FUe1">./.htpasswd && echo -e "AuthType Basic\nAuthName \"Authorization Required\"\nAuthUserFile /var/www/seedbox/data/www/seedbox-web/.htpasswd\nRequire valid-user">./.htaccess && cd ~
В примере выше в файл .htpasswd открывается доступ для пользователя seeduser по паролю seedpassword. Вы, возможно, захотите изменить эти данные — для этого воспользуйтесь генератором паролей .htpasswd, например — этим. Полученный текст вставьте в файл .htpasswd который мы создали ранее.

Внимание! Если вы хотите ограничить доступ к IP, который используется для раздачи торрентов, переведите Apache, а вместе с ним — и веб-морду на другой IP-адрес. Для этого в настройках Apache (т.е. в файле /etc/apache2/apache2.conf или /etc/apache2/ports.conf укажите:
Listen %НУЖНЫЙ_IP_АДРЕС%:80
... и перезапустите Apache:
/etc/init.d/apache2 restart

Чтобы открыть (развернуть) работающий rtorrent в консоли, наберите:
su seedbox screen -r
Если при этом вас встречает ощибка:
Cannot open your terminal '/dev/pts/0' - please check.
(может быть /dev/pts/0, /dev/pts/1, /dev/pts/2 и т.д.), то вернитесь в root и исправьте права доступа:
exit chmod a+rw /dev/pts/*

Использовано:
http://www.siniy.ws/2009/09/22/rtorrent-wtorrent-на-debian
http://filesharefreak.com/2010/02/13/how-to-install-rtorrent-rutorrent-using-socket-ssl-authentication-on-ubuntu-or-debian/
http://rtwi.jmk.hu/wiki/InstallationGuide#xmlrpc

No comments: