例如,我试图在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上运行7s )。
是否可以更快地测试这个容器配置,而不依赖于整个主机的Nixos?,例如,只构建容器配置本身,而不是构建这个nixos配置的整个实例?
我发现nixos-rebuild命令是一个小的shell脚本,例如在https://github.com/NixOS/nixpkgs/blob/216f0e6ee4a65219f37caed95afda1a2c66188dc/nixos/modules/installer/tools/nixos-rebuild.sh上
然而,在阅读了它之后,我不太明白这个‘容器’单元和一般的'nixos配置‘之间的关系。
发布于 2020-11-25 11:11:05
NixOS容器没有自己的测试工具(截止到2020年11月)。在大多数情况下,它们的行为就像正常的NixOS系统。如果您想测试您的容器,正常的NixOS测试应该是足够的。
编写NixOS测试是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;
}https://stackoverflow.com/questions/65002044
复制相似问题