Syncthing является свободной альтернативой приложения BitTorrent Sync, предназначенного для синхронизации данных между компьютерами и мобильными устройствами.
Пользователи могут осуществлять синхронизацию данных между различными устройствами по нескольким причинам. Например, функция синхронизации данных позволяет привести содержимое директорий на рабочей станции и ноутбуке к идентичному виду, а также создать резервную копию музыкальной или видеоколлекции.
Такие популярные сервисы, как Dropbox, Google Drive, Box и другие максимально упрощают процесс синхронизации данных, но многие пользователи стараются не использовать их из-за опасений за безопасность данных, сохраняемых в публичных облачных сервисах. Альтернативным инструментом для уделенной синхронизации данных является приложение BitTorrent Sync [1], использующее пиринговую сеть на основе протокола BitTorrent [2]. Не секрет, что многие пользователи Linux предпочитают использовать свободное программное обеспечение всегда, когда это возможно, а BitTorrent Sync не является таковым - приложение распространяется бесплатно, но его исходный код закрыт.
Syncthing [3] (Рисунок 1) является свободной альтернативой рассматриваемого приложения, доступной с 2014 года. Как и BitTorrent Sync, Syncthing использует пиринговую сеть; однако, исходный код данного приложения распространяется в соответствии с условиями лицензии Mozilla Public License [4].
Рисунок 1. По умолчанию Syncthing предоставляет пользователю лишь обычный веб-интерфейс.
Команда разработчиков Syncthing постоянно дорабатывает свой программный продукт и публикует обновления каждую неделю или раз в две недели. Помимо наличия 32- и 64-битных сборок для Linux, существуют сборки для различных вариантов систем BSD, Solaris, Android, Windows и MacOS X. Приложение для iOS также будет выпущено в скором времени.
Вы можете установить Syncthing в Arch Linux из репозитория сообщества (Community repository); приложение также доступно из официальных репозиториев текущих версий дистрибутивов Fedora и OpenSUSE. Имеются планы по включению приложения в официальные репозитории дистрибутивов Debian, Ubuntu и других основанных на них дистрибутивов [5]. Приложение Syncthing совместимо с центральными процессорами архитектуры ARM, поэтому без проблем работает на таких устройствах, как Raspberry Pi, Raspberry Pi 2, других одноплатных компьютерах, а также сетевых хранилищах от компании Synology. Версия приложения Syncthing для Android размещена в магазине приложений Google Play Store [6], а также в магазине приложений с открытым исходным кодом под названием F-Droid [7].
От обычных к пиринговым сетям
В отличие от свободных облачных хранилищ, таких, как ownCloud, приложение Syncthing (как и BitTorrent Sync) не хранит загружаемые данные на центральном сервере; вместо этого оно распространяет их по компьютерам (или узлам, если вам будет угодно), из которых состоит пиринговая сеть. Команда разработчиков Syncthing разработала протокол Block Exchange Protocol [8], в рамках которого реализуются все механизмы, необходимые для обмена данными. Обязательное использование алгоритмов шифрования гарантирует доступность ваших данных лишь для вас.
Syncthing осуществляет синхронизацию данных между устройствами в локальной сети, а также между удаленными компьютерами. Для упрощения обмена данными с компьютерами, расположенными за пределами локальной сети, рассматриваемое приложение, как и его закрытый аналог BitTorrent Sync, использует протокол UPnP [9], поддержку которого вам, возможно, придется активировать на уровне вашего маршрутизатора. Поддержка данного протокола активирована по умолчанию на большинстве маршрутизаторов, поэтому вам не придется вмешиваться в автоматический процесс проброса требуемых портов. Если ваш маршрутизатор не поддерживает протокол UPnP, вам придется осуществить проброс необходимых портов вручную: пробросьте TCP-порт 22000 вашего компьютера для того, чтобы он мог взаимодействовать с другими удаленными компьютерами. Если компьютер находится за локальным межсетевым экраном, вам придется пробросить как TCP-порт 22000, так и UDP-порт 21025.
Первый запуск
После установки приложения Syncthing в вашем любимом дистрибутиве, вы сможете запустить его либо из меню приложений, либо с помощью терминала с правами обычного пользователя. В моем случае использовался настольный компьютер под управлением Debian "Sid", ноутбук под управлением Fedora 22 и Android-смартфон.
При первом запуске Syncthing сгенерирует ключи и сертификаты, которые гарантируют безопасность обмена данными по сети. После этого веб-интерфейс приложения будет автоматически открыт с помощью используемого по умолчанию веб-браузера - Syncthing не имеет классического графического интерфейса. При необходимости вы можете впоследствии самостоятельно установить приложение Syncthing GTK (Рисунок 2). Пакеты с данным приложением размещены на официальной странице проекта, расположенной на хостинге GitHub [10]. Однако, при установке пакетов вам придется убедиться в наличии в системе всех необходимых программных компонентов.
Рисунок 2: При желании вы можете установить графический интерфейс приложения под названием Syncthing GTK.
Конфигурация
Для начала вы должны запустить Syncthing на всех узлах (то есть, на всех компьютерах в сети). На первом шаге нужно настроить приложение с помощью диалога настроек его веб-интерфейса, который доступен после нажатия на иконку шестеренки в правом верхнем углу веб-страницы (Рисунок 3). Нас будут интересовать элементы меню Настройки (Settings) и Показать ID (Show ID).
Рисунок 3: Вы можете ограничить доступ к веб-интерфейсу приложения из диалога настроек.
Далее нужно ввести уникальное имя устройства в поле ввода Имя устройства (Device Name); по умолчанию Syncthing использует в качестве имени устройства установленное имя узла. Также в данном подразделе вы можете ограничить пропускную способность канала, если вам нужно сохранить часть его пропускной способности для соединения с ресурсами сети Интернет. Используемое по умолчанию значение 0 позволяет использовать всю доступную пропускную способность канала. Если есть возможность, в данном разделе следует установить галочку Включить релеи (Enable UPnP), а также воспользоваться размещенными рядом с ней галочками для того, чтобы устройство отображалось на компьютерах из глобальной и локальной сетей. Дополнительно можете активировать поддержку протокола HTTPS и ввести имя пользователя с паролем для ограничения доступа к веб-интерфейсу.
Галочка Анонимный отчет об использовании (Anonymous Usage Reporting) позволяет активировать механизм отправки информации о поведении пользователя на сервер проекта для последующего формирования вектора управления и разработки проекта. Ссылка рядом с галочкой ведет на страницу с дополнительной информацией о данном механизме. Вам не придется изменять значения остальных параметров, во всяком случае, после первого запуска приложения. Все значения параметров конфигурации хранятся в файлах конфигурации, которые расположены в директории ~/.config/syncthing/ и могут модифицироваться с помощью любого текстового редактора.
Сеть из узлов
После ввода настроек на всех используемых компьютерах следует связать эти компьютеры друг с другом. Индивидуальные идентификаторы устройств из 46 цифр, генерируемые на основе информации из сертификатов на каждом из устройств при первом запуске приложения, предназначены как раз для этой цели; они доступны посредством элемента меню настроек Показать ID (Show ID).
Вы можете переместить этот идентификатор в форме текстового файла, расположенного на флеш-накопителе с интерфейсом USB, воспользоваться смартфоном с приложением для чтения QR-кодов (Рисунок 4), отправить ого в сообщении электронной почты или воспользоваться другими веб-сервисами. После этого придется ввести идентификатор интересующего устройства вместе с его именем, нажав на кнопку Добавить удаленное устройство (Add Device) в веб-интерфейсе приложения на другом устройстве. Функция Рекомендатель (Introducer) в диалоге добавления устройства позволяет указать, следует ли использовать все известные системе распределения данных узлы на новом устройстве.
Рисунок 4: Простейший способ распространения идентификатора вашего компьютера связан с использованием приложения для сканирования QR-кодов.
Благодаря использованию идентификатора и имени устройства вы можете синхронизировать данные между вашими устройствами и делиться файлами с коллегами или друзьями. Вы можете настроить Syncthing с помощью графического интерфейса Syncthing GTK, открыв окно настроек с помощью кнопки с иконкой Syncthing в верхнем левом углу главного окна. Здесь, кроме всего прочего, имеется возможность интеграции приложения с файловым менеджером окружения рабочего стола GNOME, Cinnamon или Mate.
Добавление дополнительных директорий
По умолчанию после запуска приложение Syncthing создает директорию ~/Sync в домашней директории пользователя на каждом из устройств. В процессе синхронизации оно будет автоматически отслеживать состояние всех файлов из данной директории, а также из всех вложенных директорий, включая изменение их содержимого. Однако, при необходимости синхронизации большого объема данных вы можете добавить дополнительные директории со своими собственными параметрами с помощью диалога настройки Syncthing.
После нажатия на кнопку Добавить папку (Add folder) или Добавить новую папку (Add shared folder) из меню Syncthing GTK (Рисунок 5) следует ввести уникальное имя директории в поле ID папки (Folder ID) и выбрать целевую директорию. Параметры директории должны быть введены на всех используемых компьютерах, причем ее идентификатор должен быть идентичным. При этом соответствующая целевая директория может иметь отличное имя на каждом из устройств.
Рисунок 5: Syncthing автоматически создает резервные копии данных благодаря функции версионирования файлов.
Параметр Master Folder выделяется из множества других параметров. При его активации Syncthing будет защищать соответствующую директорию от добавления изменений, внесенных на остальных устройствах. Однако, Syncthing все также будет передавать информацию об изменениях, внесенных в файлы из рассматриваемой директории на данном устройстве, на другие устройства в сети. Файл исчезнет с других устройств лишь в случае его удаления из одной из защищенных директорий.
Параметр Интервал сканирования (Search interval или Rescan Interval в новейших версиях приложения) позволяет указать, как часто Syncthing нужно искать новые или измененные данные. Вам определенно следует изменить стандартное значение в 60 секунд в сторону увеличения на малопроизводительных машинах. При необходимости вы можете нажать на кнопку Пересканировать (Check All или Rescan) для поиска измененных и новых файлов во всех известных приложению директориях с данными.
Syncthing позволяет использовать различные режимы создания и хранения резервных копий обрабатываемых данных с помощью инструментов из раздела Версионирование данных (File Versioning) [11]. В зависимости от ваших потребностей, вы можете либо вообще отказаться от создания резервных копий данных, либо использовать Простой режим версионирования (Simple), предусматривающий хранение фиксированного количества копий удаленных и измененных файлов в скрытой директории .stversions. Для расчета времени хранения файлов может устанавливаться даже алгоритм В шахматном порядке (Staggered). В случае выбора Внешнего версионирования (External) для создания резервных копий данных будет использоваться внешняя команда.
При добавлении данных в директорию в файловой системе без механизма разделения прав доступа (такой, как FAT) вы должны самостоятельно отключить механизм отслеживания прав доступа с помощью параметра Игнорировать права доступа (Ignore permissions). Далее нужно выбрать устройства, на которых Syncthing будет синхронизировать содержимое данной директории с помощью параметра Общий доступ (Share with devices). При необходимости вы можете исключить из процесса синхронизации поддиректории данной директории с помощью элемента меню Игнорировать шаблоны (Ignore patterns). После публикации новой директории вам придется подтвердить возможность доступа к ее содержимому с других компьютеров из сети (Рисунок 6).
Рисунок 6: Вам придется подтвердить возможность доступа к новой директории с удаленного компьютера на целевом компьютере.
Приложение для Android
Приложение Sycnthing для Android (Рисунок 7) все еще находится на начальных этапах разработки; однако, оно уже может успешно использоваться по прямому назначению. После запуска оно получает доступ к директории, в которой смартфон или планшет хранит фотоснимки. Как и в случае приложения для настольных компьютеров, данное приложение позволяет публиковать содержимое других директорий по мере необходимости. Процесс настройки приложения полностью аналогичен процессу настройки его версии для настольных компьютеров. Кроме того, рассматриваемое приложение позволяет активировать механизм обмена данными только при активации WiFi или при зарядке мобильного телефона.
Рисунок 7: Скорее всего, вы будете запускать приложение Syncthing для Android лишь при необходимости, ведь для его работы требуется большое количество энергии.
Необходимость в значительных энергозатратах для корректной работы приложения является одним из его главных недостатков. Если в разделе настроек приложения для мобильного телефона активированы параметры для постоянного отслеживания изменений данных и синхронизации новых данных (Рисунок 8), Syncthing будет постоянно функционировать, нагружая его центральный процессор и значительно сокращая время жизни его аккумулятора. По этой причине рекомендуется запускать Syncthing лишь при необходимости вместо запуска демона в фоновом режиме.
Рисунок 8: На данный момент Syncthing требует значительных энергозатрат для корректной работы. По этой причине стоит деактивировать демон, работающий в фоновом режиме.
Заключение
Приложение Syncthing и все его компоненты являются свободным программным обеспечением. Проект находится в фазе активной разработки и развивается в правильном направлении. Однако, приложение все еще выглядит незавершенным, что вовсе не означает, что оно не выполняет свою задачу. В моем случае синхронизация данных прошла без каких-либо эксцессов и заняла разумное время. Задержки передачи данных, такие, как минутная пауза из-за перезапуска демона, который необходимо осуществлять после каждого изменения настроек, объясняются принципом работы пиринговой сети.
Приложение показалось мне незавершенным, что простительно для текущей версии 0.11.25, еще и из-за периодических сообщений о несуществующих ошибках, которые никак не влияют на процесс синхронизации данных. Однако, команда разработчиков должна в скором времени устранить все подобные проблемы, если принимать во внимание текущий темп разработки.
Документация, доступная на данный момент лишь на английском языке, позволяет избежать некоторых проблем при первой настройке приложения [12]. Расширенная документация [13], исчерпывающий список ответов на часто задаваемые вопросы [14] и описание методики настройки сетевого соединения на уровнях маршрутизатора и межсетевого экрана [15] также опубликованы в сети.
Syncthing поддерживает большое количество платформ и может использоваться как для синхронизации данных в домашней сети, так и для обмена данным с коллегами и друзьями. Достаточно простая процедура настройки и беспроблемный механизм синхронизации данных между множеством устройств нивелируют все имеющиеся на данный момент недоработки приложения. Как говорилось ранее, Syncthing является свободным инструментом, который можно рекомендовать пользователям, нуждающимся в альтернативе существующему закрытому решению.