INT 21h

Hi, I am Vladimir Smagin, SysAdmin and Kaptain. Telegram Email / GIT / RSS / GPG

Торрент трекер для WordPress (плагин)

№ 7686. В разделе Programming от November 15th, 2015

В подшивках: , ,

Transmission в консоли Linux

№ 7325. В разделе Sysadmin от June 19th, 2015

В подшивках: , ,

Парсинг торрент файла на php, получение сидеров и личеров

№ 7268 В разделе Programming от May 31st, 2015,
В подшивках: ,

Я как-то уже писал торрент трекер для нашего опенсорс сообщества, но реализация была полностью на пхп и не отличалась особой скоростью. Поскольку мне понадобилось интегрировать поддержку торрентов в Distr CMS я начал искать пути ускорения работы с торрентами. На глаза попался офигенский модуль к php, который задачу парсинга берет на себя. А вот остальные функции все равно нужно писать самому.

Задача нулевая. Установка модуля.

Нужно поставить пакеты для сборки модуля sudo apt-get install php5-dev build-essential subversion

Далее получаем модуль и собираем его
svn checkout http://php-bencode-extension.googlecode.com/svn/trunk/ php-bencode
cd php-bencode
phpize
./configure --with-php-config="`whereis php-config|awk '{ print $2 }'`"
make

Теперь нужно скопировать модуль в директорию к остальным модулям. У меня это была директория /usr/lib/php5/20131226. У вас будет что-нибудь похожее.

В конце нужно создать конфиг для загрузки модуля в память при старте php. У меня используется php-fpm, поэтому этот конфиг положил в /etc/php5/fpm/conf.d/cg_bcode.ini

Текст конфига
extension=cg_bcode.so

Модуль установлен, делаем рестарт php-fpm, apache или что у вас там.

Задача первая. Нужно посмотреть сидеров и личеров.

Установленый модуль добавляет функции bdecode и bencode, ускоряя обработку файлов в разы. Однако, это не отменяет необходимости кеширования этих значений при большом количестве посещений.

декодируем содержимое файла в массив $info
$info=bdecode(file_get_contents($url_torrent));

хеш можно получить сделав sha1 только части, отвечающей за информацию о файлах внутри. хеш получается только в бинарном виде, добавив true вторым параметром
$hash = sha1(bencode($info['info']),true);

scrape в большинстве случаев получается просто путем замены announce в урле для анонсов торрента
$announce_url=$info['announce'];
$scrape_url = str_replace("announce","scrape",$announce_url);

делаем get запрос к трекеру и полученый ответ тут же декодируем в массив
$scrape_data = bdecode(file_get_contents($scrape_url.'?info_hash='.urlencode($hash)));
echo "Полных раздач: ".$scrape_data['files'][$hash]['complete'];

Задача вторая. Список файлов внутри торрента.

Код ниже только для разовых обращений к файлу. При высокой посещаемости и большом количестве торрент файлов эти данные нужно кешировать в БД или memcached. Вам тут решать уже.

foreach($info['info']['files'] as $file) {
echo $file['path'][0]." Размер ".round($file['length']/1024/1024)." Мб
";
}

distr cms 03

Еще кое-что интересненькое о торрентах:

5 комментариев »

Использование Bittorrent Sync для сихнронизации ваших файлов

№ 5416 В разделе Sysadmin от August 22nd, 2013,
В подшивках: ,

ВНИМАНИЕ, СТАТЬЯ УСТАРЕЛА. Теперь bittorent sync не существует, но аналогичная программа с гораздо более широким функционалом называется SyncThing. Она бесплатная и с открытым кодом, есть готовые репозитории для linux и клиенты для windows, linux, android, macos и тд.

