В этой статье речь пойдет про 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
список поддерживаемых на данный момент платформ
Распаковываем скачанный архив и в папке с программой запускаем файл syncthing.
Дожидаемся завершения программы и находим в консоли строку вида:
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
В появившемся окне заполняем поля, указав полученный ранее ID Raspberry Pi, имя хоста. Поле Address оставляем “dynamic”.
Попробуем синхронизировать каталоги. По умолчанию создается папка синхронизации в ~/Sync/ на каждой ноде.
Кладем файл и через некоторое время он будет синхронизирован с остальными узлами.
Теперь можно синхронизировать данные между машинами, с помощью быстрого протокола. Для обмена файлами нужно всего лишь сообщить ID своего компьютера тому человеку, с которым хотите организовать совместное хранилище.
Заключение
Насколько это приложение удобнее и эффективнее того же Bittorrent Sync – к которому я же привык – покажет время. Пост написан по «горячим следам» спустя всего пару часов после обнаружения информации о Syncthing.
Пишите в комментарии свои вопросы, я сейчас буду усиленно тестировать сервис и, постараюсь дополнить пост информацией о скорости синхронизации, нагрузке и др., если это будет интересно.
Ссылки по теме
Проект на Гихабе: github.com/calmh/syncthing#
Документация: discourse.syncthing.net/category/documentation
Форум поддержки: discourse.syncthing.net/
Автор: arudmin