2016-01-23

О BTSync

На HappyDev я заюзал BitTorrent Sync для раздачи материалов мастер-классов. В основном это были образы виртуальных машин, т.е. относительно большие файлы. И BTSync показал себя неплохо.
BTSync
Конечно, можно было бы сложить эти гигабайты куда-нибудь в Dropbox или даже Google Drive. Но в моём Дропбоксе совсем нет сотни гигабайт, а платить $9.99/month за Pro версию что-то не хочется. В Google Drive сотенка гигов даётся за $1.99/month, тоже не хочется.
Но проблема даже не столько в цене. Качать из облаков — медленно. И чтобы качать из облаков, нужен хороший интернет. А очень хотелось иметь возможность раздавать файло и без интернетов, в локалке, на месте проведения конференции. И BTSync это может. Проверяли, в 100Мбитной локалке может раздавать на полных 10Мбайтах в секунду.
Случились, конечно, некоторые косяки, которые к самому BTSync отношения не имеют. Надо было раздавать образы и только образы, но не инсталляторы всяких виртуалбоксов. Чтобы раздавать по локалке, нужна локалка, а зафигачить вайфай по всей базе отдыха оказалось выше наших возможностей :)
No Inet
BitTorrent Sync — проприетарная программа. Поэтому вы не найдёте её в репозиториях той же Убунты. Придётся, in offtopic way, качать с официального сайта. Если под Windows и Mac у BitTorrent Sync есть нормальный GUI, то для Linux у крайних актуальных версий 2.x есть только веб интерфейс. Качаете, распаковываете, запускаете btsync, заходите на http://localhost:8888 и, при первом запуске, задаёте пароль для доступа к интерфейсу.
В отсутствии GUI есть своё преимущество. Можно без проблем водрузить это дело на какой-нибудь сервер. Только придётся нарисовать Systemd Unit или init скрипт. Ну и создать конфиг на JSON.
BitTorrent
Что такое BitTorrent, надеюсь, объяснять не надо. Мы посредством этого протокола скачиваем большие популярные файлы или даже кучки файлов. Подразумевается, что некий доброжелатель подготавливает эти файлы, формирует .torrent файл, где описаны контрольные суммы кусков-сегментов этих самых файлов, и организует раздачу через некоторый трекер. Желающие скачать файлы скачивают себе .torrent файл, BitTorrent клиент подключается к трекеру, узнаёт, где находятся сегменты файлов (первоначально — только на компьютере организатора раздачи, потом — на куче компьютеров участников раздачи), подключается к этим компьютерам и обменивается кусками файлов. Это P2P обмен, трафик идёт не между сервером и клиентами (как в облаке), а между всеми клиентами, которые равнозначны. Трекер нужен только для того, чтобы клиенты могли найти друг друга. И есть другие протоколы поиска, которые прекрасно работают без трекера, и, в том числе, в локальной сети.
BitTorrent Sync — это такой BitTorrent для ленивых, для локального использования. С помощью BTSync тоже децентрализованно раздаются папки с файлами (только папки). Но нет нужды заниматься генерацией .torrent файла или заниматься публикацией на трекере. Всё это BTSync берёт на себя. К тому же, в любой момент можно поменять содержимое папки, и изменённые файлы будут дополнительно розданы клиентам, а удалённые — удалены. В классическом BitTorrent для этого надо создать новый .torrent файл, фактически начать раздавать новый набор файлов, и попросить всех клиентов перезапустить раздачу.
Folder link
Берём файлы, которые нужно раздать. Складываем их в одну папочку. Добавляем папку в BTSync. В бесплатном варианте доступен только тип папки Standard. Ну и всё, раздача готова. Ну ещё, пожалуй, надо бы открыть несколько портов и иметь реальный IP, если собираетесь раздавать в интернеты.
Теперь нужно дать доступ к раздаваемым файлам всем желающим и только им. Тут есть два способа. Можно раздать ключ. Для каждой папки есть два ключа: Read Only и Read & Write. По первому ключу можно только получать файлы папки, но не менять содержимое папки. По второму ключу можно делать с файлами в папке что угодно, будет происходить всесторонняя синхронизация всех произведённых изменений. Ключ выглядит как строка в 33 ASCII символа.
Другой способ — ссылка. Ссылка ведёт на сайт link.getsync.com, где объясняется, что это такое, и имеется кнопочка для скачивания BitTorrent Sync, что, безусловно, удобно для выкладывания где угодно без подробного объяснения, что такое есть BTSync. Ссылка бывает тоже только на чтение или на чтение и запись. В ссылке содержится имя папки, что очень удобно. Ссылка может протухать, т.е. имеет ограниченное время действия. Ссылка может иметь ограничение на количество использований, так можно ограничить количество тех, кому вы раздаёте файлы. А ещё ссылка должна подтверждаться на том компьютере, где она выдана. Т.е. вы можете видеть каждого, кто хочеть забрать файлы, и решить: этому давать, а этому — не давать.
Даже если вы сняли галочку явного подтверждения для ссылки, все вновь подключаемые клиенты должны связаться с компьютером, выдавшим ссылку, чтобы начать скачивать файлы. Это интересная особенность ссылки, которая несколько ломает децентрализованность системы. По-видимому, таким образом достигается некоторая «достоверность» раздаваемых файлов.
Ссылка может быть представлена QR кодом. Это может быть удобно для мобильных устройств. Да, BitTorrent Sync есть для мобилок.
Manual connection
У нас есть ключ или ссылка. Надо их каким-то образом передать тем, кому мы хотим раздать файлы. Они добавят ключ или ссылку в свой BTSync, и раздача начнется. В десктопных клиентах достаточно пройти по ссылке (если она есть). Под Linux придётся воспользоваться пунктом меню для «ручного» добавления ключа или ссылки, он почему-то запрятан довольно далеко, это Options→Manual connection. По умолчанию файлы складываются в подпапку папки ~/BitTorrent Sync. В случае ключа надо еще указать название подпапки.
Ну и всё, раздача пошла.
Pause sync
Мне как-то понадобилось превратить Read Only папку в Read & Write. Штатными средствами для стандартных папок это сделать нельзя. А выкачивать всё заново не хочется. Но помог такой фокус:
  • Ставим папку на Pause, чтобы прекратить синхронизацию.
  • Переносим актуальные файлы (кроме подкаталога .sync и временных файлов .bts) куда-нибудь во временный каталог.
  • Удаляем папку из BitTorrent Sync.
  • Добавляем ту же папку по Read & Write ссылке или ключу.
  • Тут же ставим папку на Pause, чтобы предотвратить скачивание, ведь файлы у нас уже есть.
  • Переносим актуальные файлы из временного каталога обратно в нужную папку BTSync на диске.
  • Распаузиваем синхронизацию папки.
  • BitTorrent Sync производит индексацию папки и обнаруживает в ней файлы, пересчитывает контрольные суммы и выкачивает лишь различия.
  • Профит.
