Skip to content

Use a remote builder with qemu

Bruno Bigras edited this page May 29, 2020 · 1 revision

Use a remote builder with qemu

It seems possible to use a remote builder to avoid building packages on Android.

qemu.nix: https://github.com/bqv/nixos/blob/live/profiles/misc/qemu.nix overlay: https://github.com/bqv/nixos/tree/live/overlays/qemu

Builder side

let
  qemuOverlay = (import ./overlays/qemu);
in
{
  imports = [ ./qemu.nix ];

  boot.kernelModules = [ "kvm-intel" ];
  qemu-user.arm = true;
  boot.binfmt.emulatedSystems = [ "aarch64-linux" ];

  nix = {
    trustedUsers = [ "builder" ];
  };

  users.users.builder = {
    createHome = true;
    isNormalUser = true;
  };
}

Android side

~/.config/nix/nix.conf

builders-use-substitutes = true
builders = ssh://builder

~/.ssh/config

Host builder
    HostName <the ip>
    User builder
    IdentitiesOnly yes
    IdentityFile ~/.ssh/nix_remote

~/.ssh/nix_remote is a ssh key without a password. Add the pub key on the builder machine.

You need to ssh first to the host to make ssh accept the host key.

You can test with nix build '(with import <nixpkgs> { }; runCommand "foo" {} "uname -a > $out")' --builders 'ssh://builder' -j0

or nix-on-droid switch --max-job 0