Обзор программы синхронизации Syncthing + установка на Raspberry Pi и  Macbook

в 7:41, , рубрики: BitTorrent Sync, dropbox-killer, Peer-to-Peer, Raspberry Pi, seafile, метки: , , , ,

syncthing cloud platforms tags
В этой статье речь пойдет про Syncthing — новое открытое кроссплатформенное приложение, работающее по модели клиент-сервер и предназначенное для синхронизации файлов между участниками (P2P). Приложение написано на языке Go и по функциональности похоже на BitTorrent Sync.

После обзора нового сервиса мы с вами попробуем установить его на Raspberry Pi и синхронизировать с ноутбуком.

Обзор системы

Для синхронизации файлов между узлами в P2P-сети был написан простой, эффективный и безопасный протокол обмена блоками Block Exchange Protocol (BEP). Программа Syncthing реализует возможности данного протокола, хотя его можно использовать в любом программном обеспечении. Разработка идёт полностью открыто, весь исходный код публикуют на Github. Протокол тоже открыт, так что любые баги можно сразу обнаружить и исправить. Программа выпускается под Mac OS X, Windows, Linux, FreeBSD и Solaris, легко настраивается через удобный веб-интерфейс, работает в локальной сети или через интернет.

<img style=“border: 1px solid #ddd;” src=«habrastorage.org/getpro/habr/post_images/52c/0d4/128/52c0d41284e8a1acc3feae95189d282c.jpg» alt=«image»/>
вот так выглядит интерфейс административной панели

Готовые сборки доступны на Гитхабе под все основные платформы, также на сайте имеется документация (англ.) и руководство по быстрому запуску (англ.).

Возможности программы:

  • Открытый исходный код приложения и открытый протокол.
  • Каждый узел в сети идентифицируется по стойкому сертификату.
  • Поддержка синхронизации на уровне блоков. При маленьком изменении в большом файле будет синхронизироваться лишь изменившаяся часть.
  • Отсутствие искусственного лимитирования канала
  • Возможность явно указать, каким узлам будет доступна синхронизируемая директория.
  • Синхронизация директорий и файлов по дате последнего изменения (пока без поддержки версионности).
  • Опция «master-slave», благодаря которой другие узлы будут лишь синхронизироваться с данной директорией, но не смогут изменять её содержимое.
  • Управление через удобный адаптируемый веб-интерфейс.
  • Кроссплатформенность. Поддерживаются операционные системы Windows, Linux, Mac OS X, FreeBSD и Solaris. Существует неофициальный клиент для Android.
  • Безопасность и приватность. Данные хранятся на клиентских машинах, не требуется взаимодействие со сторонним сервером. Поддерживается TLS.

Установка и настройка

Теперь после краткого обзора перейдем непосредственно к установке и настройке приложения. Я буду использовать домашний макбук в качестве основного хоста с веб-интерфейсом, а клиент будет установлен на Raspberry PI model B.

На макбуке
Перейдем на страницу загрузки актуального релиза и скачаем необходимый архив, для Mac OS необходимо загрузить syncthing-darwin-amd64-v0.8.13.tar.gz

image
список поддерживаемых на данный момент платформ

Распаковываем скачанный архив и в папке с программой запускаем файл syncthing.
image
Дожидаемся завершения программы и находим в консоли строку вида:

My ID: WFDJGOXZBKCC45BFO36JCTFM2EPIKSPXZACUZAUTXRYD2RJAELGS

Это — идентификатор системы, запомните его, он пригодится нам чуть поз днее. Теперь займемся клиентом.

На Raspberry Pi
Зайдем в консоль Raspberry Pi и скачаем пакет для этой платформы:

wget https://github.com/calmh/syncthing/releases/download/v0.8.13/syncthing-linux-armv5-v0.8.13.tar.gz

Теперь распакуем и запустим сервис

tar xvzf synct*
cd synct*
./syncthing

Необходимо подождать некоторое время, пока сгенерируется уникальный ключ-идентификатор и также запомнить (записать) его.
После этого нужно добавить первый сгенерированный на ноутбуке ключ в конфигурационный файл config.xml.
nano /home/pi/.config/syncthing/config.xml
и добавить ID «ноутбука» в ветку repository, а также новый узел:

<repository id=«default» directory="/home/pi/Sync" ro=«false»>
<node id=«raspberry-pi-ID»></node>
<node id=«ваш-ID-компьютера»></node>
</repository>

<node id=«ваш-ID-компьютера» name=«Имя хоста»> <address>dynamic</address>
</node>

У меня получилось вот так

<repository id=«default» directory="/home/pi/Sync" ro=«false» ignorePerms=«false»>
<node id=«EGOE6LPEVKJQ3EVYJNZJ2QC6NHTQA7L5SPCOGCSZ33DTLTTCM22D»></node>
<node id=«WFDJGOXZBKCC45BFO36JCTFM2EPIKSPXZACUZAUTXRYD2RJAELGS»></node>
<versioning></versioning>
</repository>
<node id=«EGOE6LPEVKJQ3EVYJNZJ2QC6NHTQA7L5SPCOGCSZ33DTLTTCM22D» name=«raspberrypi»>
<address>dynamic</address>
</node>
<node id=«WFDJGOXZBKCC45BFO36JCTFM2EPIKSPXZACUZAUTXRYD2RJAELGS» name=«macbook«>
<address>dynamic</address>
</node>

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

Настройка клиента на Raspberry Pi завершена, осталось заново запустить сервис командой


./syncthing &

Или же добавить его в автозагрузку в файле /etc/rc.local.

Проверка работы

Открываем в браузере ноутбука снова адрес http://127.0.0.1:8080 и в верхнем правом углу выбираем Edit→Add Node
syncthing

В появившемся окне заполняем поля, указав полученный ранее ID Raspberry Pi, имя хоста. Поле Address оставляем “dynamic”.
image

Попробуем синхронизировать каталоги. По умолчанию создается папка синхронизации в ~/Sync/ на каждой ноде.
Кладем файл и через некоторое время он будет синхронизирован с остальными узлами.

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

Заключение

Насколько это приложение удобнее и эффективнее того же Bittorrent Sync – к которому я же привык – покажет время. Пост написан по «горячим следам» спустя всего пару часов после обнаружения информации о Syncthing.

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

Ссылки по теме
Проект на Гихабе: github.com/calmh/syncthing#
image Документация: discourse.syncthing.net/category/documentation
image Форум поддержки: discourse.syncthing.net/

Автор: arudmin

Источник

Поделиться

* - обязательные к заполнению поля