Консольные torrent клиенты

Категория: / DEV Блог / Сервер (FreeBSD)
Рассмотрим ctorrent и rtorrent.
Оба доступны из портов в /usr/ports/net-p2p.


1) ctorrent

Запускаем ctorrent -s "./путь" "torrent"
Начнет закачивать торрент в папку "./путь".

2) rtorrent

Более продвинутый клиент. Использует ncurses - а это значит имеет псевдо оконный интерфейс.
Запускаем клиент, попадаем в окно, в котором нужно что то делать :)

^q - Выход
up, down, left, right
^P, ^N, ^B, ^F - Выбор опций, экранов

a, s, d - ускорить аплоад на 1/5/50 KB.
z, x, c - уменьшить скорость отдачи/5/50 KB.
Верхний регистр (тоже самое с shift'ом) (A, S, D, Z, X, C) - регулируют скорость закачки (download).

1 - 7 - сменить вид (все, сидируемые, скачиваемые, завершенные и т.д.)
^S - начать загрузку
^D - остановить, повторное нажатие удалит торрент
^O - изменить папку назначения
^X - выполнить внутреннюю команду rtorrentа
^Q - выход из программы. двойное нажатие не оповещает трекер.
+, - - приоритет загрузки
пробел - регулировка приоритета файлов торрента (можно отключить закачку отдельного файла)
backspace - добавить торрент для закачки
l - лог
U - удалить торрент
u - показать информацию по загрузке
o - показать трекеры. пробелом выбираем
p - информация о пире
t, T - запрос трекера
k - дисконнект пира

Установить без компиляции - pkg_add -r rtorrent-devel
Конфигурация (~/.rtorrent.rc)

download_rate = 200
upload_rate = 150
# незавершенные торренты
directory = /disk01/torrents
session = /disk01/torrents/.session
# место, где rtorrent ищет новые .torrent файлы
schedule = watch_directory,5,5,load_start=/disk01/torrents/.torrents/*.torrent
schedule = tied_directory,5,5,start_tied=
schedule = untied_directory,5,5,close_untied=
# переместить после закачки
on_finished = move_complete,"execute=mv,-n,$d.get_base_path=,/usr/downloads/uploads/torrents/ ;d.set_directory=/usr/downloads/uploads/torrents/"
 
execute_log = /var/log/rtorrent.log
# Port range to use for listening.
port_range = 55556-55560
 
# для wtorrentа
scgi_local = /tmp/rtorrent.rpc.socket
# без этого падал на freebsd-7.1-stable
encoding_list = CP1251
 
# вроде как увеличивает скорость хэширования
hash_read_ahead = 8
hash_max_tries = 5
hash_interval = 10


Если вы находитесь за фаерволом (?)

use_udp_trackers = no


Для rtorrent есть вебдванольная морда wTorrent (http://www.wtorrent-project.org/)
Которая связывается с rtorrent посредством xmlrpc. Для работы скрипта необходим lighttpd c mod_scgi.

Rtorrent поддерживает "скрипты" для своей кастомизации, подробнее описано на сайте разработчика
http://libtorrent.rakshasa.no/wiki/RTorrentCommonTasks

Если торрент перестал скачиваться/раздаваться

Рекомендуется нажать ^D на нем (это почти F5 в браузере).
Торрент перезагрузится и продолжит свое функционирование. Вероятно баг (?).
У меня часто закачки замирают - возможно из-за нестабильного интернета, разрывов связи (vpn),
и других похожих проблем.

Ретинги и торренты

Если у вас слабый канал, можно немножко подкрутить счетчики рейтинга для торрентов (обмануть трекер).
К примеру - диффы для rtorrent0.8.3. Что мы делаем - меняем значения - отданого умножаем на два, скаченного делим на два,
осталось скачать делим на два. При этом представляемся другим клиентом, чтобы не палить свой rtorrent.

diff /rtorrent-0.8.3/configure
22706c22706
< #define USER_AGENT std::string(PACKAGE "/" VERSION "/") + torrent::version()
---
> #define USER_AGENT "uTorrent/1700"
 
diff libtorrent-0.12.3/configure
2095c2095
< #define PEER_NAME "-lt0C30-"
---
> #define PEER_NAME "-UT1700-"
diff libtorrent-0.12.3/src/protocol/peer_connection_leech.cc
114c114,115
<   if (cachedTime - m_timeLastRead > rak::timer::from_seconds(240))
---
>   // if (cachedTime - m_timeLastRead > rak::timer::from_seconds(240))
>   if (cachedTime - m_timeLastRead > rak::timer::from_seconds(20))
diff libtorrent-0.12.3/src/tracker/tracker_http.cc
130,132c130,132
<   s << "&uploaded=" << info->uploaded_adjusted()
<     << "&downloaded=" << info->completed_adjusted()
<     << "&left=" << info->slot_left()();
---
>   s << "&uploaded=" << (2 * info->uploaded_adjusted())
>     << "&downloaded=" << (0.5 * info->completed_adjusted())
>     << "&left=" << (0.5 * info->slot_left()());