Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

Aria2 как торрент-клиент


Автор: Максим Белозеров

Многим знакома консольная программа для загрузки файлов aria2, но обычно ее воспринимают как аналог wget и не более.

Если же речь заходит о консольных торрент-клиентах, как правило, вспоминают лишь rtorrent и интерфейсы к нему. Меж тем aria2 — отличный инструмент для тех, кто предпочитает «включить и забыть» и не уделять торрентам слишком много времени.

Ниже описаны некоторые тонкости применения aria2 именно в роли торрент-клиента. Но чаще всего не требуется ничего, кроме простой команды aria2c ФАЙЛ.torrent. С простого и начнем.

1. Самый простой случай: один торрент

Распространенный вариант: надо просто скачать файл или группу файлов и остаться на раздаче до приемлемого рейтинга (не забывайте, что по протоколу BitTorrent файлы мы качаем друг у друга и хорошим тоном считается отдать хотя бы столько же, сколько скачал), но не планируем ни обновлять содержимое, как это практикуется в раздачах сериалов, ни оставаться на «вечной» раздаче, как многие поступают с образами любимых дистрибутивов. В этом случае от пользователя требуется лишь одна команда.

Она строится по принципу aria2c --dir=[/СЮДА/СОХРАНЯТЬ/ФАЙЛ/] АДРЕС_ФАЙЛА.torrent (вместо --dir= можно указывать просто -d), например: aria2c -d /home/ИМЯ_ПОЛЬЗОВАТЕЛЯ/downloads/ http://www.clearbits.net/get/206-dimensions---a-walk-through-mathematics.torrent (это научно-популярный анимационный фильм, посвященный измерениям; есть русские субтитры; распространяется под лицензией Creative Commons BY-NC-ND, то есть его можно копировать и распространять при условии указания авторства, но нельзя использовать в коммерческих целях и как основу для производных работ).

Путь для сохранения файлов (--dir или -d) можно не указывать, в таком случае программа сохранит файлы в текущий каталог. Неважно, где находится файл *.torrent — локальный файл сразу будет поставлен на закачку, а если адрес файла — это ссылка на http или ftp, то aria2 сначала скачает файл *.torrent, а затем сама поставит его на закачку.

Когда все будет загружено, начнется раздача. По умолчанию она продолжается до рейтинга 1, то есть отдано будет ровно столько же, сколько скачано. Если есть желание отдать больше — нет проблем, добавьте параметр --ratio=10.0 и порадуйте еще десять человек.

Принудительно включать или выключать DHT, как правило, не требуется. По умолчанию этот параметр активен, а если в торрент-файле с закрытого трекера есть ключ private, программа сама отключит DHT. Кстати, о закрытых трекерах: например, rutracker.org не дает скачивать торрент-файлы по прямой ссылке, только браузером со страницы раздачи. Мне не удалось найти способ загружать их сразу с помощью aria2, приходится скачивать браузером и «скармливать» программе уже локально сохраненные файлы.

2. Усложним задачу: манипулируем файлами в раздаче

Возможно, вам не требуются все файлы в раздаче. В этом случае нам помогут параметры --show-files (показать файлы в раздаче) и --select-file (выбрать файлы по номерам-индексам).

Давайте опять воспользуемся тем же примером. Запустим aria2 c параметром --show-files и для удобства чтения направим вывод в less: aria2c --show-files "mathematical imagery - dimensions.torrent" | less (у меня файл .torrent уже находился в каталоге, в который будет загружаться раздача). В списке файлов обнаруживаем помимо видео еще и субтитры на нескольких языках.

Укажем программе индексы, соответствующие видеофайлам и русским субтитрам: aria2c --select-file=1,12,14,25,27,38,40,51,53,64,66,77,79,90,92,103,105,116 "mathematical imagery - dimensions.torrent" и не будем загружать лишнего (для идущих подряд индексов можно указывать диапазоны, например 5-8; особенно полезно, когда надо скачать все файлы, кроме одного-двух ненужных).

Те же индексы помогут переименовать отдельные файлы или разместить их в другом каталоге. Попробуем переименовать два первых файла в нашем примере: -O 1=1.mov -O 12=1.srt. Обратите внимание: при этом файлы будут записаны не в каталог Mathematical Imagery - Dimensions/Content/Dimensions_1_English, как это предполагалось в раздаче, а в каталог, указанный в параметре --dir или, если он не задан — в текущий каталог.

Если в раздаче один файл, можно таким же образом указывать путь и/или имя файла, сразу указав индекс 1. Например: aria2c --dir=~/downloads/pmagic -O 1=pmagic.iso "http://linuxtracker.org/download.php?id=0e992c90a824d7fc7f7120dd8f34345aecd8e739&f=pmagic_2011_12_30.iso.torrent" — файл pmagic_2011_12_30.iso будет помещен в подкаталог ~/downloads/pmagic/ и переименован в pmagic.iso. Не перепутайте параметр -O и -o. Даже если в раздаче лишь один файл, параметр -o укажет имя для файла *.torrent, а не для загружаемых торрентом файлов.

