This guide assumes you have already found a VPS provider and chosen and installed CentOS 6 or other RHEL release 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 a Web Server to Your VPS
This guide assumes you already have a VPS and have installed CentOS / RHEL to your server. I have written this guide using CentOS 6.5 and recommend this to ensure compatibility with the guide.
Start by installing a web server stack to your server using your preferred software. I will not be covering this in my guide. However, if you want assistance with this I suggest using VestaCP which I have created a short guide for. This will help you automatically install an Apache/Nginx stack and has a nice slick and minimal front end for managing your server.
Install rTorrent to Your VPS
Login to your VPS. The following guide will assume you are root.
Assuming we have followed my suggestion of installing VestaCP, go ahead and create a new user now as well as creating a domain you intend to use for the seedbox. This guide will follow the assumption that I have created a user named “seedbox” and a site called “seedbox.fsgdev.ml”.
Create a set of folders to host the torrents. We will need a download folder called “files”, a .torrent file watch folder called “watch”, and lastly a session or temp folder called “.session”.
cd /home/seedbox mkdir files mkdir watch mkdir .session chown -R seedbox:seedbox *
We’ll also want a directory for downloading our install files and compiling libtorrent & rtorrent.
cd ~ mkdir install
Install / Update Pre-Requisites
yum update yum -y groupinstall "Development tools" "Server Platform Development" && yum -y install cppunit-devel libsigc++20-devel.i686 libsigc++20-devel.x86_64 libcurl-devel xmlrpc-c-devel.i686 xmlrpc-c-devel.x86_64 openssl-devel ncurses-devel
Ensure Environment Variables Set for Compiling
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. You may want to tinker in settings afterwards but we can do that via ruTorrent graphically later on.
The config file will utilize the current users home directory so it is portable and will not require modifications for your chosen username.
Paste the following:
# Configuration file created for www.filesharingguides.com # 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 = ~/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 = ~/.session # Watch a directory for new torrents, and stop those that have been # deleted. 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 # 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. Remember to run it as your seedbox user!
su seedbox -c "rtorrent"
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.
screen su seedbox -c "rtorrent"
That should start a fresh shell login for us, and issue the rtorrent command as per above again. Once rtorrent comes up we can detach from our Screen session via “ctrl-a” (action), then press “d” (detach).
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 server, but you could alter the commands below if you would prefer this in a sub-directory. Of course, the following commands will need to be altered to ensure you are using your own user’s home directory and appropriate web folders.
cd ~/install wget http://rutorrent.googlecode.com/files/rutorrent-3.5.tar.gz tar xvf rutorrent-3.5.tar.gz mv rutorrent /home/seedbox/web/seedbox.fsgdev.ml/public_html wget http://rutorrent.googlecode.com/files/plugins-3.5.tar.gz tar xvf plugins-3.5.tar.gz mv plugins /home/seedbox/web/seedbox.fsgdev.ml/public_html/rutorrent mv /home/seedbox/web/seedbox.fsgdev.ml/public_html/rutorrent/* /home/seedbox/web/seedbox.fsgdev.ml/public_html rm -rf /home/seedbox/web/seedbox.fsgdev.ml/public_html/rutorrent chown -R seedbox:seedbox /home/seedbox/web/seedbox.fsgdev.ml
That’s all, it is installed! Let’s test it out:
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.
As we are using VestaCP I know that our server will obey .htaccess files, but if you built your own server you may need to make some configuration changes here first.
Once ready, we can create our .htaccess file
Paste this code in
AuthType Basic AuthName "Protected Area" AuthUserFile /home/seedbox/passwd/.seedbox Require valid-user
Make sure our new file is owned correctly.
chown -R seedbox:seedbox /home/seedbox/web/seedbox.fsgdev.ml
Now we need a password file. We can do this with Apache’s htpasswd utility. Enter the following commands to create an accessible directory to store our passwords and then create a password file. Input your user’s password when requested.
mkdir /home/seedbox/passwd htpasswd -c /home/seedbox/passwd/.seedbox [username] chown -R seedbox:seedbox /home/seedbox/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 su seedbox -c "rtorrent"
Try a reboot and confirm working.