HOWTO: Building an X-less Azureus Dedicated Box using Fedora

Do you have an old unused box sitting still in the storage without nothing useful to do with it?. Are you a heavy torrent'er? Are you tired of torrent (especially Azureus) eating up your personal computer resources and makes everything goes slow?. This Howto will guide you in converting that unused box of your into something useful - An advanced dedicated Azureus torrent box controlled through SSH and web-based interface!!.

First and foremost, there are a few issues I would like to highlight.
- This guide is not targeted for a total newbie, however, I wont stop newbies to try it. Its a good learning experience
- Azureus requires Java, and Java eats resources more. So, you'll need a box with around 200Mhz processor with more than 128MB RAM
- The webUI of Azureus is a simple UI for starting/stopping downloads and uploading .torrent files, we will depend mostly on the TelnetUI for adjusting configurations
- Don't use the java that provided together with Fedora (GCJ) , because it eats more system resources. Use Sun's JRE.
- English is not my first language. Pardon me if theres mistakes all over the place.

I believe some of you have heard about Torrentflux web based torrent client. Why I didn't choose it for this guide? Well, my answer is, Torrentflux is not advanced enough. One of its major disadvantage is the unavailability of encryption. At my place, the largest and cheapest ISP which monopolize the market shape torrent traffic. Therefore, I needed the encryption support for my torrents.

Now, lets start hackin'

Step 1 : Installing The OS
Firstly of course, we need to install the OS. In this case, Fedora. The main point here is to install Fedora with the least packages, and without the Xserver. You also need to do some proper partitioning of the harddisk to give space for your downloads. My suggestion of a partitioning scheme is like this

2-4GB partition for /
A swap partition (people usually suggest the swap size is 2*(your RAM) and no bigger than 1GB)
A partition as big as you can for /mnt/torrentdownload/

During the package selection, unselect GNOME, KDE, X11, and anything related to GUI. SSH server is a must, don't unselect it. crond is aslo needed. To save you from future trouble and for future customization, I recommend installing the development packages and text-based internet applications.

Set up the networking and allow SSH through the firewall. I would also recommend disabling SElinux because it might sometimes causes weird errors with some applications (If you're sure what you're doing, its okay to enable it). And lets assume the computer thats going to become the dedicated box is using IP

After installation and reboot, you'll be greeted with a terminal login screen. Login as root and proceed to next step. You can also login remotely through SSH (or for windows users - puTTY)

Step 2 : Installing Sun JRE and Azureus

As I was saying, the GCJ eats resources a lot (at least that what I experienced with it). So, you will need to install Sun's JRE. Install the Sun JRE following this FedoraSolved guide.

Now is to install Azureus. There exist a package for Azureus in Fedora Extras, but I personaly prefer installing from the official Azureus tarball from Azureus's website. So, I'll will guide through its installation and setting up based on the Azureus tarball. You can just simply
yum install azureus
but you might need to modify some of the steps below in order to make it to work for this purpose.

First, create a new user with the name "azureus" and set a password for the user.
adduser azureus
passwd azureus
Switch to the user
su - azureus

From a different computer, get the latest Azureus linux tarball here. SCP it to the box using the scp command (assuming you download the tarball in the home folder)
scp ~/Azureus_2.5.0.0_linux.tar.bz2 azureus@

For Windows user, you can copy the tarball to the box using WinSCP

Back to the box. Untar the azureus tarball and change into the directory
cd /home/azureus/ #just in case
tar xvf Azureus_2.5.0.0_linux.tar.bz2
cd azureus

Back to the different computer, goto this page and download commons-cli.jar and log4j.jar. Those two files are required for console/telnet UI to work. Then, SCP it into the extracted azureus folder.
scp ~/commons-cli.jar ~/log4j.jar azureus@

To the box again, create a file named and a file named in /home/azureus/azureus/ . The content of the files are
===== =====

use POSIX 'setsid';
open STDIN, "/dev/null";
open STDOUT,">/dev/null";
open STDERR,">/dev/null";
exit if fork > 0;
exec("java -jar Azureus2.jar --ui=telnet");

==== ====
# this script will check whether azureus is running
# or not and start it if it doesnt

UP=`ps ax|grep Azureus|grep -v "grep " -c`
if [ "$UP" == "0" ];then
cd /home/azureus/azureus

Set execute permission for both scripts
 chmod +x

Now , technically, Azureus have been installed and can be run directly by executing the You can test whether it has run or not by
telnet localhost 57006
to enter the telnetUI. Type "help" in the telnet session for help on how to use the telnetUI. For starter, lets set the default download path and the listening port for Azureus using the telnetUI.
set General_sDefaultSave_Directory /mnt/torrentdownload/
set Core_iTCPListenPort 31234
set UDP.Listen.Port 31234

Exit the telnetUI by typing "logout". Kill the azureus process for now. 
kill `ps ax|grep Azureus2|grep -v "grep"|awk '{print $1}'`

Now, get the AzhtmlUI plugin from here and SCP it to the box.
 scp ~/azhtmlwebui_0.7.2.jar azureus@ 

