Deluge

De Astillas.net

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.

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

: