Доступен пакетный менеджер GNU Guix 1.3 и дистрибутив на его основе

Состоялся релиз пакетного менеджера GNU Guix 1.3 и построенного на его основе дистрибутива GNU/Linux. Для загрузки сформированы образы для установки на USB Flash (610 МБ) и использования в системах виртуализации (972 МБ). Поддерживается работа на архитектурах i686, x86_64, Power9, armv7 и aarch64.

Дистрибутив допускает установку как в качестве обособленной ОС в системах виртуализации, в контейнерах и на обычном оборудовании, так и запуск в уже установленных дистрибутивах GNU/Linux, выступая в роли платформы для развёртывания приложений. Пользователю предоставляются такие функции, как учёт зависимостей, повторяемые сборки, работа без root, откат на прошлые версии в случае проблем, управление конфигурацией, клонирование окружений (создание точной копии программного окружения на других компьютерах) и т.п.

Основные новшества:

  • Реализована начальная поддержка архитектуры POWER9 (powerpc64le-linux).
  • Предоставлена возможность использования декларативного режима развёртывания, при котором вместо серии команд «guix install» и «guix remove» запускается одна команда «guix package —manifest=manifest.scm» с определением в файле manifest.scm всех приложений, которые требуется установить. Для генерации манифеста на основе имеющегося профиля установки в команде «guix package» предложены опции «—export-manifest» и «—export-channels».
  • Добавлена опция трансформации пакетов «—with-latest», полезная для тех, кто хочет иметь самые свежие версии программ, даже если для приложения ещё не сформирован готовый пакет для Guix. Также добавлена опция «—with-patch» для сборки серии пакетов c применением патча к одному или нескольким из них.
  • В командах «guix» реализован вывод рекомендаций с предложением замен в случае опечатки или наличия альтернативных подкоманд. $ guix package —export-manifests guix package: error: export-manifests: unrecognized option hint: Did you mean `export-manifest’?
  • В «guix refresh» добавлена поддержка загрузки обновлений с хостинга SourceForge, а также режим generic-html для получения обновления с домашней страницы проекта.
  • Добавлена новая команда «guix import go» для рекурсивного импорта пакетов на языке Go с учётом зависимостей. В команде «guix import opam» реализована поддержка пакетов Coq. В «guix import crate» обеспечен учёт семантического версионирования в режиме рекурсивной загрузки. Удалена команда «guix import nix».
  • Проведена оптимизация установки предварительно собранных бинарных пакетов (substitute) и ускорена работа команды «guix system init».
  • В команду «guix environment» добавлена опция «—profile».
  • В guix-daemon добавлена опция «—discover» для обнаружения в локальной сети серверов, отдающих собранные бинарные пакеты (substitute), используя протоколы mDNS/DNS-SD. Для отправки анонсов с серверов в команду «guix publish» добавлена опция «—advertise».
  • Реализована возможность использования алгоритма Zstd для сжатия пакетов.
  • В режиме «—verbosity=1» прекращён вывод загружаемых URL.
  • Вместо подкоманд «disk-image» и «vm-image» предложена общая команда «guix system image».
  • В образе дистрибутива для виртуальных машин добавлена поддержка протокола SPICE.
  • В установочный скрипт добавлен режим автоматической инсталляции.
  • Добавлен сервис lvm-device-mapping для поддержки менеджера томов LVM (Linux Logical Volumne Manager).
  • Добавлен режим «guix system image -t rock64-raw» для генерации образов дистрибутива для плат Rock64.
  • В initrd по умолчанию включена поддержка bcachefs.
  • В сервере печати CUPS по умолчанию включён сервис «brlaser» для поддержки принтеров Brother.
  • Добавлены новые системные сервисы agate, cuirass-remote-worker, ipfs, keepalived, laminar, radicale, syncthing, transmission-daemon, wireguard, xorg-server.
  • Обновлены версии программ в 3100 пакетах, добавлено 2009 новых пакетов. В том числе обновлены версии gcc 10.3.0, glibc 2.31, GNOME 3.34.5, gnupg 2.2.27, go 1.14.15, guile 3.0.5, icecat 78.10.0-guix0-preview1, icedtea 3.7.0, inkscape 1.0.2, julia 1.5.3, libreoffice 6.4.7.2, linux-libre 5.11.15, ocaml 4.11.1, octave 6.2.0, openjdk 14.0, python 3.8.2, racket 8.0, rust 1.51.0, r 4.0.4, sbcl 2.1.3, Xfce 4.16.0 и xorg-server 1.20.10.
  • Устранена уязвимость CVE-2021-27851 в guix-daemon, позволяющая локальному пользователю поднять свои привилегии в системе. Проблема связана с тем, что во время выполнения команды «guix build» сборочный каталог оставался доступен всем на запись и пользователь мог создать жёсткую ссылку на файл, принадлежащий пользователю root и размещённый вне сборочного каталога, например, «/etc/shadow». Если при сборке была указана опция «—keep-failed» то в случае сбоя guix-daemon менял владельца для всего сборочного дерева на текущего пользователя, включая жёсткие ссылки.

Напомним, что пакетный менеджер GNU Guix основан на наработках проекта Nix и кроме типичных функций управления пакетами поддерживает такие возможности, как выполнение транзакционных обновлений, возможность отката обновлений, работа без получения привилегий суперпользователя, поддержка привязанных к отдельным пользователям профилей, возможность одновременной установки нескольких версий одной программы, средства уборки мусора (выявление и удаление неиспользуемых версий пакетов). Для определения сценариев сборки приложений и правил формирования пакетов предлагается использовать специализированный высокоуровневый предметно-ориентированный язык и компоненты Guile Scheme API, позволяющие выполнять все операции по управлению пакетами на функциональном языке программирования Scheme.

Поддерживается возможность использования пакетов, подготовленных для пакетного менеджера Nix и размещённых в репозитории Nixpkgs. Кроме операций с пакетами возможно создание сценариев для управления конфигурацией приложений. При сборке пакета автоматически загружаются и собираются все связанные с ним зависимости. Возможна как загрузка готовых бинарных пакетов из репозитория, так и сборка из исходных текстов со всеми зависимостями. Реализованы средства для поддержания версий установленных программ в актуальном состоянии через организацию установки обновлений из внешнего репозитория.

Сборочное окружение для пакетов формируется в виде контейнера, содержащего все необходимые для работы приложений компоненты, что позволяет сформировать набор пакетов, способный работать без оглядки на состав базового системного окружения дистрибутива, в котором Guix используется в качестве надстройки. Между пакетами Guix возможно определение зависимостей, при этом для поиска наличия уже установленных зависимостей используется сканирование хэшей-идентификаторов в директории установленных пакетов. Пакеты устанавливаются в отдельное дерево директорий или поддиректорию в каталоге пользователя, что позволяет обеспечить его параллельное сосуществование с другими пакетными менеджерами и обеспечить поддержку широкого спектра существующих дистрибутивов. Например, пакет устанавливается как /nix/store/452a5978f3b0b426064a2b64a0c6f41-firefox-88.0.0/, где «452a59…» является уникальным идентификатором пакета, используемым для контроля зависимостей.

Дистрибутив включает только свободные компоненты и поставляется с ядром GNU Linux-Libre, очищенным от несвободных элементов бинарных прошивок. Для сборки применяется GCC 9.3. В качестве системы инициализации используется сервисный менеджер GNU Shepherd (бывший dmd), развиваемый как альтернатива SysV-init с поддержкой зависимостей. Управляющий демон и утилиты Shepherd написаны на языке Guile (одна из реализаций языка Scheme), который также используется и для определения параметров запуска сервисов. Базовый образ поддерживает работу в консольном режиме, но для установки подготовлено 17243 готовых пакета, среди которых и компоненты графического стека на базе X.Org, оконные менеджеры dwm и ratpoison, рабочий стол Xfce, а также подборка графических приложений.

Источник: opennet.ru

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *