rufus 25.03.2011 18:40

Скриптыtorrent tracker в домашних условиях

На хабре есть пост на эту тему "Переводим раздачу контента на BitTorrent", но там не учтено, что сервер может быть без выделенного ip и веб-сервера.


Предистория //
Есть хранилище файлов, где куча папок с разными названиями и большими файлами. Юзеры задолбали звонками //не могу скачать //не докачал //не понимаем названия папок на фтп (proftpd),
надо было срочно искать решение этим проблемам, кто то советовал поднять DC++ // это не удобно //, решение было только одно - торренты...

Рассмотри самую простую схему создания торрент-трекера.

нам понадобится:
ctorrent --сам клиент
ctcs --CTorrent Control Server для мониторинга раздачи файлов
OpenBitTorrent --для идексации сидов и личеров

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash
fil=$(find /где/искать/ -name ready\* -type d) # ищем только каталоги
for k in $fil
do
if < $(dirname $k) >; then # dirname $k возвращает $k без последней /\/.*/ части, т.е. родительский каталог
if < -f /home/user/tor/$(basename $k).torrent >; then # проверка на уже существующие torrent файлы
echo "torrent added"
ctorrent -d -s $k -e 1 -S localhost:2780 /home/www/get/$(basename $k).torrent # добавляем существующие на раздачу (раздовать будет -e 1 час)
else
echo "torrents made and added"
ctorrent -t -u "http://tracker.openbittorrent.kg:2710/announce" -s $k.torrent $k && ctorrent -d -s $k -e 1 -S localhost:2780 $k.torrent # создаем и отправляем на раздачу
chmod 777 $k.torrent
mv $k.torrent /home/user/tor/$(basename $k).torrent # так как торрент файл создается рядом с исходным файлом, перемещаем его в отдельную папочку
fi
fi
done
/путь/до/скрипта/ctcs >> ctcs.log& # и запускаем сам монитор на localhost:2780
exit 0
# слегка привёл в порядок этот ужас.
# Модератор



Настраиваем cron таким образом:
1 0-23 * * * root /путь/до/скрипта/tor.sh > log.tor // каждый час и минуту запускать скрипт

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

Для автозапуска после перезагрузки можно прописать в /etc/rc.local


Тэги: bash server torrent
+ 4 -
Похожие Поделиться

citi7en 25.03.2011 18:57 #
Интересно, а почему у вас именно такой набор колонок для времени в кронтабе?
1 0-23 * * *

Это как-то связано с возможными коллапсами при выполнении в 00.00?
Ну и, по-моему, в данном случае "0-23" равнозначно "*", но звёздочка как-то очевидней смотрится.
rufus 25.03.2011 19:29 #
а мне больше нравится 1023! каждый час сидирование торрента завершается, скрипт запускает все заново // новые файлы могут появится в течении часа как пирожки
citi7en 25.03.2011 19:43 #
> log.tor

Кстати, тогда лог будет перетираться каждый час. Две галки нужно.
rufus 25.03.2011 19:47 #
это пока не финальный релиз, но спс что указал на галки
melksoft 25.03.2011 22:41 #
А причем тут торрент трекер?
BitTorrent-трекер — веб-сервер, осуществляющий координацию клиентов BitTorrent.
Трекер «связывает» клиентов друг с другом, но напрямую не участвует в обмене раздаваемых файлов. Более того, трекер не имеет никакой информации об этих файлах, поскольку клиенты только сообщают ему инфохеш
.Википедия
Скрипт не торрент трекера, а раздавальщика файлов. Торрент трекер тут http;//openbittorrent.kg.
exelens 25.03.2011 22:58 #
Или я не так читаю или не так понимаю.

Правильно ли я понимаю, что эта конструкция позволяет указать директорию из содержимого которой создастся торрент файл который можно отдать другому и он себе скачает содержимое директории через торрент?
rufus 25.03.2011 23:02 #
да это так
exelens 25.03.2011 23:04 #
Почему было сразу нельзя так написать?
exelens 25.03.2011 23:04 #
Идея шикарная =) Я такую штуку давно ищу
rufus 25.03.2011 23:06 #
К сожелению мой мозг перепрыгивает с идеи на проблемы и обратно
exelens 25.03.2011 23:07 #
=) Бывает. Не критично! Зато скрипт НЯШКА!
rufus 25.03.2011 23:11 #
спс. пытался с другими клиентами настроить работу, но как то коряво очень.
если интересно:
#rtorrent
#rtorrent -d $k -s ./get $k.torrent
#ctorrent
#ctorrent -t -u "http://tracker.openbittorrent.kg:2710/announce" -s $k.torrent $k && ctorrent -d -S localhost:2780 $k.torrent
#./ctcs >> l.log&
#transmission
#transmissioncli -n $i -a "http://tracker.openbittorrent.com/announce" $k.torrent &&transmission-remote -n 1:1 -a $k.torrent -w $i
exelens 25.03.2011 23:25 #
Ты мне не пости я в этом ничего не понимаю.
Я не программист.
exelens 25.03.2011 23:26 #
ДА! Для трансмишн было бы супер!
rufus 25.03.2011 23:33 #
там трабла с выбором папки куда закачивать
philosoft 26.03.2011 12:31 #
Какая же там трабла то? О_о если этот скрипт просто генерит торрент для раздачи, выкладывает его и добовляет в торрент-клиент на этой же машине для раздачи, то я не вижу никакой проблемы.
rufus 26.03.2011 21:00 #
пробуй, может ты найдешь решение
philosoft 26.03.2011 21:23 #
А чем, предложенный тобой же, вариант не подходит?
rufus 27.03.2011 00:36 #
проблема с добавлением пути скачивания файла, идет смещение путей и он не скачивает
philosoft 27.03.2011 00:48 #
Господи, да всё там в порядке. Вот скриптец, который создаёт торрент из указанной папки и добавляет его на раздачу в трансмишн:
 1
2
3
4
5
6
7
8
9
10
#!/bin/bash
ANNOUNCE_URL='http://ur.announce.url.here.com'

if [[ -z $1 ]]; then exit 1; fi

torrent_dir="$(readlink -f $1)"
torrent_name="$(basename $torrent_dir)"
download_dir="$(dirname $torrent_dir)"

transmissioncli --new "$torrent_dir" --announce "$ANNOUNCE_URL" "/tmp/${torrent_name}.torrent" && transmission-remote --add "/tmp/${torrent_name}.torrent" -w "$download_dir"

Осталось только прикрепить торрент к раздаче.
philosoft 27.03.2011 01:03 #
В твоей конкретной строчке нужно заменить -w $i на -w "$(dirname $(readlink -f $i))"
philosoft 27.03.2011 01:00 #
Минусы — это прекрасно, однако эта тема — не холивар, так что прошу обоснования.
rufus 25.03.2011 23:00 #
сам трекер можно и локально поднять. Предложи свой вариант
exelens 25.03.2011 23:02 #
Отвечай плиз в коммент а не в топик
rufus 25.03.2011 23:14 #
Хоть за этот пост не минусуют!
exelens 25.03.2011 23:26 #
Если твой скрипт им понравится то они тебе помогут его допилить
uscr 25.03.2011 23:56 #
они

Эти...Как их...Линуксоиды, во!

Тут и пилить нечего. Стоит вытащить всё, что кастомизуется в шапку скрипта и сделать переменными. А то сейчас нужно весь скрипт посмотреть и все пути поправить под себя. Ну и совсем круто - научить скрипт есть параметры командной строки.
rufus 26.03.2011 00:14 #
найти человека хорошо знающего пёрл и добавить функционала в ctcs --CTorrent Control Server
uscr 26.03.2011 00:17 #
пёрл

oh shi...

Мне нужно срочно спать. Я был уверен что это баш...
uscr 26.03.2011 11:34 #
#!/bin/bash

Это ведь и есть баш! Что происходит?!
goblinyara 26.03.2011 12:19 #
скрипт - баш=) а вот сам ctcs - на perl=)
exelens 26.03.2011 09:16 #
А ты можешь сделать все описанные тобой действия? Мне и думаю не только мне очень бы пригодился такой скрипт =)
uscr 26.03.2011 11:53 #
Вот:

#!/bin/bash

WHEREFINDEXP="find /где/искать/ -name ready\* -type d" # Выражение для поиска. Искать можно как файлы так и КАТАЛОГИ (если файлы то убираем --type d)
TORRENTPATH="/var/torrents/" #Куда кладём торренты
CTCSPATH="/путь/до/скрипта/ctcs"

fil=`$WHEREFIND`

for k in $fil

do
if < `dirname $k` >; then #Проверка что это действительно КАТАЛОГ (для файла filename $k)
if < -f $TORRENTPATH`basename $k`.torrent >; then # проверка на уже существующие torrent файлы
echo "torrent added"
ctorrent -d -s $k -e 1 -S localhost:2780 /home/www/get/$(basename $k).torrent # Добавляем существующие на раздачу (раздовать будет -e 1 час)
else
echo "torrents made and added"


# Создаем и отправляем на раздачу
ctorrent -t -u "http://tracker.openbittorrent.kg:2710/announce" -s $k.torrent $k
ctorrent -d -s $k -e 1 -S localhost:2780 $k.torrent
chmod 777 $k.torrent
mv $k.torrent $TORRENTPATH`basename $k`.torrent # Так как торрент файл создается рядом с исходным файлом, перемещаем его в отдельный КАТАЛОГ

fi
fi
done

$CTCSPATH >> ctcs.log& # Запускаем сам монитор на localhost:2780
exit 0
uscr 26.03.2011 11:54 #
Спойлер испортил форматирование. В файле должно нормально смотреться.
exelens 26.03.2011 11:57 #
А можешь это всё сделать для трансмишн?
Вот тут http://welinux.ru/post/5346/#cmnt101572 он сам пытался.
uscr 26.03.2011 12:11 #
Вероятно можно поковыряться, но...
exelens 26.03.2011 12:12 #
Заранее спасибо!
philosoft 28.03.2011 07:16 #
?
exelens 01.04.2011 16:58 #
Да, это я пропустил.
Спасибо
philosoft 26.03.2011 12:28 #
Искать можно как файлы так и КАТАЛОГИ (если файлы то убираем --type d)
Да ты что?
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ mkdir site
$ cd site
$ ls
$ mkdir dir{0,1,2,3}
$ touch file{0,1,2,3}
$ find . -type d
.
./dir0
./dir3
./dir2
./dir1
$ for i in *; do file $i; done
dir0: directory
dir1: directory
dir2: directory
dir3: directory
file0: empty
file1: empty
file2: empty
file3: empty

if [ `dirname $k` ]; then #Проверка что это действительно КАТАЛОГ (для файла filename $k)
Эта строчка вообще-то отдаёт каталог, в котором содержится файл, а точнее программа принимает путь к файлу/каталогу и печатает родительский для последнего объекта каталог. Алсо
1
2
3
4
5
6
$ filename file0
filename: команда не найдена
#Проверка на то, является ли нечто каталогом выполняется иначе:#POSIX-вариант
if [ -d "$dir" ]; then somecommand; done
#bash-вариант
if [[ -d $dir ]]; then somecommand; done

philosoft 26.03.2011 12:29 #
chmod 777 и разные виды command substitution (где $()б а где ``) доставляют.