虽然Nix/OS和手册提供了许多优秀的信息,但我仍然很难获得架构概述。对问题的数量和天真表示歉意;可以随意回答一个子集:
1.什么构成Nix软件包?
从我阅读手册的角度来看,Nix软件包是:
另一种是获取所需的源和依赖项的Nix表达式。
(二)附属产品。一个builder
脚本。
(C).all-packages.nix
上的一份清单。
源和二进制以及生成的派生被放入nix/store
中,通道自动更新,通过使用共享的二进制缓存来保持它们的更新效率。
这是正确完整的吗?
.nix表达式存储在哪里?
如果不同机器的nix/store
具有相同的体系结构,我可以简单地在它们之间复制一个包文件夹吗?
2.什么构成Nix环境?
环境在哪里和如何定义?
B.用户简介呢?
nix-shell
命令是如何工作的?它与nix-env
命令相关吗?
configuration.nix
3.NixOS的与Nix环境之间有什么关系?
从手册和wiki中,我收集到NixOS是一个Nix包,它创建了一个基于configuration.nix
的基本系统环境。
这是真的吗?如果是的话,nixos-rebuild
和nixos-install
还做了什么?
是否有可能逆转这个过程,即从环境中生成简洁的包或配置文件?
我可以用NixOS做什么,我不能用Nix做什么?
4.使用Nix创建可移植和可复制的环境以便与同事共享的最佳实践是什么?
共享桌面、服务器和开发环境的各种方法是什么?
这些方法的用例是什么?
相对于便携性和可使用性而言,它们的优缺点是什么?
5.开放式附加问题:对于Nix/OS体系结构,还有什么是至关重要的?
发布于 2016-08-12 11:12:57
1.a
是的,您也可以将Nix视为使用/nix/store
作为缓存的构建工具。Nix作为一个包管理器只是这个设计的一个副作用。
1.b
nix表达式的位置取决于您的设置。要解决这个问题,请查看$NIX_PATH变量,它指向尼克斯回购副本所在的位置。这些副本(有时仍然是)由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-env
。
nix-env
工具使用~/. NIX_PATH,默认情况下它是NIX_PATH的一部分,但这只是巧合。如果您清空NIX_PATH,则nix仍然能够找到导子,因为有~/.NIX_PATH。
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
基本上是没有限制的,做你认为适合你的事。一旦你理解了基本概念,你就会发现什么最适合你。查看其他人的dotfiles/配置,并有自己的意见。
我使用我的收藏的nixos配置,通过system.autoUpgrade
服务为我的家庭管理笔记本电脑。
为了创建一个(构建)可复制的环境,我不久前编写了博客文章。
5.
我个人最喜欢的工具即将到来(或已经在这里)是vulnix
。这将检查当前系统/项目是否存在当前漏洞(CVEs)。这使得nix脱颖而出,特别是因为它非常容易使用(没有企业设置)。
我为nix找到的另一个用例是使用dockerTools帮手构建可复制的坞映像。
https://stackoverflow.com/questions/38911217
复制相似问题