首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何构建或测试独立于主机的nixos配置的更小的Nixos容器配置?

如何构建或测试独立于主机的nixos配置的更小的Nixos容器配置?
EN

Stack Overflow用户
提问于 2020-11-25 09:42:06
回答 1查看 522关注 0票数 4

例如,我试图在nixos containers中配置一个容器:

代码语言:javascript
复制
  containers.abc123 = {
    config = { config, pkgs, ... }:
    {
      systemd.services = {
        finder-email-requests = {
          description = "";
          enable = true;
          environment = {
              TESTING = "abcxyz";
          };
          serviceConfig = {
            Type      = "simple";

            ExecStart = "bash -c \"echo '$TESTING hello' >> /tmp/abcxyz\"";
            Restart   = "always";
            RestartSec   = 30;
          };
          wantedBy = [ "default.target" ];
        };
      };
    };
  };

但是,需要测试/编译这意味着运行nixos-rebuild test,这可能会占用我的计算机上的10+秒(或者在我刚刚尝试过的新安装的VM上运行7s )。

是否可以更快地测试这个容器配置,而不依赖于整个主机的Nixos?,例如,只构建容器配置本身,而不是构建这个nixos配置的整个实例?

我发现nixos-rebuild命令是一个小的shell脚本,例如在https://github.com/NixOS/nixpkgs/blob/216f0e6ee4a65219f37caed95afda1a2c66188dc/nixos/modules/installer/tools/nixos-rebuild.sh

然而,在阅读了它之后,我不太明白这个‘容器’单元和一般的'nixos配置‘之间的关系。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-25 11:11:05

NixOS容器没有自己的测试工具(截止到2020年11月)。在大多数情况下,它们的行为就像正常的NixOS系统。如果您想测试您的容器,正常的NixOS测试应该是足够的。

编写NixOS测试是NixOS手册中的记录在案。您可以使用pkgs.nixosTest函数在Nixpkgs之外编写自己的测试。

您可以使用容器测试主机系统的近似值,也可以像测试“顶级”NixOS系统一样测试容器配置。我会选择后者,除非您需要结合测试多个容器,或者需要测试主机和容器之间的交互。

然而,为了正确测试容器定义构建,我们可以使用pkg.nixos。例如,容器的nix表达式(可以用通常的nix-build方法构建):

代码语言:javascript
复制
{ a = let pkgs = import <nixpkgs> {};
in (pkgs.nixos
{
  fileSystems."/".device = "x";
  boot.loader.grub.enable = false;

  systemd.services = {
          finder-email-requests-2 = {
            description = "";
            enable = true;
            environment = {
                TESTING = "abcxyz";
            };
            serviceConfig = {
              Type      = "simple";

              ExecStart = "bash -c \"echo '$TESTING hello' >> /tmp/abcxyz\"";
              Restart   = "always";
              RestartSec   = 30;
            };
            wantedBy = [ "default.target" ];
          };
        };
}).toplevel; 
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65002044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档