3. Любителям сериалов

На некоторых торрент-трекерах не заводят раздачу под каждую серию, а в одной теме обновляют торрент по мере появления новых серий. То есть приходится скачать торрент, раздавать его, потом скачать его заново, проверить контрольные суммы предыдущих файлов (бывает, изменяется дорожка с переводом или заменяют «битые» файлы), скачать новые туда же и опять продолжить раздавать. Для проверки и докачки нужно добавить параметр --check-integrity=true, а если лень писать так много, то просто -V.

Тот же параметр пригодится, если надо заново встать на раздачу ранее завершенной загрузки. Если же объем проверяемых файлов слишком велик, чтобы их снова проверять, --bt-seed-unverified=true — ваш выбор. Раздача запустится без проверки контрольных сумм.

Короткого имени для этого параметра, к сожалению, нет. Но если установлен пакет bash-completion, то можно добавить правила автодополнения для длинных параметров aria2. Для начала проверьте, возможно, они уже установлены: complete | grep aria. Если появилась строчка вида complete -F _aria2c aria2c, то длинные параметры вам уже не страшны.

Если нет, то надо скачать файл, скопировать его в каталог, в котором bash_completion ищет правила автодополнения (скорее всего /etc/bash_completion.d/) и дать команду . /etc/bash_completion. Если не помогло, почитайте документацию на сайте bash-completion. Возможно, не созданы какие-то конфигурационные файлы или в них надо изменить некоторые параметры.

И тут мы подходим к самому интересному — двум важнейшим файлам в жизни нашей «арии»: входному и конфигурационному.

4. Если торрентов много: входной файл

Если торрентов много, запускать загрузки в отдельных сессиях было бы слишком утомительно. Но, к счастью, aria2 может получать адреса загружаемых файлов не только из командной строки, но и из текстового файла. Можно, например, создать в домашнем каталоге файл ariainput и добавить в автозагрузку команду aria2c -i /home/ИМЯ_ПОЛЬЗОВАТЕЛЯ/ariainput, тогда при старте системы aria2 будет автоматически скачивать и раздавать все прописанные там торренты.

Файл не обязательно должен быть один — создавайте коллекции на все случаи жизни и указывайте при запуске программы -i ФАЙЛ или --input-file=ФАЙЛ. Например, можно сделать отдельные файлы для срочных одноразовых загрузок и «вечных» раздач, для разных типов контента, для разных трекеров, для чего угодно. Никаких ограничений, это же просто текстовые файлы.

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

Краткую выжимку по самым нужным параметрам из объемистой man-страницы aria2 я приведу в конце. Параметры не нужно мешать в кучу с адресами, файл оформляется вполне удобочитаемо: после строки с адресом торрента пишите по одному параметру в каждой следующей строке с пробелом в начале и без дефисов (--), примерно вот так:

http://www.clearbits.net/get/206-dimensions---a-walk-through-mathematics.torrent
  dir=/home/имя_пользователя/downloads
  check-integrity=true
  seed-ratio=0.0

(0.0 в параметре рейтинга означает «вечную раздачу»)

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

Так как aria2 — универсальная программа, можно в этом же файле указывать не только торренты, но и загрузки по http, ftp или metalink (можно даже загружать один файл по нескольким протоколам), что выгодно отличает этот простой текстовый «интерфейс» от большинства торрент-клиентов. Существуют и графические, и веб-интерфейсы к программе, но, на мой взгляд, недостаточно удачные. Эта задача еще ждет своих героев. Пока что проще накидать ссылок в файл в любимом текстовом редакторе.

5. Еще немного автоматизации: файл конфигурации

По умолчанию aria2 ищет файл конфигурации в домашнем каталоге пользователя по адресу: /home/ИМЯ_ПОЛЬЗОВАТЕЛЯ/.aria2/aria2.conf (если его нет, создайте его). Чтобы не вводить каждый раз наиболее употребительные параметры, их можно указать здесь, а в отдельных загрузках указывать только параметры, отличающиеся от назначенных по умолчанию. На каждой строчке пишется параметр=значение, в длинной форме, но без двух дефисов, как во входном файле (отступы не нужны). Комментарии можно писать в строках, начинающихся со знака #. Вот пример из man aria2c:

listen-port=60000
dht-listen-port=60000
seed-ratio=1.0
max-upload-limit=50K

Можно даже иметь несколько конфигурационных файлов и изменять путь к ним с помощью параметра --conf-path при запуске программы. Иногда удобно для отдельной загрузки указать --no-conf, чтобы aria2 не читала файл конфигурации, и задать параметры вручную.

6. Как еще можно упростить себе жизнь?

Как известно, лучший каталогизатор — это продуманная организация файловой системы. Но организовывать структуру каталогов тоже можно по-разному. Можно для каждого торрента сразу прописывать пути загрузки, но если позволяет размер раздела, то я предлагаю поступить наоборот и устроить большую свалку: прописать в конфигурационном файле единый каталог для загрузок.

