Deluge
Programa cliente del protocolo BitTorrent de intercambio de archivos entre pares y basado en el modelo cliente-servidor, por lo que es apto para máquinas sin monitor al poder instalar un núcleo funcional accesible en remoto por varios medios: consola, gráfico (GTK) y web.
Sumario
Versión |
1.3.1 |
Página principal |
http://www.deluge-torrent.org/ |
Observaciones |
Preparación del entorno
Optamos por crear un usuario especializado bajo el cual usar los programas.
# addgroup --system bittorrent Añadiendo el grupo `bittorrent' (GID 125) ... Hecho. # adduser --system --disabled-login --disabled-password --no-create-home --ingroup bittorrent --gecos "BitTorrent daemon " bittorrent Añadiendo el usuario del sistema `bittorrent' (UID 118) ... Añadiendo un nuevo usuario `bittorrent' (UID 118) con grupo `bittorrent' ... No se crea el directorio personal `/home/bittorrent'.
También creamos una zona de descargas determinada y le damos acceso a un grupo especializado en compartir contenidos en la red (compartidos en mi caso).
# install -d -o bittorrent -g compartidos -m 2770 /var/db/Descargas
El programa deluge emplea un directorio concreto para la configuración que es posible definir con el parámetro --config /var/db/Descargas/.deluge
. En caso de no existir se crea automáticamente.
Puesta en marcha del servidor
El servidor se llama deluged y el paquete de Debian no incluye ningún soporte para instalarlo como servicio normalizado. Existen instrucciones para hacerlo para Ubuntu pero también sirven para Debian, así que las he copiado, personalizado y las dejo aquí anotadas para el futuro.
Valores predeterminados
El archivo con los valores predeterminados está en /etc/default/deluged
:
# The init.d script will only run if this variable non-empty.
DELUGED_USER="bittorrent"
# Should we run at startup?
RUN_AT_STARTUP="YES"
# Configuration directory
CONFIG_DIR="/var/db/Descargas/.deluge"
# Daemon parameters
DAEMON_ARGS="-d -i 192.168.0.2 -ui 192.168.1.1"
Los parámetros de arranque del servidor son los siguientes:
-d
arranque en modo normal (no demonizar)-i
dirección IP de escucha para conexiones bittorrent (en mi caso es el interfaz de acceso al exterior)-ui
dirección de red de escucha para programas cliente; también aquí indico un interfaz que conecta únicamente con la red interna, si se necesita acceso desde el exterior ambos parámetros deben contener cosas distintas.
Programa de control del servicio
EL programa encargado de lanzar los servicios está en /etc/init.d/deluged
y consiste en:
#!/bin/sh
### BEGIN INIT INFO
# Provides: deluged
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Should-Start: $network
# Should-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Daemonized version of deluge
# Description: Starts the deluge daemon with the user specified in
# /etc/default/deluged
### END INIT INFO
# Author: Adolfo R. Brandes
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="Deluge Daemon"
NAME="deluged"
DAEMON=/usr/bin/deluged
DAEMON_ARGS="-d" # Consult `man deluged` for more options
PIDFILE=/var/run/$NAME.pid
UMASK=022 # Change this to 0 if running deluged as its own user
PKGNAME=deluged
SCRIPTNAME=/etc/init.d/$PKGNAME
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0
# Read configuration variable file if it is present
[ -r /etc/default/$PKGNAME ] && . /etc/default/$PKGNAME
# Load the VERBOSE setting and other rcS variables
[ -f /etc/default/rcS ] && . /etc/default/rcS
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions
if [ -z "$RUN_AT_STARTUP" -o "$RUN_AT_STARTUP" != "YES" ]
then
log_warning_msg "Not starting $PKGNAME, edit /etc/default/$PKGNAME to start it."
exit 0
fi
if [ -z "$DELUGED_USER" ]
then
log_warning_msg "Not starting $PKGNAME, DELUGED_USER not set in /etc/default/$PKGNAME."
exit 0
fi
#
# Function that starts the daemon/service
#
do_start()
{
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started
start-stop-daemon --start --background --quiet --pidfile $PIDFILE --exec $DAEMON \
--chuid $DELUGED_USER --user $DELUGED_USER --umask $UMASK --test > /dev/null
RETVAL="$?"
[ "$RETVAL" = "0" ] || return 1
start-stop-daemon --start --background --quiet --pidfile $PIDFILE \
--make-pidfile \--exec $DAEMON \
--chuid $DELUGED_USER --user $DELUGED_USER --umask $UMASK -- $DAEMON_ARGS
RETVAL="$?"
sleep 2
[ "$RETVAL" = "0" ] || return 2
}
#
# Function that stops the daemon/service
#
do_stop()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --user $DELUGED_USER \
--pidfile $PIDFILE
RETVAL="$?"
[ "$RETVAL" = "2" ] && return 2
rm -f $PIDFILE
[ "$RETVAL" = "0" ] && return 0 || return 1
}
case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
restart|force-reload)
log_daemon_msg "Restarting $DESC" "$NAME"
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
exit 3
;;
esac
: