Nix/OS 架构概述?
An Overview of Nix/OS Architecture?
虽然 Nix/OS wiki 和手册提供了很多极好的信息,但我仍然无法获得体系结构概述。对问题的数量和幼稚表示歉意;随意回答一个子集:
1.什么是 Nix 包?
根据我对手册的阅读,一个 Nix 包是:
我。获取构建所需的源和依赖项的 Nix 表达式。
二。一个 builder
脚本。
三。 all-packages.nix
.
上的列表
源代码和二进制文件连同生成的派生文件都放在 nix/store
中,频道自动更新,通过使用共享二进制缓存有效地保持最新。
一个。这是正确和完整的吗?
b。 .nix 表达式存储在哪里?
c。如果不同机器的 nix/store
架构相同,我可以简单地复制一个包文件夹吗?
2。什么构成了 Nix 环境?
一个。在哪里以及如何定义环境?
b。用户个人资料呢?
c。 nix-shell
命令如何工作?与nix-env
命令有关吗?
3。 NixOS 的 configuration.nix
和 Nix 环境有什么关系?
从手册和 wiki 我了解到 NixOS 是一个 Nix 包,Nix 创建了一个基于 configuration.nix
的基本系统环境。
一个。这是真的吗?如果是,nixos-rebuild
和 nixos-install
还做了什么?
b。是否可以逆转该过程,即从环境中生成简洁的包或配置文件?
c。 Nix 不能做什么,NixOS 能做什么?
4。使用 Nix 创建可移植和可重现的环境以与同事共享时的最佳实践是什么?
一个。共享桌面、服务器和开发环境的各种方法是什么?
b。这些方法的用例是什么?
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_PATH 的更多信息 post 关于 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
没有。这是其他配置管理器所做的。 Nix 的工作方式正好相反。 blog post.
中很好地描述了方法上的差异
3.c
如3.a所述,nix只会安装二进制文件,而nixos也会确保二进制文件是运行.
4.a/b/c
基本上没有限制,你觉得合适就怎么做。一旦您了解了基本概念,您就会找到最适合您的方法。看看别人的dotfiles/configurations,有意见
在
system.autoUpgrade
服务的帮助下,我使用 my collection 的 nixos 配置来管理我家人的笔记本电脑。
为了创建(构建)可重现的环境,我前段时间写过 a blog post。
5.
我个人最喜欢的即将推出(或已经推出)的工具是 vulnix
。这将根据当前漏洞 (CVE) 检查您当前的 system/project。这使得 nix 脱颖而出,尤其是因为它非常易于使用(无需企业设置)。
我为 nix 找到的另一个用例是使用 dockerTools helpers.
构建可重现的 docker 图像
虽然 Nix/OS wiki 和手册提供了很多极好的信息,但我仍然无法获得体系结构概述。对问题的数量和幼稚表示歉意;随意回答一个子集:
1.什么是 Nix 包?
根据我对手册的阅读,一个 Nix 包是:
我。获取构建所需的源和依赖项的 Nix 表达式。
二。一个 builder
脚本。
三。 all-packages.nix
.
源代码和二进制文件连同生成的派生文件都放在 nix/store
中,频道自动更新,通过使用共享二进制缓存有效地保持最新。
一个。这是正确和完整的吗?
b。 .nix 表达式存储在哪里?
c。如果不同机器的 nix/store
架构相同,我可以简单地复制一个包文件夹吗?
2。什么构成了 Nix 环境?
一个。在哪里以及如何定义环境?
b。用户个人资料呢?
c。 nix-shell
命令如何工作?与nix-env
命令有关吗?
3。 NixOS 的 configuration.nix
和 Nix 环境有什么关系?
从手册和 wiki 我了解到 NixOS 是一个 Nix 包,Nix 创建了一个基于 configuration.nix
的基本系统环境。
一个。这是真的吗?如果是,nixos-rebuild
和 nixos-install
还做了什么?
b。是否可以逆转该过程,即从环境中生成简洁的包或配置文件?
c。 Nix 不能做什么,NixOS 能做什么?
4。使用 Nix 创建可移植和可重现的环境以与同事共享时的最佳实践是什么?
一个。共享桌面、服务器和开发环境的各种方法是什么?
b。这些方法的用例是什么?
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_PATH 的更多信息 post 关于 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.
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
没有。这是其他配置管理器所做的。 Nix 的工作方式正好相反。 blog post.
中很好地描述了方法上的差异3.c
如3.a所述,nix只会安装二进制文件,而nixos也会确保二进制文件是运行.
4.a/b/c
基本上没有限制,你觉得合适就怎么做。一旦您了解了基本概念,您就会找到最适合您的方法。看看别人的dotfiles/configurations,有意见
在
system.autoUpgrade
服务的帮助下,我使用 my collection 的 nixos 配置来管理我家人的笔记本电脑。
为了创建(构建)可重现的环境,我前段时间写过 a blog post。
5.
我个人最喜欢的即将推出(或已经推出)的工具是 vulnix
。这将根据当前漏洞 (CVE) 检查您当前的 system/project。这使得 nix 脱颖而出,尤其是因为它非常易于使用(无需企业设置)。
我为 nix 找到的另一个用例是使用 dockerTools helpers.
构建可重现的 docker 图像