Nix/OS 架构概述?
Posted
技术标签:
【中文标题】Nix/OS 架构概述?【英文标题】:An Overview of Nix/OS Architecture? 【发布时间】:2016-12-19 01:40:15 【问题描述】:虽然 Nix/OS wiki 和手册提供了很多优秀的信息,但我仍然无法获得架构概览。为问题的数量和幼稚道歉;随意回答一个子集:
1.什么是 Nix 包?
根据我对手册的阅读,Nix 包是:
我。一个 Nix 表达式,用于获取构建所需的源代码和依赖项。
ii. builder
脚本。
iii. all-packages.nix
上的列表。
源代码和二进制文件以及生成的派生文件都放在nix/store
中,并且通道会自动更新,通过使用共享二进制缓存有效地保持最新状态。
a.这是正确和完整的吗?
b. .nix 表达式存储在哪里?
c.如果它们具有相同的架构,我可以简单地在不同机器的nix/store
s 之间复制一个包文件夹吗?
2。什么构成 Nix 环境?
a.环境在哪里以及如何定义?
b.用户资料呢?
c. nix-shell
命令是如何工作的?和nix-env
命令有关系吗?
3. NixOS 的configuration.nix
和 Nix 环境有什么关系?
从手册和维基中我了解到 NixOS 是一个 Nix 包,并且 Nix 创建了一个基于 configuration.nix
的基本系统环境。
a.这是真的吗?如果是这样,nixos-rebuild
和 nixos-install
除了这个还能做什么?
b.是否可以逆转这个过程,即从环境中生成简洁的包或配置文件?
c.我可以用 NixOS 做什么而我不能用 Nix 做?
4.使用 Nix 创建可移植且可重现的环境以与同事共享时,有哪些最佳做法?
a.共享桌面、服务器和开发环境的各种方法是什么?
b.这些方法的用例是什么?
c.它们在便携性和可访问性方面的优缺点是什么?
5.悬而未决的问题:关于 Nix/OS 架构还有哪些重要的注意事项?
【问题讨论】:
【参考方案1】: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 search paths的博文中了解更多关于NIX_PATH的信息
1.c
是的,包可以在机器之间复制。实际上,已经有一个工具可以做到这一点:nix-copy-closure
。
2.a
我相信您在这里谈论的是您使用 nix-env
管理的 Nix 环境。我们通常将这些称为 nix 配置文件。我在第 1 点中所说的关于 nix 搜索路径(NIX_PATH
变量)的内容并不真正适用于 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
的某物。然后上面的命令会用你的./result
切换~/.nix-profile
符号链接。
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
没有。这是其他配置管理器所做的。尼克斯则相反。这个blog post很好地描述了方法上的差异。
3.c
正如 3.a 中所说,nix 只会安装二进制文件,而 nixos 也会确保二进制文件正在运行。
4.a/b/c
基本上没有限制,做你认为适合你的。一旦你了解了基本概念,你就会发现什么最适合你。看看别人的dotfiles/configuration,有意见。
我使用my collection 的 nixos 配置在
system.autoUpgrade
服务的帮助下为我的家人管理笔记本电脑。
为了创建(构建)可重现的环境,我前段时间写了a blog post。
5.
我个人最喜欢的即将推出(或已经推出)的工具是vulnix
。这将针对当前漏洞 (CVE) 检查您当前的系统/项目。这使得 nix 在其他产品中脱颖而出,尤其是因为它非常易于使用(无需企业设置)。
我为 nix 找到的另一个用例是使用 dockerTools helpers 构建可重现的 docker 映像。
【讨论】:
以上是关于Nix/OS 架构概述?的主要内容,如果未能解决你的问题,请参考以下文章