一段时间后,我的开发机器中的磁盘空间开始用完(只有 128GB)。出于这个原因,我决定将本地缓存存储(.npm、.m2、.ivy2 等)移动到外部驱动器。
在经历了众所周知的“阴谋集团地狱”之后,我最近转向 Nix 进行 Haskell 开发。不过,我还没有找到更改 Nix 商店位置的正确方法。
可能吗?
一段时间后,我的开发机器中的磁盘空间开始用完(只有 128GB)。出于这个原因,我决定将本地缓存存储(.npm、.m2、.ivy2 等)移动到外部驱动器。
在经历了众所周知的“阴谋集团地狱”之后,我最近转向 Nix 进行 Haskell 开发。不过,我还没有找到更改 Nix 商店位置的正确方法。
可能吗?
经过一点github考古,发现nixos commit f8cd904:
https://github.com/NixOS/nix/commit/f8cd904e05b95c5a3ca7cf570c0503a25a2095ca
这可以解决 gcc 3.3.3 中的行为(错误?)。相同的提交消息建议使用绑定挂载解决该问题:
在 Linux 上,可以使用绑定挂载来代替符号链接(例如,`mount -o bind /data/nix/store /nix/store')。
如果有人仍在寻找这个问题:Nix 手册解释说,您可以自担风险使用符号链接(可能从源代码构建失败)https://nixos.org/nix/manual/#sec-common-env 它设置以下环境变量就足够了
export NIX_IGNORE_SYMLINK_STORE=1
编辑:
tl,博士;
设置此环境变量将允许您使用指向 /nix 的符号链接;这可能很方便,如果
警告:这不是便携式的
细节:
从文档
通常,Nix 存储目录(通常是 /nix/store)不允许包含任何符号链接组件。这是为了防止“不纯”构建。构建器有时会通过解析所有符号链接组件来“规范化”路径。因此,在不同的机器上构建(使用 /nix/store 解析到不同的位置)可能会产生不同的结果。这通常不是问题,除非将构建部署到 /nix/store 以不同方式解析的机器上。如果您确定不打算这样做,可以将 NIX_IGNORE_SYMLINK_STORE 设置为 1。
所以这主要是一个与一些makefile如何工作有关的决定。如果您不打算将您的配置移植到其他地方,它就可以工作。
从 Nix 2.0 开始,有三个选项允许用户使用替代的 nix 存储,我假设这三个选项都使用用户命名空间:
https://nixos.wiki/wiki/Nix_Installation_Guide#Installing_without_root_permissions
/nix
。nix run --store /path/to/store
.是的,但您将无法使用二进制包(一切都将从头开始编译)。要引导,请参阅https://nixos.org/wiki/How_to_install_nix_in_home_%28on_another_distribution%29
一个更好的主意可能是使 /nix 成为外部驱动器上目录的符号链接。你考虑过这个吗? 正如@jarandaf 下面提到的,/nix
不能是符号链接。
从源代码构建并指定--with-store-dir=path
请注意,这只会将存储文件夹(/nix/store)定义到另一个位置,而不是整个/nix文件夹
文件还说
警告:最好不要更改 Nix 商店的默认值,因为这样做会导致无法使用标准 Nixpkgs 通道中的预构建二进制文件——也就是说,所有包都需要从源代码构建。