Бюджетный seedbox своими руками

Раньше я уже писал про то, что пользуюсь seedbox. Сейчас коротко о том, как создать свой, но дешевле.

Недавно перевёл часть своих домашних проектов в Scalaway. За 2.99 € в месяц они дают: 2 ядра, 2 ГБ памяти и 50 ГБ на жёстком диске. Место можно докупить по 1 € за каждые 50 ГБ сверху. Машины работаю очень быстро, никаких проблем за несколько месяцев использования у меня не было.

Решил попробовать их для раздачи торрентов. Сначала поднял машину с Ubuntu 16 и подтянул Docker.

Добавил авторизацию ключами:

# генерируем ключик без "passphrase"
ssh-keygen -b 2048 -t rsa -f ~/.ssh/id_rsa_simple -q -N ""  

# загружаем на удалённую машину
cat ~/.ssh/id_rsa_simple.pub | ssh fluder@scalaway 'mkdir -p -m 700 ~/.ssh; cat >> ~/.ssh/authorized_keys'

Установка

За основу взял Dockerfile от kfei:

git clone https://github.com/kfei/docktorrent  
cd docktorrent    

Задаём пароль для авторизации пользователя в ruTorrent:

vim Dockerfile

RUN htpasswd -cb /usr/share/nginx/html/rutorrent/.htpasswd username password

Билдим:

docker build -t docktorrent .

Запускаю в tmux:

docker run -it \
    -p 80:80 -p 45566:45566 -p 9527:9527/udp \
    --dns 8.8.8.8 \
    -v /data-store:/rtorrent \
    -e UPLOAD_RATE=1024 \
    docktorrent

Выгрузка torrent файлов

Отслеживаем директорию Downloads на Mac c помощью Hazel и отправляем торрент файлы в rTorrent. Кому нужно, тоже самое можно сделать в Automator.

Выгрузка торрентов с помощью Hazel и scp

Embedded script:

scp -i ~/.ssh/id_rsa_simple "$1" fluder@scaleway:/data-store/watch/

Загрузка завершённых раздач

crontab -e

* * * * * rsync -rvz --ignore-existing -e "ssh -i $HOME/.ssh/id_rsa_simple" fluder@scalaway:/data-store/finished/ /Volumes/The\ Dump/FLAC/

Итого

Достаточно скачать torrent, раздача автоматически начнётся и по завершению будет загружена в мак. У меня всё льётся прямо на жёсткий диск AirPort.

За месяц использования хостер меня не выгнал, если выгонит, то развернуть seedbox из Dockerfile в другом месте, не будет проблемой.


Swinsian — лучший музыкальный проигрыватель для macOS

Предистория

Всё что произошло с iTunes в последние годы я комментировать не хочу, кому нужен этот яд? Долго боролся, конвертировал музыку в ALAC, но в итоге всё же пришлось уйти с этого комбайна.

На ноутбуке жёсткий диск у меня не очень большой (256 GB), и с каждым добавлением новой музыки места становилось всё меньше и меньше. Выход есть — внешний жёсткий диск.

Проблема:

  • Лишнее действие отключать и подключать, если переносишь в другую комнату или забираешь с собой.

Решение:

  • Подключить к AirPort Extreme через USB, и играть музыку по сети из шары. Да, это работает с iTunes, даже на AirPlay можно отправлять, что важно для меня.

Проблема:

  • диск засыпает и iTunes отваливается, старые треки конечно играют, но импорт из Automator уже не работает. Нужно руками по новой добавлять путь к iTunes Media Library. В сети есть пара решений, со сбросом конфига iTunes, но мне они не понравились.

Решение:

  • Не использовать iTunes, переходить к Swinsian. Он ничего не теряет и прекрасно импортирует треки в автоматическом режиме, даже с удалённого диска.

Бонусы

  • нативная поддержка FLAC, MP3, AAC, ALAC, Ogg Vorbis, WMA, WAV, Opus, AC3, AIFF, MusePack и APE
  • возможность хранить библиотеку, изменяя теги, без модификации самих файлов на жёстком диске, а следовательно иметь полноценный бэкап для раздачи (если понимаете о чём я :)
  • автоматически подтягивает обложки

Swinsian

Лучший музыкальный проигрыватель для macOS

Swinsian — аскетичный музыкальный проигрывать, который умеет играть всякие странные, и не очень, форматы музыки, на которых обламывается iTunes.

С первого взгляда проект кажется заброшенным, последнее обновление в блоге за 2015 год. Но если посмотреть внимательнее, последняя версия от 28 февраля 2016.

Киллер фичи

Два режима управлениями тегирования музыки

1) Без записи в файлы. Данные хранятся в SQLite базе (~/Library/Application Support/Swinsian/Library.sqlite).

  • (+) Можно упорядочить и подписать все альбомы, при этом оставив возможность раздавать торренты, ну или просто иметь их полноценный бэкап, т.к. чек-суммы всех файлов останутся неизменными.

  • (−) При переезде в другой плеер отсутствующие теги придётся прописывать по новой.

2) Модификация тегов в файлах.

Два режима хранения

1) Библиотека.

В этом случае структура на жёстком диске будет примерно как в iTunes (~/Music/Artist/Album/).

2) Внешний источник.

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

Проблемы и решения

  • Обложки подтягивались не всегда. Например по умолчанию для Megadeth — Dystopia подтягивается анимированный gif. Такой формат плеер не понимает и не показывает ничего. В таком случае можно и руками поправить, подсунувши PNG или JPG.

  • Если в директории с треками лежит файл cover.jpg, то приоритет будет отдан ему. Если его нет, тогда Swinsian полезет в интернет, искать обложку для указанного в тегах альбома. Если в тегах название не точное, то и результата не будет (например дописано CD2).

Итого

30 дней можно пользоваться бесплатно, далее 19.95 $. Со второй попытки я таки перешёл полностью. По умолчанию конечно UI не очень, но подстроить под себя его вполне можно.

Рекомендую всем, кто до сих пор угарает по хранению музыки локально, да ещё в экзотических форматах.

Обновление 02/08/2016:
Стоило написать пост и вышло большое минорное обновление 1.12.0.

Бесплатные сертификаты SSL от Let's Encrypt и их автоматическое развёртывание в Amazon S3 (CloudFront)

Подключил к блогу бесплатный SSL от Let's Encrypt, попутно настроив CloudFront (это такой CDN от Amazon) для S3, рецепт ниже.

1) В Amazon IAM создаём нового пользователя.

Добавляем полиси, где прописываем используемый бакет.

Или можно просто разрешить запись/чтение бакета + IAMFullAccess и CloudFrontFullAccess.

2) Устанавливаем aws клиент для OS X.

brew install awscli

Создаём конфигурацию с ключами созданного пользователя в амазон:

aws configure

Зависимость нужна для того, чтобы Boto 3, используемый в плагине letsencrypt-s3front (о нём ниже), подтягивал ключи из конфига, а не переменных, есть такая у них фича:

The mechanism in which boto3 looks for credentials is to search through a list of possible locations and stop as soon as it finds credentials. The order in which Boto3 searches for credentials is:
1. Passing credentials as parameters in the boto.client() method
2. Passing credentials as parameters when creating a Session object
3. Environment variables
4. Shared credential file (~/.aws/credentials)
5. AWS config file (~/.aws/config)
6. Assume Role provider
7. Boto2 config file (/etc/boto.cfg and ~/.boto)
8. Instance metadata service on an Amazon EC2 instance that has an IAM role configured.
Each of those locations is discussed in more detail below.

3) Устанавливаем клиент для letsencrypt.

pip install letsencrypt  

Так как сертификат выдаётся всего на три месяца, заниматься ручным2 обновлением нет никакого желания. Поэтому устанавливаем:

pip install letsencrypt-s3front

Который будет заниматься обновлением ключей в letsencrypt и их установкой в CloudFront.

4) Создаём CloudFront запись в AWS.

Alternate Domain Names (CNAMEs): fluder.co Default Root Object: index.html

Из общего списка копируем ID, пример: E31RB28LMK1L41

5) Получаем сертификаты и загружаем в CloudFront по полученному выше ID.

letsencrypt --agree-tos -a letsencrypt-s3front:auth --letsencrypt-s3front:auth-s3-bucket fluder.co --letsencrypt-s3front:auth-s3-region eu-central-1 -i letsencrypt-s3front:installer --letsencrypt-s3front:installer-cf-distribution-id E31RB28LMK1L41 -d fluder.co

6) Возвращаемся в CloudFront и выбираем загруженный сертификат.

Custom SSL Certificate: le-fluder.co Custom SSL Client Support: Only Clients that Support Server Name Indication (SNI)

7) Автообновление в крон (1 раз в месяц):

crontab -e

# fluder.co letsencrypt SSL

0 0 1 * * /usr/local/bin/letsencrypt --agree-tos -a letsencrypt-s3front:auth --letsencrypt-s3front:auth-s3-bucket fluder.co --letsencrypt-s3front:auth-s3-region eu-central-1 -i letsencrypt-s3front:installer --letsencrypt-s3front:installer-cf-distribution-id E31RB28LMK1L41 -d fluder.co --renew-by-default --text

8) В Route53 к A записи fluder.co выбираем алиас CloudFront. Сразу он не доступен, нужно подождать пока CDN развернётся полностью.

9) Для блога, Default Root Object: index.html будет работать только в корне, субдиректории выше будут игнорироваться1, это может сломать ссылки без index.html в конце URL.

Исправляется в CloudFront -> Origins -> Origin Domain Name

Не правильно — fluder.co.s3.amazonaws.com
Не правильно — fluder.co.s3.eu-central-1.amazonaws.com
Правильно — fluder.co.s3-website.eu-central-1.amazonaws.com


  1. Рецепт взял у kf 

  2. В ручном режиме нужно проходить верификацию от letsencrypt, но если у вас свои сертифкаты, то проще сделать как рекомендует wallin


Раздача EV-DO интернета от Интертелеком на Xiaomi Mi Router Mini

Периодически мне приходится раздавать интернет за городом. Несколько лет эти задачи решал портативный CDMA модем и Wi-Fi точка доступа в одном лице — Novatel MiFi 2200.

Решение так себе, во первых потому, что это EV-DO Rev. A, до 3.1 Мбит/сек, а во вторых Wi-Fi очень слабый, плохо пробивает стены, периодически отваливается.

Отдельный Wi-Fi роутер напрашивался сам, а тут и железка подвернулась Xiaomi Mi WiFi Router Mini . У него есть USB порт, к которому на сторонних прошивках можно подключить модем. За 28 $ (доставка включена в стоимость) обещали аж 1167 Мбит/сек (да уж, столько-то и роутеры Apple не выдают :)

За годы использования Airport Express и Extreme я так отвык от прошивок и других приключений, что пройти мимо такого эксперимента я не мог, поэтому заказал белую версию Mini на eBay.

Со времени заказа прошло три недели, небольшая коробочка лежала у меня на столе:

Xiaomi Mi WiFi Router Mini

Немного погуглив, нашёл несколько вариантов прошивок от некоего Padavan, в котором уже встроена поддержка модемов из коробки. На счастье эта "firmware" сделана не для людей. Фанаты предлагают поднять виртуальную машину и скомпилировать самому. Спасибо, но нет, лучше уж чистая классика.

OpenWrt

Устанавливаем dev прошивку совместимую c SSH патчем

Чтобы получить SSH, нужно поставить dev прошивку, подозреваю, что можно это сделать прямо из веб морды, но я всё делал через USB.

  • записываем на флешку прошивку отсюда, название в USB накопителе miwifi.bin
  • подсоединяем к роутеру в USB порт
  • отсоединяем питание
  • зажимаем техническую кнопку булавкой сзади, включаем питание, удерживая булавку, пока не начнёт мигать жёлтый диод

Перезагрузка.

Устанавливаем SSH патч

Создаём аккаунт на сайте Xiaomi. Это нужно, чтобы получить персональный патч SSH открывающий root доступ к девайсу.

  • регистрируем роутер и забираем патч в своём аккаунте, на этой же страничке будет и root пароль
  • записываем на флешку с именем miwifi_ssh.bin
  • подсоединяем к роутеру в USB порт
  • отсоединяем питание
  • зажимаем техническую кнопку булавкой сзади, включаем питание, удерживая булавку, пока не начнёт мигать жёлтый диод

Перезагрузка.

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

Накатываем последнюю прошивку отсюда, я использовал подробный мануал для Xiaomi:

ssh root@192.168.31.1 # пароль на странице где вы забирали SSH патч
cat /proc/mtd # смотрим куда писать прошивку, у меня это раздел OS1  
cd /tmp  
wget https://downloads.openwrt.org/chaos_calmer/15.05.1/ramips/mt7620/openwrt-15.05.1-ramips-mt7620-xiaomi-miwifi-mini-squashfs-sysupgrade.bin 
mtd -r write openwrt-15.05.1-ramips-mt7620-xiaomi-miwifi-mini-squashfs-sysupgrade.bin OS1  

Роутер уходит в ребут, сети пропадают, до тех пор пока мы не подсоединимся к WAN порту кабелем и не создадим Wi-Fi сеть. Подключаем кабель, настраиваем Wi-Fi интерфейсы, подключаемся через Wi-Fi, возвращаем назад интернет через WAN (это понадобится для установки дополнительных пакетов).

Настройка 3G модема

У меня в роли модема так и остался MiFi Novatel MiFi 2200, только подключенный по USB.

На первый взгляд достаточно длинный мануал по настройке 3G донглов на официальном сайте настораживает, но на деле работы на пять минут.