Create a directory named azhtmlwebui in the plugins directory and move the plugin file there.
mkdir -p /home/azureus/azureus/plugins/azhtmlwebui
mv ~/azhtmlwebui_0.7.2.jar /home/azureus/azureus/plugins/azhtmlwebui/
lets disable firewall for now to test the htmlUI
 su -c '/sbin/service iptables stop' 

Now run azureus and from a different computer , open a web browser and test the htmlUI by opening . If the htmlUI running, you have successfully installed azureus. And don't forget to chmod /mnt/torrentdownload/ to 755 to allow users to write into it.
 chmod 755 /mnt/torrentdownload/

Finally, is to set a the cronjob for checking whether azureus is running or not and start it if it doesn't. The technique is simple. Just run
 cron -e 
and add this line into the cron task list
 * * * * * /home/azureus/azureus/ 
Some of you might be asking why I didn't use an init script for this?. My reason is, if just somehow azureus crashed, it will be restarted automatically.

Alternative to set the configs
Some people might sees Azureus is pretty hard to be set through telnetUI. You can, as an alternative, use Xnest to run a remote X server and let Azureus' GUI rendered there.

Install Xnest in a computer that have X installed, disable firewall for a while and start it using
 Xnest -ac :1 

Then, at the Xless box, export the DISPLAY variable pointing to the remote Xnest in this case, we assume the IP is
export DISPLAY=

Start Azureus by executing the provided azureus startup script from the tarball and the display will be redirected to the remote Xnest. You can set the options easier this way.

Step 3 (optional): Set Apache to host the downloaded files through HTTP

This step is easy if you only want to host the files. Install apache by running this command
 yum install httpd 
or installing it beforehand during the OS installation.

Then, create a symlink in /var/www/html/ that points to /mnt/torrentdownload/
 cd /var/www/html/
ln -s /mnt/torrentdownload/ files

Start apache by running
/sbin/service httpd start

You can set apache to start on boot by running
chkconfig httpd on

If everything is done correctly, you can enter the directory listing by pointing your web browser to

Step 4 (optional): Set up apache mod_proxy to open the htmlUI through apache

You might want to redirect the AzhtmlUI to be displayed at . It is easy to do that using Apache. Edit your /etc/httpd/conf/httpd.conf and add these lines at the end of the config
ProxyRequests Off

ProxyPass /azureus/
ProxyPassReverse /azureus/

Restart apache and you're done. However, this method have a little bug. You MUST add the trailing slash at the end to enter the redirected page. will not work properly but will.

Step 5: Firewall
Last by not least, the firewall. You can choose to disable firewall altogether if you want. But to those paranoids, you might want to turn it on.

You can set your firewall using system-config-securitylevel or using Webmin. For the hardcores, you can edit the firewall script directly at /etc/sysconfig/iptables . I'm not going to cover about setting up the firewall here, it might make this article too long. Basically, allow port 80/TCP, 22/TCP, and 31234(your azureus port)/TCP+UDP .

For those who uses a router, goto for guide on how to forward TCP/UDP ports for your router.


Your dedicated Azureus box is now up and running. This box, besides for torrenting, you can also modify it to provide other services, eg: file hosting, media server, etc. Let your imagination go wild and enjoy~

If any of you spotted any mistakes in the HOWTO, please inform me and I'll fix it.


Anonymous said…
Nice tutorial. I've been using Azureus this way on my home server for a while now. It's nice to be able to let others in my house use this rather than setting up port forwarding for each machine that wants to be able to use bit-torrent. I don't feel like it's a perfect solution yet as the command line and web interfaces could both use a bit of work. I'm glad you mentioned Xnest. That's something I'll have to try at some point. Your idea for having Apache host the files is pretty interesting as well. Up until now I've been using Samba and Netatalk to access them, but I may implement web hosting of them as well.
Anonymous said…
Thanks for the great guide!!

I have one problem - after a while torrents stop downloading. They start alright, but an hour or two in their download speed drops down to 0.0kbps.

They are still listed as "downloading", but they don't recieve data.

Any ideas?
Unknown said…
do your ISP capped torrent? (I know mine does - and it severe my ability to torrent because it made me depending purely on distributed db - tracker connections always got conn-reset ) ..

or it might just caused by tracker/peer's error ..
Unknown said…

My ISP doesn't cap torrents and what's weirder is that I can download the same files using torrentflux without any problems.

Sometimes I can "revive" the downloads by adding a new torrent and for some reason the others start receiving data.

I set up azureus logging, but the log files don't mention any notices or errors.

I'm really enjoying playing with azureus ui console and with web controls like "azureus on rails", but I think i'm going to have to go back to torrentflux (arrgg).

Anyway, thanks again for this great guide; was a joy to kill some time and learn some things.

- Craig
Anonymous said…
Concerning the (in)famous trailing slash problem for apache mod_prox, you can use mod_rewrite to force apache to add it :

RewriteEngine on
RewriteRule ^(.*)/bitto$ $1/bitto/ [R]

Popular posts from this blog

Announcing PlatoCDP, a Plone distribution for enterprises.

Adding simple popup to Plone frontpage

Consolidated community site infrastructure on Plone