Case in point: An rtorrent slave setup

Edit: Unfortunately, the images originally included in this post are gone, because of hosting problems in late 2009. My apologies.

With two wounded laptops lying around the house, and no real prospects for fixing either one of them in the near future, I decided it was time to take my own advice, and I’ve set up the battered Thinkpad as a torrent slave for my Inspiron. I suggested this setup about a year ago (as well as some other ideas), when I described a cool way to set up rtorrent, and since I have the system working and in place now, I thought I would share the nitty-gritty.

I built this with both machines running Arch, mostly for ease and speed of setup. Ubuntu and Crux will both work just as well, but for my own case I wanted to be able to build and install stuff as quickly as possible, so Arch was ideal for me. (Let’s face it, pacman makes aptitude look ridiculously slow. 😈 )

I’ll explain the situation, since it is pertinent: The main laptop, the Inspiron, has a 120Gb modular drive that I use to hold files, packages, software, notes, and so forth. The main drive in the Inspiron is a faster, but smaller 60Gb drive that serves as a system drive and standard /home directory. With that arrangement, I can dump files into the modular drive when I feel I need to save them, and not worry about system rebuilds or drive crashes. I’m free to play around.

The Thinkpad has a single drive in it, and it’s neither fast nor big — a lousy 4200rpm 20Gb IBM-DJSA-220. Regardless, all of the files I download need to be shifted back to the Inspiron when they’re done.

For that reason, I actually have two shared directories listed in the client’s /etc/fstab — the download directory on my Inspiron system drive, and a temporary directory on the modular drive. When a torrent file is downloaded it is dropped in the download directory, but when the Thinkpad saves information, it sends it back across the network to the modular drive.

The Thinkpad uses its own $HOME/download directory as a session directory, and that’s what’s defined in .rtorrent.rc. The Inspiron’s download directory is mounted to $HOME/watch on the Thinkpad, and that’s how it knows what torrents are in queue.

NFS handles the transfers, of course. Both machines are wired directly into my proprietary router, and there is no access to the wireless system. I did that on purpose; I don’t care to share any of my drives with the local populace (which would probably be unlikely anyway, but that’s beside the point). πŸ˜‰

These aren’t much in the way of screenshots, but hopefully they’ll give you an idea of the arrangement. Here’s the host machine, the Inspiron, with the torrent in the download directory and the target file stashed on the modular drive.

Of course, the size of that file is reported as if it had already been downloaded in full; it has, in fact, only been downloading a few minutes, as this screenshot from the client machine, the Thinkpad, shows.

The lower half of the screen is shattered, which is why I don’t have anything there. There’s nothing installed on the client aside from X, Openbox, Sakura, rtorrent, elinks and few other maintenance programs. There’s not much point in installing a whole lot on this machine, since I can’t see what most of it does.

Here’s the sessions folder — the $HOME/downloads folder on the client. You can see the temporary files here that rtorrent creates.

On the left side is the symbolic link to the modular drive on the opposite machine, plus the $HOME/watch folder, which is ratcheted to the $HOME/downloads folder on the Inspiron. The contents of $HOME/watch are the same as $HOME/downloads in the first screenshot.

And that’s about all it takes. As soon as a *.torrent file appears in the watch directory, rtorrent starts working on it, sending periodic bursts to the modular drive on the host machine. Memory caching takes the brunt of the read-writes as far as I can tell, so there’s not a continual stream of traffic between the two computers, as you might expect.

You could change that if you want. I originally set up the Thinkpad with all the action isolated on that one machine, but I decided I would rather have them run in syncopation. If you prefer you can move files manually to their destination; I have a hard time seeing what is going on, so I prefer to have the file automagically transferred. The downside is that both machines need to be working to complete the arrangement. (It’s also worth noting that I can download a torrent on the client machine, add it to rtorrent manually, and the file is automatically sent to the modular drive.)

Any questions? Of course there are. Here are the configuration files for /etc/exports on the host, and /etc/fstab and .rtorrent.rc on the client. Setting up your network and NFS on each machine is your responsibility. For ease of use, I strongly recommend taking a look at the Arch Linux wiki page on NFS, which has never let me down. πŸ˜‰

Host: /etc/exports

# /etc/exports
# See exports(5) for a description.

# use exportfs -arv to reread


Client: /etc/fstab

# /etc/fstab: static file system information
# <file system>        <dir>         <type>    <options>          <dump> <pass>
none                   /dev/pts      devpts    defaults            0      0
none                   /dev/shm      tmpfs     defaults            0      0

