【问题标题】:How to install Erlang or Elixir with Observer using the Nix package manager?如何使用 Nix 包管理器使用 Observer 安装 Erlang 或 Elixir?
【发布时间】:2020-03-30 21:04:38
【问题描述】:

每次我安装 Erlang 时,我最终都没有 Observer。在带有 Xmonad 的 Ubuntu 笔记本电脑在云中运行的 Debian 9 上使用了以下命令,似乎它们都导致安装相同的软件包:

  • nix-env -iA pkgs.beam.packages.erlangR22
  • nix-env -iA nixpkgs.beam.interpreters.erlang
  • nix-env -iA nixpkgs.beam.interpreters.erlangR22_odbc_javac

Nixpkgs manuals 15.2. BEAM Languages (Erlang, Elixir & LFE) section(版本 19.09.1484.84586a4514d)根本没有提到 Observer。 DianaOlympos 有一个相当新的更新确实提到了它,尽管我尝试了所有这些包,但没有任何乐趣:

beam.interpreters 中可用的许多 Erlang/OTP 发行版都具有启用 ODBC 和/或 Java 或没有 wx 的版本(不支持观察者)。比如有beam.interpreters.erlangR22_odbc_javac,对应beam.interpreters.erlangR22beam.interpreters.erlangR22_nox,对应beam.interpreters.erlangR22

Shane Sveller pointed it out that the wxGTK package needs to be set up 使用 propagatedBuildInputs,但不知道该怎么做。 (只需安装wxGTK,然后Erlang当然不起作用;天真地尝试了它。还发现chapter 20 of Nix Pills正是关于这个话题。)

这也是对“How to install Erlang/Elixir on a non-NixOS system?”问题的跟进,但我当时没有意识到 Observer 不见了……


更新:显然,it works somewhere out of the box。 (可能在 NixOS 上。)

【问题讨论】:

    标签: erlang elixir nix


    【解决方案1】:

    有点羞于承认我是个白痴,但观察者一直都在 (along with net_adm)...

    由于某种原因,它不会在 erl shell 上自动完成,但一旦输入并执行 observer:start().,它就会识别模块,并在按下 Tab 键时提供可用功能列表。

    我可能搞砸了 iexerlobserver.start(). 和其他组合)之间的转换,我认为生成的错误消息(连同没有自动完成)意味着模块丢失。

    【讨论】:

      【解决方案2】:

      我对 erlang 进行了覆盖,以便启用 wx 支持:

      { pkgs ? import <nixpkgs> {} }:
      
      with pkgs;
      
      let
        inherit (lib) optionals;
      
        erlang_wx = erlangR21.override {
          wxSupport = true;
        };
      
        elixir = (beam.packagesWith erlang_wx).elixir.override {
          version = "1.9.2";
          rev = "ffe7a577cc80f37381dc289c820842d346002364";
          sha256 = "19yn6nx6r627f5zbyc7ckgr96d6b45sgwx95n2gp2imqwqvpj8wc";
        };
      in
      
      mkShell {
        buildInputs = [ elixir git ]
      
          # For file_system on Linux.
          ++ optionals stdenv.isLinux [ inotify-tools wxGTK ]
      
          # For file_system on macOS.
          ++ optionals stdenv.isDarwin (with darwin.apple_sdk.frameworks; [
            # For file_system on macOS.
            CoreFoundation
            CoreServices
            wxmac
          ]);
      }
      

      保存这个(例如shell.nix),然后运行它:

      $ nix-shell shell.nix
      
      # or, if you are in the same directory:
      $ nix-shell
      

      在我的机器上工作!


      注意:buildInputs 中的 wxmac 特定于 MacOS(而 wxGTK 特定于 Linux)。要为您的操作系统找到合适的软件包,here are the available wx packages

      【讨论】:

      • 谢谢!最后,解决方案更加平凡,但接受了您的答案,因为它对如何编写 nix-shell 脚本很有教育意义。
      • 编辑了您的答案以使 wx 软件包也成为 optionals 的一部分,但只能尝试 Linux 方面的事情。如果您不同意任何更改,请拒绝我的更改。再次感谢! (有关未来自我的参考:请参阅Nixpkgs Manual 中的 5.1.5.17.lib.lists.optional5.1.5.18.lib.lists.optionals 部分)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-24
      • 1970-01-01
      • 2015-11-29
      • 2016-04-20
      • 2023-02-03
      • 2016-04-18
      • 1970-01-01
      相关资源
      最近更新 更多