четверг, 22 июня 2017 г.

Механизм автоматического обновления LibreOffice

Один из разработчиков LibreOffice, Markus Mohrhard, опубликовал пост в своем блоге о прогрессе в разработке механизма автообновления LibreOffice.
В чём вообще суть и цель этой штуки: при любом обновлении версии LibreOffice, даже самом незначительном, вроде с версии 5.3.1.1 до 5.3.1.2 приходится выкачивать полный дистрибутив, удалять старую версию и заново ставить новую (мы говорим про случай, когда LibreOffice устанавливается не из репозиториев дистрибутива Linux, а из сборки, которые распространяет сам The Document Foundation). Для Windows и macOS ситуация в целом аналогичная. Так вот указанный механизм автообновления самостоятельно проверяет наличие обновлений на сайте/сервере TDF и скачивает так называемый дельта-файл - файл, который содержит только разницу между установленными файлами и новыми на сервере. После этого происходит распаковка дельта-файла и обновление только некоторых файлов в уже установленном LibreOffice. Что это даёт? Первое - это автоматизация процесса, софт всё сделает сам, от пользователя потребуется только согласиться на обновление. Второе - размер скачиваемого файла с обновлением, он намного меньше. Г-н Mohrhard в своём посте отметил стократную! разницу (конечно это справедливо для обновления ежедневных сборок, однако кратная разница в размере скачиваемой информации будет наверняка. Это по сути зависит от разницы между версиями ПО, чем больше разница, тем больший размер будет иметь дельта-файл), а это уменьшит нагрузку на серверы TDF.
На сегодня доступна рабочая статичная сборка с встроенным механизмом обновления только для Linux и только для архитектуры х86_64. Архив, скачанный по ссылке, нужно распаковать куда-то, откуда простой пользователь может запускать программы, и просто запустить бинарник. По идее оно должно заработать в любом дистрибутиве Linux с подходящей архитектурой.
Сам код механизма заимствован у Mozilla Firefox и был творчески переработан.
Технически обновление выглядит так (ниже мой свободный перевод текста из поста Маркуса):
"Процесс обновления в настоящее время двухэтапный, но позже он может быть заменён на одноэтапный. На первом шаге LibreOffice связывается с нашим сервером обновлений, который знает обо всех доступных обновлениях, и сервер сообщает о доступных обновлениях установленному экземпляру LibreOffice. На основе полученного ответа установленный экземпляр LibreOffice загрузит нужный файл обновления, проверит, что файл верен (размер файла и хеш), скопирует существующую установку в отдельный каталог обновления и применит обновление. После того, как обновление было применено, первый этап завершается. Во время следующего запуска обновленная сборка из каталога обновлений заменит существующую установку."
При этом двухэтапное обновление не очень хорошо подходит для Windows, есть риск повреждения профиля пользователя (который и так слишком хрупкий, и ломается даже сам по себе достаточно часто). Есть идея о том, чтобы скачивать дельта-файл и проводить обновление не в отдельном каталоге с копией установленной версии, а просто при следующем запуске LibreOffice.
Ещё цитата: "Еще одна огромная проблема автоматического обновления - как обрабатывать случай, который пользователь не имеет прав на запись в установочный каталог (например, LibreOffice, установленный, как обычное приложение в Windows). Mozilla обрабатывает этот случай в Windows через дополнительную службу обновления, которая повышает привилегии процесса обновления. В настоящее время я (Markus) планирую использовать ту же концепцию для LibreOffice, и код службы обновления уже успешно компилируется в Windows. Использование такой службы требует от нас убедиться, что служба не может использоваться никаким исполняемым файлом, который не создан командой LibreOffice, а это требует проверки подписей файлов на каждом шаге. Поскольку я (Markus) не мог найти способ надежной проверки подписи исполняемых файлов и библиотек в Linux, в настоящее время эта функция не поддерживается за пределами Windows."
Что ещё нужно реализовать: "В настоящее время одной из оставшихся функций, которые всё еще нужно реализовать для всех платформ - это пользовательский интерфейс для этого функционала. Большей задачей является обеспечение работоспособности программы обновления в Windows, включая службу обновления и интеграцию MSI с помощью обновлений MSP. Кроме того, хотелось бы написать несколько автоматических тестов, которые будут гарантировать, что обновления работают, и что обновленные сборки и свежеустановленные сборки идентичны."
Если есть желающие помочь в написании кода для реализации механизма автообновления в LibreOffice, то Markus готов к общению. Найти его можно в IRC сети irc.freenode.net на канале #libreoffice-dev, ник у него - moggi. Начать знакомство можно с easy-hack из ошибки tdf#108563 в багзилле проекта.

Комментариев нет:

Отправить комментарий