Доступен пакетный менеджер Nix 2.0

Увидел свет релиз пакетного менеджера Nix 2.0, применяемого в дистрибутиве NixOS. При использовании Nix пакеты оформляются в виде срезов, содержащих необходимые для работы приложений компоненты, которые устанавливаются в отдельное дерево директорий /nix/store или поддиректорию в каталоге пользователя. Код проекта поставляется под лицензией LGPLv2.1.

Nix позволяет выполнять атомарные обновления пакетов, даёт возможность откатывать изменения и одновременно устанавливать несколько версий одной программы. Несколько пользователей могут совместно использовать общее хранилище установленных пакетов и устанавливать программы без необходимости получения прав root.

Между пакетами возможно определение зависимостей, при этом для поиска наличия уже установленных зависимостей используется сканирование хэшей-идентификаторов в каталоге установленных пакетов. Например, пакет устанавливается как /nix/store/f3d4q25649f394359bh52d5vf7a0f3-firefox-58.0.0/, где хэш «f3d4q8…» является уникальным идентификатором пакета, используемым для контроля зависимостей.

Возможна как загрузка готовых бинарных пакетов из репозитория (при установке обновлений к бинарным пакетам загружаются только delta-изменения), так и сборка из исходных текстов со всеми зависимостями. Коллекция пакетов представлена в специальном репозитории Nixpkgs насчитывает около 6500 пакетов, собранных для платформ GNU/Linux (i686, x86_64, ARM aarch64) и macOS (x86_64-darwin).

В новом выпуске отмечается достаточно много изменений, нарушающих обратную совместимость. Например, прекращена поддержка загрузки на основе манифеста (удалены команды nix-pull, nix-generate-patches, bsdiff и bspatch), копирования из других хранилищ (применялось в инсталляторе NixOS для копирования путей с установочного носителя). Проведена работа по исключению из зависимостей Perl (удалена команда nix-push, вместо которой следует использовать nix copy). Прекращена поддержка системы проверки цифровых подписей на основе OpenSSL и кэширования информации о сбоях в процессе сборки.

Из новшеств можно отметить новую команду nix, которая пришла на смену командам nix-* и предоставляет более понятный и простой в использовании синтаксис. Например, доступны подкоманды:

  • «nix build» вместо nix-build
  • «nix run» вместо «nix-shell -p»
  • «nix search» вместо «nix-env -qa»
  • «nix copy» вместо «nix-copy-closure» и «nix-push»
  • «nix optimise-store» вместо «nix-store --optimise»
  • «nix repl replaces» вместо nix-repl
  • «nix verify» вместо «nix-store --verify» и «nix-store --verify-path»
  • «nix add-to-store» вместо «nix-store --add»
  • «nix eval» вместо «nix-instantiate --eval»
  • «nix why-depends»
  • «nix path-info» вместо «nix-store -q»
  • «nix dump-path» вместо «nix-store --dump»
  • «nix edit»
  • «nix upgrade-nix»
  • «nix ls-store» и «nix ls-nar»
  • «nix cat-store» и «nix cat-nar»
  • «nix show-derivation»
  • «nix sign-paths»
  • «nix copy-sigs»
  • «nix show-config»

Существенно расширены методы доступа к хранилищам, среди поддерживаемых типов хранилищ: LocalStore (локальный путь), RemoteStore (daemon), BinaryCacheStore, HttpBinaryCacheStore (http://, https://), LocalBinaryCacheStore (file://), S3BinaryCacheStore (s3:// Amazon S3), LegacySSHStore (ssh://), SSHStore (ssh-ng://). Добавлена поддержка протокола HTTP/2 и алгоритма сжатия Brotli. Обеспечено сохранение цифровых подписей для путей в локальном хранилище и автоматическое подписывание новых локальных сборок (для проверки следует использовать команду «nix verify»). Добавлены компоненты для обеспечения повторяемых сборок.

© OpenNet