Есть у меня домашний Linux-сервер под CentOS, выполняющий роль шлюза в сеть Интернет, файлового хранилища с FTP и Samba, и другие функции, необходимые системному администратору, которые проблематично реализовать на базе аппаратного маршрутизатора. Вот появилась идея установить и демон torrent-клиент на данный сервер, чтобы качал себе и раздавал необходимые мне файлы.

Раньше у меня был опыт работы с MLDonkey, но вспоминая его ужасный web-интерфейс и монстроидальность — отказался сразу. Далее взгляд пал на rTorrent, знакомый его использовал на маршрутизаторе D-Link DIR-320 с модифицированной прошивкой от Олега. Очень порадовал красивый web-интерфейс, похожий на µTorrent. Но, т. к. это всё-таки не демон, а консольное приложение, глянув на метод его запуска и связывания с web-интерфейсом — решено было отказаться и от него.

В итоге выбор пал на Transmission, опять же, тот же знакомый уже его успешно использовал, так же выяснилось, что данный клиент имеет демон для запуска без GUI. Сначала была установлена и настроена старая версия из репозитария EPEL transmission-1.34-1.el5.x86_64, но работать с данной версией было крайне неприятно, многое не поддерживалось, GUI-клиент не совсем корректно работал с данной версией, не была доступна часть функций. Собрать новую версию обычным способом не получалось из-за того, что в CentOS используются более старые версии нужных для сборки transmission библиотек. Ещё одним фактором использования новой версии является поддержка ей списка трекеров. На этом заканчивается лирическое отступление, опишу сборку и настройку.

Сборка

Установка необходимых для сборки пакетов:

yum install gcc gcc-c++ m4 make automake libtool gettext openssl-devel

Подготовка каталога, получение исходного кода:

cd /usr/local/src
mkdir transmission
cd transmission

wget http://pkgconfig.freedesktop.org/releases/pkg-config-0.23.tar.gz
wget http://ftp.gnome.org/pub/gnome/sources/intltool/0.40/intltool-0.40.6.tar.gz
wget http://curl.haxx.se/download/curl-7.19.7.tar.gz
wget http://mirrors.m0k.org/transmission/files/transmission-1.80.tar.bz2

tar -xzfv pkg-config-0.23.tar.gz
tar -xzfv intltool-0.40.6.tar.gz
tar -xzfv curl-7.19.7.tar.gz
tar -xjfv transmission-1.80.tar.bz2

Сборка:

cd pkg-config-0.23
./configure
make
make install

cd ../intltool-0.40.6
./configure
make
make install

cd ../curl-7.19.7
./configure
make
make install

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
cd ../transmission-1.80
./configure --enable-daemon
make
make install

Настройка web-интерфейса для httpd, файл /etc/httpd/conf/httpd.conf:

Alias /transmission/web /usr/local/share/transmission/web
RewriteEngine on
RewriteRule /transmission[/]?$ /transmission/web [R=permanent]
ProxyPass /transmission http://127.0.0.1:9091/transmission
ProxyPassReverse /transmission http://127.0.0.1:9091/transmission
<Location /transmission>
  Options None
  Order allow,deny
  Allow from 127.0.0.1
  <IfModule expires_module>
    ExpiresActive On
    ExpiresByType image/gif A43200
    ExpiresByType image/png A43200
    ExpiresByType application/javascript A43200
    ExpiresByType text/css A43200
  </IfModule>
</Location>

В «Allow from» укажите IP, с которого вы хотите получить доступ, в своём случае, я использовал «Authtype Basic», т. е. захожу по паролю. Перезапуск httpd (если возникли ошибки, смотрим каких модулей не хватает, подправляем файл конфигурации):

service httpd restart

Далее я столкнулся с тем, что не нашёл нормального init-скрипта, написал свой. Он ещё находится в стадии тестирования, но как показала практика работает нормально, запуск демона будет от пользователя root. Да, знаю что это не правильно, но пока так /etc/rc.d/init.d/transmission:

