Вступление
Единственный BitTorrent клиент под Linux, который пришелся мне по душе - это KTorrent. Не скажу, что он меня полностью устраивал, но при его использовании я не испытывал особых неудобств.
Хотя некоторого функционала мне в нем все же не хватало. Что-то я реализовал скриптами, что-то продолжал делать руками... Вообщем нужного мне уровня автоматизма, которого я пытаюсь добиться со всеми приложениями, которые использую более или менее регулярно, и которые время от времени требуют выполнения каких-либо рутинных операций, мне достичь не удалось.
На самом деле мне не так уж и много надо. Мне не нужен огромный комбайн, который умеет, например, читать RSS, поддерживать надстройки в виде плагинов и т. п.
Попробую объяснить, что мне нужно от BitTorrent клиента, и зачем мне это нужно...
Вот, к примеру, на некоторых трекерах стоит ограничение на максимальное количество торрентов, которые вы раздаете. При превышении лимита вам грозят баном или прочими видами ограничений. Даже если банить вас никто не собирается, то все равно правила нарушать не стоит хотя бы из соображений взаимного уважения, но вручную отслеживать количество раздаваемых торрентов - довольно утомительное занятие. Почему бы не возложить эту работу на BitTorrent клиент?
Далее. Если уж говорить обо мне, то у меня все устроено следующим образом: есть старый диск на 160 Гб, на котором у меня хранятся зеркала репозиториев и скачанные торренты, т. е. наиболее часто изменяемые данные. Не смотря на то, что скачивание торрентов из локальной сети требует очень активной работы с диском, система не тормозит, т. к. находится на другом диске + если из-за сильного износа скачиванием и раздачей торрентов диск выйдет из строя, то никакие ценные данные не потеряются - только торренты и зеркала репозиториев, которые всегда можно скачать заново.
Так вот. Опять-таки правило хорошего тона при использовании peer-to-peer сетей гласит: скачал файл - не уходи с раздачи, дай скачать другим. Тут я предпочитаю следующую схему: при открытии BitTorrent клиентом *.torrent файла, файлы торрента скачиваются на тот самый старый диск. По завершении скачивания всех файлов они копируются в специальную директорию типа "Посмотреть в свободное время", в которой они будут лежать бесконечно долгое время, пока я их не посмотрю и не удалю. Раздача же торрента продолжается с моего старого диска, работа с которым, напомню еще раз, практически не замедляет работу системы. Как только время раздачи торрента превысит, к примеру, неделю, его раздача прекращается и он удаляется с диска.
Торренты я скачиваю не только из интернета, но и из локальной сети. В связи с очень большой разницей в скоростях мне нужна возможность запускать несколько копий одного и того же клиента (для интернета и для локальной сети), но с разными конфигами. KTorrent не позволяет это сделать. При работе с ним мне приходилось запускать вторую копию из под другого пользователя.
Ну и, конечно же, необходима возможность контролировать максимальную скорость скачивания/отдачи в зависимости от времени суток, т. к., к примеру, у моего провайдера ночью скорость скачивания и отдачи увеличивается в 2 раза. Самый удобный, на мой взгляд, способ такого контроля - запуск при помощи cron'а какой-нибудь программы, которая будет передавать указанные опции командной строки уже запущенной копии.
Кроме этого, хотелось бы, чтобы клиент был написан на GTK, т. к. KTorrent - это единственное Qt приложение, которое я использую в повседневной работе - зачем же в таком случае постоянно держать в памяти различные Qt/KDE библиотеки?
На работе, в силу ее специфики, я программирую только на C, поэтому получать опыт программирования на других языках и изучать далекие от специфики работы технологии с целью повышения квалификации приходится дома. :) В итоге, как и в случае с PyVSB, неудовлетворенность имеющимися средствами и желание попрограммировать на C++ параллельно с чтением "Язык программирования C++" Б. Страуструпа сподвигли меня на написание собственного торрент клиента.
Знакомьтесь, Flush
Основные возможности:
Flush использует библиотеку libtorrent от Rasterbar Software.
Скриншоты:



