установка rTorrent+wTorrent на Ubuntu 8.10

    Мой домашний сервер включен 24х7. А по ночам он простаивает, захотелось его чем нибудь нагрузить. Чем можно нагрузить домашний сервер с безлимитным интернетом — понятное дело торрентами. А поскольку сервер на линуксе, то и торрент клиент нужно искать консольный и с Web интерфейсом

    И мой взгляд упал на rTorrent + wTorrent. Долго гугля в различных интернетах понял, что большинство пытается поднять эту связку на вебсервере Лайти (lighttpd), а вот под апач к сожалению нет толковых мануалов.
    Чтож, попробую написать свой мануал

    итак начнем

    ставим необходимые пакеты

    apt-get install rtorrent screen apache2 php5-cgi php5-common php5-sqlite php5-xmlrpc sqlite unzip php5-curl

    тут следует отметить что пакет rtorrent для Ubuntu идет уже скомпилирован с xmlrpc для Debian Etch придется собирать самому, либо использовать версию пакета из тестинга

    итак займемся настройкой пакета rTorrent. следует отметить что rTorrent нужно запускать от учетки пользователя. в моем случае это была учетная запись randomtoy

    в папке /home/randomtoy создаем файл .rtorrent.rc со следующим содержанием

    scgi_port = localhost:5000
    min_peers = 40
    max_peers = 100
    min_peers_seed = 10
    max_peers_seed = 50
    max_uploads = 15
    #upload_rate = 50
    directory = /home/randomtoy/torrents/doing
    session = /home/randomtoy/torrents/.rtsession/
    schedule = watch_directory,5,5,load_start=/home/randomtoy/torrents/watch/*.torrent
    schedule = tied_directory,5,5,start_tied=
    schedule = untied_directory,5,5,close_untied=
    on_finished = move_complete,"execute=mv,-u,$d.get_base_path=,/home/randomtoy/torrents/done/ ;d.set_directory=/home/randomtoy/torrents/done/"
    on_start = link1,"create_link=tied,,.started"
    on_stop = link1,"delete_link=tied,,.started"
    on_finished = link1,"create_link=tied,,.finished"
    on_erase = link1,"delete_link=tied,,.finished"
    schedule = low_diskspace,5,60,close_low_diskspace=100M
    #schedule = ratio,60,60,"stop_on_ratio=120,200M,2000"
    port_range = 10000-10001
    port_random = no
    check_hash = yes
    use_udp_trackers = yes
    encryption = allow_incoming,try_outgoing,enable_retry
    dht = auto
    dht_port = 63982


    тут же создаем следующие директории

    torrents
    torrents/watch
    torrents/doing
    torrents/done
    torrents/.rtsession

    запускаем rtorrent, если нет ошибок, продолжаем. Следующая проблема. как запускать рторрент от пользователя при запуске системы?
    создаем скрипт rtorrent со следующим содержимым
    #!/bin/bash

    ### BEGIN INIT INFO
    # Provides: rtorrent
    # Required-Start: $network
    # Required-Stop: $network
    # Default-Start: 2 3 4 5
    # Default-Stop: 0 1 6
    # Short-Description: Start rtorrent as a daemon
    ### END INIT INFO

    #!/bin/sh
    #############
    ######
    #############
    # This script depends on screen.
    # For the stop function to work, you must set an
    # explicit session directory using ABSOLUTE paths (no, ~ is not absolute) in your rtorrent.rc.
    # If you typically just start rtorrent with just "rtorrent" on the
    # command line, all you need to change is the "user" option.
    # Attach to the screen session as your user with
    # "screen -dr rtorrent". Change "rtorrent" with srnname option.
    # Licensed under the GPLv2 by lostnihilist: lostnihilist _at_ gmail _dot_ com
    ##############
    ######
    ##############

    #######################
    ##Start Configuration##
    #######################
    # You can specify your configuration in a different file
    # (so that it is saved with upgrades, saved in your home directory,
    # or whateve reason you want to)
    #Do not put a space on either side of the equal signs e.g.
    # user = user
    # will not work
    # system user to run as
    user="randomtoy"

    # the system group to run as, not implemented, see d_start for beginning implementation
    # group=`id -ng "$user"`

    # the full path to the filename where you store your rtorrent configuration
    config="/home/randomtoy/.rtorrent.rc"

    # set of options to run with
    options=""

    # default directory for screen, needs to be an absolute path
    #base="/home/${user}"
    base="/home/randomtoy"

    # name of screen session
    srnname="rtorrent"

    # file to log to (makes for easier debugging if something goes wrong)
    logfile="/var/log/rtorrentInit.log"
    #######################
    PATH=/usr/bin:/usr/local/bin:/usr/local/sbin:/sbin:/bin:/usr/sbin
    DESC="rtorrent"
    NAME=rtorrent
    DAEMON=$NAME
    SCRIPTNAME=/etc/init.d/$NAME

    checkcnfg() {
    exists=0
    for i in `echo "$PATH" | tr ':' '\n'` ; do
    if [ -f $i/$NAME ] ; then
    exists=1
    break
    fi
    done
    if [ $exists -eq 0 ] ; then
    echo "cannot find rtorrent binary in PATH $PATH" | tee -a "$logfile" >&2
    exit 3
    fi
    if ! [ -r "${config}" ] ; then
    echo "cannot find readable config ${config}. check that it is there and permissions are appropriate" | tee -a "$logfile" >&2
    exit 3
    fi
    # session=`getsession "$config"`
    # if ! [ -d "${session}" ] ; then
    # echo "cannot find readable session directory ${session} from config ${config}. check permissions" | tee -a "$logfile" >&2
    # exit 3
    # fi
    }
    d_start() {
    [ -d "${base}" ] && cd "${base}"
    stty stop undef && stty start undef
    su -c "screen -ls | grep -sq "\.${srnname}[[:space:]]" " ${user} || su -c "screen -dm -S ${srnname} 2>&1 1>/dev/null" ${user} | tee -a "$log$
    # this works for the screen command, but starting rtorrent below adopts screen session gid
    # even if it is not the screen session we started (e.g. running under an undesirable gid
    #su -c "screen -ls | grep -sq "\.${srnname}[[:space:]]" " ${user} || su -c "sg \"$group\" -c \"screen -fn -dm -S ${srnname} 2>&1 1>/dev/null$
    su -c "screen -S "${srnname}" -X screen rtorrent ${options} 2>&1 1>/dev/null" ${user} | tee -a "$logfile" >&2
    }

    d_stop() {
    session=`getsession "$config"`
    if ! [ -s ${session}/rtorrent.lock ] ; then
    return
    fi
    pid=`cat ${session}/rtorrent.lock | awk -F: '{print($2)}' | sed "s/[^0-9]//g"`
    if ps -A | grep -sq ${pid}.*rtorrent ; then # make sure the pid doesn't belong to another process
    kill -s INT ${pid}
    fi
    }

    getsession() {
    session=`awk '/^[[:space:]]*session[[:space:]]*=[[:space:]]*/{print($3)}' "$config"`
    echo $session
    }

    checkcnfg
    case "$1" in
    start)
    echo -n "Starting $DESC: $NAME"
    d_start
    echo "."
    ;;
    stop)
    echo -n "Stopping $DESC: $NAME"
    d_stop
    echo "."
    ;;
    restart|force-reload)
    echo -n "Restarting $DESC: $NAME"
    d_stop
    sleep 1
    d_start
    echo "."
    ;;
    *)
    echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
    exit 1
    ;;
    esac

    exit 0



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

    cp rtorrent /etc/init.d

    chmod a+x /etc/init.d/rtorrent

    update-rc.d rtorrent defaults 25



    Теперь rtorrent будет запускаться в screen при запуске системы

    ну и теперь приступаем к самому вкусному, к Web-интерфейсу. из различных вебморд я выбрал, основанную на аяксе wTorrent

    скачиваем wTorrent

    cd /var/www

    rm -f index.html

    svn co svn://canbruixa.homelinux.net/repos/trunk/wtorrent/

    cd wtorrent

    mv * ..

    mv .* ..

    cd ..

    rmdir wtorrent

    touch ./db/database.db

    chown -R www-data:www-data db torrents tpl_c



    Вот теперь мы дошли до настройки Apache.

    выполняем в консоли
    a2enmod scgi_module

    в файл апача /etc/apache2/sites-avaible/default добавляем

    SCGIMount /RPC2 127.0.0.1:5000


    перезапускаем rtorrent и Апач
    /etc/init.d/rtorrent restart
    /etc/init.d/apache2 restart


    заходим на страницу localhost/install.php

    создаем аккаунт администраторатора

    заходим по адресу localhost

    вуаля. wTorrent работает
    Поделиться публикацией

    Комментарии 40

      +2
      интересная статья)
      я компилил rtorrent + libtorrent из исходников с поддержкой xmlrpc — не получилось. так что пока только из консоли :(
        0
        да, я как раз только што прочитал твою статью про Сервер на дебиане. в принципе можешь попробовать использовать пакеты с testing репозитария. должны подойти
          0
          о, спасибо, попробую :)
        +3
        Вай вай вай сколько всяких вещей страшных.
        Советую присмотреться к Deluge. Имеет 3 компонента: демон, модра\клиент, вебморда. То есть по желанию можно поднять на сервере демон и крутить на нем торренты и подключаться к нему из консоли или через графическую оболочку, либо можно в догонку поднять еще и вебморду и управлять демоном из браузера.
        И кстати все это не требует никаких пыхпыхов и апапчей и прочей подобной ненужной мишуры.
          0
          Присоединяюсь. Чтобы появилась кнопка подключения с морды (gtk) к удаленному демону нужно отключить в настройках «Classic» интерфейс. Всего 3 варианта морды: GTK, WEB, CLI. Использую уже где-то полгода, очень удобно. Только желательно дебку тянуть с сайта.
            0
            утянул дебку, к локальному демону коннетится нормально, к удаленному не хочет. просто не разрешает нажать подключиться. телнетится нормально.
            а что насчт вэб и cli морд, где про них посмотреть инфу можно?
              0
              Надо в настройках поставить галку, разрешающую удаленные соединения, тогда будет коннектиться к удаленному демону.

              deluge --ui web запустит на локалхосте, не помню на каком порту, в логах будет, вебморду, дефолтный пароль от нее deluge

              deluge --ui console запускает консольный клиент, подключаешься к демону и работаешь. Вариант на случай если нет иксов.
                0
                нашел в факе, проверил, вэб морда заработала, но её что то заглючило, возможно из-за прокси, забыл проверить настройки браузера…
                а стандартную таки не поднял… не доступна кнопа и всё тут…
                  0
                  По шагам:

                  1) Поднимаем на сервере демон
                  2) Запускаем на нем же консольный клиент: deluge --ui console
                  3) Разрешаем удаленный коннект к демону: config -s allow_remote True
                  4) Глушим демон из консольного клиента: halt
                  5) Идем к обычному компу и подключаемся из графической морды

                  Должно работать, сам не проверял, т.к. нет отдельного сервера без иксов.
                    0
                    вот на 5м шаге и затычка, кстати, нет пункта ни задания пароля, ни запуска демона как такового…
            0
            Может расскажете поподробней? Вот у меня сейчас под рукой сервер с ubuntu-server 8.10 (доступ только по ssh в терминал, без иксов) и десктоп с простой 8.10.
            Что мне делать? :)
              +1
              Качаете с сайта проекта пакет, устанавливаете, а далее инструкция парой постов выше.
              download.deluge-torrent.org/ubuntu/intrepid/1.1.0_RC3/

              Если где не разберетесь — пишите, попробую ответить на вопросы.
                0
                Мимоходом заметил что в репах до сих пор версии 0.5.9.*
                  0
                  Т.к. 1.0 это полная перепись ядра и разделение его на клиент и сервер, то никакие плагины из 0.5 не работают на 1.0, а их там было порядочное количество. Теперь девелоперы пытаются реализовать часть из них в ветке 1.1 и дописать оставшиеся в 1.2. Думаю тогда в репах и появится новая версия.
                0
                5) Идем к обычному компу и подключаемся из графической морды
                Чё-то я вот тут подвис. Графическая морда есть, а что с ней делать? )
                  0
                  Если в настройках не выключил классический режим, сделай и перезапусти клиент.
                  Настройки-Интерфейс-Классический режим.
                  Дальше увидишь большую кнопку «Управление подключениями»
                    0
                    Есть такое дело. Как определить на каком порту запускается deluged на сервере? Я правильно понимаю что он их случайным образом выбирает?
                      0
                      Дефолтный порт, как ты мог бы заметить, подкючи ты чудеса дедукции и посмотри в менеджере подключений на 127.0.0.1:58846, то ты бы знал, что дефолтный порт 58846.
            0
            $ svn co svn://canbruixa.homelinux.net/repos/trunk/wtorrent/
            svn: Can't connect to host 'canbruixa.homelinux.net': Connection timed out
            :/
            похоже придется стабильную брать…
            неа, нашел svn co svn://wtorrent-project.org/repos/trunk/wtorrent/

            хотя насчет deluge, уболтали, сейчас гляну что там, и стоит ли вообще дергаться и переделывать с torrentflux'a
            • НЛО прилетело и опубликовало эту надпись здесь
                +3
                «мсье знает толк в извращениях» (с)
                0
                А можно ли как-то рассортировывать закаченные файлы, музыка в одну папку, фильмы в другую, чтобы не захламлять папку done.
                  0
                  я не пробовал, по идее можно поковырять параметр
                  on_finished = move_complete,«execute=mv,-u,$d.get_base_path=,/home/randomtoy/torrents/done/
                  в .rtorrent.rc
                    0
                    да вряд ли это автоматом получится сделать, т.к. скорее всего тогда нужно все к расширениям файлов привязывать. Вот если бы во перед закачкой папку указывать можно было — тогда круто. Это единственное, что меня останавливает от использования консольного клиента.
                      0
                      Есть еще одна веб-морда, в ней можно указывать папку назначения wl500g.info/showthread.php?t=14256
                        0
                        Еще как вариант создать несколько просматриваемых директорий с разными директориями-назначением для скачиваемых файлов.
                          0
                          да, во wTorrent есть функция в какую папку сохранять
                        +1
                        Move completed torrents to different directory depending on watch directory ¶

                        Each watch directory adds torrents with the final destination stored in the «custom1» string of the download. You can check this string with ctrl-X then «print=$d.get_custom1=» in the client. In rtorrent 0.8.4+:
                        schedule = watch_directory_1,10,10,«load_start=~/Download/watch_stuff1/*.torrent,d.set_custom1=~/Download/stuff1/»
                        schedule = watch_directory_2,10,10,«load_start=~/Download/watch_stuff2/*.torrent,d.set_custom1=~/Download/stuff2/»

                        # On completion, move the torrent to the directory from custom1.

                        on_finished = move_complete,«d.set_directory=$d.get_custom1= ;execute=mv,-u,$d.get_base_path=,$d.get_custom1=»

                        # On MacOSX and *BSD.
                        on_finished = move_complete,«d.set_directory=$d.get_custom1= ;execute=mv,-n,$d.get_base_path=,$d.get_custom1=»
                        0
                        вот солюшн
                        Move completed torrents to different directory depending on watch directory

                        Each watch directory adds torrents with the final destination stored in the «custom1» string of the download. You can check this string with ctrl-X then «print=$d.get_custom1=» in the client. In rtorrent 0.8.4+:
                        schedule = watch_directory_1,10,10,«load_start=~/Download/watch_stuff1/*.torrent,d.set_custom1=~/Download/stuff1/»
                        schedule = watch_directory_2,10,10,«load_start=~/Download/watch_stuff2/*.torrent,d.set_custom1=~/Download/stuff2/»

                        # On completion, move the torrent to the directory from custom1.

                        on_finished = move_complete,«d.set_directory=$d.get_custom1= ;execute=mv,-u,$d.get_base_path=,$d.get_custom1=»

                        # On MacOSX and *BSD.
                        on_finished = move_complete,«d.set_directory=$d.get_custom1= ;execute=mv,-n,$d.get_base_path=,$d.get_custom1=»

                        отсюда libtorrent.rakshasa.no/wiki/RTorrentCommonTasks хороший мануал по .rtorrent.rc
                          0
                          Спасибо, попробую.
                        0
                        Ух как страшно то демонизация то ИМХО реализована, зачем такие пируэты не понимаю. У себя использую связку screen + rtorrent + wTorrent.

                        клиент запускается простой командой прописанной в rc.d:
                        screen -dmS rtorrent su — torrent -c rtorrent
                        Остальное в принципе точно также.

                        Открыть консольный интерфейс можно командой:
                        screen -r rtorrent
                        или если нет других «скринов» то
                        screen -r
                        а выйти без закрытия самого клиента: ctrl + A + D.

                        Удобно если rtorrent стоит на сервере без монитора, а кроме ка через веб-морду иногда охото и через терминал подключиться и проконтролировать, что да как.
                          0
                          Теперь 2 вопроса:
                          — я включаю сервер — нужно ли мне логиниться или он сам начнет закачку и раздачу вести?
                          — у меня на компе с виндой щас кучу торрентов, можно ли их как нибудь перенести?
                            0
                            1) не нужно, он стартует сам.
                            2) нужны только .torrent файлы. переносишь закачки на сервер и добавляешь торренты. в настройках пути указываешь местонахождение торрентов на сервере и он подхватит их
                              0
                              Проблема в том, что при добавлении торрента файл выглядит так — video, а на компе уже файл выглядит видео, т.е. я щас написал как пример, но я думаю смысл понятен, что названия отличаются. Т.е. мне придется переименовывать все файлы или как?
                                0
                                Достаточно в терминале нажать Ctrl+O и указать другой путь сохранения выбранного торрента.
                                Но можешь и переименовать файлы. Тогда понадобится Ctrl+R (рехеш).
                            0
                            спасибо за мануал.
                            Поставил у себя. Только пришлось немножно по-другому делать:
                            Дополнительно поставить пакет libapache2-mod-scgi
                            и включать не scgi_module, а просто scgi
                              0
                              При установке на сервер, где Apache выступает в роли backend (проксирует для nginx) при переходе на /RPC2 север падает с ошибкой 500 Internal Server Error.
                              Сталкивались ли вы с подобной ошибкой и, если да, то каким образом ее решали?

                              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                              Самое читаемое