Давно озадачивался вопросом автономной работы torrent клиента. Под руку попалось описание, как для этих целей использовать transmission-daemon. Функционала мало, но впринципе устраивало, до тех пор пока не стал замечать, что теряет он пиры, не сидирует, причем излечивалось после перезапуска. Но и это я терпел, пока он вообще не перестал воспринимать закачиваемые торренты…
Тут я вспомнил про описание stanislaw'а как он запускал в виде демона rtorrent (консольный torrent клиент). Собственно всю демоническую часть я взял у него с небольшими изменениями, так что подробно на этом задерживаться не буду.
Само описание тут
Итак, демонические шаги:
adduser torrent
домашний каталог указал как /home/torrent
mkdir -p /home/torrent/downloads /home/torrent/session /home/torrent/torrents /home/torrent/rc.d
в rc.d положил стартовый сприпт rtorrentd и слинковал его в /etc/rc.d
#минимальное число пиров на торрент min_peers = 1 #максимальное число пиров на торрент max_peers = 1000 #максимальная скорость загрузки download_rate = 40 #максимальная скорость отдачи. 0 - не ограничена upload_rate = 30 #каталог для сохранения закачек или откуда буду сидироваться торренты. directory = /home/torrent/downloads #каталог куда будет сохраняться состояние торрентов. Здесь, в этом примере, они сохраняются в папку session session = /home/torrent/session #rtorrent каждые 5 секунд проверяет этот каталог на новые *.torrent файлы и если они есть то ставит их на закачку schedule = watch_directory,5,60,load_start=/home/torrent/torrents/*.torrent #номер порта (или нескольких портов) который открывает клиент для обмена данными port_range = 9090-9090 #случайный выбор порта для обмена данными. В данном случае он отключён port_random = no #проверять хэш торрента после закачки check_hash = yes #использовать udp use_udp_trackers = yes #сохранять сессию session_save = yes #делает читадельным лог (вызывается по L) handshake_log = yes # scgi_port = localhost:5000
#!/bin/bash
. /etc/rc.conf
. /etc/rc.d/functions
user=torrent
case "$1" in
start)
stat_busy "Starting rtorrent"
su - $user -c 'screen -d -m rtorrent' &> /dev/null
if [ $? -gt 0 ]; then
stat_fail
else
add_daemon rtorrent
stat_done
fi
;;
stop)
stat_busy "Stopping rtorrent"
killall -w -s 2 /usr/bin/rtorrent &> /dev/null
if [ $? -gt 0 ]; then
stat_fail
else
rm_daemon rtorrent
stat_done
fi
;;
restart)
$0 stop
sleep 1
$0 start
;;
*)
echo "usage: $0 {start|stop|restart}"
esac
exit 0
Собственно тут все, теперь стоит запустить демона. SCGI интерфейс нужен для работы с веб-интерфейсом. На данный момент, функционал будет аналогичен описанию stanislav'а.
Немного поискав на просторах интернета нашел веб-интерфейс для rtorrent. Название ему: wtorrent.
Резпозитариях ArchLinux, его, к сожалению, не оказалось, поэтому собрал пакет, и поместил в AUR: http://aur.archlinux.org/packages.php?ID=25557
Если в общем, то:
svn co svn://wtorrent-project.org/repos/trunk/wtorrent/
mv wtorrent /srv/http/
chmod -R 777 /srv/http/wtorrent
open_basedir
LoadModule scgi_module modules/mod_scgi.so
SCGIMount /RT_RPC2 127.0.0.1:5000
#
# For auth: htpasswd -c /path/to/htpasswd username
#
#<Location /RT_RPC2>
#AuthName "Private"
#AuthType Basic
#AuthBasicProvider file
#AuthUserFile /path/to/htpasswd
#Require user myrpcuser
#</Location>
Alias /wtorrent/ "/srv/http/wtorrent/"
<Directory "/srv/http/wtorrent/">
AllowOverride All
Options Indexes FollowSymLinks
Order allow,deny
Allow from all
</Directory>
Всё, можно теперь работать.
Веб интерфейс очень функционален, при добавлении торрента можно указывать ссылку или файл, можно указать директорию куда сохранять закачку для каждого торрента (класс!). Можно просматривать инфомрацию по торренту, устанавливать приоритеты закачки отдельных файлов и т.п.
Кроме того, можно добавлять пользователей для работы с системой, которым можно указать индивидульаные каталоги для закачки, а потом раздавать результаты через, например, самбу с авторизацией.
Можно вести RSS ленту, в которую добавлять rss с различных трекеров (пока не пробывал, оценить не могу, но кажется, фича удобна).
Дискуссия
О, поправил стартовый скрипт для отлова ошибок — мой недочёт, всё лень было разобраться как это делается. :)
По конфигу и самому rtorrent'у есть такое замечание: при выставленном
min_peers = 1для торрентов, которые ты раздаёшь, но личей нет, будет отображаться сообщениеTracker: [Tried all trackers.]В качестве эксперимента я попробовал выставить значение в 0, это привело к тому, что добавляемые торренты (имеющие сидов) не начинали качаться. Похоже, что сообщение некритичное, а скорее информационное.Спасибо за хауту по wtorrent, надо тоже настроить.
ну ошибки он не отлавливает сейчас, походу скрин не возвращает статус процесса. так что всегда будет done… проверено сегодня когда настраивал. По замечаниям к конфигу - спасибо, попробую )
Скрипт взял чуть другой - более корректно завершает работу rtorrent
Обновил пакет в AUR для wtorrent-svn