Состоялся релиз пакетного менеджера GNU Guix 1.4 и построенного на его основе дистрибутива GNU/Linux. Для загрузки сформированы образы для установки на USB Flash (814 МБ) и использования в системах виртуализации (1.1 ГБ). Поддерживается работа на архитектурах i686, x86_64, Power9, armv7 и aarch64.
Дистрибутив допускает установку как в качестве обособленной ОС в системах виртуализации, в контейнерах и на обычном оборудовании, так и запуск в уже установленных дистрибутивах GNU/Linux, выступая в роли платформы для развёртывания приложений. Пользователю предоставляются такие функции, как учёт зависимостей, повторяемые сборки, работа без root, откат на прошлые версии в случае проблем, управление конфигурацией, клонирование окружений (создание точной копии программного окружения на других компьютерах) и т.п.
Основные новшества:
- Улучшено управление программными окружениями. На смену команде
“guix environment” пришла новая команда “guix shell“, которая позволяет не только формировать сборочные окружения для разработчиков, но и использоваться окружения для ознакомления с программами без отражения в профиле и без выполнения “guix install”. Например, для загрузки и запуска игры supertuxkart можно выполнить “guix shell supertuxkart — supertuxkart”. После загрузки пакет будет сохранён в кэше и следующий запуск не потребует его повторного извлечения.Для упрощения формирований окружений для разработчиков в “guix shell” предоставлена поддержка файлов guix.scm и manifest.scm с описанием состава окружения (для генерации файлов может использоваться опция “–export-manifest”). Для создания контейнеров, в которых эмулируется классическая иерархия системных каталогов, в “guix shell” предложены опции “–container –emulate-fhs”.
- Добавлена команда “guix home” для управления домашним окружением. Guix позволяет определить все компоненты домашнего окружения, включая пакеты, сервисы и начинающиеся с точки файлы. При помощи команды “guix home” экземпляры описанного домашнего окружения могут быть воссозданы в каталоге $HOME или в контейнере, например, для переноса своего окружения на новый компьютер.
- В команду “guix pack” добавлена опция “-f deb” для создания отдельных deb-пакетов, которые могут быть установлены в Debian.
- Для создания различных типов системных образов (raw, QCOW2, ISO8660 CD/DVD, Docker и WSL2) предложена универсальная команда “guix system image”, позволяющая определить тип хранилища, разделы и операционную систему для создаваемого образа.
- В команды для сборки пакетов добавлена опция “–tune”, позволяющая указать микроархитектуру процессора, для которой будут включены специфичные оптимизации (например, на новых CPU AMD и Intel могут быть задействованы SIMD-инструкции AVX-512).
- В инсталляторе реализован механизм для автоматического сохранения важной отладочной информации в случае аварийного завершения установки.
- Сокращено время запуска приложений, благодаря задействованию кэша при динамическом связывании, позволяющего сократить обращение к системным вызовам stat и open при поиске библиотек.
- Задействован новый выпуск системы инициализации GNU Shepherd 0.9 , в котором реализована концепция временных сервисов (transient) и появилась возможность создания сервисов, активируемых при сетевой активности (в стиле systemd socket activation).
- Добавлен новый интерфейс для задания размера раздела подкачки в конфигурации операционной системы.
- Переделан интерфейс для задания статической сетевой конфигурации, в котором теперь предлагается декларативный аналог настроек в стиле команды ip.
- Добавлены 15 новых системных сервисов, включая Jami, Samba, fail2ban и Gitile.
- Запущен сайт packages.guix.gnu.org для навигации по пакетам.
- Обновлены версии программ в 6573 пакетах, добавлено 5311 новых пакетов. Среди прочего обновлены версии GNOME 42, Qt 6, GCC 12.2.0, Glibc 2.33, Xfce 4.16, Linux-libre 6.0.10, LibreOffice 7.4.3.2, Emacs 28.2. Удалено более 500 пакетов, использующих Python 2.
Напомним, что пакетный менеджер GNU Guix основан на наработках проекта Nix и кроме типичных функций управления пакетами поддерживает такие возможности, как выполнение транзакционных обновлений, возможность отката обновлений, работа без получения привилегий суперпользователя, поддержка привязанных к отдельным пользователям профилей, возможность одновременной установки нескольких версий одной программы, средства уборки мусора (выявление и удаление неиспользуемых версий пакетов). Для определения сценариев сборки приложений и правил формирования пакетов предлагается использовать специализированный высокоуровневый предметно-ориентированный язык и компоненты Guile Scheme API, позволяющие выполнять все операции по управлению пакетами на функциональном языке программирования Scheme.
Поддерживается возможность использования пакетов, подготовленных для пакетного менеджера Nix и размещённых в репозитории Nixpkgs. Кроме операций с пакетами возможно создание сценариев для управления конфигурацией приложений. При сборке пакета автоматически загружаются и собираются все связанные с ним зависимости. Возможна как загрузка готовых бинарных пакетов из репозитория, так и сборка из исходных текстов со всеми зависимостями. Реализованы средства для поддержания версий установленных программ в актуальном состоянии через организацию установки обновлений из внешнего репозитория.
Сборочное окружение для пакетов формируется в виде контейнера, содержащего все необходимые для работы приложений компоненты, что позволяет сформировать набор пакетов, способный работать без оглядки на состав базового системного окружения дистрибутива, в котором Guix используется в качестве надстройки. Между пакетами Guix возможно определение зависимостей, при этом для поиска наличия уже установленных зависимостей используется сканирование хэшей-идентификаторов в директории установленных пакетов. Пакеты устанавливаются в отдельное дерево директорий или поддиректорию в каталоге пользователя, что позволяет обеспечить его параллельное сосуществование с другими пакетными менеджерами и обеспечить поддержку широкого спектра существующих дистрибутивов. Например, пакет устанавливается как /nix/store/452a5978f3b1b426064a2b64a0c6f41-firefox-108.0.1/, где “452a59…” является уникальным идентификатором пакета, используемым для контроля зависимостей.
Дистрибутив включает только свободные компоненты и поставляется с ядром GNU Linux-Libre, очищенным от несвободных элементов бинарных прошивок. Для сборки применяется GCC 12.2. В качестве системы инициализации используется сервисный менеджер GNU Shepherd (бывший dmd), развиваемый как альтернатива SysV-init с поддержкой зависимостей. Управляющий демон и утилиты Shepherd написаны на языке Guile (одна из реализаций языка Scheme), который также используется и для определения параметров запуска сервисов. Базовый образ поддерживает работу в консольном режиме, но для установки подготовлено 20526 готовых пакетов, среди которых и компоненты графического стека на базе X.Org, оконные менеджеры dwm и ratpoison, рабочие столы GNOME и Xfce, а также подборка графических приложений.