Rtorrent webui

Материал из wiki.lissyara.su
Перейти к: навигация, поиск

Начинаем как всегда с обновления портов. Ставим нужные порты:

cd /usr/ports/www/lighttpd

снимаем все галки, нам тут ничего не надо

cd /usr/ports/lang/php5

выбираем только fastcgi

cd /usr/ports/lang/php5-extensions

ставим галку только напротив xmlrpc

cd /usr/ports/net-p2p/rtorrent

отмечаем xmlrpc

cd /usr/ports/sysutils/screen

смело снимаем все галки.

порты поставили, теперь конфиги.

cat /usr/local/etc/lighttpd.conf
server.modules              = (
                              "mod_rewrite",
                              "mod_redirect",
                              "mod_alias",
                              "mod_access",
                              "mod_auth",
                              "mod_fastcgi",
        	               "mod_scgi",
                              "mod_accesslog" )
server.document-root        = "/usr/local/www/"
server.errorlog             = "/var/log/lighttpd.error.log"
index-file.names            = ( "index.php", "index.html","index.htm", "default.htm" )
server.event-handler = "freebsd-kqueue" # needed on OS X
mimetype.assign             = (
 ".pdf"          =>      "application/pdf",
 ".sig"          =>      "application/pgp-signature",
 ".spl"          =>      "application/futuresplash",
 ".class"        =>      "application/octet-stream",
 ".ps"           =>      "application/postscript",
 ".torrent"      =>      "application/x-bittorrent",
 ".dvi"          =>      "application/x-dvi",
 ".gz"           =>      "application/x-gzip",
 ".pac"          =>      "application/x-ns-proxy-autoconfig",
 ".swf"          =>      "application/x-shockwave-flash",
 ".tar.gz"       =>      "application/x-tgz",
 ".tgz"          =>      "application/x-tgz",
 ".tar"          =>      "application/x-tar",
 ".zip"          =>      "application/zip",
 ".mp3"          =>      "audio/mpeg",
 ".m3u"          =>      "audio/x-mpegurl",
 ".wma"          =>      "audio/x-ms-wma",
 ".wax"          =>      "audio/x-ms-wax",
 ".ogg"          =>      "application/ogg",
 ".wav"          =>      "audio/x-wav",
 ".gif"          =>      "image/gif",
 ".jar"          =>      "application/x-java-archive",
 ".jpg"          =>      "image/jpeg",
 ".jpeg"         =>      "image/jpeg",
 ".png"          =>      "image/png",
 ".xbm"          =>      "image/x-xbitmap",
 ".xpm"          =>      "image/x-xpixmap",
 ".xwd"          =>      "image/x-xwindowdump",
 ".css"          =>      "text/css",
 ".html"         =>      "text/html",
 ".htm"          =>      "text/html",
 ".js"           =>      "text/javascript",
 ".asc"          =>      "text/plain",
 ".c"            =>      "text/plain",
 ".cpp"          =>      "text/plain",
 ".log"          =>      "text/plain",
 ".conf"         =>      "text/plain",
 ".text"         =>      "text/plain",
 ".txt"          =>      "text/plain",
 ".dtd"          =>      "text/xml",
 ".xml"          =>      "text/xml",
 ".mpeg"         =>      "video/mpeg",
 ".mpg"          =>      "video/mpeg",
 ".mov"          =>      "video/quicktime",
 ".qt"           =>      "video/quicktime",
 ".avi"          =>      "video/x-msvideo",
 ".asf"          =>      "video/x-ms-asf",
 ".asx"          =>      "video/x-ms-asf",
 ".wmv"          =>      "video/x-ms-wmv",
 ".bz2"          =>      "application/x-bzip",
 ".tbz"          =>      "application/x-bzip-compressed-tar",
 ".tar.bz2"      =>      "application/x-bzip-compressed-tar",
 ""              =>      "application/octet-stream",
)
accesslog.filename          = "/var/log/lighttpd.access.log"
url.access-deny = ("~", ".inc", ".db", ".tpl.php", ".cls.php",)
$HTTP["url"] =~ "\.pdf$" {
 server.range-requests = "disable"
}
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
server.pid-file            = "/var/run/lighttpd.pid"
server.username            = "www"
server.groupname           = "www"
fastcgi.server             = ( ".php" =>
                              ( "localhost" =>
                                (
                                  "socket" => "/tmp/fcgi",
                                  "bin-path" => "/usr/local/bin/php-cgi"
                                )
                              )
                           )                
scgi.server = (
                "/RPC2" =>
                  ( "127.0.0.1" =>
                    (
                     "socket" => "/var/tmp/rtorrent_rpc.socket",
                     "check-local" => "disable",
                     "disable-time" => 0,  # don't disable scgi if connection fails
                    )
                  )
              )
auth.backend = "htdigest"
auth.backend.htdigest.userfile = "/usr/local/www/rtorrent/rtorrent_users"
auth.require = ( "/RPC2" =>
 (
  "method" => "basic",
  "realm" => "XML-RPC",
  "require" => "valid-user"
 )
)


в /etc/rc.conf добавляем следущее:

lighttpd_enable="YES"
rtorrent_enable="YES"
rtorrent_args="-n -d /mnt/hdd2/p2p/bittorrent -s /mnt/hdd2/p2p/bittorrent/session"
rtorrent_user="opt1k"

тут opt1k это пользователь от котрого будем пускать rtorrent, /mnt/hdd2/p2p/bittorrent путь куда будут лететь торренты по умлочанию(в веб морде можно назначать любой путь), /mnt/hdd2/p2p/bittorrent/sessions честно скажу - не знаю что оно там хранит, но подозреваю что .torrent файлы.

Сделаем стартовый скриптик для rtorrent:

cat /usr/local/etc/rc.d/rtorrent
#!/bin/sh
#
#
# PROVIDE: rtorrent
# REQUIRE: LOGIN
# KEYWORD: shutdown 
. /etc/rc.subr
name="rtorrent"
rcvar=`set_rcvar`
load_rc_config $name
: ${rtorrent_enable="NO"}
: ${rtorrent_args=""}
: ${rtorrent_user=""}
command="/usr/local/bin/rtorrent"
start_precmd="${name}_prestart"
start_cmd="echo \"Starting ${name}.\"; su ${rtorrent_user} -c 'screen -A -m -d -S rtorrent ${command} \
${rtorrent_args} -o scgi_local=/var/tmp/rtorrent_rpc.socket'"
start_postcmd="${name}_poststart"
rtorrent_prestart()
{
       if [ -e "/var/tmp/rtorrent_rpc.socket" ]; then
               rm -R /var/tmp/rtorrent_rpc.socket
       fi
       return 0
}
rtorrent_poststart()
{
       while [ ! -e "/var/tmp/rtorrent_rpc.socket" ];
       do 
               sleep 0.01
               echo waiting for /var/tmp/rtorrent_rpc.socket creation...
       done
               echo done
               chown www /var/tmp/rtorrent_rpc.socket
               return 0
}
stop_postcmd="rm -R /var/tmp/rtorrent_rpc.socket"
run_rc_command "$1"

Теперь вебморда, взять её можно отсюда: http://vif2ne.ru/nvk/stuff/novik/rtorrent/rtorrent.tar.gz. Распакуем содержимое архива в /usr/local/www/rtorrent. Подрихтуем конфиг:

cat /usr/local/www/rtorrent/config.php
<?php
   $uploads = './torrents';
   $uploads_mode = 0777;
   $settings = './settings';
   $scgi_host = "unix:///var/tmp/rtorrent_rpc.socket";
?>

Создадим файлик авторизации в веб морде:

echo user_name:XML-RPC:`echo -n user_name:XML-RPC:my_pass | md5 | cut -b -32` >> \
/usr/local/www/rtorrent/rtorrent_users

Где user_name - имя пользователя и my_pass - пароль.

Э, надо бы ещё права на стартовый скрипт дать:

chmod +x /usr/local/etc/rc.d/rtorrent

Да и на веб морду:

chmod -R 755 /usr/local/www/rtorrent

Всё, пробуем:

/usr/local/etc/rc.d/lighttpd start
/usr/local/etc/rc.d/rtorrent start
http://host_ip/rtorrent

От себя хочу сказать спасибо автору переделки webui, к сожалению я его не предупредил о том что выкладываю линк на его труд.



По просьбам трудящихся перевод конфига rtorrent'a:

# This is an example resource file for rTorrent. Copy to
# ~/.rtorrent.rc and enable/modify the options as needed. Remember to
# uncomment the options you wish to enable.
# Maximum and minimum number of peers to connect to per torrent.
# максимальное и минимальное число пиров на каждый торрент
#min_peers = 40
#max_peers = 100
# Same as above but for seeding completed torrents (-1 = same as downloading)
# Тоже самое что и выше, только для сидируемых торрентов (-1 для тех значений что на скачках)
#min_peers_seed = 10
#max_peers_seed = 50	
# Maximum number of simultanious uploads per torrent.
# Максимально число одновременных отдач на торрент
#max_uploads = 15
# Global upload and download rate in KiB. "0" for unlimited.
# глобальная скорость скачивания и отдачи. "0" без лимита
#download_rate = 0
#upload_rate = 0
# Default directory to save the downloaded torrents.
# Директория для сохранения торрентов
#directory = ./
# Default session directory. Make sure you don't run multiple instance
# of rtorrent using the same session directory. Perhaps using a
# relative path?
# Директория для хранения файлов сессий, не допускается запуск более одно rtorrent'а
# с заданием одной и той же диретории.
#session = ./session
# Watch a directory for new torrents, and stop those that have been
# deleted.
#Сиотрим директорию на наличие новых торрентов для скачки, и тормозим торрент если 
# если .torrent файл удалён(можно по самбе накилывать и удалять, прим. автора)
#schedule = watch_directory,5,5,load_start=./watch/*.torrent
#schedule = untied_directory,5,5,stop_untied=
# Close torrents when diskspace is low.
# закрываем торренты если мало места на харде
#schedule = low_diskspace,5,60,close_low_diskspace=100M
#тормозим торренты если множитель отдачи достиг определённый процент
#или же если достигнут лимит в байтах
#или же достигнут финальный лимит сножителя отдачи в процентах
# Stop torrents when reaching upload ratio in percent,
# when also reaching total upload in bytes, or when
# reaching final upload ratio in percent.
# example: stop at ratio 2.0 with at least 200 MB uploaded, or else ratio 20.0
#schedule = ratio,60,60,"stop_on_ratio=200,200M,2000"
# The ip address reported to the tracker.
# айпишник сообщаемый трекеру
#ip = 127.0.0.1
#ip = rakshasa.no
# The ip address the listening socket and outgoing connections is
# bound to.
# биндим слушающий сокет и исходящии соединения на этот адрес
#bind = 127.0.0.1
#bind = rakshasa.no
# Port range to use for listening.
# диапазон портов для прослушки
#port_range = 6890-6999
# Start opening ports at a random position within the port range.
#открываем порты внутри диапазоа со случайных значений
#port_random = no
# Check hash for finished torrents. Might be usefull until the bug is
# fixed that causes lack of diskspace not to be properly reported.
#проверяем хеш скаченного торента. Может быть полезно до фикса бага,
#из-за которого свободное место отображается неверно.
#check_hash = no
# Set whetever the client should try to connect to UDP trackers.
#разрешает клиенту испольование UDP трекеров
#use_udp_trackers = yes
# Alternative calls to bind and ip that should handle dynamic ip's.
#альтернативны вызовы бинда и IP для управления динамическим адресом
#schedule = ip_tick,0,1800,ip=rakshasa
#schedule = bind_tick,0,1800,bind=rakshasa
# Encryption options, set to none (default) or any combination of the following:
# allow_incoming, try_outgoing, require, require_RC4, enable_retry, prefer_plaintext
#
# The example value allows incoming encrypted connections, starts unencrypted
# outgoing connections but retries with encryption if they fail, preferring
# plaintext to RC4 encryption after the encrypted handshake
# опции шифрования, по умолчанию не шифрует.
#пример разрешает входящие зашифрованние соединения, начинать нешифрованные
#исходящие соединения, но повторять шированными если не получилось. 
#Предпочтение отдаётся откытому текст вместо RC4, после неудачного шифрования
# encryption = allow_incoming,enable_retry,prefer_plaintext
# Enable DHT support for trackerless torrents or when all trackers are down.
# May be set to "disable" (completely disable DHT), "off" (do not start DHT),
# "auto" (start and stop DHT as needed), or "on" (start DHT immediately).
# The default is "off". For DHT to work, a session directory must be defined.
# разрешаем dht, подробнее читаем тут:http://ru.wikipedia.org/wiki/DHT
# dht = auto
# UDP port to use for DHT.
# порт для ипсользования DHT.
# dht_port = 6881
# Enable peer exchange (for torrents not marked private)
#разрешить обмен пирами(если торренты не отмечены как частные)
# peer_exchange = yes
#
# Do not modify the following parameters unless you know what you're doing.
#не трогайте эти параметры если не знаете что делаете =)
# Hash read-ahead controls how many MB to request the kernel to read
# ahead. If the value is too low the disk may not be fully utilized,
# while if too high the kernel might not be able to keep the read
# pages in memory thus end up trashing.
# кол-во памяти запрашиваемого у ядра, малое значение может вызвать
#простой дисковой подсистемы, большое к сбросу страниц памяти.
#hash_read_ahead = 10
# Interval between attempts to check the hash, in milliseconds.
#интервал между попытками хеширования
#hash_interval = 100
# Number of attempts to check the hash while using the mincore status,
# before forcing. Overworked systems might need lower values to get a
# decent hash checking rate.
#кол-во попыток проверки хеша во время mincore(хер знает что это) статуса, 
#перед принуждением. Нагруженные системы должны использовать меньшие 
#значени для получения нормальной скорости проверки хеша.
#hash_max_tries = 10