Прототип клиента Яндекс.Диска для Linux и открытие API

в 8:19, , рубрики: inotify, perl, xmpp, синхронизация, яндекс, Яндекс.Диск, метки: , , , ,

На днях Яндекс открыл документацию API Яндекс.Диска, и я хочу рассказать о примере программы, созданной на базе этого API.

У Яндекс.Диска есть отдельные клиентские программы для ОС Windows и Mac OS X, которые поддерживают локальную копию файлового хранилища. Это невероятно удобно! Надо отдать должное Дропбоксу, который, кажется, первым предложил именно такой способ использования облачного файлового хранилища.

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

Текущая версия доступна на гитхабе — это примерно 130 строк кода на Перле, а здесь я очень кратко расскажу, как она устроена и работает.

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

В домашнем каталоге пользователя появляется подкаталог YandexDisk, который содержит локальную копию файлов из Диска, а также скрытый каталог .yadisk-davfs, который является точкой монтирования для файловой системы davfs2 и предоставляет файловый доступ к реальным данным в облаке Яндекса. Задача синхронизатора — поддерживать эти два каталога в идентичном виде, подхватывая изменения в каждом из них.

Эту задачу yadisk-sync решает с помощью трёх важных инструментов:

  • Во-первых, для слежения за изменениями в локальной копии используется механизм inotify, доступный во всех современных ядрах.
  • Во-вторых, для получения изменений из облака используется подписка на XMPP-сообщения. Эта часть протокола Яндекс.Диска пока не документирована.
  • В-третьих, для синхронизации двух каталогов используется известный пакет unison. Он-то и выполняет львиную долю работы по синхронизации.

Любые изменения — локальные или удалённые — приводят к запуску unison, который, используя rsync-подобный протокол, а также сохранённое во время предыдущих запусков знание о состоянии каталогов, копирует, удаляет и редактирует файлы так, чтобы оба каталога содержали одно и то же.

Сама программа yadisk-sync.pl не демонизируется для упрощения отладки, а для установки и конфигурирования требует выполнения инструкций из файла «README.txt». Тестировалось это всё только на Ubuntu 11.10 и Mint 12.

Попробуйте, возможно кого-то этот прототип вдохновит на какие-то интересные разработки. Или используйте API Диска для создания совершенно новых программ и приложений.

Автор: kappa

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


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js