My devices
Кроме раздачи файлов всем желающим, в стиле BitTorrent, BTSync может просто синхронизировать все раздаваемые файлы между различными связанными устройствами (в том числе и мобильными) одного пользователя. Получается что-то вроде Дропбокса, но без облака, а P2P. Не пробовал такой режим, не было необходимости.
BitTorrent Sync таки не свободная программа. Но даже в бесплатном варианте вам предоставляется некоторая инфраструктура. Это трекер, для раздачи файлов в интернетах (в LAN можно без него). Это релей, который используется для передачи данных, если оба клиента сидят за NAT. Это сервер для хостинга ссылок (те самые ссылки на link.getsync.com), сервер обновлений и сервер проверки лицензий.
Есть, конечно, платная версия BitTorrent Sync Pro. За ₽600, в год или разово, можно получить несколько дополнительных плюшек. Продвинутые папочки с более тонкой раздачей прав доступа. Возможность менять права доступа без тех манипуляций, что я описал выше. Более удобную синхронизацию между устройствами. Возможность скачивать не всю папку целиком, а только нужные файлы. Весьма недорого. А возможность выборочного скачивания файлов из папки выглядит весьма полезной в контексте раздачи образов виртуалок.
Syncthing
Конечно же, у проприетарного BitTorrent Sync есть свободный клон. Это Syncthing. Он работает очень похоже. Тоже веб интерфейс. Тоже папочки. Тоже бесплатно предоставляется инфраструктура из трекеров и релеев. Но можно поднять и свои собственные, если хочется.
А вот с правами доступа тут как-то беднее, чем в BTSync. Syncthing больше заточен на синхронизацию папочек между устройствами. И любой узел может вносить изменения в папочку. Единственно, можно объявить одну из копий мастером, чтобы другие стали Read Only.