Nix/OS 架构概述?

12

尽管Nix/OS的维基和手册提供了大量优秀的信息,我仍然无法获得架构概述。抱歉问题的数量和幼稚,您可以自由地回答其中的一部分:


1. 什么构成了一个Nix软件包?

根据手册的阅读,Nix软件包包括:

    i. 获取构建所需的源码和依赖项的Nix表达式。

    ii. 一个构建器脚本。

    iii. 在all-packages.nix中列出。

源代码、二进制文件以及生成的导出文件都被放置在nix/store中,并且通道通过使用共享二进制缓存自动更新它们,有效地使它们保持最新状态。

    a. 这是正确而完整的吗?

    b. .nix表达式存储在哪里?

    c. 如果它们具有相同的体系结构,我是否可以在不同机器的nix/store之间简单复制软件包文件夹?


2. 什么构成了一个Nix环境?

    a. 环境在哪里以及如何定义?

    b. 用户配置文件怎么办?

    c. nix-shell命令是如何工作的?它是否与nix-env命令相关?


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

从手册和维基中我得知,NixOS是一个Nix软件包,并且Nix基于configuration.nix创建一个基本系统环境。

    a. 这是否属实,如果是的话nixos-rebuildnixos-install除此之外还有什么作用?

    b. 是否可能反向操作,即从环境中生成简洁的软件包或配置文件?

    c. 我可以使用NixOS做哪些事情而无法使用Nix?


4. 在使用Nix创建便携和可复制环境与同事分享时,有哪些最佳实践?

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

    b. 这些方法的适用场景是什么?

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


5. 开放性加分问题:关于Nix / OS体系结构还有什么需要注意的?

1个回答

13

1.a

是的,你也可以将Nix视为一种构建工具,它使用/nix/store作为缓存。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_PATH的更多信息,该信息与nix搜索路径有关。

1.c

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

2.a

我相信您在这里谈论的是使用nix-env管理的Nix环境。我们通常将其称为nix配置文件。关于第1点中提到的nix搜索路径(NIX_PATH变量)并不适用于nix-envnix-env工具使用~/.nix-defexpr,这是默认情况下NIX_PATH的一部分,但这只是巧合。如果您清空NIX_PATH,nix-env仍然能够通过~/.nix-defexpr找到派生物。

2.b

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

nix-env --switch-profile ./result

其中./result是指在/nix/store中的某个内容或者指向/nix/store的某个内容。然后,上述命令将会用你的./result来替换~/.nix-profile符号链接。

2.c

nix-shell实际上更接近于nix-build命令。因此,让我先解释一下nix-build是什么。

nix-build用于构建.nix文件(也可以是导出,但为此我必须解释什么是导出)。以下是如何使用nix-build的示例:

nix-build something.nix

上述命令将产生一个指向 /nix/store 中某个文件的 ./result 符号链接。Nix 命令将会完成构建并将输出存储到 /nix/store 中。
另一方面,nix-shell 将会做与 nix-build 完全相同的事情,除了它不会触发构建脚本,并将你带入该环境。这样你就可以得到一个你可以用来开发 Nix 表达式的环境,这些表达式也可以在 nixpkgs 存储库之外(例如,您的私有项目)。

3.a

Nix会安装二进制文件,而NixOS则会为该二进制文件创建配置,并将其与初始化系统(目前是systemd)连接起来。

3.b

不。其他配置管理器是这样做的,而Nix则是相反的方式。这种方法的差异在这篇博客文章中有很好的描述。

3.c

如3.a所述,nix仅安装二进制文件,而nixos还确保二进制文件正在运行。

4.a/b/c

基本上没有限制,按照自己的想法去做。一旦你理解了基本概念,就会找到最适合自己的方法。看看别人的点文件/配置,并发表意见。
我使用我的nixos配置收藏来管理家庭笔记本电脑,借助system.autoUpgrade服务。
为了创建一个(构建)可重复的环境,我写了一篇博客文章5. 我个人最喜欢的工具是即将推出(或已经推出)的vulnix。这将检查您当前的系统/项目是否存在当前的漏洞(CVEs)。这使得nix在其他方面脱颖而出,特别是因为它非常易于使用(没有企业设置)。
我发现nix的另一个用例是使用dockerTools辅助工具构建可重复的docker映像。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接