2015-07-18 5 views
6

В manual написано:Для чего нужен nix-экземпляр? Что такое деривация магазина?

Команда Никс-Instantiate генерирует магазин деривации из (высокого уровня) выражений Nix.

Но что такое деривации магазина?

Руководство говорит следующее о store derivations:

описание в действие сборки. Результатом деривации является объект . Производные обычно указываются в выражениях Nix, используя примитив деривации. Они переводятся в магазин низкого уровня отведениях (неявно Никс-окр и Никс-сборки, либо явно Никс-Instantiate)

Это немного трудно понять для Никс-Newbee и I не нашел ничего более просвещенного о nix-экземпляре и хранении дериваций по googling. Я также спросил о #nixos, я еще не получил ответа.

Не могли бы вы объяснить на простом примере, что такое деривация магазина, для чего он используется?

Почему нужно генерировать деривации хранилища, используя nix-instantiate? Не могли бы вы дать простой, простой для понимания пример?

ответ

19

Что такое nix-экземпляр?

Команда nix-instantiate Единственная цель - оценить выражения Nix. Основной целью языков Nix является создание производных.

Что такое деривация в магазине?

Вывод (see example) - это компьютерное представление рецептов сборки, используемых для создания (реализации) пакетов. Это файлы с расширением .drv, которые перечислены в каталоге магазина, обычно /nix/store.

Эти рецепты сборки понимаются демонами Nix и используются для обеспечения того, чтобы все зависимости были построены ранее и сохранены в заранее вычисленных путях. После того, как все зависимости успешно скомпилированы, демона Nix может искать замену или реализовать вывод локально. Все подробное объяснение доступно в Eelco Dolstra PhD Thesis.

Эти файлы создаются каждый раз, когда команда nix-instantiate оценивает функцию Nix-языка derivation, если не указана опция командной строки --eval.

Почему нужно генерировать деривации магазинов с помощью nix-instantiate?

Если вы заинтересованы в выходе сборки, вы должны предпочесть nix-build, что эквивалентно:

$ nix-store -r $(nix-instantiate '<nixpkgs>' -A hello)

В некоторых случаях вы не заинтересованы в результатах сборки, но глядя на зависимостей времени компиляции. Например, если вы хотите, чтобы вы исследовали зависимости времени сборки Hello. Затем с помощью команды Никс-магазин, как следовать, вы можете запросить все зависимости рецепта сборки:

$ nix-store --tree -q $(nix-instantiate '<nixpkgs>' -A hello)

+0

Большое спасибо за подробный ответ НБП! – jhegedus