Могу ли я повторить, что делает nix-build с nix-shell и сборкой cabal? - PullRequest
0 голосов
/ 10 сентября 2018

Я использую великолепную библиотеку Haskell Miso , которая рекомендует использовать Nix. README проведет нас через простой проект, который может быть построен с nix-build. Документация для Мисо подсказывает, что я могу сделать:

nix-shell -A env
cabal configure --ghcjs
cabal build

, который также создает проект, хотя и помещает результат в другое место.

Гарантируют ли nix-build и cabal build в nix-shell одинаковый вывод? В более общем смысле, учитывая выражение .nix, как бы мне потренироваться, какие шаги (например, настройка cabal) необходимы для репликации его поведения?

1 Ответ

0 голосов
/ 10 сентября 2018

Как правило, вам не гарантируется, что выходные данные nix-build и те же шаги в nix-shell будут эквивалентны. Некоторые причины различий:

  • nix-build может запустить сборку в песочнице, тогда как nix-shell не будет.
  • nix-shell можно вызвать без флага --pure, так что будет установлено гораздо больше переменных среды (например, это позволяет использовать приложения с графическим интерфейсом)
  • Хотя nix-shell устанавливает переменную окружения $out, она не доступна для записи
  • Процесс в nix-shell запускается от имени вашего пользователя, тогда как nix-build с включенным демоном обычно запускает его как nixbld<n>, даже если песочница отключена

И, наверное, сейчас я еще не подумала.

В частности, для установки по кабелю и обычного ghc следствием работы без песочницы является то, что она может получить доступ к вашему пользовательскому пакету db. Это требует некоторой осторожности при использовании этих инструментов в nix-shell; см. Этот ответ.

...