This guide assumes you have already found a VPS provider and chosen and installed Debian or Ubuntu to your node.
ruTorrent BitTorrent Client
ruTorrent has quickly become the #1 go to front end / bitTorrent client for operating on seedboxes. It is extremely light weight, supports plugins with a strong development following and is extremely simple to use.
ruTorrent itself is actually just a front-end for rTorrent which is a console based bittorrent application. Although ruTorrent is not required for functionality, it certainly makes maintaining a seedbox 1000x easier with it’s slick web interface.
Install rTorrent to Your VPS
This guide assumes you already have a VPS and have installed a Debian based release to your server. I recommend Ubuntu 12.04 LTS for compatibility and long term support of security patches.
Login to your VPS. The following guide will need to be executed as root, so either modify the following commands to use sudo or switch to your super user account by entering:
In my tutorial I will be setting my seedbox up using the /var/www (public internet) folder. This is a basic design that assumes this is a single user seedbox and eliminates the need to do any web server configuration aside from the installs.
mkdir ~/install mkdir /var/www/files mkdir /var/www/watch mkdir /var/www/.temp chown -R www-data:www-data /var/www
Install / Update Pre-Requisites
apt-get update apt-get -y upgrade apt-get -y install apache2 apache2-utils autoconf build-essential ca-certificates comerr-dev libapache2-mod-php5 libcloog-ppl-dev libcppunit-dev libcurl3 libcurl4-openssl-dev libncurses5-dev ncurses-base ncurses-term libterm-readline-gnu-perl libsigc++-2.0-dev libssl-dev libtool libxml2-dev ntp openssl patch libperl-dev php5 php5-cli php5-dev php5-fpm php5-curl php5-geoip php5-mcrypt php5-xmlrpc pkg-config python-scgi dtach ssl-cert subversion zlib1g-dev pkg-config unzip htop irssi curl cfv nano unrar-free mediainfo libapache2-mod-scgi ln -s /etc/apache2/mods-available/scgi.load /etc/apache2/mods-enabled/scgi.load
Compile and Install XMLRPC from SVN Repositories
This is a communication framework which is required for ruTorrent to access rTorrent.
cd ~/install svn checkout http://svn.code.sf.net/p/xmlrpc-c/code/stable xmlrpc-c cd xmlrpc-c ./configure --disable-cplusplus make make install
Compile and Install libTorrent
This is the framework required for the rTorrent bittorrent client.
cd ~/install wget http://libtorrent.rakshasa.no/downloads/libtorrent-0.13.2.tar.gz tar xvf libtorrent-0.13.2.tar.gz cd libtorrent-0.13.2 ./autogen.sh ./configure make make install
Compile and Install rTorrent
Install rTorrent itself.
cd ~/install wget http://libtorrent.rakshasa.no/downloads/rtorrent-0.9.2.tar.gz tar xvf rtorrent-0.9.2.tar.gz cd rtorrent-0.9.2 ./autogen.sh ./configure --with-xmlrpc-c make make install ldconfig
rTorrent Configuration File
rTorrent requires a configuration file (.rtorrent.rc) to be added for the home directory of user running the application.
You will find this configuration file in it’s default form in your ~/install/rtorrent-0.9.2/doc/ folder. This however would require you to configure it manually. Instead, assuming you have followed our defaults here, simply copy and paste our .rtorrent.rc file into your home directory.
Paste the following:
# Configuration file created for www.filesharingguides.com for single user rutorrent seedbox # Maximum and minimum number of peers to connect to per torrent. # min_peers = 25 max_peers = 100 # 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 = 100 # Global upload and download rate in KiB. "0" for unlimited. download_rate = 0 upload_rate = 0 # Default directory to save the downloaded torrents. directory = /var/www/files # Default session directory. Make sure you don't run multiple instance # of rtorrent using the same session directory. Perhaps using a # relative path? session = /var/www/.temp # Watch a directory for new torrents, and stop those that have been # deleted. schedule = watch_directory,5,5,load_start=/var/www/watch/*.torrent schedule = untied_directory,5,5,stop_untied= # Close torrents when diskspace is low. schedule = low_diskspace,5,60,close_low_diskspace=100M # 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. #use_udp_trackers = yes # 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 scgi_port = 127.0.0.1:5000
Test & Run rTorrent
First off, lets run rTorrent straight from the console and ensure it launches without errors.
If successful our terminal should look something like:
Press ctrl-q to get out of this screen.
Now, with it up on our screen we can’t really do much so this isn’t a great way to run it. Instead we’ll use a screen instance to run rTorrent in the background of our server.
That should start a fresh shell login for us, and issue the rtorrent command as per above again. Once rtorrent comes up we can detatch from our Screen session via “ctrl-a” (action), then press “d” (detatch).
The backend installation is complete. Now…
Install ruTorrent to Your VPS
Next we download the Web UI packages, as well as a set of plugins and install them to our web server.
For my seedbox I will be installing rutorrent right at the root of my web server, but you could alter the commands below if you would prefer this in a sub-directory. In a later guide I will go over creating user slots and using multiple instances of ruTorrent/rTorrent per user.
cd ~/install wget http://rutorrent.googlecode.com/files/rutorrent-3.5.tar.gz tar xvf rutorrent-3.5.tar.gz mv rutorrent /var/www wget http://rutorrent.googlecode.com/files/plugins-3.5.tar.gz tar xvf plugins-3.5.tar.gz mv plugins /var/www/rutorrent mv /var/www/rutorrent/* /var/www chown -R www-data:www-data /var/www/rutorrent
That’s all, it is installed! Now let’s access ruTorrent by visiting it in our browser and running a test file through!
ruTorrent doesn’t have any built in authentication so let’s create an .htaccess and .htpasswd file for our server to lock the directory down.
First, we’ll need to ensure our server obeys .htaccess files.
Find where it says “AllowOverride None” under /var/www and change it to “AllowOverride All”
Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all
Now we can create our .htaccess file
Paste this code in
AuthType Basic AuthName "Protected Area" AuthUserFile /var/passwd/.htpasswd Require valid-user
Make sure our new file is accessible by www-data group.
chown -R www-data:www-data /var/www/.htaccess
Now we need a password file. We can do this with Apache’s htpasswd utility. Enter the following commands to create a www-data accessible directory to store our passwords and then create a password file. Input your user’s password when requested.
mkdir /var/passwd htpasswd -c /var/passwd/.htpasswd testuser chown -R www-data:www-data /var/passwd
Test to confirm working!
Run On Boot
You probably don’t want to have to worry about running rtorrent in screen everytime your system needs a reboot. We can implement a really simple fix for this by using the rc.local script to run our screen process on boot.
You should see some code already in there, but most likely all comments if you are have not already touched the file otherwise. Make sure to leave the header of the file in tact and add this command to the bottom, but before the exit 0.
screen -S rtorrent -d -m rtorrent
Try a reboot and confirm working.