【问题标题】:Can I replicate what nix-build does with nix-shell and cabal build?我可以复制 nix-build 对 nix-shell 和 cabal build 所做的事情吗?
【发布时间】:2018-09-09 22:13:48
【问题描述】:

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

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

它也会构建项目,尽管它会将结果放在不同的位置。

nix-shell 中的nix-buildcabal build 是否保证产生相同的输出?更一般地说,给定.nix 表达式,我将如何锻炼复制它的行为需要哪些步骤(例如 cabal 配置)?

【问题讨论】:

    标签: haskell cabal cabal-install nix


    【解决方案1】:

    一般来说,您不能保证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.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-29
      • 2018-02-14
      • 1970-01-01
      • 2017-11-28
      • 1970-01-01
      • 2017-02-02
      相关资源
      最近更新 更多