Cheap VPS & Xen Server

Residential Proxy Network - Hourly & Monthly Packages

Ubuntu 10.10 LAN Torrent Seedbox With Avalanche-rt, Lighttpd, Rtorrent, Vsftpd And Samba


This tutorial is based on a LAN setup, but it should also be applicable for an Internet seedbox (e.g. on a vps or rootds), but some additional steps may need to be performed (firewall, securing rpc-mount, generally hardening of the server).

The best lightweight software combination for a seedbox is lighttpd with rtorrent/libtorrent and a nifty web interface. So we use avalanche-rt, an actively developed project which looks very promising.

System

First step is to install the distribution of your choice on your box. Use a minimal installation if possible. The rest of the steps are Ubuntu specific.

At the end of the installation choose the ssh-server as additional service which should be installed.

After the reboot, first thing we need to do, is to connect to the Internet (if not already).

If you, like me, use a laptop as your server, you may want or need to use a wireless connection to connect to the Internet. You can do this without a graphical interface with the neat tool wicd-curses, an ncurses frontend for wicd.

Get it with (obviously you need to be connected to the Internet to perform this step, so in most cases you need a wired connection for at least this step):

sudo apt-get install wicd-ncurses

Afterwards, you may have to manually start the wicd-daemon:

sudo /etc/init.d/wicd start

Then you should be able to use wicd-curses and connect to your wireless network. If you are connected, perform a system update:

sudo apt-get update && sudo apt-get upgrade

Next, we install some software which makes live a bit more easy:

sudo apt-get install htop mc pydf

htop lets you check you system, mc comes in kind handy when handling a lot of files and pydf gives you nice overview over the space left on your harddrive.

Let’s set up the seedbox:

 

Webserver

First step is to install lighttpd and php:

sudo apt-get install lighttpd php5-cgi php5-curl

Then we create a file to test if php is working:

sudo nano /var/www/phpinfo.php

Fill it with:

<?php
phpinfo();
?>

If you now go to

<yourip>/phpinfo.php

you will just see a 403 (Forbidden) error

So we have to set up php to work with lighttpd:

sudo nano /etc/php5/cgi/php.ini

Search (strg + w)) for

cgi.fix_pathinfo

and uncomment the line. Save and exit (strg + x).

Next, we configure lighttpd to use php5. Open lighttpd.conf

sudo nano /etc/lighttpd/lighttpd.conf

and add to the

server.modules

section (right at the beginning of the file)

"mod_fastcgi"

and at the end of the file the following:

fastcgi.server = ( ".php" => ((
                     "bin-path" => "/usr/bin/php5-cgi",
                     "socket" => "/tmp/php.socket"
                 )))

Then restart lighttpd:

sudo /etc/init.d/lighttpd restart

If we now go to

<yourip>/phpinfo.php

you should see some information about php.

 

rTorrent

Now we install more rtorrent and other needed software:

sudo apt-get install screen libtorrent11 rtorrent

Get the default-config for rtorrent (we’re in our home-directory now):

wget “http://libtorrent.rakshasa.no/export/1135/trunk/rtorrent/doc/rtorrent.rc”

and move it to the right location:

mv rtorrent.rc .rtorrent.rc

Create needed folders:

mkdir downloads
mkdir .session
mkdir torrents-watch
mkdir torrent-files

Next, edit .rtorrent.rc:

nano .rtorrent.rc

Look for

directory =

and uncomment it and change it to your needs (in our case: directory = /home/downloads/).

Next, search for

session

and uncomment it and change it to your needs (in our case: session = /home/.session/).

Go to the end of .rtorrent.rc an insert the following:

#SCGI Server
scgi_port = 127.0.0.1:5001

Save & exit nano (strg + x).

Now we can start rtorrent and check if scgi support is enabled:

rtorrent

You should see something like

“XMPLRPC initialized with 519 functions.”

Next step is to enable RPC with lighttpd:

sudo nano /etc/lighttpd/lighttpd.conf

Add to the

server.modules

section the following:

"mod_scgi"

and at the end of the file the following:

#SCGI Server
scgi.server = (
"/RPC2" =>
( "127.0.0.1" =>   (
"host" => "127.0.0.1",
"port" => 5001,
"check-local" => "disable"
)
)
)

and reload lighttpd:

