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.

Tags: ,

Leave a Reply