4

目前使用 Mac OS X 上 nix 频道提供的 Elixir 版本。该包使用 Erlang 18 构建:

$ iex --version
Erlang/OTP 18 [erts-7.3.1.2] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]

IEx 1.4.2

我想更新包以使用 Erlang 19。在 nix 中使用更新的依赖项重建包的最直接方法是什么?

4

1 回答 1

5

通过将以下包覆盖添加到~/.nixpkgs/config.nix

{
  packageOverrides = pkgs: rec {
    elixir = pkgs.elixir.override {
      erlang = pkgs.erlangR19_odbc_javac;
    };
    rebar = pkgs.rebar.override {
      erlang = pkgs.erlangR19_odbc_javac;
    };
  };
}

覆盖 elixir 包并不足以使构建工作,因为构建工具 rebar 也是使用 Erlang 18 构建的。一旦指定,我运行nix-env -i elixir并使用 Erlang 19 下载并构建了两个包的源代码。

一个警告:即使对 nix 进行了这些更改,仍然config.nix坚持下载 Erlang 18 包。但是,这实际上并没有在构建中使用,并且在运行时被删除nix-collect-garbage -d。螺纹钢和长生不老药都没有提到包装,所以原因仍然是个谜。

感谢 @zimm-i48 提供对相应 nix 文档的参考。Luca Bruno 在 nix 上的一系列博客文章也很有用:

http://lethalman.blogspot.it/2014/07/nix-pill-7-working-derivation.html

于 2017-03-15T17:51:45.947 回答