Воскресенье, 05 Май 2013 21:54

Установка и настройка Rtorrent + Rutorrent на FreeBSD + Nginx

Автор
Оцените материал
(8 голосов)

Всем привет. Собственно, речь пойдёт снова про мой домашний сервер Улыбаюсь Сейчас у меня на нём уже работает вот этот сайт, почта, фтп и облако. Захотелось на него ещё и торрент-клиент поставить, ибо некоторые дистрибутивы порою через торренты приходится скачивать.

Итак, задачу я себе поставил такую:
- настроить консольный rtorrent
- настроить вэб-интерфейс rutorrent к нему, работающий на nginx
- настроить возможность скачивания загруженных торрентов через ФТП.

В этом во всём мне помогли вот эти статьи:

http://www.volmed.org.ru/wiki/index.php/Небольшой_хелп_по_пользованию_rtorrent_-_консольный_клиент_torrent_сети
https://wiki.archlinux.org/index.php/RTorrent_(Русский)
http://habrahabr.ru/post/121138
https://syslinux.ru/node/106
http://free-pc-help.ru/freebsd/rtorrent-na-freebsd
http://allbsd.blogspot.ru/2011/03/rtorrentrutorrent-freebsd-8x.html
http://www.lissyara.su/rtorrent+utorrent_webui

Как и всегда, начну с обновления портов:

portsnap fetch update

Потом ставим rtorrent:

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

Опции сборки я выбрал такие:

опции сборки зависимостей, в которых я делал изменения:

Теперь надо уставноить программку screen, чтобы можно было запускать rtorrent в режиме демона:

cd /usr/ports/sysutils/screen
make install clean

Опции сборки:

я снял «info» и «xterm_256» за ненадобностью оных. Но можно и оставить — ничего страшного не будет.
После установки всех нужных пакетов, надо создать пользователя, из-под которого будет запускаться rtorrent:

adduser

Username: p2p
Full name:
Uid (Leave empty for default):
Login group [p2p]: ftp
Login group is ftp. Invite p2p into other groups? []:
Login class [default]:
Shell (sh csh tcsh nologin) [sh]:
Home directory [/home/p2p]:
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]:
Enter password:
Enter password again:
Lock out the account after creation? [no]:
Username : p2p
Password : *****
Full Name :
Uid : 1912
Class :
Groups : ftp
Home : /home/p2p
Home Mode :
Shell : /bin/sh
Locked : no
OK? (yes/no): yes

Я создал пользователя p2p и внёс его в группу ftp, поскольку мне нужен будет доступ к торрентам через фтп. Для этого пользователя автоматически создался домашний каталог /home/p2p, в котором надо создать файл с названием .rtorrent.rc. Этот файл и будет конфигом для rtorrent. Его содержимое надо сделать таким:

# максимальное и минимальное число пиров на каждый торрент
min_peers = 40
max_peers = 400

# Тоже самое что и выше, только для сидируемых торрентов (-1 для тех значений что на скачках)
#min_peers_seed = 10
#max_peers_seed = 50

# Максимальное число одновременных отдач на торрент
#max_uploads = 15

# глобальная скорость скачивания и отдачи. "0" — без лимита
download_rate = 0
upload_rate = 1000

# Директория для сохранения торрентов.
directory = /usr/home/ftpserv/torrents

# Директория для хранения файлов сессий, не допускается запуск более одной копии
# rtorrent'а (одного и того же торрента) с заданием одной и той же директории.
session = /usr/home/ftpserv/torrents/session

# Смотрим директорию на наличие новых торрентов для загрузки, и тормозим торрент если
# если .torrent файл удалён
#schedule = watch_directory,5,5,load_start=./watch/*.torrent
#schedule = untied_directory,5,5,stop_untied=

# закрываем торренты если мало места на диске.
#schedule = low_diskspace,5,60,close_low_diskspace=100M

# айпишник сообщаемый трекеру.
#ip = 127.0.0.1
#ip = rakshasa.no

# По какому адресу можно подключаться к rtorrent
#bind = 127.0.0.1
#bind = rakshasa.no

# диапазон портов для прослушки.
port_range = 6890-6900

# открывать или нет порты внутри диапазона со случайных значений.
port_random = no

# проверять или нет хеш скачанного торента. Может быть полезно до фикса бага,
#из-за которого свободное место отображается неверно.
check_hash = yes

