【问题标题】:Updating the dependencies in a nix package更新 nix 包中的依赖项
【发布时间】:2017-03-16 01:51:45
【问题描述】:

目前使用 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 中使用更新的依赖项重建包最直接的方法是什么?

【问题讨论】:

  • 再次卸载并安装erlang。恐怕现在没有捷径可走。 Erlang 不是混合依赖,而是你构建的一层。
  • 确实,你必须更新 Erlang,如果你使用的是 brew,brew update && brew upgrade erlang && brew cleanup erlang
  • 我相信这个问题是关于 nix package manager 的。与混合无关。
  • 正确。我想找出使用​​ nix 执行此操作的最佳方法。
  • 通常你可以通过像elixir.override { erlang = erlangR19; }这样覆盖包来实现这一点(参见the doc)。但是,这里它无法构建,因为需要更新一些其他依赖项。

标签: erlang elixir nix


【解决方案1】:

通过将以下包覆盖添加到 ~/.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 并下载并使用两个包的源代码构建二郎 19.

一个警告:即使对config.nix 进行了这些更改,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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-29
    • 1970-01-01
    • 2021-12-25
    • 2018-10-22
    • 1970-01-01
    • 2020-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多