如何调试自定义 nix 文件的 nix 构建错误?

bba*_*ker 6 nix nixpkgs

我正在尝试在 Ubuntu 16.04 上使用 Nix。

\n\n

设置完成后,我尝试构建以下表达式:

\n\n
let\n  pkgs = import <nixpkgs> {};\n  stdenv = pkgs.stdenv;\nin rec {\n  scalaEnv = stdenv.mkDerivation rec {\n    name = "scala-env";\n    shellHook = \'\'\n    alias cls=clear\n    \'\';\n    CLANG_PATH = pkgs.clang + "/bin/clang";\n    CLANGPP_PATH = pkgs.clang + "/bin/clang++";\n    buildInputs = with pkgs; [\n      stdenv\n      sbt\n      openjdk\n      boehmgc\n      libunwind\n      re2\n      clang\n      zlib\n      ammonite\n    ];\n  };\n} \n
Run Code Online (Sandbox Code Playgroud)\n\n

但这以错误结束:

\n\n
*** Downloading \xe2\x80\x98https://cache.nixos.org/nar/022mrfa98hxccsn9znr9z9s7sh3kfc5wzvgfx45x5drcz9wq3wyv.nar.xz\xe2\x80\x99 to \xe2\x80\x98/nix/store/y1scdckyi7ij30771rl1pdq4s9gj683a-sbt-1.0.1\xe2\x80\x99...\n  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n                                 Dload  Upload   Total   Spent    Left  Speed\n100 50.0M  100 50.0M    0     0  12.5M      0  0:00:04  0:00:04 --:--:-- 10.7M\n\nbuilding path(s) \xe2\x80\x98/nix/store/9xykkj5z6szrwamji3gshylxca092nv9-scala-env\xe2\x80\x99\nunpacking sources\nvariable $src or $srcs should point to the source\nbuilder for \xe2\x80\x98/nix/store/wg0kd6z5kik46xza5xsdqw4yf10ifksv-scala-env.drv\xe2\x80\x99 failed with exit code 1\nerror: build of \xe2\x80\x98/nix/store/wg0kd6z5kik46xza5xsdqw4yf10ifksv-scala-env.drv\xe2\x80\x99 failed\nThe command \'/bin/sh -c $nixenv && nix-build scala-default.nix -A scalaEnv\' returned a non-zero code: 100\n
Run Code Online (Sandbox Code Playgroud)\n\n

请注意,这/bin/sh -c $nixenv只是尝试设置 nix 环境 - 如果有帮助,我可以发布更多详细信息。

\n\n

我过去在另一个系统上构建了一个非常相似的表达式 - 我不确定这个系统上可能出了什么问题 - 如何调试这个?

\n

Dav*_*son 2

您应该查看错误消息:

variable $src or $srcs should point to the source
Run Code Online (Sandbox Code Playgroud)

您可能可以在 nixpkgs 存储库中搜索该错误消息,以准确找到它的生成位置。

发生的情况是您没有提供构建器 shell 脚本,因此 nixpkgs 只是试图根据您的其他参数来猜测如何构建您的项目mkDerivation。但它无法猜测如何构建你的东西​​,因为你没有给它一些源文件来编译。我建议您编写类似builder = ./builder.sh添加构建器脚本的内容,然后在该文件中放入用于构建软件的命令。