Проект Redox OS представил пакетный менеджер pkgar, написанный на языке Rust

Разработчики операционной системы Redox, написанной с использованием языка Rust и концепции микроядра, представили новый пакетный менеджер pkgar. В рамках проекта развивается новый формат пакетов, библиотека с функциями управления пакетами и инструментарий командной строки для создания и извлечения криптографически проверенной коллекции файлов. Код pkgar написан на языке Rust и распространяется под лицензией MIT.

Формат pkgar не претендует на универсальность и оптимизирован с учётом специфики операционной системы Redox OS. Пакетным менеджером поддерживается верификация источника по цифровой подписи и контроль целостности, при этом контрольные суммы рассчитываются при помощи хэш-функции blake3. Связанная с верификацией функциональность pkgar может быть доступна без фактического сохранения архива пакета, манипулируя только заголовочной частью пакета. В частности, пакет образуют заголовочный файл (.pkgar_head) и файл с данными (.pkgar_data). Корректно подписанный полный сводный пакет (.pkgar) может быть получен путём простого присоединения файла с заголовком к файлу с данными («cat example.pkgar_head example.pkgar_data › example.pkgar»).

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

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

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

Основные цели pkgar:

  • Атомарность, обновления применяются по возможности автоматически;
  • Экономия трафика, данные предаются по сети только при изменении хэша (при обновлении загружаются только изменившиеся файлы).
  • Высокая производительность, задействованы быстрые криптографические алгоритмы (blake3 поддерживает распараллеливание обработки данных при вычислении хеша). Если данные из репозитория не были ранее прокэшированы хэш для загружаемых данных может быть вычислен во время загрузки.
  • Минималистичность, в отличие от других форматов, в pkgar включает только метаданные, необходимые для извлечения пакета.
  • Независимость от каталога установки, пакет может быть установлен в любой каталог, любым пользователем (пользователь должен иметь право на запись в выбранный каталог).
  • Безопасность, пакеты всегда криптографически верифицируются, а верификация выполняется до совершения фактических операций с пакетом (вначале загружается заголовок и если цифровая подпись верна, во временный каталог загружаются данные, которые перемещаются в целевой каталог после верификации).

Источник: http://www.opennet.ru/opennews/art.shtml?num=52546