12

虽然 Nix/OS wiki 和手册提供了很多优秀的信息,但我仍然无法获得架构概述。为问题的数量和幼稚道歉;随意回答一个子集:


1. 什么是 Nix 包?

根据我对手册的阅读,Nix 包是:

    一世。一个 Nix 表达式,用于获取构建所需的源和依赖项。

    ii. 一个builder脚本。

    iii. 上的列表all-packages.nix

源代码和二进制文件以及生成的派生文件放在 中nix/store,通道自动更新,通过使用共享的二进制缓存有效地保持更新。

    一个。这是正确和完整的吗?

    湾。.nix 表达式存储在哪里?

    C。nix/store如果它们具有相同的体系结构,我可以简单地在不同机器之间复制一个包文件夹吗?


2. 什么构成了 Nix 环境?

    一个。环境在哪里以及如何定义?

    湾。用户资料呢?

    C。该命令如何nix-shell工作?跟nix-env命令有关系吗?


3. NixOSconfiguration.nix和 Nix 环境之间的关系是什么?

从手册和 wiki 我收集到 NixOS 是一个 Nix 包,并且 Nix 创建了一个基于configuration.nix.

    一个。这是真的吗,如果是这样,除此之外做什么nixos-rebuild和做什么?nixos-install

    湾。是否可以逆转这个过程,即从环境中生成简洁的包或配置文件?

    C。我可以用 NixOS 做什么而我不能用 Nix 做?


4. 使用 Nix 创建可移植且可重现的环境以与同事共享时,有哪些最佳实践?

    一个。共享桌面、服务器和开发环境的各种方法是什么?

    湾。这些方法的用例是什么?

    C。相对于可移植性和可访问性,它们的优缺点是什么?


5. 悬而未决的问题:关于 Nix/OS 架构还有哪些重要的注意事项?

4

1 回答 1

13

1.a

/nix/store是的,您也可以将 Nix 视为用作缓存的构建工具。Nix 作为包管理器只是这种设计的副作用

1.b

你的 nix 表达式在哪里取决于你的设置。要弄清楚这一点,请查看您的 $NIX_PATH 变量,该变量指向nixpkgs repo副本所在的位置。这些副本(有时仍然是)由该nix-channel工具管理,但将来您可以指向 nixpkgs,例如:

export NIX_PATH=nixpkgs=https://github.com/NixOS/nixpkgs/archive/16.03.tar.gz

您可以在这篇关于nix 搜索路径的博客文章中阅读更多关于NIX_PATH的信息

1.c

是的,包可以在机器之间复制。实际上,已经有一个工具可以做到这一点:nix-copy-closure.

2.a

我相信您在这里谈论的是您管理的 Nix 环境nix-env。我们通常将这些称为 nix 配置文件。我NIX_PATH在第 1 点中所说的关于 nix 搜索路径(变量)的内容并不真正适用于nix-env.

nix-env工具使用 ~/.nix-defexpr,默认情况下它是 NIX_PATH 的一部分,但这只是巧合。如果你清空 NIX_PATH,由于 ~/.nix-defexpr,nix-env 仍然能够找到派生。

2.b

用户配置文件只是一个 nix 环境(在2.a中描述),您可以将其更改为其他任何内容,例如:

nix-env --switch-profile ./result

./result里面的东西/nix/store或指向的东西在哪里/nix/store。然后上面的命令会~/.nix-profile用你的./result.

2.c

nix-shell实际上更接近nix-build命令。所以让我先解释一下是做什么nix-build的。

nix-build用于构建.nix文件(也是派生,但为此我将不得不解释派生是什么)。您将如何使用的示例nix-build

nix-build something.nix

上面的命令会产生一个./result符号链接,它指向/nix/store. Nix 命令将实现构建并将输出存储到/nix/store.

nix-shell另一方面nix-build,除了它不会触发构建器脚本并将您放入该环境之外,它将完全执行该操作。这样,您最终将获得一个可用于开发 nix 表达式的环境,该环境也可以位于 nixpkgs 存储库之外(例如,您的私人项目)。

3.a

Nix 安装二进制文件,然后 NixOS 为该二进制文件创建配置并将其与 init 系统(当前为 systemd)挂钩。

3.b

不,这是其他配置管理器所做的。尼克斯则相反。这篇博客文章很好地描述了方法上的差异。

3.c

正如3.a中所说,nix 只会安装二进制文件,而 nixos 也会确保二进制文件正在运行。

4.a/b/c

基本上没有限制,做你认为适合你的。一旦你了解了基本概念,你就会发现什么最适合你。看看别人的点文件/配置,有意见。

在该服务的帮助下,我使用我收集的 nixos 配置来为我的家人管理笔记本电脑。 system.autoUpgrade

为了创建(构建)可重现的环境,我前段时间写了一篇博文。

5.

我个人最喜欢的即将到来(或已经在这里)的工具是vulnix. 这将针对当前漏洞 (CVE) 检查您当前的系统/项目。这使得 nix 在其他人中脱颖而出,特别是因为它非常易于使用(无需企业设置)。

我为 nix 找到的另一个用例是使用dockerTools helpers构建可重现的 docker 映像。

于 2016-08-12T11:12:57.193 回答