Installing rtorrent and rutorrent web interface on a Debian 6 system

Here is how to install rtorrent and the rutorrent web interface (password protected) on a Debian 6 system.

We need to install some packages first

apt-get install subversion apache2 libapache2-mod-scgi php5 php5-cli php5-cgi php5-curl mktorrent unrar unzip php5-geoip curl libncurses5-dev pkg-config libcurl4-openssl-dev libsigc++-2.0-dev libterm-readline-gnu-perl automake libapache2-mod-php5 php5-xmlrpc libtool libcppunit-dev

Install XMLRPC to enable rtorrent and rutorrent to work together – These commands should be run using sudo or a root account

mkdir /install
cd /install
svn checkout http://xmlrpc-c.svn.sourceforge.net/svnroot/xmlrpc-c/stable xmlrpc-c
cd xmlrpc-c
./configure
make
make install

Compile the latest Libtorrent version – Again run these commands with privileges

cd /install
wget http://libtorrent.rakshasa.no/downloads/libtorrent-0.13.2.tar.gz
tar xzvf libtorrent-0.13.2.tar.gz
cd libtorrent-0.13.2
./autogen.sh
./configure
make
make install

Compile rtorrent

wget http://libtorrent.rakshasa.no/downloads/rtorrent-0.9.2.tar.gz
tar xzvf rtorrent-0.9.2.tar.gz
cd rtorrent-0.9.2
./autogen.sh
./configure --with-xmlrpc-c
make
make install
ldconfig

Now we must place the rtorrent configuration file in our home directory. Get out of root if you are in so and in the home directory of the user that you want to run rutorrent from, using nano or your other favourite editor, paste the following into a file called .rtorrent.rc.

    Make sure to read through and change /home/user/folder to the location of your homefolder!

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

# Default directory to save the downloaded torrents.
directory = /home/user/download

# Default session directory. Make sure you don’t run multiple instance
# of rtorrent using the same session directory. Perhaps using a
# relative path?
session = /home/user/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

# 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 = 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 = 56500-56510

# 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
scgi_port = 127.0.0.1:5000 Continue reading

Installing GCC compiler on OSX Lion

If you’re like me and tried to compile an application from source on your mac, you probably received an error saying you had no C compiler installed. By default OSX Lion does not come with one installed, so we are going to install GCC which will allow us to compile our program.

The most straight forward way to do this:

1. Download and install Apple’s XCode. This should link you to the Mac App store and you can install XCode from there very easily.
2. Now that XCode is installed: Open it up. Click XCode -> Preferences -> Downloads tab -> Click install ‘Command Line Tools’. This will install, among other things, the GCC compiler.

And that is it. You can now compile from source!

Tips on logging an IRC channel

There are many reasons why you may want to log an IRC channel. Perhaps you want to record conversation, for later viewing, or use it to generate statistics. While this post will hopefully cover the basic ideas, it is by no means a tutorial on how to set things up. That will come at a later stage.

The first thing to consider is, how important is logging the IRC channel to you?
Do you need it logged 24/7?

The Eggdrop route…

If you are after a 24/7 solution, then you might want to consider setting up an Eggdrop Bot, which is an open source IRC bot which is very flexible and easy to use. To run this, you could use a cheap VPS or a shell account.

  • A shell account is essentially a limited access account, to a server, connecting using SSH or telnet.
  • A VPS is much different, it is a Virtual Private Server. Giving you root access of a virtualised system.

Advantages of an Eggdrop Bot:
+Very stable, expect great uptime.
+Highly configurable – Includes many great options to choose what is logged and what is not.
+Load TCL scripts to protect your channel, manage user privileges, etc.
+Great community support and documentation (Oldest IRC bot still in development, with a great community)

Disadvantages:
-Steep learning curve for beginners (No GUI)

If you are serious about archiving your channel chat, then I would highly recommend an Eggdrop Bot. The advantages highly outweigh the minor disadvantage for new users.