sudo /etc/init.d/lighttpd restart

Because this is a LAN setup, we do not protect the RPC-mount with a username / password combination. You will find it on almost every other tutorial out there and you really should protect the RPC-mount-directory with a strong password if you intend to use your seedbox on a server exposed to the Internet. But in our case it is not necessary and just an additional point of failure.

So we now have rtorrent with xmlrpc enabled, and lighttpd with xmlrpc enabled. Now we need the avalanche-rt web interface.

Webinterface

Get it and untar it:

wget “http://avalanche-rt.googlecode.com/files/avalanche_rt_0_9_RC2.tar.gz”
mkdir avalanche
tar xzvf avalanche_rt_0_9_RC2.tar.gz -C avalanche/

Next, we move the content of the directory to our desired location (e.g. /var/www/webui or directly into the http-root):

sudo mv avalanche/* /var/www/

Now we need to edit the settings.php:

sudo nano /var/www/settings.php

Since we don’t use a user/pw combination for RPC-mount we can delete these two lines. Change the torrents_folder to the earlier created directory (/home/torrent/torrent-files to stay in the example). The server-port is not 5001! In most of the cases it is port 80 (everybody who needs another knows what he is doing).

Now we need to set the ownership and file right rights:

cd /var/www/
sudo chmod -R 775 torrents/
sudo chmod 664 prefs.json
sudo chown -R www-data:www-data *

Basically we’re done. We’ve set up rtorrent for xmlrpc, lighttpd for xmlrpc, and the web interface.

Next start a new screen…

screen

and execute rtorrent:

rtorrent

You can detach the screen window now (strg + a + d). rtorrent is now running in the background. You can get back into your screen with:

screen -RD

Next restart lighttpd:

sudo /etc/init.d/lighttpd restart

(This step might not be necessary, but I made the experience that this often helps when rtorrent and lighttpd can’t communicate, so it doesn’t hurt if you do it.)

Now you should be able to log in the avalanche-rt web interface via your web-browser.

If everything is running fine and avalanche-rt is not giving you an error message, try a torrent (e.g.http://releases.ubuntu.com/maverick/ubuntu-10.10-server-i386.iso.torrent) – it should download now.

If you get an error, avalanche-rt has a good common-errors-list available at http://code.google.com/p/avalanche-rt/wiki/CommonErrors, but if you followed these steps, none should occur.

Basically we are done. Now it’s time for some rtorrent tuning, which is all done in the .rtorrent.rc. You can e.g. set a watch-folder in which you can upload torrents which will started automatically through rtorrent, set the port for your incoming bittorrent connections (if you use just one port write it nevertheless in port range style, e.g. 12345-12345 will open just port 12345), enable / disable dht and pex, set download limits, etc. rtorrent is very powerful.

After you saved your settings, restart rtorrent and afterwards lighttpd one last time.

Next we need a way to access the data stored on our seedbox.

Therefore we install vsftpd, a secure and simple ftp-daemon.

 

VSFTPD

sudo apt-get install vsftpd
sudo nano /etc/vsftpd.conf

We just need to uncomment / change the following lines:

locale_enable=yes
write_enable=yes
chroot_local_user=yes

Now we are able to upload torrents to our watch-folder via ftp. We can also access all needed directories via ftp, since they are all located in the home-dir of the user (the ftp user is our user we are logged in with at the server). For an Internet setup you might consider a different, more secure user-management (ftp-user without login-shell) with additional encryption of the connection.

When finished, save and exit the file and restart vsftpd:

sudo restart vsftpd

That’s it for the ftp part.

To be able to access the downloads via a Windows machine we install Samba. We configure Samba readonly so we can’t accidentally delete files.

 

Samba

sudo apt-get install samba

Edit config:

sudo nano /etc/samba/smb.conf

Comment out the printers section if you want and create your share:

[incoming]
path = /home/torrent/downloads
guest ok = no
writeable = no

Restart samba-daemon:

sudo restart smbd

Now we’re adding a user without login and shell for the samba-login:

sudo adduser –no-create-home –disabled-login –shell /bin/false username

Add the samba-user (both usernames have to be the same):

sudo smbpasswd -a username

Set a password:

sudo smbpasswd share

You are now able to access you seedbox via Windows network with the username/password you set.

Enjoy your new torrent-seedbox.

Comments

comments