wTorrent — удобная графическая web-морда к популярному консольному клиенту
rTorrent.
Удобен он тем, что поразительно (хотя и ожидаемо от консольной программки) не требователен к аппаратным ресурсам, прост в настройке и управлении и поддерживается большинством трекеров.
Здесь я опишу как установить надстройку над ним для управления своими торрентами через Интернет.
Особенно актуально это в случае, если компьютер подключен к сети не напрямую, а через домашний сервер, и торрент-клиент установлен именно там.
Системные требования:
Консольный torrent-клиент rTorrent, собранный с поддержкой xmlrpc и scgi-управления.
Web-сервер с поддержкой SCGI (lighthttpd или apache).
PHP5 с поддержкой PDO и XML-RPC.
В моем случае за основу взята система Gentoo. Для других дистрибутивов установка несколько отличается, но все нужные компоненты есть в репозиториях большинства дистрибутивов, ищите.
Для начала включим USE-флаги:
net-p2p/rtorrent xmlrpc daemon
dev-lang/php pdo xmlrpc sqlite
Устанавливаем ПО.
emerge net-p2p/rtorrent dev-lang/php www-servers/apache www-apache/mod_scgi
По зависимостям установятся xmlrpc-c, scgid и libtorrent.
Настройка rTorrent.
Создадим пользователя rtorrent для функционирования клиента в качестве демона:
addgroup rtorrent
adduser -d /PATH/TO/DOWNLOADS -m -p password -g rtorrent rtorrent
Pедактируем /etc/conf.d/rtorrent, заменив $USER на имя нашего пользователя.
Создадим конфигурационный файл rtorrent и впишем в него нужные настрйоки.
cd /path/to/downloads
echo "scgi_port = localhost:5000" >> .rtorrent.rc
chown rtorrent:rtorrent
Настройка клиента закончена, запустим его командой /etc/init.d/rtorrent start
Настройка web-сервера.
Отредактируем /etc/conf.d/apache2, добавив туда такое (если строка уже есть, дописать новые параметры в конец):
APACHE2_OPTS="-D PHP5 -D SSL -D SCGI"
Приведем /etc/apache2/modules.d/20_mod_scgi.conf к виду (
убрав мои кавычки, без них парсер съедает код):
"<"IfDefine SCGI">"
LoadModule scgi_module modules/mod_scgi.so
SCGIMount /RPC2 127.0.0.1:5000
"<"Location /RPC2">"
AuthName "Private Remote Procedure Call"
AuthType Basic
AuthBasicProvider file
AuthUserFile /path/to/webroot/htpasswd
Require user remotecall
"<"/Location">"
"<"/IfDefine">"
Создаем htpasswd:
htpasswd -c /path/to/webroot/htpasswd remotecall
Установка wTorrent
Качаем архив:
www.wtorrent-project.org/trac/changeset/latest/trunk/?old_path=%2F&format=zip
Распаковываем.
Заходим на
servername/install.php и следуем советам указанным там.
Если все сделано правильно, мы увидим вот такой интерфейс :)
комментарии (88)
Надо сказать что падает не всегда. У меея падало один раз вроде. Да ну и фс должна уметь писать по русски естественно.
Именно поэтому.
На каждую кодировку поддержку писать — глупо. Тогда надо и cp1251 (windows xp), и UTF-8 (Linux\FreeBSD), и KOI8 (OpenBSD) и даже CP866 (А вдруг?).
При том, что автор программы — не из России, а за рубежом cp1251 практически не распространена, давно везде юникод.
>падает если трекер возвращает ошибку на русском
Падает, насколько я понял, если трекер возвращает ошибку по-русски. Или при обращении к русскому торренту через _xmlrpc_. И виноват в этом не rTorrent, а фряшный xmlrpc-c, ибо в линуксе все отлично работает.
Русская ошибка в протоколе общения клиент-сервер, да еще и при работе не в Unicode — это бред. Так делать _нельзя_ и за такое нужно обрывать руки автору трекера, а не клиента. Это потенциально выдает феерические глюки под не-интернациональными системами, например в OpenBSD, где близко нет юникода и вообще все очень туго с локалями.
Не задумывались, почему почтовые сервера возвращают ошибки (rejected, redirected, unavail и т.д.) на английском и только на английском?
Конечно же делать вывод в нестандартном виде это плохо.
Но еще более плохо писать программы так, что она падает всего лишь получив на вход какие-то данные в неожиданном для себя виде.
Под фрей русский не тестировал, не попадалось таких торрентов.
— rtorrent/src/rpc/xmlrpc.cc (revision 1078)
+++ rtorrent/src/rpc/xmlrpc.cc (working copy)
@@ -371,8 +371,34 @@
#endif
case torrent::Object::TYPE_STRING:
— return xmlrpc_string_new(env, object.as_string().c_str());
+ {
+#ifdef XMLRPC_HAVE_I8
+ // The versions that support I8 do implicit utf-8 validation.
+ xmlrpc_value* result = xmlrpc_string_new(env, object.as_string().c_str());
+#else
+ // In older versions, xmlrpc-c doesn't validate the utf-8 encoding itself.
+ xmlrpc_validate_utf8(env, object.as_string().c_str(), object.as_string().length());
+ xmlrpc_value* result = env->fault_occurred? NULL: xmlrpc_string_new(env, object.as_string().c_str());
+#endif
+
+ if (env->fault_occurred) {
+ xmlrpc_env_clean(env);
+ xmlrpc_env_init(env);
+
+ const std::string& str = object.as_string();
+ char buffer[str.size() + 1];
+ char* dst = buffer;
+ for (std::string::const_iterator itr = str.begin(); itr != str.end(); ++itr)
+ *dst++ = ((*itr < 0x20 && *itr != '\r' && *itr != '\n' && *itr != '\t') || (*itr & 0x80))? '?': *itr;
+ *dst = 0;
+
+ result = xmlrpc_string_new(env, buffer);
+ }
+
+ return result;
+ }
+
case torrent::Object::TYPE_LIST:
{
xmlrpc_value* result = xmlrpc_array_new(env);
Еще раз спасибо.
Нигде такого не встречал.
wl500g.info/showthread.php?t=14256
А что там ужастного? Скриншотиком не поделитесь? Интересно просто.
1) чтото не особо он развивается последнее время… коммитов в свне нет давно. Так и торчит на 99ой ревизии
2) памяти ест много очень; на 1000+ пирах часто медленно качает из-за ошибок:
«file chunk write error cannot allocate memory»
хотя в конфиге прописал
max_memory_usage = 1200288000
и в /boot/loader.conf:
kern.maxdsiz=«2147483648»
Думаю попробовать transmission-webgui
PS сам использую связку screen+rtorrent+wtorrent+самописную тулзу в трее )
нету :(
Сейчас немогу проверить, возможно поставил пакет из тестовой ветки (~x86)
net-p2p/rtorrent-0.8.4-r1
gentoo.ru/
Про функциональность, не силен в REST, но можно ли там реализовать multycal, сложные вызовы с логикой (доступна команда if).
wget localhost/status.txt | grep Some torrent name
по поводу xmlrpc, у меня этот пакет требует cmake, так что какая разница с ним или без него.
Хочу организовоть дома файловое хранилище, интересно а бывают remote клиенты с возможностью указания(а лучше выбором) пути для загрузки фыйла, т.к. даже uremote не имеет такого.
Пытался настроить через lighttpd — получал сообщение, что не видит рторрент, потом попробовал настроить апач, довольно быстро завелось. Поподались еще рекомендации настроить на порт 80, мне не помогло, хоть под апачем работает и на 80, но этого было не достаточно.
2. Как обстоит работа в нестандартных браузерах/разрешениях/устройствах? (с айфона к примеру Flux управляеца на ура, Deluge — ваще никак)
Для него даже отдельный web-сервер не нужен и влезает он в жалкие 32 мегабайта оперативки ADSL-роутера :-)
или вы знаете что-то получше?
с возможностью деления прав пользователей, заливки 20 торрентов одним махом, и возможностью указать что делать при завершении закачки.
А добила блокировка BitTornado на HDTracker.ru. После этого и ушел обратно на rtorrent.
Найти там то, что нужно — фильм (а не аниме, мангу, игру, саундрек или видео для айпода), в хорошем качестве (а не экранку, бета-версию или сатрип), на русском языке (а не на японском и не в фандабе, и без неотключаемых украинских субтитров) меньше чем за 20 минут стало практически невозможно.
Ну и паранойа на фоне копирастии у модераторов тоже несколько не радует, особенно когда действует принцип «сначала закроем раздачу, потом разберемся за что».
А админы — наплевать. Мне админы не надо, мне надо фильмы. Я и их форум-то не читаю.