--- Begin Message ---
Subject: bittorrent: Should operate as a background system service
Package: bittorrent
Version: 3.4.2-11.3
Severity: normal
Tags: patch
*** Please type your report below this line ***
Dear BitTorrent maintainers,
It's not currently possible to run a BitTorrent tracker as a system
service, like Apache, SSH, or other services. It would be awesome if
that was possible, because you could configure a host to automatically
serve files as a tracker whenever it was restarted.
So, I wrote the attached patch to allow BitTorrent to function as a
system service. The "bittorrent-tracker" file is the script that
starts and stops the tracker service and also allows you to create
torrents by placing the files in an /incoming/ directory. The
"bittorrent-tracker.conf" file contains all the configuration options
required by the service.
Don't know if this is too Debian-specific to be upstreamable, but I'd
appreciate your help either way.
Thanks,
Nick
#! /bin/sh
#
### BEGIN INIT INFO
# Provides: bittorrent
# Required-Start: $local_fs $remote_fs $network $syslog $named
# Required-Stop: $local_fs $remote_fs $network $syslog $named
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# X-Interactive: true
# Short-Description: Start/stop BitTorrent tracker
### END INIT INFO
#
# originally derived from: http://www.idealog.us/2005/04/howto_install_a.html
#
# startup code
#
CONFIGFILE="/etc/bittorrent-tracker.conf"
set -e
set -u
. /lib/lsb/init-functions
if [ -e $CONFIGFILE ]
then
. $CONFIGFILE
fi
# handle partial uninstallation
test -f $TRACK || exit 0
if [ $BTENABLED != 1 ]
then
log_failure_msg "Starting ${TRACKDESC}" "$TRACKNAME"
log_progress_msg "${TRACKDESC} is disabled."
log_progress_msg "\n Edit ${CONFIGFILE} to enable"
log_end_msg 0
exit 1
fi
#
# utility functions
#
while_sleep () {
# usage: while_sleep (time)
I=0
while [ $I -lt $1 ]
do
sleep 1
I=$(($I + 1))
log_progress_msg "."
done
}
start() {
# Start the Tracker as well as a seed for all the .torrents
log_daemon_msg "Starting ${TRACKDESC}" "$(basename $TRACKNAME)"
start-stop-daemon --oknodo -S -b -c $USER -d $FILESDIR -x $TRACK -- $OPTIONS
log_end_msg 0
start_seeding
}
stop() {
# Stop the Tracker and the seeder
log_daemon_msg "Stopping ${TRACKDESC}" "$(basename $TRACKNAME)"
start-stop-daemon --oknodo -K -q -R 30 -n $TRACKNAME
log_end_msg 0
stop_seeding
}
start_seeding() {
# Start the seeder.
log_daemon_msg "Starting ${SEEDDESC} in ${SLEEP} seconds" \
"$(basename $SEEDNAME)"
(sleep $SLEEP && start-stop-daemon --oknodo -S -b -c $USER -d $FILESDIR \
-x $SEED -- $TORRENTSDIR --ip `$MYIP`)&
log_end_msg 0
}
stop_seeding() {
# Stop the seeder.
log_daemon_msg "Stopping ${SEEDDESC}" "$(basename $SEEDNAME)"
start-stop-daemon --oknodo -K -q -R 30 -n "$SEEDNAME"
log_end_msg 0
}
restart_seeding() {
# Restart the seeder.
stop_seeding
start_seeding
}
make() {
# Create torrent, move to TORRENTSDIR.
# Move file from FILESINCOMING to FILESDIR.
# usage: (filename)
basename="$(basename $1)"
torrent="$1.torrent"
cd "$FILESINCOMING"
if [ ! -e "${FILESINCOMING}/$basename" ]
then
log_failure_msg "$1 must be in ${FILESINCOMING}"
exit 1
fi
start-stop-daemon --oknodo -S -b -c $USER -d "$FILESINCOMING" -x $MAKETORRENT -- "$1" "${SERVER}/announce"
# sleep until we produce a torrent.
while [ ! -e "$torrent" ]
do
sleep 1
log_progress_msg "."
done
mv "$1" "${FILESDIR}/"
mv "$torrent" "${TORRENTSDIR}/"
}
#
# normal (procedural) script execution below.
#
mkdir -p "$FILESDIR" "$FILESINCOMING" "$TORRENTSDIR"
chown $USER "$FILEROOT" "$FILESDIR" "$FILESINCOMING" "$TORRENTSDIR"
case "${1}" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
restart-seeding)
restart_seeding
;;
make-all)
# Move each file from FILESINCOMING to FILESDIR. Create torrent.
# Move torrent to TORRENTSDIR.
log_daemon_msg "Making torrents for files in $FILESINCOMING" \
"$(basename $MAKETORRENT)"
for file in "$FILESINCOMING"/*
do
if [ `basename "$file"` = "." ]; then
continue;
fi
make "$file"
done
log_end_msg 0
if [ `$SEEDING` ]
then
restart_seeding
fi
;;
make)
log_daemon_msg "Making torrent file for $2" "$(basename $MAKETORRENT)"
make "$2"
log_end_msg 0
if [ `$SEEDING` ]
then
restart_seeding
fi
;;
*)
# Echo usage information
echo "Usage: $0 {start|stop|restart|restart-seeding|make-all|" \
"make [filename]}" >&2
exit 1
;;
# All is good with the world. Exit kindly.
esac
exit 0
# This file contains bittorrent-tracker configuration.
# 0 = disabled
# 1 = enabled
BTENABLED=1
#
# server config
#
PORT=6969
SERVER="http://tracker.example.com:${PORT}"
#
# important file locations
#
# the sharing root
FILEROOT="/var/bittorrent-tracker"
# the directory where BitTorrent distributes files from
FILESDIR="${FILEROOT}/files"
# the directory where incoming files are made into torrents, then
# moved to the share directory above
FILESINCOMING="${FILEROOT}/incoming"
# the directory where users can get the torrents via http from their
# browser. Serve this over HTTP!
TORRENTSDIR="${FILEROOT}/torrents"
# the database's state file
DFILE="${FILEROOT}/dstate"
# logfiles!
LOGFILE=/var/log/bittorrent-tracker.log
# You probably shouldn't touch options below here.
# You probably shouldn't touch options below here.
# You probably shouldn't touch options below here.
TRACKDESC="BitTorrent Tracker"
SEEDDESC="BitTorrent Seed"
USER="bittorrent-tracker"
#
# executables
#
PATH=/sbin:/bin:/usr/sbin:/usr/bin
# optional, can be commented out.
PATH=$PATH:/usr/local/bin
TRACK=/usr/bin/bttrack
TRACKNAME=$(basename $TRACK)
MAKETORRENT=/usr/bin/btmakemetafile
SEED=/usr/bin/btlaunchmany
SEEDNAME=$(basename $SEED)
SEEDING="pgrep -U $USER $SEEDNAME"
# Sleep for X seconds to make sure the tracker starts before the seed
# does.
SLEEP=5
OPTIONS="--dfile ${DFILE} --port ${PORT} --logfile ${LOGFILE} --allowed_dir ${TORRENTSDIR}"
MYIP="/usr/local/bin/ip-external"
-- System Information:
Debian Release: 6.0.2
APT prefers stable-updates
APT policy: (500, 'stable-updates'), (500, 'stable')
Architecture: i386 (i686)
Kernel: Linux 2.6.32-5-686 (SMP w/1 CPU core)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Versions of packages bittorrent depends on:
ii lsb-base 3.2-23.2squeeze1 Linux Standard Base 3.2 init scrip
ii python 2.6.6-3+squeeze6 interactive high-level object-orie
ii python-support 1.0.10 automated rebuilding support for P
Versions of packages bittorrent recommends:
ii mime-support 3.48-1 MIME files 'mime.types' & 'mailcap
Versions of packages bittorrent suggests:
pn bittorrent-gui <none> (no description available)
-- no debconf information
--
GPG: 0x4C682009 | 084E D805 31D8 5391 1D27 0DE1 9780 FD4D 4C68 2009
--- End Message ---