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

kne*_*epp 6 nix

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

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

  • nix-env -i干扰其他机器吗?

  • nix-env -i xxx安装xxx在所有机器的用户配置文件中还是仅安装在执行命令的机器上?安装的那个怎么样root

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

Pet*_*ons 6

  1. 可以安装在多台机器上尼克斯店一起分享类似的架构有很多主机之间的二进制文件.如果/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-shell或通过nix-build.Nix通过符号链接/nix/var/nix/gcroots到本地硬盘上的适当路径(即临时环境所在的位置)来记录这些环境的存在.如果符号链接变得陈旧,即如果Nix环境的"真实路径"消失,则认为这样的环境是死的.现在,如果用户nix-shell在机器A上输入一个环境,那么就会创建一个符号链接/nix/var/nix/gcroots,比如说/run/user/1000/nix-shell-environment-1.但是,在机器B上运行的垃圾收集器将找不到该路径,并将认为环境已死,因此从中删除符号链接/nix/var/nix/gcroots和基础存储路径/nix/store.如果发生这种情况,那么nix-shellA上运行的活动环境将突然停止工作.