gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:12:13 25 4
gpt4 key购买 nike

我正在尝试在 nixos 中配置一个容器 containers例如:

  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 上需要 7 秒)。
有什么方法可以独立于整个主机的 Nixos 配置更快地测试此容器配置? 例如,仅构建容器配置本身,而不是构建此 nixos 配置的整个实例?

我发现 nixos-rebuild command 是一个小的 shell 脚本,例如在 https://github.com/NixOS/nixpkgs/blob/216f0e6ee4a65219f37caed95afda1a2c66188dc/nixos/modules/installer/tools/nixos-rebuild.sh
然而,在通读它之后,我不太明白这个“容器”单元与一般“nixos 配置”之间的关系发生了什么。

最佳答案

NixOS 容器没有自己的测试设施(截至 2020 年 11 月)。对于大多数意图和目的,它们的行为类似于普通的 NixOS 系统。如果你想测试你的容器,一个普通的 NixOS 测试就足够了。
编写 NixOS 测试是 documented在 NixOS 手册中。您可以使用 pkgs.nixosTest在 Nixpkgs 存储库之外编写自己的测试的函数。
您可以使用容器测试主机系统的近似值,也可以仅测试容器配置,就好像它是“顶级”NixOS 系统一样。我会选择后者,除非您需要同时测试多个容器,或者需要测试主机和容器之间的交互。
但是为了正确测试容器定义构建,我们可以使用 pkg.nixos .例如,容器的 nix 表达式(可以使用通常的 nix-build 方法构建):

{ 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;
}

关于nix - 如何独立于主机的 Nixos 配置构建或测试较小的 nixos 容器配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65002044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com