【问题标题】:How to build & deploy Keter for NixOS?如何为 NixOS 构建和部署 Keter?
【发布时间】:2018-02-03 19:53:27
【问题描述】:

这是我的 Keter 分支,其中包含通过 cabal2nix 生成的 *.nix 文件:https://github.com/bsima/keter/tree/nix

我在我的开发机器 (NixOS 17.09) 上执行了nix-build shell.nix,然后使用nix-copy-closure 将其放在 Digital Ocean 上的 VPS(也是 NixOS 17.09,通过 nix-infect)。

我创建了一个启动正常的 systemd 服务,但是在尝试为服务器创建一个进程后,Keter 死了:

2018-02-03 19:34:03.21: Data.Conduit.Process.Unix.monitorProcess: /opt/keter/temp/pprjam-0/dist/bin/pprjam: createProcess: runInteractiveProcess: exec: does not exist (No such file or directory)

它找不到exec,我认为它应该是coreutils 的一部分。我怀疑 coreutils 是否丢失,但以防万一我把它放在我的 environment.systemPackages 中并重建,但它仍然没有工作。

所以这让我觉得这是$PATH 问题,或this issue(我不太明白,所以我假设它更有可能是$PATH 问题)。

为了帮助它在目标机器的$PATH 上找到exec,我需要在Keter 的default.nix 中做些什么吗?我在这里还缺少什么?

【问题讨论】:

    标签: haskell nixos keter


    【解决方案1】:

    exec 实际上是一个内置的shell,而不是coreutils 命令。实际上 createProcess 错误消息令人困惑。找不到的命令名出现在createProcess: 之前。所以问题不在于pprjam 找不到exec(作为命令),而是createProcess 检测到失败的exec 系统调用。

    您的服务器上似乎缺少/opt/keter/temp/pprjam-0/dist/bin/pprjam,或者运行时链接器找不到pprjam 的依赖项。如果是后者,您可以通过扩展 Keter 服务的 LD_LIBRARY_PATH 环境变量来修复它。

    【讨论】:

    • 哦,有道理。 pprjam 依赖于libpqxx,但找不到。我想我只需要使用nix-copy-closure 来部署pprjam 并将nginx 设置为前端网络服务器而不是keter。
    • 这可能是一个更好的解决方案。尽管 keter 非常简单,但它预计它不会带来什么好处。它的杀手级功能,即零停机重新部署,也可以通过 systemd 套接字激活来实现。
    • 零停机重新部署是我最想要的。我不熟悉“systemd socket激活”,但我会研究一下,谢谢!
    猜你喜欢
    • 2014-06-28
    • 1970-01-01
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 2020-02-08
    相关资源
    最近更新 更多