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

问题描述 投票:0回答:6

一段时间后,我的开发机器中的磁盘空间开始不足(只有 128GB)。因此,我决定将本地缓存存储(.npm、.m2、.ivy2 等)移动到外部驱动器。

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

可能吗?

nix
6个回答
11
投票

经过一点github考古,我发现了nixos commit f8cd904:

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

这解决了 gcc 3.3.3 中的一个行为(bug?)。相同的提交消息建议使用绑定安装解决该问题:

在 Linux 上,可以使用绑定挂载代替符号链接来实现此目的(例如,“mount -o bind /data/nix/store /nix/store”)。


8
投票

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

export NIX_IGNORE_SYMLINK_STORE=1

编辑:

tl,博士;

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

  • 您不想在根目录上安装某些东西
  • 你仍然想使用预编译的包

警告:这不是便携式的

详情:

来自文档

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

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


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
    选择使用替代商店。

2
投票

从源代码构建并指定

--with-store-dir=path

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

文档还说

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

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


1
投票

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

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

/nix
不能是符号链接。


0
投票

这是一个非常古老的讨论,但我认为这个问题仍在寻找令人满意的答案。

我想你想要的是

nix-portable

请参阅此处了解详细信息:https://github.com/DavHau/nix-portable

我的理解是 nix 并不是真正设计用于安装到自定义位置的。然而,该链接上的某个人已经完成了不平凡的跑腿工作以使其正常工作。我尝试过,它开箱即用。

总的来说,缺点是它在 Mac 上不起作用,但在 Linux 上对我来说工作得很好。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.