Отговорки, отказ от ответственности и прочее
Как уже было сказано выше, Flush писался исключительно для того, чтобы "написать что-нибудь на C++", поэтому возгласы типа "зачем еще один велосипед?" не имеют смысла.
Версия первая, а значит, возможно, не совсем стабильная. Но, т. к. я им пользуюсь уже достаточно длительное время, то можно считать, что предварительное тестирование он уже прошел. Да, некоторых возможностей, которые могут иногда пригодиться, в нем нет, есть небольшие недостатки, которые мне известны, но до их исправления руки пока не дошли - в конце концов на то версия и 0.1, чтобы быть далеко не идеальной. Просто захотелось выложить по-раньше на всеобщее обозрение, т. к. в таком случае, возможно, мне посчастливится услышать осмысленную критику. Возможно, кто-то даже не поленится залезть в код и дать советы, как лучше реализовать ту или иную функцию. К примеру, текущая реализация работы с DBus меня не устраивает - если вдруг кто-то решит запустить новую сессию DBus, то станет возможным запуск нескольких копий с одним конфигом, и сломается передача параметров уже запущенной копии. Как это сделать более правильно - пока не знаю, особо над этим еще не задумывался, т. к. считаю, что для первой версии это вполне рабочая схема. Единственное что удручает - так это практически полное отсутствие документации по DBus, а изучать его по комментариям в исходных текстах, честно говоря, просто жалко время.
libtorrent-rasterbar-0.14 я пока не поддерживаю - в ней довольно сильно изменился API по сравнению с 0.13, и внести изменения в код я пока не успел.
Да, и самое главное: никакой гарантии, что Flush будет активно поддерживаться и развиваться я не даю. :)
Где скачать?
Естественно, эту статью я написал не просто так. Если мне потребовался такой BitTorrent клиент, то наверняка он также придется по душе и кому-то другому, чему я буду очень рад. Несмотря на существующие недостатки и недоработки, я Flush'ем вполне доволен и KTorrent'ом больше не пользуюсь.
Исходники и deb пакеты для Ubuntu-8.10-i386 и Ubuntu-8.10-x86-64 можно скачать здесь:
http://sourceforge.net/projects/flush/
суббота, 3 января 2009 г.
Flush - еще один GTK-based BitTorrent клиент
Теги: bittorrent, flush, gtk, gtkmm, linux
Подписаться на:
Комментарии к сообщению (Atom)


72 comments:
Я должен вас огорчить. Это все уже реализовано в deluge
Хотелось бы увидеть функцию фильтрации по ip-адресам. :)
То что вкладка называется "демон" (в настройках) означает что клиент использует клиент-серверную модель, где вся работа выполняется демоном (сервером), а УИ - только клиент, т.е. можно запустить демона на одной машине, а управлять с другой?
> Я должен вас огорчить.
> Это все уже реализовано в deluge
Хм... Когда я только начинал разрабатывать Flush, то каких-то функций там точно не было. Разве он уже умеет удалять старые торренты по признакам "слишком много раздач", "слишком долго раздаются"? А скачанные данные (файлы) торрента при этом удаляет?
Да нет, вы меня не огорчили. Как было сказано выше, я писал его просто для того, чтобы что-нибудь написать на C++. Недостатки существующих клиентов - только повод. Если бы все это было уже реализовано, то просто написал бы что-нибудь другое. :)
> Хотелось бы увидеть функцию фильтрации по ip-адресам. :)
Возможно, когда-нибудь появится, но не обещаю. :)
Анонимный, не совсем. В данный момент GUI и демон связаны друг с другом через proxy-класс и могут работать только внутри одного процесса. В будущем же, при большом желании, можно внутри этого proxy-класса поставить DBus или сокеты и запускать GUI и демон в отдельных процессах или на отдельных машинах.
Разве он уже умеет удалять старые торренты по признакам "слишком много раздач", "слишком долго раздаются"? А скачанные данные (файлы) торрента при этом удаляет?
Как я себе это понимаю - да.
Не подскажете как сделать treeview в полоску? сам нагуглить не смог.
Первое впечатление очень приятное, спасибо.
А как насчет поддержки прокси и возможности полного отключения DHT ?
Очень хотелось быть иметь функцию ПОЛНОЙ работы через прокси (socks для peer-2-peer и http для всего остального) и гарантии нехождения пакетов напрямую, а также полного отключения DHT для ratio-based-трекеров.
Не подскажете как сделать treeview в полоску? сам нагуглить не смог.
gtk_tree_view_set_rules_hint()
огромное спасибо за ссылку!
vuze умеет работать с локалкой и инетом, но он на яве
для себя rtorrent для инета и transmission для локалки
> А как насчет поддержки прокси и возможности полного отключения DHT ?
Отключить DHT - не проблема.
> Очень хотелось быть иметь функцию ПОЛНОЙ работы через прокси (socks для peer-2-peer и http для всего остального) и гарантии нехождения пакетов напрямую...
Я сейчас бегло пробежался глазами по документации к libtorrent - на первый взгляд, с прокси работать она умеет, так что особых сложностей здесь тоже возникнуть не должно.
> ...а также полного отключения DHT для ratio-based-трекеров.
А вот насчет этого не знаю. Не уверен, что можно реализовать выборочное отключение DHT средствами libtorrent. Делать же форк libtorrent или включаться в его разработку у меня, честно говоря, пока особого желания нет, и хотелось бы пока остаться в рамках текущих возможностей libtorrent.
P.S.: Только поймите меня правильно - я не могу сейчас обещать, что реализую какие-то возможности, т. к. все это делается в свободное время, которого всегда не хватает. К тому же все свободное время тратить на Flush я тоже не собираюсь - мне много чего еще хочется успеть и много чему научиться, но выслушать пожелания я всегда готов. :)
а как у него с локалью KOI8-R? или это привязано к libtorrent?
Анонимный, с локалью, отличной от UTF-8 пока туговато. :( libtorrent упорно создает файлы с именами в UTF-8. Пока что этим вопросом вплотную не занимался, т. к. сейчас мало у кого не UTF-8.
А deluge у вас нормально работает? Если да, то, скорее всего, это вполне решаемая проблема, т. к. deluge тоже использует libtorrent-rasterbar. Спрашиваю потому, что у меня deluge падает, если попытаться запустить ее с локалью, отличной от UTF-8.
Развязать ядро и GUI нужно... имхо, куда удобнее запустить демон при старте системы, а потом клиентом контроллировать что там происходит. Бывает свет рубают (упса нет), попросить по телефону домашних включить комп не проблема, но говорить заходить учетную запись что бы заходить и запускать программу скачивания... неочень.
Какие нужны библиотеки?
GTK+
libtorrent с http://www.rasterbar.com/products/libtorrent/
libconfig с http://www.hyperrealm.com/libconfig/libconfig.html
Что ещё?
Какие нужны версии?
На мой взгляд, многих пользователей, которые с радостью перешли бы на ваш клиент, отпугивает тот факт, что вы не гарантируете дальнейшего развития проекта.
> Какие нужны библиотеки?
libboost 1.34-1.37
libconfig-1.3
libgtkmm-2.4
libtorrent-rasterbar 0.13
В ближайшее время постараюсь добавить поддержку libtorrent-rasterbar 0.14.
Stedy, согласен. Но я уж лучше не буду обещать и буду развивать, чем пообещаю и по какой-либо причине потом откажусь от него.
Целью данной статьи было проинформировать заинтересованных людей, что есть такая софтина. Если она их устраивает уже сейчас, то они смогут начать пользоваться ей и отсылать мне багрепорты. Если кого-то Flush пока не устраивает, но заинтересовал, то ему ничего не стоит, к примеру, подписаться на http://sourceforge.net/ по RSS или E-mail на новости проекта и подождать, пока во Flush появится весь необходимый ему функционал.
Спасибо, нужно будет попробовать.
Добавил поддержку libtorrent-rasterbar 0.14.1. Теперь пакеты собраны именно с этой версией.
KTorrent лично мне нравится тем, что он умеет качать торренты из новостных лент. А Flush могёт?
Maxkon, нет, не могёт. :) Пока что добавляю в него тот функционал, который считаю наиболее нужным, и для которого требуется по-меньше времени на реализацию, чтобы клиент как можно быстрее приобрел необходимый минимум функций, который требуется пользователям вроде меня. Лично мне автоматическое скачивание торрентов по RSS совсем не нужно, т. к. я пользуюсь только закрытыми трекерами, поэтому пока что подобного функционала ждать не стоит.
Я перепробовал различные Torrent-клиенты с GUI: как громадины Azureus и Deluge, так и более легковесные вроде Lince.
В итоге остановился на transmission, в котором вообще нет GUI. Висит себе демон и никому не мешает. Интерфейс к нему в виде командной строки и через Web. Получается очень удобно! А вам было бы, наверное, весьма интересно изучить варианты взаимодействия программ. =)
Kirikaza, это вы о DBus? Да, согласен, далеко не лучшее решение. Все никак не дойдут руки до "UNIX: взаимодействие процессов" Стивенса - никак не могу найти ее в печатном виде. Может быть, вы посоветуете что-нибудь другое? :)
Было бы неплохо чтобы программа могла работать со случайными портами, а не с указанными пользователем
Клиент хороший, буду пробовать...
Хочу поддержать запрос на появление IP фильтра, потому как в Наших краях (Нижний Новгород) разделение на внешнюю сеть и региональный пиринг пока ещё очень актуально...
RSS
Странно, ведь именно закрытые трекеры и практикуют директлинковые-рссленты. Единожды настроив правила, вы будете получать новые эпизоды любимых сереалов, вообще не заходя на эти трекеры)
хотелось бы:
- что бы торенты можно было объеденять в группы или хотя бы по цветам а еще было бы не плохо добавить таймер
вот я постоянно качаю для друзей и знакомых фильмы тощо затем когда я все это залил на флешку или диск мне такой облом искать из списка то что мне уже не нужно а так бы я бы видел или по цвету или по группе или оно бы само грохалось это возможно ? :)
(хотя бы в настройках такая возможность была это было бы замечательно)
Спасибо за клиент и проделанную работу! Функционала, конечно, маловато, но имхо это вопрос времени...
Скажите, можно ли присоединиться к разработке? Опыт программирования есть.
> Скажите, можно ли присоединиться к разработке? Опыт программирования есть.
Если вы готовы писать понятный, легкий в сопровождении и расширении код, то почему бы и нет - буду рад помощи. Пишите на email - договоримся.
Отличная софтина, Дмитрий!
Очень не хватает ограничений скоростей для конкретного торрента!
Скажите , Дмитрий а с libtorrent-rasterbar 0.14.4 будет работать?
> Скажите , Дмитрий а с libtorrent-rasterbar 0.14.4 будет работать?
Да, будет.
Здравствуйте Конищев Дмитрий, мне понравился Flush своей лёгкостью и функциональностью, но очень не хватает функции отключения компьютера при завершении загрузок (как в utorrent под Windows). Возможно ли это реализовать в будущих версиях Flush?
с некоторого неидентифицируемого момента flush перестал запускаться. при вызове через консоль показывает следующее:
(flush:12399): libglade-WARNING **: unknown property `orientation' for class `gtkmm__GtkVBox'
(flush:12399): libglade-WARNING **: unknown property `orientation' for class `gtkmm__GtkVBox'
terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::substr
Aborted
ОС Ubuntu 8.10 x64
я новичек и не понял как запустить эту красоту в графическом режиме. Хочется взглянуть своими двоими.
Анонимный, а в чем именно проблема и какой у вас дистрибутив?
в ubuntu 9.04 собрался flush-0.7.1 но после запуска не появляется окна. Нужно ли вводить дополнительные параметры --display
Никаких ошибок не выдает? А какой у вас менеджер окон? Он поддерживает трей? По умолчанию Flush запускается свернутым в трей.
Хотелось бы возможность смены идентификации клиента. Из опробованных клиентов под linux меня устроил только Deluge, но он не переименовывает скачиваемые файлы :( Ваш клиент понравился, всё что мне нужно в нём присутствует, но на одном закрытом трекере он не внесён в список разрешённых, а хотелось бы качать именно им... Администрации написал с просьбой включить клиент в список разрешённых, но пока тишина.
Немного покопавшись в исходниках захардкодил идентификатор другого клиента и теперь могу пользоваться Flush'ем, но всё же хотелось бы видеть опцию смены идентификатора в программе, а не патчить исходники каждый раз при выходе очередной версии.
Поставил. Программка понравилась.
Анонимный, хорошо, сделаю. Кстати, не подскажете список идентификаторов, которые принимает любой трекер (никогда с такой проблемой не сталкивался)?
Из Ваших исходников
libtorrent/src/identify_client.cpp
148 строка
За буковками обычно следует номер версии и какие-то произвольные символы (отличаются между сессиями).
Ну самые распространённые (разрешённые) клиенты это, наверное, uTorrent и Azureus, версии текущие.
фича подмены идентефикатора клиента будет означать то, что на всех уважающих себя приватных трекерах flush будет всегда среди запрещинных до скончания веков, ибо это идеологически неправильная вещь.
анониму я бы предложил все-таки подождать ответа администрации нужного ему трекера.
Антон, спасибо за замечание. В таком случае, наверное, действительно лучше не реализовывать подобный функционал.
Антон, flush будет в запрещённых, если в нём будут какие-нибудь фичи для отсылки неверных данных по скачанному/отданному трафику, либо обнаружится какой-нибудь досадный баг, а идентификатор к этой информации отношения не имеет. Тем более, если он будет слать идентификатор другого клиента, то что будут блокировать на трекере, все существующие клиенты? :)
Спасибо за прогу, в ubuntu попробовал несколько разных торрент клиентов, но ни один из них не хотел раздавать уже скачанное, а Flush подхватил сразу, при всех тех же начальных условиях.
Только не добавилась иконка программы в главное меню, но это мелочи.
Отдельно спасибо за возможность выбирать необходимые файлы в дереве загружаемых файлов.
Константин.
Версия 0.7.2
Огромное спасибо Вам за замечательный torrent клиент Flush. Это лучший клиент под GTK, спасибо. Очень не хватает web интерфейса, впрочем спасает возможность управления им из командной строки :)
Еще раз спасибо, за замечательную программу.
Ubuntu 9.04
Flush 0.8
Не срабатывает ограничение скорости скачивания из контекстного меню в трее.
Если поставить закачки на паузу, а потом стартануть, тогда ограничение вступает в силу.
И, как мне кажется, программа неверно рассчитывает предполагаемое время скачивания. Есть параметр скорость скачивания, а есть скорость скачивания данных. Второй меньше. Если считать по нему, то время получается более близкое к реальному, а если по первому, то к тому что программа рассчитывает.
Спасибо еще раз за программу. Константин.
> Не срабатывает ограничение скорости скачивания из контекстного меню в трее.
Если поставить закачки на паузу, а потом стартануть, тогда ограничение вступает в силу.
Тут вопросы к libtorrent-rasterbar. Попробуйте написать багрепорт автору библиотеки. Сейчас попробовал - у меня все работает, поэтому сам багрепорт написать не могу.
> И, как мне кажется, программа неверно рассчитывает предполагаемое время скачивания. Есть параметр скорость скачивания, а есть скорость скачивания данных. Второй меньше. Если считать по нему, то время получается более близкое к реальному, а если по первому, то к тому что программа рассчитывает.
Только что проверил - время скачивания расчитывается на основе скорости скачивания данных.
Замечательная программка. Но вот что-то я не нашел возможности задавать количество одновременно скачиваемых торентов :(
Как уже заметили выше, очень не хватает веб-интерфейса для удаленного добавления торрентов. А так клиент очень даже не плох! Респект и увага афтару!
Давно искал нечто подобное. К сожалению запустить не смог.
OS Gentoo; flush-0.8;
$ flush
W: Создание сессии Flush завершилось неудачей. Не удалось получить адрес DBus сессии.
# /etc/init.d/dbus status
* status: started
$ dbus-launch
DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-CcwaOHJWbI,guid=ef35c084d45d262395a310cc4b07e804
DBUS_SESSION_BUS_PID=8645
$ locate dbus-launch
/usr/bin/dbus-launch
Иногда ошибка выглядит так
$ flush
W: [Ошибка DBus.] Failed to execute dbus-launch to autolaunch D-Bus session
Возможно не хватает файла
/etc/dbus-1/system.d/flush.conf
ansdim, вот здесь была похожая проблема. Возможно, решение подойдет и вам.
Спасибо за быстрый ответ. Сейчас запускаю flush через flush-start
===================================
#!/bin/bash
# Avoid relying on autolaunch to #improvise D-Bus sessions for each process
if test -z "$DBUS_SESSION_BUS_ADDRESS" ; then
eval `dbus-launch --sh-syntax --exit-with-session`
fi
/usr/bin/flush
=======================================
Написал ebuild для инсталяции flush под gentoo.
http://bugs.gentoo.org/show_bug.cgi?id=294016
Спасибо огромное за чудесную программу. Я надеюсь в будущих версиях будет реализована поддержка очереди. И "Url источника" ничего не показывает. В остальном всё супер.
Анонимный, "Url источника" показывает только в том случае, если в торренте содержится эта информация. Не все сайты записывают ее в torrent-файл.
Дмитрий. Будет-ли в новых версиях возможность задавать количество одновременно скачиваемых торентов, а также поддержка очереди?
'И "Url источника" ничего не показывает.'
Подтверждаю: на некоторых торентах Url источника не показывается. Примеры:
http://kinozal.tv/
Url источника может быть в различных полях. Если эта информация в поле 49 - URL будет показан коректно. Если в поле 39 - прблема. Vuze показывает информацию в любом случае. Надеюсь в следующей версии будет исправлено.
> Дмитрий. Будет-ли в новых версиях возможность задавать количество одновременно скачиваемых торентов, а также поддержка очереди?
Дозер, пока что не думал об этом, т. к. мне оно как-то и не нужно вовсе. Посмотрим, может быть и сделаю.
> ... Подтверждаю: на некоторых торентах Url источника не показывается. Примеры: http://kinozal.tv/ ...
ansdim, скачал сейчас торрент с кинозала - он помещает URL в поле comment. В спецификации про это поле сказано: "(optional) free-form textual comments of the author (string)". Т. е., в принципе, там может быть все что угодно вплоть до URL домашней странички BitTorrent-клиента, которым данный торрент создавался, так что это довольно спорный вопрос, стоит ли отображать URL из этого поля.
очень надеюсь что реализуете. Так как функция полезна, особенно тем у кого канал не очень широк. К примеру я качаю несколько фильмов. В настройках ставлю одновременную скачку не более одного торента и у всех торентов есть порядковый номер и они качаются в соответствии с этим номером. тоесть по очереди. очень удобно. А в данный момент приходится ставить торенты на паузу и постоянно мониторить скачался ли текущий торент что-бы запустить следующий :(
Раньше использовал uTorrent. но гонять его под вайном не гуд
Очень не хватает возможности ограничения скоростей скачивания и раздачи отдельного торрента, а также возможности добавления пиров вручную.
Если это возможно, добавьте пожалуйста.
P.S.: Ну а очередь закачки и вправду очень полезная штука, жаль что ее пока нет :)
"скачал сейчас торрент с кинозала - он помещает URL в поле comment. В спецификации про это поле сказано: "(optional) free-form textual comments of the author (string)". Т. е., в принципе, там может быть все что угодно вплоть до URL домашней странички BitTorrent-клиента, которым данный торрент создавался, так что это довольно спорный вопрос, стоит ли отображать URL из этого поля."
Аргументы за отображение URL из поля comment:
1 vuze поступает именно так
2 кроме кинозала есть другие трекеры, которые поступают именно так
3 можно проверить поле URL в случае его отсутствия отобразить поле comment
ansdim, ОК. Я уже вообщем-то это сделал (сейчас в ветке next, а впоследствии перейдет в версию 0.9).
Клиент очень понравился, легковесность на лицо, хотелось бы увидеть функцию хранилища. переноса после закачки в другую директорию.
так ведь есть такое.
Уважаемый Дмитрий, у меня к Вам небольшая просьба. не могли бы вы добавить в свой торрент клиент такую функцию как добавление торрента без перепроверки при наличии указанных файлов? Часто создаю весомые раздачи и хотелось бы не ждать лишний раз тем более точно знаю, что файлы из моей раздачи не повреждены и никаких проблем с раздачей не предвидится. Также хотелось бы увидеть такую функцию, как перепроверка данных после скачивания.
Заранее спасибо!
з.ы. + вебморда к этому клиенту в виде плагина/модуля была бы очень кстати.
Gadel, такую возможность я добавить не могу, т. к. libtorrent, которую использует Flush, не позволяет это сделать, а лезть в ее исходники я не могу, т. к. Flush должен работать с той версией libtorrent, которая установлена в дистрибутиве. По поводу проверки данных после скачивания - достаточно щелкнуть правой кнопкой по торренту и активизировать пункт меню "Recheck".
Отправить комментарий