过了一段时间,我的开发机器开始耗尽磁盘空间(仅128GB)。出于这个原因,我决定将本地缓存存储(.npm,.m2,.ivy2等)移动到外部驱动器。
在经历了众所周知的“阴谋”后,我最近转向Nix进行Haskell开发。但是,我没有找到改变Nix商店位置的正确方法。
有可能吗?
答案 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通道 - 也就是说,所有包都需要 从源头构建。
答案 4 :(得分:1)
从Nix 2.0开始,有三个选项允许用户使用替代的nix存储,我假设所有这三个选项都使用用户命名空间:
https://nixos.wiki/wiki/Nix_Installation_Guide#Installing_without_root_permissions
/nix
的环境。nix run --store /path/to/store
的替代存储。