# разрешает клиенту испольование UDP трекеров.
use_udp_trackers = yes

# альтернативные вызовы бинда и IP для управления динамическим адресом.
#schedule = ip_tick,0,1800,ip=rakshasa
#schedule = bind_tick,0,1800,bind=rakshasa

# Опции шифрования. По умолчанию не шифрует.
#пример разрешает входящие зашифрованные соединения: начинать не шифрованные
#исходящие соединения, но повторять шифрованными если не получилось.
#Предпочтение отдаётся открытому тексту вместо RC4, после неудачного шифрования
# encryption = allow_incoming,enable_retry,prefer_plaintext

# разрешаем dht, подробнее читаем тут: http://ru.wikipedia.org/wiki/DHT
dht = auto

# порт для ипсользования DHT.
# dht_port = 6881

# разрешить обмен пирами(если торренты не отмечены как частные)
#
# peer_exchange = yes

#
# Do not modify the following parameters unless you know what you're doing.
#

# Кол-во памяти запрашиваемое у ядра. Малое значение может вызвать
#простой дисковой подсистемы, большое — к сбросу страниц памяти.
#hash_read_ahead = 10

# интервал между попытками хеширования.
#hash_interval = 100

# кол-во попыток проверки хеша во время mincore-статуса,
#перед принуждением. Нагруженные системы должны использовать меньшие
#значения для получения нормальной скорости проверки хеша.
#hash_max_tries = 10

# указание сокета, который будет создаваться при старте rtorrent. Через этот сокет будет
# подключаться rutorrent к rtorrent
scgi_local = /tmp/rpc.sock

# маска на создаваемые файлы rtorrent'ом. Маска 007 будет давать права rwxrwx---
# Мне это нужно для дуступа к файлам через фтп.
system.umask.set = 007

Не забываем поправить права на этот файл:

chown p2p:ftp .rtorrent.rc

Следующим шагом надо создать скрипт запуска rtorrent как демона. Для этого надо перейти в каталог /usr/local/etc/rc.d и создать там файл rtorrent вот с таким содержимым:

#!/bin/sh
#
# rtorrent RCng startup script
# by Emanuele Cipolla (mail at emanuelecipolla dot net)
# Shamelessly ripped off the aMule startup script by Gabriele Cecchetti (amule.org forum)
#

# PROVIDE: rtorrent
# REQUIRE: NETWORKING SERVERS
# BEFORE: DAEMON
# KEYWORD: shutdown

#
# Add the following lines to /etc/rc.conf to enable rtorrent at startup
# rtorrent (bool): Set to "NO" by default.
#                Set it to "YES" to enable rtorrent
# rtorrent_user (str): Set to user running rtorrent
#                    (default 'p2p')
# rtorrent_home (str): Set to home directory of user running rtorrent
#                    (default /home/${rtorrent_user})

 . /etc/rc.subr

name="rtorrent"
rcvar=`set_rcvar`

load_rc_config $name

umask 111

[ -z "$rtorrent_enable" ] && rtorrent_enable="NO"
[ -z "$rtorrent_user" ] && rtorrent_user="p2p"
[ -z "$rtorrent_home" ] && rtorrent_home="/home/${rtorrent_user}"

required_dirs=${rtorrent_home}
required_files="${rtorrent_home}/.rtorrent.rc"

start_cmd="${name}_start"
stop_cmd="${name}_stop"

 rtorrent_start()
{
if [ ! -f /var/run/${name}.run ]
     then
  cd ${rtorrent_home}
  su ${rtorrent_user} -c "/usr/local/bin/screen -dmS rtorrent_init /usr/local/bin/rtorrent"
  touch /var/run/${name}.run
  echo "Started ${name}."
  echo `date` : "Started ${name}." >> /var/log/${name}.log
  else
  echo "${name} seems to be already running -- remove /var/run/${name}.run manually if needed."
  fi
  }
  rtorrent_stop()
  {
  if [ -f /var/run/${name}.run ]
  then
  killall -INT $(echo -n 'ps aux | grep rtorrent | grep -v rtorrent_init') 2>>/var/log/${name}.log >>/var/log/${name}.log
  rm -f /var/run/${name}.run
  rm -f /tmp/rpc.sock
  echo "Stopped ${name}."
  echo `date` : "Stopped ${name}." >> /var/log/${name}.log
  else
  echo "${name} doesn't seem to be running -- create /var/run/${name}.run if needed."
  fi
    }
  run_rc_command "$1"

Нужно обратить внимание, что в этом файле тоже есть параметр umask. Здесь он для того, чтобы сокет для подключения к rtorrent создался с правами rw-rw-rw. Иначе же, он будет создаваться с правами rwxr-x---, и rutorrent к нему не сможет подключиться, поскольку он будет работать от пользователя www. Это очень важный момент!

Не забываем сделать этот скрипт исполняемым:

chmod +x rtorrent

Также, не забываем добавить строчку в /etc/rc.conf:

rtorrent_enable="YES"

И не забываем про ещё один важный момент: создаём катлоги torrents и session, которые указаны в конфиге .rtorrent.rc:

mkdir /usr/home/ftpserv/torrents
mkdir /usr/home/ftpserv/torrents/session

ftpserv — это мой корневой каталог на моём ФТП-сервере. Обязательно надо дать на них вот такие права:

chown -R p2p:ftp /usr/home/ftpserv/torrents
chmod +x /usr/home/ftpserv/torrents/session

Это тоже важный момент.

И вот сейчас пробуем стартовать rtorrent:

rehash
service rtorrent start

Чтобы проверить, действительно ли он запустился, делаем команду:

ps -A | grep rtorrent

Вывод должен быть таким:

1891 ?? Ss 0:00,00 /usr/local/bin/screen -dmS rtorrent_init /usr/local/bin/rtorrent
1897 1 R+ 0:00,00 grep rtorrent
1894 2 Ss+ 0:00,03 /usr/local/bin/rtorrent

Если нет, то надо перепроверить, всё ли правильно сделано выше.

Теперь дело дошло до установки Rutorrent. Скачиваю его здесь:

http://code.google.com/p/rutorrent/downloads/list

Скачиваю сам rutorrent-3.5.tar.gz и все плагины к нему в одном архиве: plugins-3.5.tar.gz.
Содержимое rutorrent-3.5.tar.gz распаковываю в каталог /usr/home/www/rutorrent. А содержимое plugins-3.5.tar.gz распаковываю в каталог /usr/home/www/rutorrent/plugins. И конечно не забываю дать права на каталог с руторрентом:

chown -R www:www /usr/home/www/rutorrent

Затем перехожу к настройке nginx. У меня всё это хозяйство заработало с довольно наипростейшим конфигом. Вобщем, в конфиг (в конец конфига перед последним завершающим символом « } » ) nginx дописываю вот такие строчки:

# rtorrent переброс с http на https.
server {
  listen 80;
  server_name p2p.example.com;
  return https://$server_name$request_uri; 
}

# rtorrent (ssl/tls)
server {
   listen 443 ssl;
   ssl_certificate      cert.pem;
   ssl_certificate_key  cert.key;
   server_name p2p.example.com;
   root /usr/home/www/rutorrent;
   index index.php index.html index.htm default.html default.htm;

   location ~ .*.php$ {
   fastcgi_pass unix:/tmp/php-fpm.sock;
   fastcgi_index index.php;
   include fastcgi_params;
   fastcgi_param HTTPS on;
   fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

   }
 }

и перезапускаем nginx.

Но заходить на вэб-интерфейс пока не торопимся. Сначала откроем файл /usr/home/www/rutorrent/conf/config.php и посмотрим, что в нём. А в нём видим, что надо закомментировать строчки:

// $scgi_port = 5000;
// $scgi_host = "127.0.0.1";

и раскомментировать и поправить вот эти строчки:

$scgi_port = 0;
$scgi_host = "unix:///tmp/rpc.sock";

Также, желательно отредактировать и вот этот параметр:

$log_file = '/var/log/rutorrent-errors.log';

Вот теперь можно попробовать зайти в вэб-интерфейс. И сразу же видим вот такую ругань:

[05.05.2013 16:30:56] rss: Часть функциональности плагина будет недоступна. Веб сервер не имеет доступа к внешней программе (curl).
[05.05.2013 16:30:56] unpack: Плагин не будет работать. Пользователю rTorrent не доступна внешняя программа (php).
[05.05.2013 16:30:56] rutracker_check: Плагин не будет работать. Пользователю rTorrent не доступна внешняя программа (php).
[05.05.2013 16:30:56] autotools: Плагин не будет работать. Пользователю rTorrent не доступна внешняя программа (php).
[05.05.2013 16:30:56] retrackers: Плагин не будет работать. Пользователю rTorrent не доступна внешняя программа (php).
[05.05.2013 16:30:56] rss: Плагин не будет работать. Пользователю rTorrent не доступна внешняя программа (php).
[05.05.2013 16:30:56] ratio: Часть функциональности плагина будет недоступна. Пользователю rTorrent не доступна внешняя программа (php).
[05.05.2013 16:30:56] history: Плагин не будет работать. Пользователю rTorrent не доступна внешняя программа (php).
[05.05.2013 16:30:56] create: Плагин не будет работать. Пользователю rTorrent не доступна внешняя программа (php).
[05.05.2013 16:30:56] scheduler: Плагин не будет работать. Пользователю rTorrent не доступна внешняя программа (php).
[05.05.2013 16:30:56] trafic: Плагин не будет работать. Пользователю rTorrent не доступна внешняя программа (php).
[05.05.2013 16:30:56] mediainfo: Плагин не будет работать. Пользователю rTorrent не доступна внешняя программа (mediainfo).
[05.05.2013 16:30:56] rss: Часть функциональности плагина будет недоступна. Пользователю rTorrent не доступна внешняя программа (curl).
[05.05.2013 16:30:56] screenshots: Плагин не будет работать. Пользователю rTorrent не доступна внешняя программа (ffmpeg).
[05.05.2013 16:30:57] Плагин DataDir: пользователю rTorrent не доступен интерпретатор php. Плагин не будет работать.
[05.05.2013 16:30:57] Плагин Unpack: Программа unrar недоступна пользователю rTorrent.

Будем разбираться по порядку. Суть ругани в том, что программа не видит некоторые другие программы, нужные для работы некоторых плагинов. Чтобы это поправить, снова откроем файл /usr/home/www/rutorrent/conf/config.php и найдём в нём вот такие строчки:

$pathToExternals = array(
                "php"   => '',                  // Something like /usr/bin/php. If empty, will be found in PATH.
                "curl"  => '',                  // Something like /usr/bin/curl. If empty, will be found in PATH.
                "gzip"  => '',                  // Something like /usr/bin/gzip. If empty, will be found in PATH.
                "id"    => '',                  // Something like /usr/bin/id. If empty, will be found in PATH.
                "stat"  => '',                  // Something like /usr/bin/stat. If empty, will be found in PATH.
        );

Собственно здесь просто надо указать реальные пути к программам, это будет выглядеть так:

$pathToExternals = array(
		"php" 	=> '/usr/local/bin/php',			// Something like /usr/bin/php. If empty, will be found in PATH.
		"curl"	=> '/usr/local/bin/curl',			// Something like /usr/bin/curl. If empty, will be found in PATH.
		"gzip"	=> '/usr/bin/gzip',			// Something like /usr/bin/gzip. If empty, will be found in PATH.
		"id"	=> '/usr/bin/id',			// Something like /usr/bin/id. If empty, will be found in PATH.
		"stat"	=> '/usr/bin/stat',			// Something like /usr/bin/stat. If empty, will be found in PATH.
	);

сохраняем и снова пробуем зайти в вэб-интерфейс. И на этот раз видим, что ругани стало меньше, но она всё равно есть:

[05.05.2013 16:36:26] mediainfo: Плагин не будет работать. Пользователю rTorrent не доступна внешняя программа (mediainfo).
[05.05.2013 16:36:26] screenshots: Плагин не будет работать. Пользователю rTorrent не доступна внешняя программа (ffmpeg).
[05.05.2013 16:36:27] Плагин Unpack: Программа unrar недоступна пользователю rTorrent.

Начнём с того, что надо установить программы, на отсутствие которых жалуется rutorrent. Приступим. Ставлю mediainfo:

cd /usr/ports/multimedia/mediainfo
make install clean

Тут всё поставилось без всяких опций и вопросов.

Ставлю ffmpeg:

cd /usr/ports/multimedia/ffmpeg
make install clean

А вот тут будут и опции и зависимости. В опциях самого ffmpeg и отметил (точнее снял флажки) вот что:

ffmpeg нужен для плагина screenshots, который делает скриншоты из видео-файлов. Поэтому я лишь оставил поддержку видеокодеков в опциях сборки.

Зависимостей ffmpeg потянул много, но опции я почти везде по умолчанию оставлял. Менял лишь вот тут:

Ставим unrar:

cd /usr/ports/archivers/unrar
make install clean

Опции сборки по умолчанию.

После установки всех этих пакетов даём команду:

rehash

А затем находим конфигурационные файлы плагинов:

/usr/local/www/rutorrent/plugins/mediainfo/conf.php
/usr/local/www/rutorrent/plugins/screenshots/conf.php
/usr/local/www/rutorrent/plugins/unpack/conf.php

В них во всех есть вот такие строчки:

$pathToExternals['название_программы'] = '';

Где название программы у каждого своё: mediainfo, ffmpeg, unrar и unzip. Тут надо, также, указать полный путь к этим программам, т.е. Получится так соответственно:

$pathToExternals['mediainfo'] = '/usr/local/bin/mediainfo';
$pathToExternals['ffmpeg'] = '/usr/local/bin/ffmpeg';
$pathToExternals['unzip'] = '/usr/bin/unzip';
$pathToExternals['unrar'] = '/usr/local/bin/unrar';

После редактирования этих конфигов снова пытаемся зайти в вэб-интерфейс. И на этот раз всё должно быть без ругани, и все плагины — рабочими.

Есть ещё один момент, который очень часто забывается: фаервол. В /etc/ipfw.rules надо добавить правило:

# для торрентов
add 00200 allow all from any to me 6890-6900 via em0

Собственно, теперь можно попробовать позагружать торренты какие-нибудь. И если всё хорошо, то подумаем немного о безопасности. Нужно установить пароль для доступа в rutorrent, поскольку сам он не имеет средств авторизации. Это можно сделать с помощью утилиты htpasswd, которая входит в состав apache. Но проблема в том, что у меня не стоит апач, и ставить его только ради этого я не хочу. Выход простой: создать хэш с паролем на другой машине, где стоит апач, а затем скопировать его к себе. Значит, на машине с апачем, находясь в папке, напрмер, /home, вводим команду:

htpasswd -cm .passwd admin

Команда попросит ввести пароль — придумываем и вводим. В итоге получится файл с хэшем вашего пароля для пользователя admin. Этот файл копируем на машину с nginx+rutorrent в каталог, например /usr/local/etc/nginx, а в конфиг nginx.conf добавляем строчки:

auth_basic "You need the password";
auth_basic_user_file /usr/local/etc/nginx/.passwd;

Добавляем их где-нибудь после строчек:

server_name p2p.example.com;
root /usr/home/www/rutorrent;

И перезапускаем nginx. И теперь, чтоб попасть в вэб-интерфейс rutorrent, потребуется ввести логин и пароль.

Остался ещё один маленький штрих, связанный с тем, что rtorrent принадлежит к p2p:ftp, а rutorrent принадлежит к www:www. Я, из-за этого, столкнулся с тем, что не мог скачать уже загруженные файлы через вэб-интерфейс. Поправить это несложно. Надо просто пользователя www дополнительно включить в группу ftp. Это удобно сделать через webmin, который у меня уже установлен:

Не забудем снова перезапустить nginx и php-fpm.

На этом всё, можно пользоваться Улыбаюсь

Прочитано 10970 раз Последнее изменение Понедельник, 18 Ноябрь 2013 12:37

Комментарии  

Exhacuak
0 # Exhacuak 17.09.2019 16:45
Cheap generic cialis online buy cialis generic enzyte cialis generic cialis cheap online buy generic cialis generic cialis mixing viagra and levitra cialis generic buy cialis best place to buy cialis cialis cheap cheap online female cialis ciali s
Ответить
fradway
0 # fradway 24.09.2019 02:07
Cialis 5mg price online canadian pharmacy generic cialis online cialis mail order generic cialis online
Ответить
Deahniff
0 # Deahniff 24.09.2019 02:50
Imodium alternative cialis 20mg buy cheap cialis coupon how many viagra do you take buy cheap viagra
Ответить
Elltone
0 # Elltone 15.11.2019 03:53
Zithromax 250 Mg Uk Priligy Latest News Tab Dutasteride 0.5mg Next Day On Line Amex Accepted canadian pharmacy cialis Isotretinoin in internet Keflex For Urinary Tract Infections Wo Kann Man Viagra Kaufen Ohne Rezept
Ответить

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

Защитный код
Обновить

Вы здесь: Home Мои статьи FreeBSD Установка и настройка Rtorrent + Rutorrent на FreeBSD + Nginx