LINUX.ORG.RU

Nix 2.0

 , , ,


3

8

Вышел мажорный релиз пакетного менеджера Nix, основной целью которого является предоставление воспроизводимых сборок.

Одной из особенностей данного пакетного менеджера является то, что для описания пакетов в нём используется функциональный язык nix. Набор пакетов nixpkgs, описанный на этом языке, на данный момент содержит более 8 тысяч пакетов применимых для широкого круга задач. Все пакеты с их зависимостями образуют Merkle tree, в котором уникальный хэш каждого пакета зависит от его собственного описания и от хешей всех его зависимостей, также огромное внимание уделяется изоляции сборок друг от друга (используется множество разных механизмов), всё это позволяет окончательно решить проблему так называемого «DLL hell». Nix также является сердцем декларативного дистрибутива Linux под названием NixOS. Nix 2.0 будет использован в следующем релизе NixOS 18.03 Impala.

Нововведения в релизе:

  • Обновлённый интерфейс командной строки на базе единой команды nix должен стать более удобным и однородным (интерфейсы nix-env, nix-build и другие сохранены для обратной совместимости)
    • nix build пришел на замену nix-build
    • nix run служит для запуска программ в окружении заданных пакетов (в чём-то похож на старый nix-shell -p ... --run ...)
    • nix search заменяет nix-env -qa. В отличии от последнего, nix search умеет кэшировать список пакетов для быстрого поиска
    • nix copy позволит копировать пакеты между произвольными хранилищами пакетов, является обобщением nix-copy-closure и nix-push
    • nix verify проверяет, что файлы пакета не были модифицированы
    • nix repl — встроенный REPL для языка nix
    • nix why-depends демонстрирует каким образом один пакет зависит от другого. Помогает мейнтейнерам бороться с «распуханием» дерева зависимостей
  • Улучшения безопасности
    • Nix теперь сохраняет цифровые подписи к пакетам в локальном хранилище. Подписи также копируются автоматически вместе с пакетами при копировании между хранилищами.
    • Цифровые подписи больше не требуются для содержимого с фиксированным хешем
    • Команда nix verify позволяет проверять наличие необходимых цифровых подписей
    • Цифровые подписи теперь по-умолчанию требуются для бинарных сборок (раньше так было только в NixOS)
    • В сборках в песочнице на платформе Linux теперь в качестве временной директории используется /build вместо /tmp
  • Режим чистого выполнения выражений на языке nix в котором не доступны некоторые функции позволяющие получать переменные окружения, скачивать файлы с недетерминированным содержимым.
  • Добавлены несколько фич для поддержки бинарной воспроизводимости (проверки на то, что независимые сборки одного и того же пакета имеют одинаковый результат). Если флаг enforce-determinism установлен в false, то различие в промежуточных сборках (например, зависимостей) приведёт всего лишь к предупреждению, а не к фатальной ошибке. Также параметр diff-hook позволяет задать приложение, такое как diffoscope, которое будет запущено в случае обнаружения несовпадений.
  • Унифицирована внутренняя логика работы с локальными хранилищами пакетов (место, куда пакеты устанавливаются) и удалёнными хранилищами (для передачи бинарных сборок). На данный момент поддерживаются следующие протоколы: http://, https://, file://, s3://, ssh://, ssh-ng://. Добавленная поддержка HTTP/2 позволит немного быстрее работать с бинарными кэшами.
  • Новые встроенные функции языка nix такие как builtins.fetchGit, builtins.fetchMercurial, builtins.path, builtins.split, builtins.partition. Поддержка значений типа float.
  • Избавление от зависимости от Perl. Компоненты зависящие от него либо были переписаны на C++ либо удалены. Биндинги к Perl были вынесены в отдельный пакет.

>>> Полный список изменений



Проверено: jollheef ()
Последнее исправление: Deleted (всего исправлений: 2)

Ответ на: комментарий от anonymous
  ...
  /nix/store/lalala-bash-4.4-p12-dev
  /nix/store/lalala-bash-4.4-p12-dev
  /nix/store/lalala-bash-4.4-p12-doc
  /nix/store/lalala-bash-4.4-p12-info
  /nix/store/lalala-bash-4.4-p12-doc
  /nix/store/lalala-bash-4.4-p12-man
  ...

Вот она кривость nixpkgs - хоас версий. Для одного пакета из-за кривого описания зависимостей и сценариев сборки ставиться миллион разных версий одного и того же пакета, пототму что одна зависиомость имееть чуть другой сценарий сборки баша, чем другая зависмость. Например, у одного сборочный скрипт содержит на один пробел больше, из-за чего другой хеш зависимости.

anonymous
()
Ответ на: комментарий от anonymous

Кстати, занятно, откуда там две разных версии баша?

Алсо, nix run вообще этот баш не качает, только cowsay.

Для одного пакета из-за кривого описания зависимостей и сценариев сборки ставиться миллион разных версий одного и того же пакета, пототму что одна зависиомость имееть чуть другой сценарий сборки баша, чем другая зависмость.

Херню несёшь, сценарий сборки баша находится в пакете bash, остальные пакеты его поменять не могут. Другое дело, что в nixpkgs есть разные версии баша: nixpkgs.bashInteractive с поддержкой readline и nixpkgs.bash без readline.

anonymous
()
Ответ на: комментарий от anonymous

Кстати, занятно, откуда там две разных версии баша?

Сперва возникает правильный вопрос. Но потом:

Херню несёшь, сценарий сборки баша находится в пакете bash...

... пытаешься опровергнуть реальность своим фанатзиями.

Алсо, nix run вообще этот баш не качает, только cowsay.

Потому что эти разные версии одного и того же bash уже установлены в твой /nix/store. Сейчас не знаю, а раньше устанавливались несколько версий одного и того же glibc.
Сам nix - хороший инструмент, но nixpkgs что-то не очень.

anonymous
()
Ответ на: комментарий от anonymous

пытаешься опровергнуть реальность своим фанатзиями.

Нет, ты.

Потому что эти разные версии одного и того же bash уже установлены в твой /nix/store.

Специально делал nix-collect-garbage.

anonymous
()
Ответ на: комментарий от anonymous

> Потому что эти разные версии одного и того же bash уже установлены в твой /nix/store.

Специально делал nix-collect-garbage.

И чем поможет nix-collect-garbage, если эти разные и одинаковые bash уже устнавлены по другим зависимостям. Если бы еще ради cowsay устаналивались дополнительно еще две разные верии bash, то nixpkgs - это мусорогенератор.

Пройдись поиском после сборки муссора, сколько там версий bash, gcc, glibc, perl и тд.

anonymous
()
Ответ на: комментарий от anonymous

Если сделать nix-collect-garbage, а потом запустить nix-shell -p cowsay, скачиваются две версии bash и cowsay.

Если сделать nix-collect-garbage, а потом запустить nix run nixpkgs.cowsay, скачивается только cowsay.

anonymous
()
Ответ на: комментарий от anonymous

В guix с этим немного лучше

Guix implements grafts, a mechanism that allows for fast deployment of critical updates without the costs associated with a whole-distribution rebuild. The idea is to rebuild only the package that needs to be patched, and then to “graft” it onto packages explicitly installed by the user and that were previously referring to the original package. The cost of grafting is typically very low, and order of magnitudes lower than a full rebuild of the dependency chain.

anonymous
()
Ответ на: комментарий от anonymous

Неудобнааа. Для одноразового использования, может быть, и подойдет, но в остальных случаях лучше воспользоваться nix-env

anonymous
()
Ответ на: комментарий от anonymous

Разве это не для закостыливания зависимостей для отдельно взятого пакета?

anonymous
()
Ответ на: комментарий от Deleted

Очередной мертворожденный проект GNU сделанный чтоб можно было говорить что у них это тоже есть.

Собака лает — караван идет.

Куда пришли gnash, gnu ring и еще десятки gnu затычек? Неужели еще не ясно, что цель гну - поставить галочку, что «вот, ребят, мы ж вам своего свободного на лопате принесли, ешьте».

Clayman ★★
()
Ответ на: комментарий от Clayman

А что с ними не так? Старую масяню gnash прекрасно запускает, для чего он ещё нужен? GNU Ring также широко используется - уже пересадил свою маму и своего кота.

anonymous
()
Ответ на: комментарий от anonymous

Хомяка на GuixSD пересади и можно будет закапывать венду.

Clayman ★★
()
Ответ на: комментарий от Clayman

Просто GuixSD на реальной машине никто в здравом уме не использует, а в виртуалке LVM не сильно-то и нежун.

anonymous
()
Ответ на: комментарий от t184256

Ты «supported» с «доступен» не попутал?

А ты? «DLL hell» в новости не может относиться к оффтопику, если он официально не поддерживается. Они имеют в виду «dependency hell».

xaizek ★★★★★
()
Ответ на: комментарий от xaizek

«DLL hell» в новости не может относиться к оффтопику, если он официально не поддерживается.

Биткойнами в России расплачиваться не могут, т.к. официально они не поддерживаются.

t184256 ★★★★★
()
Ответ на: комментарий от xaizek

Естественно, куда тут объяснять, когда ты в логику не можешь.

t184256 ★★★★★
()
Ответ на: комментарий от anonymous

В nixpkgs пока по умолчанию используется старый nix. Если хочешь новый, надо его поставить самому

Уже переехали на новый nix. Но

Note: this program is EXPERIMENTAL and subject to change.

такие вещи, учитывая что версия пм релизная, вымораживают.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.