NixOS内的NixOS?

问题描述 投票:4回答:3

我开始玩NixOS部署了。为此,我有一个定义了一些包的repo,以及一个用于服务器的configuration.nix

看来我应该能够在本地测试这个配置(我也在运行NixOS)。我想将我的全局configuration.nix改为指向部署服务器的configuration.nix(谁知道会破坏什么)是个坏主意;但有没有一种安全便捷的方式在本地“试用”服务器 - 即构建它并启动它,或者更好的是,将它作为一个单独的进程启动?

当然,我可以看到码头工人是一种方式;也许没有别的了。但我有这种模糊的感觉,尼克斯能够独自完成这项工作。

deployment virtualization nix nixos
3个回答
6
投票

在默认系统中内置了一种相当标准的方法。

nixos-rebuild build-vm。这将采用您当前的配置文件(默认情况下为/etc/nixos/configuration.nix,构建它并创建一个脚本,允许您将配置引导到虚拟机中。

一旦脚本完成,它将在当前目录中留下符号链接。然后你可以通过运行./result/bin/run-$HOSTNAME-vm启动它,它将启动你的虚拟机启动,供你玩。

TLDR;

  1. nixos-rebuild build-vm
  2. ./result/bin/run-$HOSTNAME-vm

4
投票

您可能已经知道,系统配置可以在Nix商店中共存而没有任何问题。这里的问题是同时运行多个系统。为此,您需要一个隔离或虚拟化工具,如Docker,VirtualBox等。

Docker

Docker并非设计用于在容器内运行整个操作系统,因此它可能不适合测试基于NixOS的部署,这些部署期望并在其部署单元内提供systemd和一些服务。 虽然你不会在Docker上获得良好的NixOS体验, Nix和Docker非常适合。更新:两个'原始'Nix包和NixOS都在Docker中运行。例如,Arion支持来自普通Nix,NixOS模块和“普通”Docker镜像的图像。

NixOps

要在NixOS中部署NixOS,最好使用旨在运行内部完整Linux系统的技术。

它有助于拥有一个管理集成的程序。在Nix生态系统中,NixOps是第一个这样的候选者。您可以将NixOps与其VirtualBox后端或(当前实验性的)NixOS容器后端一起使用,或者您可以使用none后端部署到使用其他工具创建的计算机。

Tests

如果您的目标是运行自动化集成测试,则可以使用NixOS VM测试框架。这使用Linux KVM虚拟化(在沙箱中公开/ dev / kvm)在虚拟机网络上运行集成测试,并将它们作为派生运行。它非常高效,因为它不必创建虚拟机映像,因为它将Nix存储安装在VM中。作为派生的测试可以提供良好的开发工作流程。

Nix store optimization

Nix的一个独特功能是您可以经常重用主机Nix存储,因此能够在容器/ vm中安装主机文件系统是您的解决方案中的一个很好的功能。如果您要创建自己的解决方案,根据您的需要,您可能希望推迟此优化,因为如果您希望container / vm能够修改存储,则会更加复杂。 NixOS测试通过VM中的覆盖文件系统解决了这个问题。另一种方法可能是转发Nix守护程序套接字。


2
投票

然而,nixos-rebuild build-vm是最简单的方法;您还可以将配置导入到nixos容器中。

这将通过以下方式完成:

containers.mydeploy = {
  privateNetwork = true;
  config = import ../mydeploy-configuration.nix;
};

请注意,如果它是静态的,则您不希望在mydeploy-configuration.nix中指定网络配置,因为这可能会导致与为容器创建的网络子网发生冲突。

© www.soinside.com 2019 - 2024. All rights reserved.