Опубликован пакетный менеджер GNU Guix 0.13 и дистрибутив GuixSD на его основе
Проект GNU представил выпуск пакетного менеджера GNU Guix 0.13 и построенного на его основе дистрибутива GNU/Linux - GuixSD (Guix System Distribution). Допускается установка как в качестве обособленной ОС в системах виртуализации и на обычном оборудовании, так и запуск в уже установленных типовых окружениях GNU/Linux. Для загрузки сформированы образы для установки на USB Flash и использования в QEMU (156 Мб). Поддерживается работа на архитектурах i686, x86_64, armv7, aarch64 и mips64el.
Пакетный менеджер GNU Guix основан на наработках проекта Nix и кроме типичных функций управления пакетами поддерживает такие возможности, как выполнение транзакционных обновлений, возможность отката обновлений, работа без получения привилегий суперпользователя, поддержка привязанных к отдельным пользователям профилей, возможность одновременной установки нескольких версий одной программы, средства уборки мусора (выявление и удаление неиспользуемых версий пакетов). Для определения сценариев сборки приложений и правил формирования пакетов предлагается использовать специализированный высокоуровневый предметно-ориентированный язык и компоненты Guile Scheme API, позволяющие выполнять все операции по управлению пакетами на функциональном языке программирования Scheme.
Поддерживается возможность использования пакетов, подготовленных для пакетного менеджера Nix и размещенных в репозитории Nixpkgs. Кроме операций с пакетами возможно создание сценариев для управления конфигурацией приложений. При сборке пакета автоматически загружаются и собираются все связанные с ним зависимости. Возможна как загрузка готовых бинарных пакетов из репозитория, так и сборка из исходных текстов со всеми зависимостями. Реализованы средства для поддержания версий установленных программ в актуальном состоянии через организацию установки обновлений из внешнего репозитория.
Сборочное окружение для пакетов формируется в виде контейнера, содержащего все необходимые для работы приложений компоненты, что позволяет сформировать набор пакетов, способный работать без оглядки на состав базового системного окружения дистрибутива, в котором Guix используется в качестве надстройки. Между пакетами Guix возможно определение зависимостей, при этом для поиска наличия уже установленных зависимостей используется сканирование хэшей-идентификаторов в директории установленных пакетов. Пакеты устанавливаются в отдельное дерево директорий или поддиректорию в каталоге пользователя, что позволяет обеспечить его параллельное сосуществование с другими пакетными менеджерами и обеспечить поддержку широкого спектра существующих дистрибутивов. Например, пакет устанавливается как /nix/store/f42d69df5d8a0b526064a4e54a7c6f02-firefox-53.0.0/, где "f42d69..." является уникальным идентификатором пакета, используемым для контроля зависимостей.
Дистрибутив включает только свободные компоненты и поставляется с ядром GNU Linux-Libre 4.11, очищенным от несвободных элементов бинарных прошивок. Для сборки применяется GCC 7. В качестве системы инициализации используется сервисный менеджер GNU Shepherd (бывший dmd), развиваемый как альтернатива SysV-init с поддержкой зависимостей. Управляющий демон и утилиты Shepherd написаны на языке Guile (одна из реализаций языка Scheme), который также используется и для определения параметров запуска сервисов. Базовые образ поддерживает работу в консольном режиме, но для установки подготовлено более 5400 готовых пакетов, среди которых и компоненты графического стека на базе X.Org, оконные менеджеры dwm и ratpoison, а также ряд программ на базе библиотеки GTK+.
Основные новшества:
- По сравнению с прошлым выпуском добавлено 840 новых пакетов, в том числе сформированы пакеты с игрой 0 A.D, freeciv, freedoom, alpine, alsa-plugins, cargo, cdrtools, ceph, freerdp, freetalk, neovim, scrypt, stunnel, unrar, xinetd;
- Добавлена поддержка архитектуры aarch64 (ARM64), но бинарные установочные архивы пока не формируются из-за неготовности сборочной инфраструктуры;
- Прекращено формирование установочных сборок mips64el. Поддержка самой архитектуры пока сохранена, но останется ли она в дальнейшем будет зависеть от наличия заинтересованных разработчиков;
- В сборки GuixSD добавлена поддержка загрузки на системах с UEFI и возможность установки на разделы с Btrfs;
- В GuixSD обеспечена возможность запуска системных сервисов (фоновых процессов) в изолированных контейнерах, что позволяет защитить систему от возможных уязвимостей в данных сервисах;
- Обновлены версии программ в 1220 пакетах, в том числе glibc 2.25, Linux-libre 4.11 и GCC 7.
- Добавлены новые системные сервисы для Redis, Exim и Open vSwitch, значительно улучшен интерфейс сервиса Nginx;
- Реализована новая команда "guix pack", предназначенная для создания бинарных пакетов;
- В Guix обеспечена поддержка работы с использованием новой версии GNU Guile 2.2;
- В команду "guix publish" добавлена опция "--cache", обеспечивающая режим кэширования для ускорения доставки бинарных сборок большому числу пользователей;
- Решена большая порция проблем с обеспечением повторяемых сборок пакетов.