Distri - дистрибутив для обкатки технологий быстрого управления пакетами
Майкл Штапельберг (Michael Stapelberg), автор мозаичного оконного менеджера i3wm и в прошлом активный разработчик Debian (сопровождал около 170 пакетов), развивает экспериментальный дистрибутив distri и одноимённый пакетный менеджер. Проект позиционируется как исследование возможных путей увеличения производительности систем управления пакетами и воплощает некоторые новые идеи построения дистрибутивов. Код пакетного менеджера написан на языке Go и распространяется под лицензией BSD.
Ключевой особенностью предложенного в дистрибутиве формата пакетов является поставка пакета в форме образов SquashFS, вместо сжатых tar-архивов. Применение SquashFS, по аналогии с форматами AppImage и Snap, позволяет «примонтировать» пакет без необходимости выполнения распаковки, что экономит дисковое пространство, допускает атомарные изменения и делает содержимое пакета мгновенно доступным. При этом пакеты distri, как и в классическом формате «deb», содержат только отдельные компоненты, связанные зависимостями с другими пакетами (библиотеки не дублируются в пакетах, а устанавливаются как зависимости). Иными словами, distri пытается совместить гранулированную пакетную структуру классических дистрибутивов, таких как Debian, с методами поставки приложений в форме монтируемых контейнеров.
Каждый пакет в distri монтируется в свой каталог в режиме только для чтения (например, пакет с zsh доступен как »/ro/zsh-amd64–5.6.2–3»), что положительно влияет на безопасность и защищает от случайных или злонамеренных изменений. Для формирования иерархии служебных каталогов, таких как /usr/bin, /usr/share и /usr/lib, применяется специальный FUSE-модуль, объединяющий содержимое всех установленных SquashFS-образов в одно целое (например, каталог /ro/share предоставляет доступ к подкаталогам share из всех пакетов).
Пакеты в distri принципиально избавлены от вызываемых в процессе установки обработчиков (нет хуков и триггеров), а разные версии пакета могут сосуществовать друг с другом, поэтому становится возможным распараллеливание установки пакетов. Предложенная структура ограничивает производительность пакетного менеджера только пропускной способностью сети, через которую загружаются пакеты. Непосредственно установка или обновление пакета выполняется атомарно и не требует дублирования содержимого.
Конфликты при установке пакетов исключаются так как каждый пакет связывается со своим каталогом и в системе допускается наличие разных версий одного пакета (в сводные каталоги подключается содержимое каталога с более свежей ревизией пакета). Сборка пакетов также осуществляется очень быстро и не требует установки пакетов в отдельное сборочное окружение (в сборочном окружении создаётся представления необходимых зависимостей из каталога /ro).
Поддерживаются типовые команды управления пакетами, такие как «distri install» и «distri update», а вместо информационных команд можно применять штатную утилиту «ls» (например, для просмотра установленных пакетов достаточно вывести список каталогов в иерархии »/ro», а для того чтобы узнать в состав какого пакета входит файл, посмотреть куда ведёт ссылка с этого файла).
Предложенный для экспериментов прототип дистрибутива включает около 1700 пакетов и готовые установочные образы с инсталлятором, пригодные как для установки в качестве основной ОС, так и для запуска в QEMU, Docker, Google Cloud и VirtualBox. Поддерживается загрузка с шифрованного дискового раздела и набор типовых приложений для создания рабочего стола на базе оконного менеджера i3 (в качестве браузера предлагается Google Chrome). Предоставляется полноценный инструментарий для сборки дистрибутива, подготовки и формирования пакетов, распространения пакетов по зеркалам и т.п.
© OpenNet