可以将nix安装在/ nix以外的其他位置吗?

jar*_*daf 2 nix

一段时间后,我开始耗尽我的开发机器中的磁盘空间(仅128GB).出于这个原因,我决定将本地缓存存储(.npm,.m2,.ivy2等)移动到外部驱动器.

在经历了众所周知的"阴谋"之后,我最近转向Nix进行Haskell开发.不过,我还没有找到改变Nix商店位置的正确方法.

可能吗?

小智 8

经过一点github考古,我发现nixos提交f8cd904:

https://github.com/NixOS/nix/commit/f8cd904e05b95c5a3ca7cf570c0503a25a2095ca

这适用于gcc 3.3.3中的行为(bug?).相同的提交消息建议使用绑定挂载解决此问题:

在Linux上,可以使用绑定挂载代替符号链接(例如,`mount -o bind/data/nix/store/nix/store').


cla*_*cke 7

从 Nix 2.0 开始,有三个选项允许用户使用替代的 nix 存储,我假设这三个选项都使用用户命名空间:

https://nixos.wiki/wiki/Nix_Installation_Guide#Installing_without_root_permissions

  • nix-user-chroot创建一个具有重定位的环境/nix
  • proot创建类似用户管理的 chroot。
  • 如果您安装了 Nix,用户可以选择使用带有nix run --store /path/to/store.


mar*_*rco 6

如果有人仍在搜索这个问题:Nix 手册解释说您可以自担风险使用符号链接(可能从源代码构建失败)https://nixos.org/nix/manual/#sec-common-env It足以设置以下环境变量

export NIX_IGNORE_SYMLINK_STORE=1
Run Code Online (Sandbox Code Playgroud)

编辑:

tl,博士;

设置此环境变量将允许您使用指向 /nix 的符号链接;这可能很方便,如果

  • 你不想在你的根目录上挂载一些东西
  • 你仍然想使用预编译的包

请注意:这不是便携式的

细节:

从文档

通常,Nix 存储目录(通常为 /nix/store)不允许包含任何符号链接组件。这是为了防止“不纯”构建。构建器有时通过解析所有符号链接组件来“规范化”路径。因此,在不同的机器上构建(使用 /nix/store 解析到不同的位置)可能会产生不同的结果。这通常不是问题,除非将构建部署到 /nix/store 解析不同的机器上。如果您确定不会这样做,则可以将 NIX_IGNORE_SYMLINK_STORE 设置为 1。

因此,这主要是与某些 makefile 的工作方式有关的决定。如果您不打算将您的配置移植到其他地方,它就可以正常工作。


Jim*_*son 1

是的,但您将无法使用二进制包(一切都将从头开始编译)。要引导,请参阅https://nixos.org/wiki/How_to_install_nix_in_home_%28on_another_distribution%29

更好的主意可能是让 /nix 成为外部驱动器上目录的符号链接。你考虑过这个吗? 正如@jarandaf 下面提到的,/nix不能是符号链接。

  • @jarandaf 这非常荒谬(不是你的评论,而是 Nix 决定检查它是否是符号链接)。他们为什么关心? (3认同)
  • 为了进一步参考,在“/nix”中创建符号链接不是一个选项:“错误:路径“/nix”是一个符号链接;Nix 存储及其父目录不允许这样做。 (2认同)
  • @Jcl 不知道,这绝对是我有兴趣知道的事情。也许“nix”对符号链接的大量使用可能是一个原因。 (2认同)