Я поставил три рекомендуемых пакета прямо из веб морды OpenWrt LuCI:

luci-proto-3g - вставляет в веб-интерфейс выбор "UMTS/GSM/CDMA-EVDO" при создании интерфейса;
kmod-usb-serial-option - добавляет поддержку переключаемых USB-устройств (модемов);
usb-modeswitch - программа для переключения режима модема;

В Network -> Interfaces -> WAN появляется протокол UMTS/GPRS/EV-DO.

Настройка модема Novatel в сети Интертелеком на OpenWrt

Логин/пароль для интертелекома — IT, номер дозвона #777.

На этом настройка закончена, модем подсоединяется и начинает раздавать интернет.

Sat Jun 11 13:49:06 2016 local2.info chat[14218]: send (AT^M)
Sat Jun 11 13:49:06 2016 local2.info chat[14218]: expect (OK)
Sat Jun 11 13:49:06 2016 local2.info chat[14218]: AT^M^M
Sat Jun 11 13:49:06 2016 local2.info chat[14218]: OK
Sat Jun 11 13:49:06 2016 local2.info chat[14218]:  -- got it
Sat Jun 11 13:49:06 2016 local2.info chat[14218]: send (ATZ^M)
Sat Jun 11 13:49:06 2016 local2.info chat[14218]: timeout set to 30 seconds
Sat Jun 11 13:49:06 2016 local2.info chat[14218]: expect (OK)
Sat Jun 11 13:49:06 2016 local2.info chat[14218]: ^M
Sat Jun 11 13:49:06 2016 local2.info chat[14218]: ATZ^M^M
Sat Jun 11 13:49:06 2016 local2.info chat[14218]: OK
Sat Jun 11 13:49:06 2016 local2.info chat[14218]:  -- got it
Sat Jun 11 13:49:06 2016 local2.info chat[14218]: send (ATDT#777^M)
Sat Jun 11 13:49:06 2016 local2.info chat[14218]: expect (CONNECT)
Sat Jun 11 13:49:06 2016 local2.info chat[14218]: ^M
Sat Jun 11 13:49:10 2016 local2.info chat[14218]: ATDT#777^M^M
Sat Jun 11 13:49:10 2016 local2.info chat[14218]: CONNECT
Sat Jun 11 13:49:10 2016 local2.info chat[14218]:  -- got it
Sat Jun 11 13:49:10 2016 local2.info chat[14218]: send (^M)

Xiaomi по скорости хоть и даёт реально не более 100 Мбит/сек через Wi-Fi, но этого вполне хватает, т.к. в данном случае бутылочным горлом является Интертелеком. Зато покрытие приличное, больше чем у любого MiFi, стабильность подозреваю тоже.

Выводы

Для раздачи интернета с 3G модема не нужна дорогая точка доступа. С Xiaomi соотношение цена/качество вполне оправдывает вложенные 28 $, а если у вас есть несколько часов и желание поковыряться, то вообще отлично.


Copied — менеджер буфера обмена

С пол года как пользуюсь Copied. Это такая штука, которая сохраняет к себе в базу всё то, что вы копируете в системе через буфер обмена, он же cmd+c. Работает на OS X и iOS.

Программа не решает задач вселенского масштаба, использую скорее для фана. Данные прозрачно синхронизируются с устройств в рамках одной учётной записи iCloud, хватает.

Copied — менеджер буфера обмена

Как я это использую?

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

В последнее время одноразовые ссылки тоже отправляю в Copied, оставшуюся часть в Safari Reading List, Pinboard почти забросил.

По умолчанию я настроил программу так, чтобы она не сохраняла всё подряд, для этого мне хватает возможностей буфера Alfred. Когда нужно что-то записать в Copied на OS X приходит на помощь шоткат ctrl+s. В iOS запуск самого приложения.

Отключаем автосохранение

Можно ведь создать закладку?

1) Вытащить ссылку можно далеко не для всего, например некоторые странички на джаваскрипте или инлайн изображения.
2) Закладки будут накапливаться, их нужно чистить. Буфер у Copied ограничен, от 10 до 1000 записей, старые записи уходят в /dev/null автоматически.

Возможностей у программы много:

Пробовал использовать списки — слишком сложно, позже отказался от этой идеи.
Шаблоны — использую редко, чтобы выдрать ссылку.

Баг в Java приложениях (поймал в IntelliJ IDEA)

Есть у программы неприятный баг, который проявляется в приложениях написанных на Java. При вставке из буфера обмена данные вставляются дважды. Этот вопрос я задал Кевину, автору программы, ответ не заставил себя долго ждать. Решается очень просто, Java в системе должна быть не старее 1.8.0_61, проверяем с помощью java -version. В настройках напротив "compatibility mode" флажок должен быть снят.

