在多台计算机上挂载相同的/ nix目录

时间:2015-12-23 10:23:45

标签: nix

我希望在相同架构的多个openSUSE机器(不同版本)上使用nix-package管理器一致地安装软件。我不是任何系统的root用户,但是想要说服我们的系统管理员在使用网络安装的所有机器上以多用户模式安装nix

  • 是否可以在所有计算机上安装相同的/nix目录,并在所有这些计算机上以多用户模式运行nix?

  • nix-env -i是否会干扰其他机器?

  • nix-env -i xxx是否会在所有计算机的用户配置文件中或仅在执行命令的计算机上安装xxx?由root安装的那些?

  • 一台机器上的垃圾收集是否考虑了其他机器上安装的软件?

1 个答案:

答案 0 :(得分:6)

  1. 可以在多台计算机上安装Nix存储,以便在具有类似架构的许多主机之间共享二进制文件。如果/nix在所有这些机器上都可用,那么每个机器都可以使用已安装的软件包,就像它们在本地安装时一样。

    现在,如果您的底层网络文件系统正确支持网络范围的文件锁定,那么同时将多台计算机写入同一个Nix存储只能正常工作。这可能听起来无害,但根据我的经验,大多数网络文件系统实际上正确支持文件锁定,我的猜测是,如果你尝试这个专长,那么你就可以了偶尔以死锁和/或不一致的商店的形式遇到麻烦。

  2. nix-env -i - 所有其他nix-xxx命令都是通用的 - 同步访问/nix/store/nix/var中的所有资源,因此多个运行操作不会干扰彼此(假设文件系统提供可靠的同步)。如果一个用户同时在两台机器上运行nix-env -i,那么他很明显会遇到竞争状态,因为这两个命令中的一个将取消另一个命令的影响。但是,当您在一台计算机上同时运行两个nix-env -i命令时,这种现象也会发生相同的情况,因此它不是特定于共享存储的问题。

  3. nix-env -i同时修改所有主机上的用户环境。用户配置文件~foo/.nix-profile只是/nix/var/nix/profiles/per-user/foo/profile中共享存储的符号链接,因此在一台计算机上对该配置文件所做的更改也将在所有其他计算机上可见。 root就像这方面的任何其他用户一样。

  4. 是的,nix-collect-garbage可以在共享商店的任何计算机上正常运行。由于用户配置文件也是共享的,因此工具可以看到完整的使用/依赖关系图,并且不会对用户配置文件仍然引用的存储路径进行垃圾收集。

    然而,另一个问题是临时环境,例如为nix-shellnix-build创建的环境。 Nix通过从/nix/var/nix/gcroots符号链接到本地​​硬盘上的适当路径(即临时环境所在的位置)来记录这些环境的存在。如果符号链接变得陈旧,即如果"真实路径"那么这样的环境被认为是死的。尼克斯环境的消失。现在,如果用户在计算机 A 上输入了nix-shell环境,则会在/nix/var/nix/gcroots中创建指向/run/user/1000/nix-shell-environment-1的符号链接。然而,在机器 B 上运行的垃圾收集器无法找到该路径,并且会认为环境已经死亡,因此从/nix/var/nix/gcroots删除了符号链接,并从{{删除了基础存储路径1}}。如果发生这种情况,那么 A 上运行的有效/nix/store环境将突然停止工作。