/dev/cdrom /media/cdrom   auto    ro,user,noauto,unhide   0      0
/dev/hda4 /home ext2 defaults,noatime 0 1
/dev/hda2 swap swap defaults 0 0
/dev/hda1 /boot ext2 defaults,noatime 0 1
/dev/hda3 / ext2 defaults,noatime 0 1

/dev/sda1 /media/usbdisk vfat noauto,users 0 0

192.168.xx.xx:/media/modular /media/modular nfs noauto,users 0 0
192.168.xx.xx:/home/kmandla/downloads /home/kmandla/watch nfs noauto,users 0 0

Note that those are elective mountpoints, not established at boot. I want the option to run one machine or both without the connection, so I mount them manually, before starting the pair in tandem.

Client: .rtorrent.rc

# This is an example resource file for rTorrent. Copy to
# ~/.rtorrent.rc and enable/modify the options as needed. Remember to
# uncomment the options you wish to enable.

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

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

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

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

# Default directory to save the downloaded torrents.
directory = ./modular/hold

# Default session directory. Make sure you don't run multiple instance
# of rtorrent using the same session directory. Perhaps using a
# relative path?
session = ./downloads

# 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

# 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"

# 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 = 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 = auto

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

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

# 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

Of course, there are a thousand ways to arrange this, and mine is not necessarily the best. If you have a different style that’s worth sharing, comment away. πŸ™‚


23 thoughts on “Case in point: An rtorrent slave setup

  1. Pingback: Howto: Use rtorrent like a pro « Motho ke motho ka botho

  2. jbullfrog

    I have a very similar set up on my network that was actually inspired by your initial rtorrent post!

    Try running rtorrent within a screen session. Whenever you want to check on rtorrent’s progress, ssh into that machine and connect to the screen session that rtorrent is running on. You’ll never have to look at that busted laptop screen again πŸ™‚

    screen is such a useful tool on older (or headless) machines. running processes within screen sessions has proved invaluable…

  3. Kameleon

    I too took the original post on rtorrent and ran with it. I have a small machine dedicated to rtorrent. The only things I have on this machine are privoxy, rtorrent, and moblock. I run this machine headless and do the “screen” method. I must say this beats the pants off of wasting resources with a GUI torrent client.

  4. Pingback: Role reversal « Motho ke motho ka botho

  5. Pingback: Things to do with an old computer « Motho ke motho ka botho

  6. Paul

    long time listener, first time caller.

    i am looking for a linux client that uses tor to encrypt tracker traffic. any idea if / how rtorrent would perform that?

    good blog.


  7. Bink

    Been doing this for a while now (before you were)! I have an old laptop that I use for my firewall and, of course, it runs rtorrent as well.

    rtorrent + screen + ssh = bliss

  8. Pingback: Some minor improvements « Motho ke motho ka botho

  9. Pingback: A really bad idea « Motho ke motho ka botho

  10. Pingback: I must’ve done something right, for a change « Motho ke motho ka botho

  11. Pingback: I wish I had … « Motho ke motho ka botho

  12. Gongolo Orphan Rothschild

    Paul, listen: TOR is for people, who need anonymity on the net because their gevrnment will kill them or stuff like this. Stealing TOR bandwith just for downoading some movies or porn or warez stuff is a m,isuse of the TOR network. use a proxy server in another country instead, that is easy to setup with ssh -D – but leave the TOR network free from torrent traffic! As long as criminal warchiefs are dominating the world, we need TOR to fight babylon, not to collect moviez.

  13. Pingback: From ati to mach64 « Motho ke motho ka botho

  14. Pingback: fttps: A command-line download manager « Motho ke motho ka botho

  15. the one with qwertz keyboard

    I use a NSLU2 with a 750GB external Harddrive.
    its running a debian 4.0, on a 266Mhz ARM CPU with 32MB RAM.
    Installed on a 4GB Sandisk USB Stick.

  16. Pingback: Case in point: rtorrent slave at 100Mhz 16Mb 810Mb « Motho ke motho ka botho

  17. Pingback: Tripartite, and only 750Mhz too « Motho ke motho ka botho

  18. Pingback: The prodigal son returns « Motho ke motho ka botho

  19. Pingback: The coolest tools in the box « Motho ke motho ka botho

  20. Pingback: Howto: rsync a system between drives « Motho ke motho ka botho

  21. captain

    I’m most curious about your proprietary router! How do you isolate wi-fi traffic from your LAN, but still allow access to the Internet? If you ssh to your headless box from a laptop do you have to go out through the router, around the Internet, and then back in through the firewall to get there, or is there some secret trick to allowing certain pass-through from wi-fi to LAN?

    It would be nice to open up a wi-fi again, just to be a good citizen for passers by, but without giving my neighbors full access to my NFS shares! πŸ˜›

  22. Pingback: Need a lightweight live distro for a special job

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s