Так уж случилось, что меня не удовлетворяет качество синхронизаций на мобилах у Dropbox и аналогов. А синхронизации SpiderOak на мобиле вообще нет. И вот совсем недавно вышел клиент Bittorrent Sync на Android, Linux и Windows, что оказалось настоящим событием в мире синхронизаций на мобилах 🙂 Я специально положил пару скриншотов ниже для того, чтобы вы сразу оценили подойдет оно вам или нет. На компьютере, конечно же, параметров доступно больше. Меня же интересует исключительно синхронизация Компьютер – Мобила. Самым нетерпеливым – мои конфиги в самом конце статьи 🙂 Если вы не хотите это делать руками, то я сделал репозиторий с пакетами i386, amd64 и armhf (raspberry pi).

Сначала скачайте саму программу с официального сайта btsync, а ниже мы установим ее, сделаем конфиги и автозапуск. Поскольку у меня стоит Debian, все написанное ниже будет работать для всех debian-based дистрибутивов, включая Ubuntu, Mint и подобные.

Распакуйте btsync из архива в директорию /usr/local/bin. Теперь создадим демонстрационный конфигурационный файл и положим его в директорию системных конфигов btsync --dump-sample-config > /etc/btsync.conf. Содержимое этого файла необходимо привести примерно к следующему виду.

root@vlad-F80L:/etc# cat ./btsync.conf
{
"device_name": "vlad-F80L",
"listening_port" : 0, // 0 - randomize port
"storage_path" : "/usr/local/share/btsync",
"pid_file" : "/var/run/btsync.pid",

"check_for_updates" : true,
"use_upnp" : true, // use UPnP for port mapping

"download_limit" : 0,
"upload_limit" : 0,
"webui" :
{
"listen" : "127.0.0.1:8888"
}
}

WebUi это веб интерфейс, открываемый на указанном вами порту. Просто зайдете браузером на http://127.0.0.1:8888 и сможете управлять конфигурацией. Слепо следовать моему конфигу не обязательно. Ну хотя device_name поменяйте на ваш. Здесь мы видим, что директория со служебной информацией будет лежать в /usr/local/share/btsync, а жизненно необходимый PID файл в /var/run/btsync.pid.

Конфиг сделали, теперь займемся автозапуском. В /etc/init.d вы можете найти файл skeleton. Этот файл – заготовка для ваших собственных конфигов. В самом начале конфига вы можете увидеть начальную установку переменных и подгрузку конфигов. Давайте изменим переменные на то, что у нас получилось выше:

PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Description of the service"
NAME=btsync
DAEMON=/usr/local/bin/$NAME
DAEMON_ARGS="--config /etc/btsync.conf"
PIDFILE=/var/run/btsync.pid
SCRIPTNAME=/etc/init.d/$NAME

Ну и, конечно же, у нас нет конфига в /etc/default, поэтому просто закомментируйте эту строку. Сохраните этот файл под именем /etc/init.d/btsync и сделайте его исполняемым chmod +x /etc/init.d/btsync.

Теперь делаем автозапуск:

root@vlad-F80L:/etc# update-rc.d btsync defaults
Adding system startup for /etc/init.d/btsync ...
/etc/rc0.d/K20btsync -> ../init.d/btsync
/etc/rc1.d/K20btsync -> ../init.d/btsync
/etc/rc6.d/K20btsync -> ../init.d/btsync
/etc/rc2.d/S20btsync -> ../init.d/btsync
/etc/rc3.d/S20btsync -> ../init.d/btsync
/etc/rc4.d/S20btsync -> ../init.d/btsync
/etc/rc5.d/S20btsync -> ../init.d/btsync

Тестируем:
root@vlad-F80L:/etc# /etc/init.d/btsync start
BitTorrent Sync forked to background. pid = 8279
root@vlad-F80L:/etc#

/etc/btsync.conf
/etc/init.d/btsync

Нет комментариев »

Яндекс.Метрика

Fortune cookie: Today's spam: WOULD YOU LIKE TO LOSE WEIGHT WHILE YOU SLEEP?