Pull to refresh

Linux DC++ и многопоточность

Reading time 5 min
Views 8.2K
Всем доброго времени суток. В данном хабра топике хочу рассказать о работе в сетях DC под ос Linux. Сам я пишу из под Linux Mint 7, но на Ubuntu 9.04 всё идентично!
Итак, я обладатель доволь но медленного канала в Интернет. Всего, как заявлено в тарифе, 250 кбит(31.25кбайт). На деле обычно 26-28. И если мне что-то требуется то, ищу это сначала в сети DC. Благо у меня есть пиринг по городу Красноярску, так что проблем с поиском не бывает.

Когда я был в винде, меня всё устраивало пользовался StrongDC++ 2.21. Всё замечательно… И вот, теперь я в линуксе. История моего пути это отдельная статья…
Ну и естественно, первое что было мною сделано это поиск альтернативных программ и способов запуска под вайном. Нашлась программка valknut. Ну попробовал. Ну работает. Не понравилась. ИМХО.

Wine и Flylink


Опыт пользования Linux DC++ был еще на 8.04, что как-то не очень хотелось изза багов. Полез на winehq.org. И узнал, что наш, Flylink-r370 работает идеально. Ну всё, думаю. Щас всё будет путем… А нет-то… Скачал я эту ревизию. Установил, запустил, под вайном 1.1.25. И да, действительно сие чудо работает. Начал тестировать функциональность. Сделал шару. Подключился к хабам. Решил скачать файл большого размера, больше 5 гигов, и чтобы он был у достаточно большого количества юзеров. Всё, отлично, нашел. И первое что мне не понравилось, так это иконки файлов которые всё путали. Если это файл, то выглядит как норальная папка в XP, а если это папка, то иконка представляет из себя белую папку. Ну думаю. Ладно, ради работающего DC клиента можно и смериться. Когда я выделил строку, у меня пропало поле с информацией, у скольки человек имеется данный файл. Ну это было уже не серьезно. Но еще терпимо, ибо при выборе файла большого размера я руководствуюсь еще и этим параметром. Поставил на закачу. Сразу порадовала скорость, 8 мбайт/с. Но оченьь растроила загрузка процессора. Так как в основном у меня качается всё на ntfs раздел, что не есть тру, mount.ntfs-3g жрет довольно много процессорного времени, почти 100%. Основная масса была скачана на довольно приличной скорости, почти 8 мегабайт в секунду. НО(!!!) Когда осталось уже меньше 10% скорость упала до 50 кбайт/с. Я подумал что одновременно у всех кончились слоты, или еще чтонибудь. Решил, что через пару минут всё будет лучше. Оказалась, я не правильно думал ))). Открыв список, с кого я качаю. Я увидел, что закачка происходит всего лиш с двух компов. и со скоростью около ~30кбайт. Хотя до этого он отлично качал с более чем 200 юзеров ). Закрыв соединение, он тут же подхватил кого-то со скоростью 2 мегабайта в секунду. Я конечно думал, что в конце блоки качаются на маленькой скорости, но не до такой же степени, в Strong DC++ такого не было вообще. Это была последняя капля…

Linux DC++


И я решился попробовать Linux DC++ более свежий. Прошло довольно много времени, примерно год. Может они и исправили этот баг, что при запуске он у меня просто вылетал.
Итак, sudo aptitude install linuxdcpp. И мы стартуем… На удивление он запустился! Это знак! Я быстренько добавил в шару фильмов на 5 гигов, чтобы потестить. Хочу предупердить, что добавлять в шару стоит по маленьку, ибо если вы сразу дадите задание на 100 ГБ, у вас и комп и Linux DC++ уйдет в даун. Нужно добавлять по одной, максимум две папки. Чтобы можно было дождаться того момента когда он закончить хеширование, выключить клиент, и запустить его снова, иначе при экстренном выходе вам придется проходить процедуру хеширования заново!!! Ну вот, и мы вошли на хабы. В этот раз я стал умней, и в настрйоках устновил место скачивания на ext3 раздел. выбрал файл, багов замечано не было, единственно, после нажатия на кнопку поиск окно зависает(темнеет), и я жду когда он закончит поиск. Выбрал тестовый файл на закачку. И жду. Как оказалось, данная версия построена на стабильном ядре, которое не поддерживает многопоточность. Но есть 0.707 которое поддерживает многопоточность, то что нам и нужно. Вот мануал по которому я узнал где взять исходники версии с многопоточностью, и краткое руководство к действию. Собрав все остатки печенья со стола, я приготовился компилить.) Благо опыт не малый… Но не хотелось мне собирать пакет, потом его ставить. Я решил сделать по другому, не засаряя систему. Сейчас вам всё расскажу. итак,

