nix-darwinのlinux-builderでNixOSを動かす

Table of Contents

背景・動機

元々OrbStack VMでNixOSを動かしていたのだが、k8sを動かす時にOrbStackだと動かずDocker for Macだと動くという事象が発生した。

調査をした所、nix-darwinがlinux-builderというものをサポートしてることがわかったのでメモしておく。

https://scrapbox.io/kanna/nix_linux-builder

試したこと・やったこと

1. linux-builderについて調査

このあたりに纏まっている。

nix-darwinには modules/nix/linux-builder.nix が提供されており、 enable=true するだけで launchd.daemons に登録されるようだ。

2. nix-darwinを導入してみる

現状の設定は以下。

https://github.com/takeokunn/nixos-configuration/blob/9b70ffde2c5d0233c0c78b63a1ad36d2638d5268/nix-darwin/config/linux-builder.nix

{ lib, ... }:
{
  nix.linux-builder = {
    enable = true;
    ephemeral = false;
    systems = [ "aarch64-linux" "x86_64-linux" ];
    config = {
      boot.binfmt.emulatedSystems = [ "x86_64-linux" ];
      virtualisation = {
        cores = 6;
        memorySize = lib.mkForce (1024 * 16);
        diskSize = lib.mkForce (1024 * 200);
      };
      nix.settings = {
        experimental-features = [
          "nix-command"
          "flakes"
        ];
      };
      security.sudo.extraRules = [
        {
          users = [ "builder" ];
          commands = [
            {
              command = "ALL";
              options = [ "NOPASSWD" ];
            }
          ];
        }
      ];
    };
  };
}

3. 動いてることを確認する

take 部分はwhoamiに読み替えてください。

$ sudo chmod 644 /etc/nix/builder_ed25519.pub
$ sudo chmod 600 /etc/nix/builder_ed25519
$ sudo chown take:staff /etc/nix/builder_ed25519

あとはsshするだけ。

$ ssh linux-builder

得られた結果・所感

sshしてsudoできるようになった。

今後の展開・検討事項

deploy-rsと組み合わせてnixos-container運用を固めきりたい。 現状だととりあえず動いただけなのでlinux-builder自体の深堀もしたい。