linux - Nix/OS 架构概述?

标签 linux portability nix nixos reproducible-research

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

1. 什么是 Nix 包?

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

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

ii. A builder脚本。

三、在 all-packages.nix 上的列表.

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

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

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

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

2. Nix 环境由什么构成?

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

湾用户文件呢?

C。 nix-shell怎么办指挥工作?是否与nix-env有关命令?

3.NixOS的configuration.nix有什么关系和 Nix 环境?

从手册和维基我收集到 NixOS 是一个 Nix 包,Nix 基于 configuration.nix 创建了一个基本的系统环境。 .

一个。这是真的吗,如果是这样怎么办nixos-rebuildnixos-install除此之外呢?

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

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

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

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

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

C。它们在便携性和可访问性方面的优缺点是什么?

5. 开放式奖励问题:关于 Nix/OS 架构还有什么需要注意的关键?

最佳答案

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 的东西.然后上面的命令会切换~/.nix-profile与您的符号链接(symbolic link) ./result .

2.c
nix-shell实际上更接近nix-build命令。那我先解释一下什么是nix-build做。
nix-build用于构建.nix文件(也是派生,但为此我将不得不解释什么是派生)。您将如何使用 nix-build 的示例:
nix-build something.nix

上面的命令会产生一个 ./result符号链接(symbolic link),指向 /nix/store 中的某些内容. Nix 命令将实现构建并将输出存储到 /nix/store .
nix-shell另一方面会做nix-build除了它会不是 触发构建器脚本并将您放入该环境。这样,您最终会得到一个可用于开发 nix 表达式的环境,该环境也可以位于 nixpkgs 存储库之外(例如,您的私有(private)项目)。

3.a

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

3.b

不,这是其他配置管理器所做的。 Nix 则相反。在此 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 图像.

关于linux - Nix/OS 架构概述?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38911217/

相关文章:

c - __get_cpuid 的可移植性如何?

python - 在没有输入的情况下使用 GNU 并行生成 n 个工作线程

c - 在 Linux 中何时使用 pthread_exit() 以及何时使用 pthread_join()?

c - read() 和 write() 使用 spi 设备驱动程序

nix nixlang : undefined variable pkgs in default. nix 通过 nix-build -A hello 但可以在 nix repl 中使用

haskell - 如何在 Nix 中使用特定版本的 Haskell 包?

nix - 选择器 'nix-repl' 不匹配任何派生

c - 为什么不在我的代码中添加#include<linux/sched.h>,代码无法识别 task_struct 结构

python - 使用可移植的Python连接到Access数据库

c++ - 二进制文件如何在C编程中可移植?