Как бардак поможет порядку? Вот так: рассортировывать по каталогам проще уже загруженные файлы. Для этого не нужно копировать и перемещать терабайты информации, ведь у нас есть замечательный инструмент — символические ссылки (симлинки). Команда ln -s или даже перетаскивание в файловом менеджере помогут раскидать ссылки на файлы по упорядоченной и логичной системе каталогов (в принципе, можно даже автоматизировать скриптом сортировку по каталогам в зависимости от расширения файлов).

Кроме того, это упростит переименование файлов (я, например, предпочитаю переименовывать видеофайлы сериалов так, чтобы номер серии был в конце имени файла — тогда SMplayer автоматически добавляет их все в плейлист, а массовое переименование удобнее делать с помощью rename или графических утилит, чем расписывать для каждого файла по индексу).

7. Параметры

И напоследок — обещанный краткий список параметров, полезных при использовании aria2 в качестве торрент-клиента.

  • -d, --dir=/СЮДА/СОХРАНЯТЬ/ФАЙЛ/ — каталог для загрузки. Сюда же сохраняется файл *.torrent (если надо сохранить его в другом месте, дополнительно укажите -o /СЮДА/СОХРАНЯТЬ/ФАЙЛ.torrent). Если не указано, все загружается в текущий каталог.
  • -i, --input-file=ФАЙЛ — входной файл со списком загрузок.
  • -j, --max-concurrent-downloads=ЧИСЛО — максимум параллельных загрузок. 5 по умолчанию.
  • -V, --check-integrity[=true|false] — проверять контрольную сумму перед продолжением загрузки и раздачей.
  • -S, --show-files — показать список файлов, ничего не загружать.
  • --select-file=ИНДЕКС — выбрать один или несколько файлов из раздачи.
  • --bt-enable-lpd[=true|false] — включить поиск локальных пиров. Не работает для торрентов с ключом private. Для остальных может сильно увеличить скорость загрузки.
  • --bt-max-peers=ЧИСЛО — максимум пиров на каждый торрент. 0 — без ограничений. 55 по умолчанию.
  • --bt-hash-check-seed[=true|false] — проверяем контрольную сумму загруженного файла и становимся на раздачу.
  • --bt-prioritize-piece=head[=РАЗМЕР],tail[=РАЗМЕР] — размер области в начале или конце файла, которая будет загружена первой. Полезно для предпросмотра недокачанных файлов.
  • --bt-seed-unverified[=true|false] — раздаем загруженное без проверки.
  • --follow-torrent=true|false|mem — вообще aria2 и так понимает, что нужно загрузить не только *.torrent, но и содержимое раздачи. Но если указано =mem, программа даже не сохранит *.torrent на диск, а просто будет держать его в памяти. Меньше хлама на диске, но в случае повторных запусков загрузки или раздачи торрент-файл будет загружаться заново. Полезно для «одноразовых» загрузок.
  • --listen-port=ПОРТ — TCP-порт для торрентов. Можно перечислить через запятую или указать диапазон через дефис. Убедитесь, что порты разрешены в файрволле.
  • -u, --max-upload-limit=СКОРОСТЬ — максимальная скорость отдачи для одного торрента. Можно указывать с приставкой К (кило) или М (мега), по умолчанию 0 — без ограничений.
  • --max-overall-upload-limit=СКОРОСТЬ — аналогично предыдущему, но суммарно для всех торрентов. По умолчанию 0 — без ограничений.
  • --seed-ratio=РЕЙТИНГ — до какого рейтинга продолжать раздачу. 0.0 — без ограничений. По умолчанию 1.0
  • --seed-time=МИНУТ — сколько минут продолжать раздачу.
  • --on-download-complete=/ПУТЬ/К/КОМАНДЕ — запустить любую программу, когда загрузка завершена. Сюда можно повесить скрипт, раскидывающий симлинки по каталогам или подающий звуковые и текстовые оповещения.
  • -Z, --force-sequential[=true|false] — запускать загрузки из списка по очереди, а не параллельно.
  • --max-download-limit=СКОРОСТЬ — ограничение скорости загрузки для отдельной раздачи.
  • --max-overall-download-limit=СКОРОСТЬ — аналогично предыдущему, суммарно для всех раздач.
  • --no-conf — не читать файл конфигурации, если надо запустить загрузку с другими параметрами.

Вот и все. И не забывайте брать адрес в кавычки, если он содержит символы, имеющие особое значение в консоли (например, &).

P. S. На всякий случай повторюсь: это советы тем, кто предпочитает «включить и забыть». Чтобы регулировать параметры в процессе загрузки, нужен клиент, обращающийся по протоколу XML-RPC к aria2, запущенной в качестве демона (с параметром -D или --daemon). Список существующих клиентов можно посмотреть на сайте aria2 или вооружиться документацией и написать свой.