如何为 NixOS 构建和部署 Keter?

How to build & deploy Keter for NixOS?

这是我的 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 问题).

我必须在 Keter 的 default.nix 中做些什么才能帮助它在目标机器的 $PATH 上找到 exec 吗?我还缺少什么?

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

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