我可以复制nix-shell和cabal build的nix-build吗?

时间:2018-09-09 22:13:49

标签: haskell cabal cabal-install nix

我正在使用出色的Haskell库Miso,该库建议使用Nix。自述文件将引导我们完成一个可以使用nix-build构建的简单项目。味iso的文档提示我可以做:

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

尽管结果将放置在其他位置,它也可以构建项目。

nix-shell中的nix-buildcabal build是否保证产生相同的输出?更一般而言,给定一个.nix表达式,我将如何锻炼才能复制其行为而需要执行哪些步骤(例如cabal configure)?

1 个答案:

答案 0 :(得分:3)

通常,不能保证nix-build的输出和nix-shell中相同的步骤将等效。造成差异的一些原因:

  • nix-build可以在沙箱中运行构建,而nix-shell则不能。
  • 可以在没有nix-shell标志的情况下调用
  • --pure,以便设置更多环境变量(例如,可以使用GUI应用程序)
  • 尽管nix-shell设置了$out环境变量,但它不可写
  • nix-shell中的进程将以您的用户身份运行,而启用了守护程序的nix-build通常将以nixbld<n>的身份运行,即使禁用了沙箱

现在我可能还没有想到更多。

特别是对于cabal-install和普通ghc,如果没有沙盒运行,结果是它可以访问用户软件包db。在nix-shell中使用这些工具时,需要格外小心; see this answer.