Обновляем Java:

brew cask install java

После обновления ошибка пропадает.


Про YouTube

Часто получаю в Telegram и других мессенджерах ссылки на YouTube, и мне хочется плеваться. Я не сноб, если кто-то из друзей посчитал, что мне будет это интересно, то скорее всего так и есть, но!

Мне жалко тратить время и силы на просмотр роликов длиннее трёх минут. Да, при желании конечно всегда можно выкроить время, но нет желания, и вот почему:

1) Видео очень заторможенный способ передачи информации. Хотите передать что-то? Лучше чтения сухого текста для обзоров железок, технологий, докладов, ничего до сих пор нет. Пробежавшись по заголовкам и выборочно по самому тексту, можно понять интересно тебе это или нет. Огромная экономия времени, которое можно потратить на п. 3.

2) От чтения глаза тоже устают, и тут приходит на помощь формат аудио. Подкасты удобно слушать метро или на прогулке. Это те случаи, когда чтение и просмотр видео недоступны. Можно с лёгкостью пожертвовать скучной картинкой докладчика, его бесполезной жестикуляцией и мимикой, и ничего не потерять при этом.

3) Отсутствие отклика. Никакой ролик не заменит общения с человеком или поисковой системой. Смотреть 40 минут обзор айфона или нагуглить ответ в "спеке" за 10 секунд? Ответ очевиден, просто спроси, когда тебе это нужно. Конечно, пример с айфоном сильно утрированн.

Выводы? YouTube не нужен! :trollface:, ну почти :-)

Хотите чем-то поделиться? — напишите кратко своими словами, они будут в сто раз дороже любого сорокаминутного видео.


→ Подкаст ZeroIQ

За годы прослушивания подкастов мне успели надоесть практически все, хотелось чего-то нового, и наконец, ребята из apple-russian, это новое сделали.

Сегодня Олег Сердюков сделал большой анонс подкаста ZeroIQ, который я неистово рекомендую. Звук пока не очень, но главное это контент — это правда интересно слушать.

Живые трансляции тоже скоро обещают, а пока можно послушать и старые выпуски, в общем подписывайтесь.


Пара слов в преддверии Apple Event

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

Я сначала даже накатал в черновике длинную, разгромную простыню в стиле Муртазина, объясняющую почему я не буду смотреть конференцию. Но это нытьё читается так жалко, что весь текст был удалён с лёгкой совестью.

21 марта для меня ничего не произойдёт, это будет обычный день, перед днём, когда я накачу обновления OS X 10.11.4 и iOS 9.3.

Новые гаджеты? Нет, не знаю.


Автоматическое наполнение библиотеки iTunes

Я давно веду медиатеку в iTunes, с того момента, как впервые запустил OS X. Конечно, за это время сделал несколько попыток использовать другие проигрыватели, но в итоге я всё время прихожу к начальной точке. iTunes — это центральный хаб для купленной, рипнутой и скачанной музыки.

Наполнение iTunes Music, как и качество подбора, меня не устраивает, поэтому приходится скачивать FLAC. А так как на what.cd есть всё, то беру оттуда музыку всё чаще.

Ниже воркфлоу, который позволяет в автоматическом режиме импортировать FLAC в iTunes. Automator отслеживает новые поступления и запускает bash-скрипт, который конвертирует FLAC в ALAC, скачивает и внедряет обложку, импортирует треки в медиатеку.

Установка

Нам понадобятся:

  • ffmpeg для конвертации и извлечения метаданных (артист, альбом)
  • atomicparsley для вставки обложек
  • sacad для скачивания обложек
  • python3 как зависимость sacad
  • gnu-sed для правильной выборки названий альбома из метаданных

Зависимости из brew и pip

brew install ffmpeg atomicparsley python3  
brew install gnu-sed --with-default-names  
pip3 install sacad

Настройка Automator

1) Скачиваем, распаковываем и устанавливаем воркфлоу "FLAC to iTunes importer.workflow".
2) В Automator.app добавляем отслеживаемую директорию для FLAC.

В Automator.app добавляем отслеживаемую директорию для FLAC

Теперь новые альбомы, которые попадут в выбранный каталог, будут сконвертированы и отправлены в iTunes "~/Music/iTunes/iTunes Media/Automatically Add to iTunes".

Исходники на GitHub

Обновление 11/02/2016
Убрал "лишнее звено" Hazel. Вся логика перенесена в воркфлоу Automator.

Про автоматизацию работы с сидбокс в 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.