它是可以安装在多台机器上尼克斯店一起分享类似的架构有很多主机之间的二进制文件.如果/nix
在所有这些机器上都可用,那么它们中的每一个都可以使用已安装的软件包,就像它们在本地安装时一样.
现在,如果底层网络文件系统正确支持网络范围的文件锁定,那么只有多台机器同时写入同一个Nix存储区才能正常工作.这可能听起来无害,但根据我的经验,大多数网络文件系统实际上并不支持文件锁定,我的猜测是,如果你尝试这个专长,那么你偶尔会以死锁的形式遇到麻烦和/或不一致的商店.
nix-env -i
-和所有其他nix-xxx
的命令是普通-在同步访问的所有资源/nix/store
和/nix/var
,所以多个正在运行的操作不会彼此(假设文件系统提供了可靠的同步)干涉.如果一个用户同时nix-env -i
在两台机器上运行,那么显然他会遇到竞争状态,因为这两个命令中的一个将抵消另一个命令的影响.nix-env -i
但是,当您在一台计算机上同时运行两个命令时,这种现象也会以同样的方式发生,因此,这不是特定于共享存储的问题.
nix-env -i
同时修改所有主机上的用户环境.用户配置文件~foo/.nix-profile
只是共享存储中的符号链接/nix/var/nix/profiles/per-user/foo/profile
,因此在一台计算机上对该配置文件所做的更改也将在所有其他计算机上可见.root
就像这方面的任何其他用户一样.
是的,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-shell
在A上运行的活动环境将突然停止工作.