How to Install rTorrent/ruTorrent on Debian

Posted on Posted in linux, web

This tutorial will help you to learn how install and configurate a fully-featured seedbox running on a Debian. To do this, we’ll need:

  • libtorrent-0.13.2
  • rtorrent-0.9.2
  • rutorrent-3.4 Web UI & plugins-3.4

XML-RPC is a rem

ote procedure call (RPC) protocol which uses XML to encode its calls and HTTP as a transport mechanism. “XML-RPC” also refers generically to the use of XML for remote procedure call, independently of the specific protocol

Ok we will start:



Install this software from aptitude:

# apt-get update
# apt-get install subversion build-essential automake libtool libcppunit-dev libcurl3-dev libsigc++-2.0-dev unzip unrar-free curl libncurses-dev
# apt-get install apache2 php5 php5-cli php5-curl

Enable scgi for Apache:

# apt-get install libapache2-mod-scgi
# ln -s /etc/apache2/mods-available/scgi.load /etc/apache2/mods-enabled/scgi.load

Install screen:

# apt-get install screen


Ok, create a directory that we will use to download and install all the software

# mkdir /install;cd /install

Now with the subversion client obtain the last xmlrpc stable version and install it:

# svn checkout
# cd stable/
# ./configure --disable-cplusplus
# make
# make install



Before install rtorrent we’ll need the rtorrent library packages:

# cd /install
# wget
# tar xvfz libtorrent-0.13.2.tar.gz
# cd libtorrent-0.13.2/
# ./
# ./configure
# make
# make install


Now install the rtorrent client:

# cd /install
# wget
# tar xvfz rtorrent-0.9.3.tar.g
# cd rtorrent-0.9.2
# ./
# ./configure --with-xmlrpc-c
# make
# make install
# ldconfig

 Rtorrent User

I created a new user called seed1 who will run the rtorrent software:

useradd seed1
passwd seed1

Now I change his default home directory, I put it in other partition:

Edit /etc/passwd


Now create the directories that rtorrent be will need to run:

mkdir /usr/local/etc2/seed1
mkdir /usr/local/etc2/seed1/.session
mkdir /usr/local/etc2/seed1/watch
mkdir /usr/local/etc2/seed1/download
mkdir /usr/local/etc2/seed1/temp
chown -R seed1.seed1 /usr/local/etc2/seed1

.session –> The running session torrents
watch –> Auto load torrent directory, if you put torrents here it will start automatically
download –> Finished torrent directory
temp –> Temporary directory, when torrent finished be will moved to dowload

Rtorrent Configuration

To run rtorrent we will need a configuration file like this. Download and put in the seed1 user HOME

su seed1

Edit the settings in .rtorrent.rc, like max upload/download speed, max connected peers, etc, as needed.
For example

# This is an example resource file for seeder1rent. Copy to
# ~/.seeder1rent.rc and enable/modify the options as needed. Remember to
# uncomment the options you wish to enable.
# Based on original .seeder1rent.rc file from
# Modified by Lemonberry for rtGui
# This assumes the following directory structure:
# /Torrents/Downloading - temporaray location for torrents while downloading (see "directory")
# /Torrents/Complete - Torrents are moved here when complete (see "on_finished")
# /Torrents/TorrentFiles/Auto - The 'autoload' directory for seeder1rent to use.  Place a file
#           in here, and seeder1rent loads it #automatically.  (see "schedule = watch_directory")
# /Torrents/Downloading/seeder1rent.session - for storing seeder1rent session information

# Maximum and minimum number of peers to connect to per torrent.
#min_peers = 40
#max_peers = 250

# Same as above but for seeding completed torrents (-1 = same as downloading)
min_peers_seed = -1
max_peers_seed = -1

# Maximum number of simultanious uploads per torrent.
max_uploads = 50

# Global upload and download rate in KiB. "0" for unlimited.
download_rate = 0
upload_rate = 0

# Default directory to save the downloaded torrents.
directory = /usr/local/etc2/seed1/temp/

# Default session directory. Make sure you don't run multiple instance
# of seeder1rent using the same session directory. Perhaps using a
# relative path?
session = /usr/local/etc2/seed1/.session

# Watch a directory for new torrents, and stop those that have been
# deleted.
#schedule = watch_directory,5,5,load_start=/home/seeder1/rtorrent/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

# When the torrent finishes, it executes "mv -n  ~/Download/"
# and then sets the destination directory to "~/Download/". (0.7.7+)
#on_finished = move_complete,"execute=mv,-u,$d.get_base_path=,/usr/local/etc2/seed1/download/; d.set_directory=/usr/local/etc2/seed1/download/"
#Move after download finished - it WORKS

system.method.set_key =,move_complete,"execute=mv,-u,$d.get_base_path=,/usr/local/etc2/seed1/download/;d.set_directory=/usr/local/etc2/seed1/download/"

# The ip address reported to the tracker.
#ip =
#ip =

# The ip address the listening socket and outgoing connections is
# bound to.
#bind =
#bind =

# Port range to use for listening.
port_range = 55995-56000

# Start opening ports at a random position within the port range.
#port_random = yes

scgi_port =

# 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.
#use_udp_trackers = no

# Alternative calls to bind and ip that should handle dynamic ip's.
#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
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 = disable

# UDP port to use for DHT.
# dht_port = 6881

