BitTorent клиент для сервера


Zeboton
Deluge — full-featured BitTorrent client for Linux, Unix and Windows

Deluge — full-featured BitTorrent client for Linux, Unix and Windows

Когда у меня возникла необходимость установить на сервер, который находится под управлением Ubuntu 9.04 «Jaunty Jackalope», BitTorent клиент, то я сразу подумал о rtorrent. Но пока я искал инструкцию по его настройке (точнее по настройке самого rtorrent, screen и web-интерфейса к rtorrent) я узнал о том что мой любимый Deluge (которым я пользовался раньше на компьютере с DE GNOME) может работать и в консольном режиме и в режиме с Web-интерфейсом. Меня это заинтересовало.В результате я раскопал официальный сайт Deluge и нашёл на нём инструкцию по установке Deluge на сервер. Всё намного проще, нежели в случае с rtorrent.

1. Для начала я бы порекомендовал обзавестись пакетами, которые понадобятся для работы:

sudo apt-get install g++ make python-all-dev python-all python-dbus python-gtk2 python-notify python-setuptools librsvg2-common python-xdg python-support subversion libboost-dev libboost-python-dev libboost-iostreams-dev libboost-thread-dev libboost-date-time-dev libboost-filesystem-dev libboost-serialization-dev libssl-dev zlib1g-dev

2. Теперь установим сам Deluge:

sudo apt-get install deluge-common deluge-console deluge-core deluge-torrent deluge-webui

3. Нужно создать для него демона, который будет его запускать. Для этого создадим файл /etc/default/deluge-daemon:

sudo nano /etc/default/deluge-daemon

Содержимое файла должно быть таким (ВНИМАНИЕ!!! Обязательно замените <username> на имя вашего пользователя в системе!):

# Configuration for /etc/init.d/deluge-daemon

# The init.d script will only run if this variable non-empty.
DELUGED_USER="<username>"             # !!!CHANGE THIS!!!!

# Should we run at startup?
RUN_AT_STARTUP="YES"

Для выхода из nano и сохранения файла используйте сочетание Ctrl+x + ответ на вопрос о необходимости сохранения файла.

4. Создадим исполняемый скрипт /etc/init.d/deluge-daemon:

sudo nano /etc/init.d/deluge-daemon

Его содержимое должно быть следующим:

 #!/bin/sh
### BEGIN INIT INFO
# Provides:          deluge-daemon
# 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 and webui.
# Description:       Starts the deluge daemon with the user specified in
#                    /etc/default/deluge-daemon.
### END INIT INFO

# Author: Adolfo R. Brandes 

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="Deluge Daemon"
NAME1="deluged"
NAME2="deluge"
DAEMON1=/usr/bin/deluged
DAEMON1_ARGS="-d"
DAEMON2=/usr/bin/deluge
DAEMON2_ARGS="-u web"
PIDFILE1=/var/run/$NAME1.pid
PIDFILE2=/var/run/$NAME2.pid
PKGNAME=deluge-daemon
SCRIPTNAME=/etc/init.d/$PKGNAME

# Exit if the package is not installed
[ -x "$DAEMON1" -a -x "$DAEMON2" ] || 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 $PIDFILE1 --exec $DAEMON1 \
      --chuid $DELUGED_USER --user $DELUGED_USER --test > /dev/null
   RETVAL1="$?"
   start-stop-daemon --start --background --quiet --pidfile $PIDFILE2 --exec $DAEMON2 \
      --chuid $DELUGED_USER --user $DELUGED_USER --test > /dev/null
   RETVAL2="$?"
   [ "$RETVAL1" = "0" -a "$RETVAL2" = "0" ] || return 1

   start-stop-daemon --start --background --quiet --pidfile $PIDFILE1 --make-pidfile --exec $DAEMON1 \
      --chuid $DELUGED_USER --user $DELUGED_USER -- $DAEMON1_ARGS
   RETVAL1="$?"
        sleep 2
   start-stop-daemon --start --background --quiet --pidfile $PIDFILE2 --make-pidfile --exec $DAEMON2 \
      --chuid $DELUGED_USER --user $DELUGED_USER -- $DAEMON2_ARGS
   RETVAL2="$?"
   [ "$RETVAL1" = "0" -a "$RETVAL2" = "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 $PIDFILE2
   RETVAL2="$?"
   start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --user $DELUGED_USER --pidfile $PIDFILE1
   RETVAL1="$?"
   [ "$RETVAL1" = "2" -o "$RETVAL2" = "2" ] && return 2

   rm -f $PIDFILE1 $PIDFILE2

   [ "$RETVAL1" = "0" -a "$RETVAL2" = "0" ] && return 0 || return 1
}

case "$1" in
  start)
   [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME1"
   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" "$NAME1"
   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" "$NAME1"
   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

:

5. Разрешим пользователю root исполнять этот скрипт:

sudo chmod 755 /etc/init.d/deluge-daemon

6. Добавим выполнение этого скрипта при старте системы:

sudo update-rc.d deluge-daemon defaults

7. Теперь осталось либо запустить скрипт

sudo /etc/init.d/deluge-daemon start

либо перезапустить сервер

sudo shutdown -r now

Всё, программой можно пользоваться обратившись к серверу через браузер на порт 8112. К примеру, http://198.162.1.25:8112. Пароль по-умолчанию «deluge».

Web-интерфейс системы очень удобный и продуманный. За сутки работы с ним ошибок и недочётов не обнаружено. Выглядит он вот так:

WEB-user interface Deluge

WEB-user interface Deluge

На мой взгляд установка Deluge в разы проще и понятнее, нежели установка rtorrent. А так как для моих задач Deluge хватает выше крыши, то я остановился именно на нём.

P.S.
Если коды скриптов не сработали, то попробуйте взять их с официального сайта с документацией, вдруг при копирование какие-нибудь символы на что-нибудь заменились.

Обновление от 20 июля 2009 05:00
Я советую устанавливать deluge не из репозитория Ubuntu, а собирать из SVN разработчиков. Так как версия из SVN стабильнее и у меня намного реже вылетает с ошибкой Segmentation fault (segfault), нежели версия из репозитория.

Установка не многим сложнее. Ниже приведу процесс удаления версии установленной из репозитория и установки версии из SVN

1. Удалим имеющийся deluge

sudo apt-get remove deluge

2. Удаляем конфигурационные файлы deluge, предварительно сделав копию (на всякий случай, так как в папке ~/.config/deluge/state находится список торентов которые были в deluge до его удаления)

cp ~/.config/deluge ~/.config/deluge-backup
rm -rf ~/.config/deluge

3. Устанавливаем последний стабильный deluge из SVN

svn co http://svn.deluge-torrent.org/branches/1.1.0_RC deluge
cd deluge
sudo rm  -fr /usr/lib/python2.5/site-packages/deluge-1.1*
python setup.py build
sudo python setup.py install

Подробнее на сайте разработчиков (англ.).

Похожие записи: