Про автоматизацию работы с сидбокс в OS X

Я активно пользуюсь торрентами, мои интересы это кино и музыка в хорошем качестве. На закрытых трекерах нужные релизы появляются очень быстро, однако за это нужно платить ресурсами своего железа, раздавая скачанное как минимум до рейтинга 1:1.

И тут выхода два: либо держать Transmission постоянно включённым, портить свои жёсткие диски и тратить электричество, либо перенести эту задачу на другую машину, т. н. seedbox. Как вы наверное поняли, я перенёс раздачу файлов на seedbox.

Рейтинги это не единственная проблема. Жёсткое законодательство во многих странах не даёт спокойно жить торрентоводам, присылая огромные штрафы и судебные иски.

В случае использования seedbox эта проблема решается. Вы скачиваете и раздаёте контент далеко, например во Франции, а забираете по зашифрованному каналу, через FTP.

Что получилось?

Я добился полной автоматизации. Т. е. в браузуре кликаю по ссылке скачать .torrent, и через некоторое время на моём жёстком диске появляется контент, с оповещением в Notification Center.

Выгрузка торрентов в rtorrent, старт загрузки и раздачи, скачивание файлов на компьютер, всё это спрятано за несколькими скриптами и не требует никаких движений.

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

Веб интерфейс ruTorrent

Выбор seedbox провайдера

Что бы вы не думали, хостинг для "торрентокачалок" давно не роскошь, за 5 или 10 $ в месяц можно получить от 100 Гб до 700 Гб на жёстком диске, а если посчитать сколько вы тратите на электричество и железо, то жаба перестанет вас давить совсем.

При выборе следует обратить внимание на линк дата центра, с вашим интернет провайдером, чтобы быстро забирать контент. Большинство хостеров выкладывают тестовые 100 и 1000 МБ бинарники, по которым можно определиться.

Если вам предоставят гигабитный порт, то средний Blu-ray ремюкс вы будете скачивать за 8 минут, на пределе возможности жёстких дисков, примерно 60 МБ/c.

Я попробовал датацентры в Голландии (Wicked servers, они же tal0ne) и Великобритании (feralhosting).

Нидерланды мой фаворит, они дают примерно 8 МБ/с через HTTP или FTP в один поток, и порядка 20 МБ/с, если забирать многопоточно.

Wicked Servers (tal0ne)

Наиболее интересные тарифы в Голландии без ограничений по трафику:

RevivalBOX — 100 Гб + 1 гбит линк за 4,42 € в месяц.
SweetBOX — 740 Гб + 1 гбит загрузка + 100 мбит отдача за 9,70 € в месяц.

Feral Hosting

Хостинг в Великобритании:

Helium — 1 TB + 10 Гбит линк за 10 £ в месяц. Замечу, что диски HDD, всё равно не дадут и гигабита, какой бы линк не заявляли. Плюсы относительно Wicked Servers это включённые в слот SSH и OpenVPN.

Тут же предоставляются и машины с большими жёсткими дисками, до 6 ТБ, но ценники у них соответствующие. Эти решения не для домашнего использования.

Настройка

rTorrent и автоматическое подхватывание .torrent файлов

На сервере для скачивания торрентов я выбрал rTorrent, он хорошо конфигурируется, а к веб морде ruTorrent написано множество плагинов.

Одна из необходимых мне возможностей, это отслеживание .torrent файлов и автоматический запуск скачивания (триггер load_start), а вторая это сортировка по директориям (триггер move_complete).

Несколько строчек для .rtorrent.rc, следят за директориями music и movies:

schedule = watch_directory_music,5,5,"load_start=/disk3/fluder/rtorrent/torrents/music/*.torrent,d.set_custom1=/disk3/fluder/rtorrent/complete/music/"
schedule = watch_directory_movies,5,5,"load_start=/disk3/fluder/rtorrent/torrents/movies/*.torrent,d.set_custom1=/disk3/fluder/rtorrent/complete/movies"
system.method.set_key = event.download.finished,move_complete,"d.set_directory=$d.get_custom1= ;execute=mv,-u,$d.get_base_path=,$d.get_custom1="

Загрузка .torrent через FTP с помощью Hazel

Два правила в Hazel отслеживают источник загружаемых .torrent файлов, и загружают по FTP в соответствующие, отслеживаемые rtorrent, папки.

Наблюдаем за директорией загрузок в Hazel и передаём по FTP

Можно сделать и проще, если вы пользуетесь Google Chrome, для которого есть плагин Remote Torrent Adder.

Проверка и автоматическое списывание новых, завершённых раздач, через FTP

Cамый крутой консольный FTP клиент это LFTP, можно использовать и более продвинутый BtSync, но он доступен не у всех хостеров.

Устанавливаем:

brew install lftp

Создаём скрипт, который коннектится к FTP с помощью LFTP, проверяет есть ли новые загрузки, и если так, начинает автоматически скачивать контент. По завершению отправляем оповещение в Notification Center.

Помимо данных для аутентификации нужно указать правильные пути, что и куда будет копироваться (lcd и cd под комментариями sync movies и sync music).

mirror --use-pget-n=3 --verbose --use-cache --only-missing --recursion='newer' — использую для копирования новых фильмов, которых нет локально, рекурсия вглубь папок отключена, скачивание одного файла происходит в три потока.

mirror --parallel=10 --verbose --use-cache --only-missing --newer-than='now-1day' --recursion='newer' — копирование музыки. Рекурсивный листинг вглубь отключен, копируются файлы, которым скачаны не более, чем один день назад, параллельная загрузка до десяти файлов одновременно.

vim ~/bin/seedboxsync
#!/bin/bash

HOST="host.name"
PORT="21"
USER="user"
PASS="password"

LOCK="/tmp/lftp-sync.lock"
DISK="/Volumes/The Dump/"

trap "rm -f $LOCK" SIGINT SIGTERM

if [ -e "$LOCK" ] || [ ! -d "$DISK" ]
then
    echo "lftp sync is running already."
    exit
else
    touch "$LOCK"

    LFTP="$(
        caffeinate -i /usr/local/bin/lftp -p $PORT -u "$USER","$PASS" ftp://"$HOST" <<EOF

        # init config
        set file:charset utf8
        set pget:save-status never
        set ftp:list-options -a
        set ftp:ssl-force true
        set ftp:ssl-protect-data true
        set ftp:ssl-protect-list true
        set ssl:verify-certificate false

        # sync movies
        lcd /Volumes/The\ Dump/Movies/
        cd /rtorrent/complete/movies/
        mirror --use-pget-n=4 --verbose --use-cache --only-missing --newer-than='now-1day' --recursion='newer'

        # sync music
        lcd /Volumes/The\ Dump/.flac/
        cd /rtorrent/complete/music/
        mirror --parallel=10 --verbose --use-cache --only-missing --newer-than='now-1day' --recursion='newer'
EOF)"

    if [[ $LFTP == *"Transferring"* ]]
    then
        /usr/bin/osascript -e 'display notification "lftp sync completed" with title "Seedbox"'
    fi
    rm -f "$LOCK"
    trap - SIGINT SIGTERM
    exit
fi

Запускаем раз в минуту:

crontab -e:

* * * * * /bin/bash ~/bin/seedboxsync

Стриминг или скачивание?

С музыкой всё однозначно, FLAC мне в облаке не нужен, только скачивание.

А вот с видео я наверняка выбрал бы "streambox" и не занимался загрузкой, если бы: 1) цены были более гуманны; 2) у меня не было запросов "direct streaming" для ремюксов, повышающих требования к железу и линку.

Ни в одной приставке для клиента Plex я не нашёл возможности установить большой буфер, с возможностью "direct streaming" из mkv h264.

В Roku 4 этого нет, как и в Amazon Fire TV, про китайские свистки думать не хочется, там всё ещё хуже. В общем это вопрос на будущее, а сейчас буфером будет служить домашний компьютер, раздающий видео по DLNA.


comments powered by Disqus