Example Logfile:

[00:42] h1ll37: yeah it screwed up the bootloader of TinyXP >< [00:42] -Dajori- Eventyret from [00:42] -m4t- hey, is there a preferred way to switch versions of gcc? eg. from 4.4 to 4.5? [00:42] -GH9897969x987l- hi all [00:42] -Eventyret- Dajori: ? [00:42] -m4t- switch the symlinks in /usr/bin over

Please note that the usernames are wrapped in ‘< >‘ characters in the logfiles, not ‘-‘. The page doesn’t seem to like the ‘< >‘ characters.

The client route…

If you are not so worried about not having 24/7 logfiles, and not having to worry about an Eggdrop Bot then I would recommend you log using your existing IRC client.

XChat is a great client, which has the option to create logfiles of the channels you are on, found in the settings menu. By default it will just create one large log file per channel, however you can change the logfile settings, to rotate the logfiles more often. See http://xchat.org/faq/#q223 for more info.

Advantages:
+Easy to setup and use.
+Quite configurable.

Disadvantages:
-Don’t expect great uptimes.

Example logfile output:

Oct 06 17:28:49 -delarue- mordy; packets are 1444 bytes; the funny thing though is that I can see them on both sides with tcpdump.
Oct 06 17:29:18 -delarue- so that would suggest against MTU .. I would think.
Oct 06 17:29:54 -delarue- I thought it must be config problem on the receive side until I tried the same config under kvm and the IPSEC works just fine ..
Oct 06 17:30:01 -mordy- try setting your MTU a bit lower, see what happens
Oct 06 17:30:03 -lulzfish_4- Linux-CLI: strange… what distro is that, again?

Please note that the usernames are wrapped in ‘< >‘ characters in the logfiles, not ‘-‘. The page doesn’t seem to like the ‘< >‘ characters.

Final thoughts…

At the end of the day, it is really up to you which option of logging you choose. There are many other clients and bots, which can achieve the logging effect, however personally I think that Eggdrop and xChat are two good ways to log your channels.

Location of xChat logfiles

I just wanted to document this for other people that may have this annoying query in the future.

There is not much information about where xChat and X-Chat Aqua store their logfiles!

The location of the logfiles is

~/.xchat2/xchatlogs/ where ~/ is the location of your home folder.

The .xchat2 folder is indeed hidden, which made it tricky to first locate.

On the older versions of X-Chat Aqua on Mac, the logfiles were stored in
~/Library/Application Support/X-Chat Aqua/xchatlogs

Running scripts in background

I recently came across this problem when experimenting with the PieSpy Bot.

It uses a sh script to launch a java command within, however the output, and subsequent display, stays attached. As soon as I exited the SSH session the processes is killed!

There is a simple solution. We must run it in the background. This also works with many other things that need to be launched into the background

To launch the script we are running sh ./run.sh Instead, put an & on the end of the command, so the new command will look like sh ./run.sh & This will run the process in the background!

As I mentioned above, this solution applies to not just sh scripts. The PieSpy Bot uses the sh script to launch a java command. So if we open up the sh script it has the code

java -Djava.awt.headless=true -classpath .:./lib/pircbot.jar org.jibble.socnet.SocialNetworkBot ./config.ini

Once again, we put the & on the end of the command and it will launch into the background

java -Djava.awt.headless=true -classpath .:./lib/pircbot.jar org.jibble.socnet.SocialNetworkBot ./config.ini &

Adding users to sudoers list in Debian/Ubuntu

When setting up a new system, or adding new user accounts. You may find that you receive this message when using the sudo command.

username not in the sudoers file. This incident will be reported.

There is a simple solution. We must add the user account to the sudoers file.

Note: You must be logged into the root account, or already have sudo access to run this command.

Open up Terminal or SSH and type:

sudo adduser username sudo

Replace username with the account that you would like to have sudo access.

The account should now has sudo access.