Установка и настройка transmission-daemon в CentOS 5

Автор: | 27.01.2010

Есть у меня домашний 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

Установка и настройка transmission-daemon в CentOS 5: 31 комментарий

  1. gordonsh

    спасибо за качественный мануал.
    возникла проблема на этапе запуска сервиса (в автозагрузке его вижу, добавилось норм)

    # service transmission start
    transmission: unrecognized service

    как его запустить?

  2. ras Автор записи

    Думаю, я забыл упомянуть, что нужно выставить права на запуск для скрипта, поэтому:

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

    Проверил, и таки да. Спасибо за найденную ошибку, завтра исправлю документацию.

  3. ras Автор записи

    Подправил статью.

  4. MHz

    Спасибо за хороший мануал, но у меня проблема:

    service httpd restart
    httpd: нераспознанная служба

    кстати файла /etc/httpd/conf/httpd.conf не было, пришлось создать его, но был /etc/httpd/conf.d/squid.conf

    Заранее спасибо за помощь.

  5. ras Автор записи

    > service httpd restart
    > httpd: нераспознанная служба
    > кстати файла /etc/httpd/conf/httpd.conf не было, пришлось создать его, но был /etc/httpd/conf.d/squid.conf

    Это означает, что у вас не установлен пакет httpd (т. е. web-сервер apache, вам его необходимо установить: yum install httpd, если хотите иметь web-интерфейс). Поэтому и нет конфигурационного файла /etc/httpd/conf/httpd.conf, но видимо, у вас установлен прокси-сервер squid, и есть его упомянутый вами конфиг: /etc/httpd/conf.d/squid.conf.

  6. alex

    Классный мануал. Сильно экономит время.
    Кстати чтобы не от рута запускался, в написанном вами скрипте можно сделать следующее:

    1) Меняем user=’root’ на user=’torrent’ где torrent это созданный юзер под которым и будем запускаться, может быть любым пользователем по вашему желанию

    2) Комментируем строки:
    home=`/bin/grep -E «^$user:» /etc/passwd | /bin/cut -d : -f 6`
    и
    export HOME=$home в двух местах
    какбы не нужно вроде

    3) Меняем строку
    daemon $processname $options
    на
    echo «$processname $options» | /bin/su — $user

    Все, теперь не от рута запускается. По умолчанию в домашней директории выбранного пользователя теперь все будет складываться. Если уже работало под root, то можно предварительно скопировать туда существующий каталог .config и Downloads (может он у вас в другом месте был) с домашней директории root. Только после этого не забыть командой chown сменить владельца этих директорий на нового.

    chown -R torrent:torrent .config
    chown -R torrent:torrent Downloads

    torrent:torrent — это имя пользователя и его группы, ну если что не понятно то man chown

  7. ras Автор записи

    Спасибо alex за очень полезный комментарий. Но, без «export HOME=$home» — у меня при запуске не самостоятельно, а инит-скриптом, т. е. когда нет шелла, корневой каталог становился для рута корнем, и конфигурация и прочее начинали писаться прямо в корень ФС.

  8. koe

    Не могу совладать с intltool-0.40.6 — ошибка XML::Parser perl mod is req 4 intltool.
    инсталировал несколько раз, cpan — ом проверял — up to date. Но ошибка не исчезла.

    Посоветуйте что еще ему нужно !

    Спасибо.

  9. ras Автор записи

    У меня установлен rpm-пакет perl-XML-Parser-2.36-1.el5.rf из репозитария RPMForge, не изз CPAN.

  10. koe

    Спасибо, потратил ночь, но разобрался 🙂
    на самом деле intltool не мог скомпилить EXPAT так как не находил expat.h in /usr/include и libexpat.so.0 in /usr/lib
    После копирование их туда из /usr/local/include и /usr/local/lib соответственно — все заработало.

  11. ras Автор записи

    CentoOS — это не слака и не генту, тут много чего не компилят, известно почему… Проблема видно в недопонимании…

  12. ras Автор записи

    Собрал версию 2.10, отличаи при сборке минимальны, всего лишь пришлось установить перед компиляцией libevent-devel, который теперь не идёт с самим transmission:

    yum install libevent-devel

  13. ras Автор записи

    Версия 2.21 уже не собирается, требует libevent >= 2.0.10. Думаю на этом стоит приостановить «костылестроение» (и не пересобирать ещё и libevent) 🙂 и дождаться CentOS 6…

  14. Hodman

    Как на VDS c Debian прикрутить transmisson-remote-gui для transmission?
    Если можно – по-шагово.
    У меня на данный момент стоит оболочка самая простая и совсем не похожа на µTorrent. Она малофункциональна.
    Заранее благодарен

  15. Илья

    После команды yum install gcc gcc-c++ m4 make automake libtool gettext openssl-devel получаю ошибку:

    Transaction Check Error:
    file /usr/kerberos/man/man5/krb5.conf.5.gz from install of krb5-libs-1.6.1-55.el5_6.1.x86_64 conflicts with file from package krb5-libs-1.6.1-36.el5_5.4.i386

    Error Summary

    Система CentOS 5.5 x86_64

  16. ras Автор записи

    Для начала я бы посоветовал обновить систему до последней:

    yum clean all
    yum update

    Ну и часто бывает что проблема просто в кэше, неправильные версии, поэтому проблема и с установкой и с обновлением, попоробуйте для начала очистить кэш:

    yum clean all

    Ещё что может быть, у вас система 64-битная? Если да, то у вам нужно удалить i386-пакет krb5-libs, который и вызывает конфликт:

    yum remove krb5-libs-1.6.1-36.el5_5.4.i386

    Да и вообще я бы удалил на вашем месте все 32-битные пакеты с системы, если не нужно использовать 32-битный софт, посмотреть список пакетов можно так:

    yum list | grep -w installed | grep -r ‘\.i[3456]86 ‘ | awk ‘{print $1}’ | sort

  17. Kir

    Саша, спасибо за труды! Установил как по маслу на Elastix.

  18. Shurupovert

    запрвшиваю:
    http://192.168.0.210/transmission/
    меня перебрасывает на
    http://192.168.0.210/transmission/web
    там ошибка 403.
    та же картина, если запрашиваю в консоли на самом сервере.
    настройки web-интерфейса для httpd добавил в конец файла /etc/httpd/conf/httpd.conf
    Им предшествуют настройки WEB-интерфейса сервера IP-телефонии Elastix и сервера доступа к музыке и видео Subsonic, которые отрабатывают корректно.

    В чем может быть ошибка?
    адреса пробовал менять на реальный IP сервера и IP машины, с которой подключаюсь. the same problem. 403.
    ProxyPass /transmission http://127.0.0.1:9091/transmission
    ProxyPassReverse /transmission http://127.0.0.1:9091/transmission
    Allow from 127.0.0.1

    Жду помощи.

  19. Shurupovert

    links на локальной машине при обращении 127.0.0.1/transmission
    отвеил:
    Proxy Error
    The proxy server received an invalid response from an upstream server.
    The proxy server could not handle the request [1]GET /transmission/web.

    Reason: Error reading from remote server

  20. ras Автор записи

    Ошибка 403 «Доступ запрещен». У вас недостаточно прав на доступ. Подробно можете посмотреть в логах что пишет сервер. Секция совпадает с той что я привёл? Ибо там разрешение с локалхоста есть:

    Order allow,deny
    Allow from 127.0.0.1

    Подробнее об ошибке можно прочитать например тут: http://www.yutex.ru/help_error.php#403

    Судя по ошибке во втором вашем сообщении — у вас не разрешён доступ к самому демону transmission-daemon, проверьте настройки демона. Я для этой цели добавлял в строку запуска демона:

    options=’—allowed 127.0.0.1 —no-auth’

  21. Иван

    А как сделать, чтобы доступ был с любого ip? уже по всякому перепробовал. 0.0.0.0 не помогает

  22. ras Автор записи

    Такс, man на transmission-daemon нам говорит следующее:

    -a —allowed x.x.x.x,…
    Allow RPC access to a comma-delimited whitelist of IP addresses. Wildcards can be specified in an address by using
    ’*’. Default: «127.0.0.1» Example: «127.0.0.*,192.168.1.*»

    Т. е. по идее «–allowed *.*.*.*» должно помочь. Попробовал с этой опцией, вроде бы стартует и работает, попробуйте так.

  23. Иван

    Спасибо большое!) Тупанул, мог и сам ман посмотреть))

  24. Иван

    Кстати, сидел как-то, делать было совсем нечего. Взял, и руссифицировал web-интерфейс. Кому надо если, могу файлик скинуть..

  25. ras Автор записи

    Давайте, выложу в комплекте к статье, размещу ваши данные, ссылку, на автора…

  26. Иван

    http://www.site-park.ru/files/web.tar.gz

    Ну как то так.. расспаковать надо и заменить index.html в папке /usr/local/share/transmission/web

    И, конечно стоит учесть, что делать это стоит желательно с версией transmission 1.80, т.е. как описано в статье.

  27. Иван

    И кстати еще хочу посоветовать одну приложуху по этой теме, пользователям Android. Вещь шикарная. http://transdroid.org

  28. Иван

    Еще могу поделиться статейкой если надо. только что закончил править. CentOS 5.x в роли контроллера домена

  29. ras Автор записи

    Контроллер домена уже явно выходит за тему торрента :).

  30. Иван

    Ну так я не про эту статью говорю, а вобщем..

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *