【问题标题】:How to build a NixOps deployment on hydra如何在 hydra 上构建 NixOps 部署
【发布时间】:2017-12-05 14:07:40
【问题描述】:

部署我的 NixOps 机器需要很多时间,因为需要构建包。我想在我信任的私有 Hydra 实例上定期进行构建。

我目前的方法涉及到这个release.nix 文件,但效果不太好。

{ nixpkgs ? <nixpkgs>, onlySystem ? true, extraModules ? [] }:

let

  nixos = import "${nixpkgs}/nixos";

  buildEnv = conf: (nixos {
    configuration = conf;
  });
  buildTarget = m: let build = buildEnv (buildConf m); in
    if onlySystem then build.system else build.vm;

  buildConf = module: { ... }:
    {
      imports = [ module ] ++ extraModules;
    };

in

{
  machine1 = buildTarget ./machine1/configuration.nix;
  machine2 = buildTarget ./machine2/configuration.nix 
  machine3 = buildTarget ./machine3/configuration.nix 
  machine4 = buildTarget ./machine4/configuration.nix 
}

这段代码我不是很懂,是从here复制过来的。

如果我在本地运行nix-build release.nix,这构建得很好,但在 hydra 上我永远不会得到完整的构建。有时构建不会出队(它们只是没有构建),有时它们会失败并显示各种错误消息。由于没有任何 hydra 问题是可重现的(事实上,我从未获得完整的构建),我想知道构建 NixOps 部署的最佳实践是什么。

请注意,我的部署中有 unfree 包。 nixpkgs.config.allowUnfree = true;这个选项是在hydra服务器上设置的。

这不是关于我的 hydra 故障的问题,而是关于使用 Hydra CI 构建 NixOps 部署的好方法。

【问题讨论】:

    标签: nix nixos


    【解决方案1】:

    据我所知,没有办法让这变得超级简单。您的代码看起来不错,但我的方法略有不同。我只构建了toplevel 属性,并以不同的方式构建了 NixOS 配置。

    我从 Nix 内部构建 NixOS“安装”,使用类似:

    let
      modules = [ ./configuration.nix ];
      nixosSystem = import (pkgs.path + "/nixos/lib/eval-config.nix") {
          inherit (pkgs) system;
          inherit modules;
        };
    in
      nixosSystem.config.system.build.toplevel
    

    【讨论】:

    • config.system.build.toplevel 到底是什么?它代表什么?我查看了推导的输出,它是一个目录,似乎包含很多用于第一阶段引导和第二阶段引导的内容。
    • 这是写入/nix/var/nix/profiles/system 的内容,这也是系统配置的垃圾收集根。如果其中缺少任何内容,则可能会被垃圾回收,因此这很好地表明它将包含系统配置所需的所有内容。
    • 所以它的唯一目的是锚定系统构建的工件以防止 GC 垃圾收集它们?没有程序实际访问来自/nix/var/nix/profiles/system 的文件。因为这些东西通常被放入 stage-1 initrd 或 init 脚本中。我猜etc目录也和/etc一样?
    • 配置文件也可用于恢复到那一代(system-$N-link etcetera)。 /etc 及其内容由toplevel 中的激活脚本创建。
    猜你喜欢
    • 1970-01-01
    • 2020-11-07
    • 2011-04-26
    • 2018-07-27
    • 2017-04-25
    • 1970-01-01
    • 2020-04-18
    • 1970-01-01
    • 2014-10-20
    相关资源
    最近更新 更多