Bittorrent tracker – Debian Lenny

This how to is show how I have set up the program Bittorrent to run as a tracker. There are three configuration files. The first file /etc/default/bt-tracker which is where the program variables are set. The second file /etc/init.d/bt-tracker.sh is to start and stop the program bttrack.bittorrent and the third file /etc/logrotate.d/bttrack that is the configuration file for logrotate, which looks after bttrack logs. All so I have added a system user named tracker to give more control and security.

I would run the tracker from the bittornado package but there is a bug with the bttrack part of the program. So I run the tracker from the original bittorrent package.

sudo aptitude install bittorrent

Now to add a system user named tracker

sudo adduser --system --home /var/local/lib/bttrack-sandbox
--shell /bin/sh --group --disabled-login tracker

Then add a folder where the .torrent files are stored.

sudo mkdir /srv/tracker

sudo chown tracker:tracker /srv/tracker

And add a folder and file for where the tracker torrent info is stored.

sudo mkdir /var/lib/tracker

sudo touch /var/lib/tracker/bttrack.state

sudo chown -R tracker:tracker /var/lib/tracker/

Now make the file where the tracker variables are set

sudo touch /etc/default/bt-tracker

Copy and paste to file: /etc/default/bt-tracker

# Default configuration for bittorrent tracker, bttrack.bittorrent
# If you want the bittorrent tracker to run, switch this to 1.
# If you change this, you will probably want to change
# ALLOWED_DIR as well, or anyone will be able to track anything
# just by pointing the .torrent at your server.
START_BTTRACK=1

# Set any bttrack option --foo by defining the variable FOO to the argument
# you'd like to pass with the --foo option.  Run the command ' bttrack.bittorrent '
# for a detailed discussion of the options.

# Port defaults to 80, which tends to be inconvenient
PORT=6969

# Store recent downloader info in filename
DFILE=/var/lib/tracker/bttrack.state

# BitTornado
# Whether to display an info page when the tracker's root dir is
# loaded (defaults to 1)
# SHOW_INFOPAGE=1

# If set to 1, the tracker will show filenames of torrents that it
# knows about in its allowed_dir, instead of just showing
# info_hash's on its status page.
SHOW_NAMES=1

# Use this to restrict the files which your tracker will track.
# This parameter specifies a directory name, and it will only track
# torrents that exist in this directory. If this parameter is present
# you must somehow place the .torrent file in the specified directory
# before the tracker will accept it.
ALLOWED_DIR=/srv/tracker

# Use with allowed_dir; adds a /file?hash={hash} url that allows
# users to download the torrent file (defaults to 0)
ALLOW_GET=1

# File containing x-icon data to return when browser requests
#          favicon.ico (defaults to '')
FAVICON=/var/local/lib/bttrack-sandbox/favicon.ico

# Append log output from daemon to this file.  Make sure this log is rotated
# from time to time so it doesn't fill up your disk.  The daemon will of course
# need write access to the log file.
DAEMONLOGFILE=/var/log/tracker/bttrack.log

# How many times to check if a downloader is behind a NAT
# (0 = don't check) (defaults to 3)
NAT_CHECK=3

# BitTornado
# Whether to add entries to the log for nat-check results (defaults to 0)
# LOG_NAT_CHECKS=1

##
# The following options do not correspond to bttrack options; they influence how
# bttrack's init script starts the daemon.

# Run under this uid.  Must have access to all files and directories involved,
# naturally, but should otherwise have minimal privileges to minimize any
# security risk.
DAEMONUSER=tracker

# Run the daemon at this "nice" priority.  Setting a positive value here will
# dissuade the system from giving all its CPU time to bttrack requests from the
# network.
DAEMONNICE=5

sudo touch /etc/init.d/bt-tracker.sh

Copy and paste to file: /etc/init.d/bt-tracker.sh

#! /bin/sh
### BEGIN INIT INFO
# Provides:          bittorrent
# Required-Start:    $network $local_fs
# Required-Stop:     $network $local_fs
# Should-Start:
# Should-Stop:
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start a bittorrent tracker
# Description:       Starts a bittorrent tracker, which
#                    aids bittorrent clients by locating
#                    other clients.
### END INIT INFO