Берем исходники


sudo aptitude install bzr scons
cd ~/
mkdir linuxdcpp
cd linuxdcpp
bzr branch http://bazaar.launchpad.net/~razzloss/linuxdcpp/0705-core

Замечательно, теперь у нас есть исходники свежего linuxdcpp. Что же мы с ними можем сделать? Скомпилить!

Подготовка системы к сборке свежего Linux DC++


Как написано в мануале, дальше удовлетворяем все зависимости. Вот строчка из моего Readme.txt, у вас может незначительно отличаться изза новой версии:
Dependencies:
-------------
scons >= 0.96
pkg-config
g++ >= 3.4
gtk+-2.0 >= 2.6
gthread-2.0 >= 2.4
libglade-2.0 >= 2.4
pthread
zlib
libbz2
libssl

Итак, если у вас ubuntu 9.04 то проблем со старыми пакетами у вас быть не должно. У вас просто может не быть некоторых необходимых вещей. У меня указаласась отсутствующей плюсовая библя boost. Ну не вопрос.
Вот что я выоплнил:
sudo aptitude install binutils scons pkg-config g++ libboost1.35-dev libglade2-0 libglade2-dev libpthread-stubs0 libpthread-stubs0-dev libbz2 libbz2-dev libssl libssl-dev

Данная команда установила то что у меня отсутствовало в списке, и то что старое, обновила(мне не удалось найти 2 пакета g++ >= 3.4, gtk+-2.0 >= 2.6, ткните пальцем, я добавлю).
Теперь всё готово к сборке. Из того же ридми я вычитал как нужно правильно собирать этого заеря.

Компиляция!!!



Compiling:
----------
$ cd /path/to/linuxdcpp
$ scons PREFIX=/path/to/install


Теперь самое интерестное. Так как я не хочу возится, мы поступим довольно умно, оставим старую версию,.

sudo mkdir /opt/linuxdcpp
sudo chown -R вашюзер:вашагруппа /opt/linuxdcpp


Ниже узнаете зачем. :)

Теперь собираем.

cd /path/to/linuxdcpp
scons PREFIX=/opt/linuxdcpp

Можно сходить выпить чайку. Только не долго, ибо самое интерестное еще впереди…
Если всё удачно собралось, Поздравляю. Если нет, удовлетворяйте зависимоти и читайте что говорит error log.

Установка


Осталось установить. Устновка еще проще чем компиляция:
scons install

А теперь настает момент, для чего собственно мы делали отдельную папку, я не удалял старый Linux DC++ потому что я очень ленив, что бы собрать пакет и установливать его. Вот и выбрал легкий путь, ибо всё это уже предусмотрено спосбом сборки linuxdcpp. Заходим в настройки главного меню гнома(если у вас кеды, настравивайте сами) и ищем та DC++, и в параметрах запуска меняем только путь из «linuxdcpp» в "/opt/linuxdcpp/bin/linuxdcpp"(юез кавычек).
Пора запускать наш только что скомпиленный клиент с поддержкой многопоточности.
Конечно, как в любой программе и здесь есть свои нюансы, которые были замечены мною. При выборе файла для закачки, клиент стартует закачку сначала с одного пользователя, но потом, если успеет конечно), подключается к другим пользователям, что дает нам существенный выйгруш в скорости. Есть еще один вариант, но я не понял его логики. На выбранном файле жмем «Search by TTH», и из этого списка, как я понял, можно добавлять пользователей с которых будет идти скачка(если не прав поправьте), при нажатии на «Match Queue».
Вот и всё. Надеюсь вам понравилась данная статья, и помогла избежать использования вайна, Когда есть такой классный клиент.
ЗЫ. Не стал пробовать StrongDC под вайном потому что меня полностью устроил Linux DC++.
Tags:
Hubs:
+11
Comments 40
Comments Comments 40

Articles