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

时间:2015-03-24 15:41:27

标签: nix

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

在经历了众所周知的“阴谋”后,我最近转向Nix进行Haskell开发。但是,我没有找到改变Nix商店位置的正确方法。

有可能吗?

5 个答案:

答案 0 :(得分:7)

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

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

这适用于gcc 3.3.3中的行为(bug?)。相同的提交消息建议使用bind mounts解决此问题:

  

在Linux上,为此目的可以使用绑定挂载而不是符号链接(例如,`mount -o bind / data / nix / store / nix / store')。

答案 1 :(得分:3)

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

就足够了
soup = BeautifulSoup(r.content, 'lxml', from_encoding="utf8")

编辑

<强> TL,博士;

设置此环境变量将允许您使用符号链接到/ nix; 如果

,这可能很方便
  • 您不想在根目录中装载某些内容
  • 您仍然希望使用预编译的包含

警告:这不便携

<强>细节:

来自文档

  

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

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

答案 2 :(得分:1)

是的,但您无法使用二进制包(所有内容都将从头开始编译)。要进行自举,请参阅https://nixos.org/wiki/How_to_install_nix_in_home_%28on_another_distribution%29

更好的想法可能是使/ nix成为外部驱动器上目录的符号链接。你有没有考虑过这个?正如@jarandaf在下面提到的那样,/nix不能成为符号链接。

答案 3 :(得分:1)

从源代码构建并指定--with-store-dir=path

请注意,这只会将商店文件夹( / nix / store )定义到另一个位置,而不是整个 / nix 文件夹

文档也说

  

警告:最好不要将Nix商店更改为默认值,   因为这样做使得无法使用预先构建的二进制文件   标准的Nixpkgs通道 - 也就是说,所有包都需要   从源头构建。

参考:http://nixos.org/nix/manual/#sec-building-source

答案 4 :(得分:1)

从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的替代存储。