set -e

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="BitTorrent tracker"
NAME=bttrack.bittorrent
DAEMON=/usr/bin/$NAME
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/bt-tracker.sh

# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0

. /lib/lsb/init-functions

# Read config file if it is present.
if [ -r /etc/default/bt-tracker ]; then
        . /etc/default/bt-tracker
fi

# Add optional option $1 with argument $2 to OPTS, if $2 is nonempty
add_opt () {
        if ! test -z "$2" ; then
                OPTS="$OPTS $1 $2"
        fi
}

# Compose command-line arguments list for bttrack daemon, based on variables
# set in /etc/default/bt-tracker
OPTS=""
add_opt --dfile "$DFILE"
add_opt --port "$PORT"
add_opt --save_dfile_interval "$SAVE_DFILE_INTERVAL"
add_opt --nat_check "$NAT_CHECK"
add_opt --allowed_dir "$ALLOWED_DIR"
add_opt --show_names "$SHOW_NAMES"
add_opt --favicon "$FAVICON"
add_opt --logfile "$DAEMONLOGFILE"
add_opt --show_infopage "$SHOW_INFOPAGE"
add_opt --allow_get "$ALLOW_GET"
add_opt --log_nat_checks "$LOG_NAT_CHECKS"
DAEMONOPTS="$OPTS"

# Add arguments for start-stop-daemon, based on variables set in
# /etc/default/bt-tracker
OPTS=""
add_opt --chuid "$DAEMONUSER"
add_opt --nicelevel "$DAEMONNICE"
METAOPTS="$OPTS"

#
# Function that starts the daemon/service.
#
d_start() {
        if [ $START_BTTRACK -ne 1 ]; then
                log_progress_msg "disabled in /etc/default/bt-tracker "
                return 1
        else
                start-stop-daemon --start --background --quiet
                --make-pidfile --pidfile "$PIDFILE"
                $METAOPTS
                --exec $DAEMON -- $DAEMONOPTS
                return 0
        fi
}

#
# Function that stops the daemon/service.
#
d_stop() {
        start-stop-daemon --stop --oknodo --quiet --pidfile "$PIDFILE"
        rm -f $PIDFILE
}

case "$1" in
  start)
        log_daemon_msg "Starting $DESC" "$NAME"
        d_start
        log_end_msg $?
        ;;
  stop)
        log_daemon_msg "Stopping $DESC" "$NAME"
        d_stop
        log_end_msg 0
        ;;
  restart|force-reload)
        log_daemon_msg "Restarting $DESC" "$NAME"
        d_stop
        sleep 1
        d_start
        log_end_msg $?
        ;;
  status)
        exit 4
        ;;
  *)
        echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
        exit 2
        ;;
esac

exit 0

sudo chmod 755 /etc/init.d/bt-tracker.sh

sudo update-rc.d bt-tracker.sh defaults

sudo touch /etc/logrotate.d/bttrack

Copy and paste to file: /etc/logrotate.d/bttrack

/var/log/tracker/bttrack.log {
        daily
        rotate 7
        compress
        missingok
        create 0640 tracker
        copytruncate
}

Make a folder for the log files to go in.

sudo mkdir /var/log/tracker

Then make the file for the logs.

sudo touch /var/log/tracker/bttrack.log

sudo chown -R tracker:tracker /var/log/tracker

Notes: When the bug in bittornado.bttrack is fix I will change the line in.

/etc/init.d/bt-tracker.sh line 21

NAME=bttrack.bittorrent to : NAME=bttrack.bittornado

Then tracker will be back to using the bittornado package.

Run as a Open Tracker

In the configuration file /etc/default/bt-tracker change the option ” ALLOWED_DIR=/srv/tracker” to “ALLOWED_DIR=”.

The tracker will then be open to any one to use it. All they need to do is make their .torrent file with your tracker url.

Example : http://Domainname:6969/announce Check out OpenBitTorrent to see this method in action.

This entry was posted in Bittorrent and tagged , . Bookmark the permalink.

Comments are closed.