#!/bin/sh
#
# transmission Start/Stop the transmission-daemon daemon.
#
# chkconfig: 2345 99 01
# description: transmission-daemon is a daemon-based Transmission session
#              that can be controlled via RPC commands from
#              transmission’s web interface or transmission-remote
# processname: transmission-daemon
# pidfile: /var/run/transmission.pid

# Source function library.
. /etc/init.d/functions

options='--allowed 127.0.0.1 --no-auth'

processname='/usr/local/bin/transmission-daemon'
lockfile='/var/lock/subsys/transmission'
pidfile='/var/run/transmission.pid'
user='root'
home=`/bin/grep -E "^$user:" /etc/passwd | /bin/cut -d : -f 6`

start() {
  export HOME=$home
  echo -n $"Starting $processname: "
  if [ -e $lockfile ]; then
    if [ -e $pidfile ] && [ -e /proc/`cat $pidfile` ]; then
      echo -n $"cannot start $processname: $processname is already running."
      failure $"cannot start $processname: $processname already running."
      echo
      return 1
    fi
  fi
  daemon $processname $options
  RETVAL=$?
  echo
  [ $RETVAL -eq 0 ] && touch $lockfile
  [ $RETVAL -eq 0 ] && ps ax | grep -w $processname | grep -v grep | awk '{print($1)}' > $pidfile
  return $RETVAL
}

stop() {
  export HOME=$home
  echo -n $"Stopping $processname: "
  if [ ! -e $lockfile ]; then
    echo -n $"cannot stop $processname: $processname is not running."
    failure $"cannot stop $processname: $processname is not running."
    echo
    return 1;
  fi
  killproc $processname
  RETVAL=$?
  echo
  [ $RETVAL -eq 0 ] && rm -f $lockfile
  [ $RETVAL -eq 0 ] && rm -f $pidfile
  return $RETVAL
}

case $1 in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    stop
    start
    ;;
  status)
    status $processname
    ;;
  *)
    echo "Usage: $0 start|stop|restart|status"
    ;;
esac

Установка прав на запуск:

chmod 755 /etc/rc.d/init.d/transmission

Добавление в автозапуск:

chkconfig transmission on

Запуск:

service transmission start

Если всё выполнено правильно, демон запущен и работает.

Настройка

Теперь нужно настроить демон, основные настройки доступны с web-интерфейса. Нужно открыть в браузере http://ваш-web-сервер/transmission, слева внизу есть кнопка настроек, выбрать Preferences. Указать путь куда будут сохраняться файлы, номер порта и не забыть открыть его в фаерволле для входящих соединений. На второй вкладке указать ограничение скорости. Всё, можно работать, добавлять torrent-файлы, наблюдать процесс скачивания.

Все настройки сохраняются в каталоге /root/.config/transmission-daemon. Там же хранятся torrent-файлы и информация о текущих загрузках.

Ещё я столкнулся с тем, что со временем демон начинает отъедать много ресурсов процессора, ест память, перезапуск помогает. Поэтому небольшой костыль в /etc/crontab:

05 3 * * * root /etc/rc.d/init.d/transmission restart >/dev/null 2>&1

GUI

Есть неплохой GUI-интерфейс для transmission-daemon кроме родного — Transmission Remote GUI. Данный клиент является кроссплатформенным, есть сборки как под Linux, так и под Windows, написан на Lazarus. Для того, чтобы данный клиент мог подключиться к демону — я добавил в скрипт запуска, строку параметров после 127.0.0.1, через запятую — IP-адрес домашнего компьютера.

Итог

В результате проделанной работы я получил довольно удобную систему: демон качает, по самбе получаю доступ к скачанным файлам. При работе с загрузками используется довольно удобный GUI.

Готов выслушать замечания, ваши рекомендации по улучшению скрипта запуска, дополнения, уточнения материала данной статьи.

Ссылки

Facebooktwittergoogle_plusredditpinterestlinkedintumblr

Comments

comments