# Enable peer exchange (for torrents not marked private)
peer_exchange = no

# 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.
#hash_max_tries = 10

# Max number of files to keep open simultaniously.
#max_open_files = 128

# Number of sockets to simultaneously keep open.
#max_open_sockets = 

# Example of scheduling commands: Switch between two ip's every 5
# seconds.
#schedule = "ip_tick1,5,10,ip=torretta"
#schedule = "ip_tick2,10,10,ip=lampedusa"

# Remove a scheduled event.
#schedule_remove = "ip_tick1"


We have to make it start automatically, dowload this script and put it in /etc/init.d/rtorrent

# ls -l /etc/init.d/rtorrent
-rwxr-xr-x 1 root root 3000 2007-03-06 22:40 /etc/init.d/rtorrent

Refresh the system

# update-rc.d rtorrent defaults

Create the rtorrentInit.log:

# touch /var/log/rtorrentInit.log
# chown seed1.seed1 /var/log/rtorrentInit.log

Install rTorrent – WebUI

This is the Web User Interface to manage rutorrent:

# cd /install
# wget
# tar xvf rutorrent-3.0.tar.gz
# mv rutorrent /var/www


Now the plugins:

# wget
# tar xvf plugins-3.0.tar.gz
# mv plugins /var/www/rutorrent

Depreciated darkpal plugin

# rm -rf /var/www/rutorrent/plugins/darkpal

Change permissions

# chown -R www-data:www-data /var/www/rutorrent

Secure /rutorrent

Now secure the rutorrent web Interface:

# a2enmod ssl
# a2enmod auth_digest
# a2enmod scgi
# openssl req $@ -new -x509 -days 365 -nodes -out /etc/apache2/apache.pem -keyout /etc/apache2/apache.pem
# chmod 600 /etc/apache2/apache.pem
# htdigest -c /etc/apache2/passwords seedbox seed1

(Enter a password of your choice when prompted, you will use this to log in to the ruTorrent web UI.)

# cd /etc/apache2/sites-available/
# rm -rf default
# wget
# a2ensite default-ssl
# /etc/init.d/apache2 reload

Ok for finished start rutorrent and check if all it’s ok:

/etc/init.d/rtorrent start
Starting rtorrent: rtorrent.

You can now access ruTorrent at http://xx.xx.xx.xx/rutorrent/ (replace xx.xx with your server’s IP address). You should be greeted with a login prompt, where the username is “seed1” and the password is the one you set above in the “secure /rutorrent” section.

16 thoughts on “How to Install rTorrent/ruTorrent on Debian

  1. Hello,

    I try to move on finished, but nothing is moved.

    scgi_port =

    log.open_file = "rtorrent.log", (cat,/tmp/rtorrent.log.,(
    log.add_output = "debug", "rtorrent.log"

    max_uploads = 5

    download_rate = 1024
    upload_rate = 10

    directory = /mnt/md4/Download/Torrents/Incomplete/

    session = /mnt/md4/Download/Torrents/Session/

    schedule = watch_directory_1,5,10,"load_start=/mnt/md4/Download/Torrents/Watchdir/Others/*.torrent,d.set_custom1=/mnt/md4/Download/Torrents/Complete/Others/"
    schedule = watch_directory_2,5,10,"load_start=/mnt/md4/Download/Torrents/Watchdir/Movies/*.torrent,d.set_custom1=/mnt/md4/Download/Torrents/Complete/Movies/"
    schedule = watch_directory_3,5,10,"load_start=/mnt/md4/Download/Torrents/Watchdir/Series/*.torrent,d.set_custom1=/mnt/md4/Download/Torrents/Complete/Series/"

    system.method.set_key =,move_complete,"execute=mv,-u,$d.get_base_path=,$d.get_custom1=;d.set_directory=$d.get_custom1="

    port_range = 6891-6910

    encryption = allow_incoming,try_outgoing,enable_retry
    encoding_list = UTF-8

    what am I doing wrong?

    1. Try to put the full path, like this:

      system.method.set_key =,move_complete,”execute=mv,-u,$d.get_base_path=,/usr/local/etc2/seed1/download/;d.set_directory=/usr/local/etc2/seed1/download/”

      If it not work, other posibility is:

      on_finished = move_complete,”execute=mv,-u,$d.get_base_path=,/usr/local/etc2/seed1/download/;

  2. Hello,

    I followed your article but I am seeing an Apache Index (index of /rutorrent) page when I try to login using my credentials. WHat could this be? Thanks!

    1. Hello Dave, ensure that you have correctly installed this part of the article. And you have installed the default apache configuration from

      Install rTorrent – WebUI

  3. No connection to rTorrent. Check if it is really running. Check $scgi_port and $scgi_host settings in config.php and scgi_port in rTorrent configuration file. How to fix it?

    1. Ok, two things:
      1- Be sure that you defined the scgi_port in your .rtorrent.rc configuration file

      scgi_port =

      2- Like you can see in your “/var/www/rutorrent/conf/config.php” configuration file:

      $scgi_port = 5000;
      $scgi_host = “”;

  4. Nice Tut* cant dowload xmlrpc(repo moved) installing rtorrent you have a mistake: miss one line (# tar xvfz rtorrent-0.9.3.tar.gz)

Leave a Reply

Your email address will not be published. Required fields are marked *