虽然Nix / OS维基和手册提供了很多优秀的信息,但我仍然无法获得架构概述。对问题的数量和存在性表示歉意;随意回答一个子集:
1。什么构成Nix包?
从我阅读手册的Nix包中可以看出:
我。一个Nix表达式,用于获取构建所需的源和依赖项。
II。一个builder
脚本。
III。 all-packages.nix
上的商家信息。
源和二进制文件以及生成的派生项都放在nix/store
中,并且通道自动更新,通过使用共享二进制缓存使它们保持最新。
一个。这是正确和完整的吗?
湾存储.nix表达式在哪里?
℃。如果它们具有相同的架构,我可以简单地在nix/store
个不同机器之间复制一个包文件夹吗?
2。什么构成了Nix环境?
一个。环境在何处以及如何定义?
湾用户档案怎么样?
℃。 nix-shell
命令如何工作?它与nix-env
命令有关吗?
第3。 NixOS的configuration.nix
和Nix环境之间有什么关系?
从手册和wiki中我收集NixOS是一个Nix软件包,Nix创建了一个基于configuration.nix
的基本系统环境。
一个。这是真的,如果是这样的话nixos-rebuild
和nixos-install
除此之外做了什么?
湾是否可以反转该过程,即从环境生成简洁的包或配置文件?
℃。我怎么能用NixOS做我不能用Nix做的事?
4。使用Nix创建可移植且可重现的环境以与同事共享时的最佳做法是什么?
一个。共享桌面,服务器和开发环境的各种方法有哪些?
湾这些方法的用例是什么?
℃。它们在便携性和可访问性方面有哪些优点和缺点?
5。公开奖金问题:关于Nix / OS架构还有哪些重要事项需要注意?
答案 0 :(得分:11)
<强> 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 search paths
<强> 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
的内容。然后,上面的命令会将~/.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 强>
没有。这是其他配置管理器所做的事情。尼克斯反过来工作。在blog post中很好地描述了方法的不同。
<强> 3.C 强>
如 3.a 中所述,nix只会安装二进制文件,而nixos也会确保二进制文件正在运行。
<强> 4.A / B / C 强>
基本上没有限制,你认为如何适合你。一旦了解了基本概念,您就会找到最适合您的概念。看看其他人&#39; dotfiles /配置并有意见。
我使用my collection nixos配置在
system.autoUpgrade
服务的帮助下为我的家人管理笔记本电脑。
要创建一个(构建)可重现的环境,我前一段时间写了a blog post。
<强> 5 强>
我个人最喜欢的工具即将来临(或已经存在)vulnix
。这将检查您当前的系统/项目是否存在当前漏洞(CVE)。这使得nix与其他人脱颖而出,特别是因为它易于使用(没有企业设置)。
我为nix找到的另一个用例是使用dockerTools helpers构建可重现的docker镜像。