config/profiles/remote-builders/default.nix

162 lines
6.5 KiB
Nix
Raw Normal View History

2023-02-24 21:36:30 +01:00
{ config, pkgs, lib, ... }:
let
2023-03-09 07:03:15 +01:00
# supportedFeatures:
# - "kvm" - has hypervisor
# - "nixos-test" - the same as ^? nixos?
# - "benchmark" - has "equal" performance
# - "big-parallel" - is beefy, for stuff like llvm
2023-02-24 21:36:30 +01:00
2023-03-04 01:33:23 +01:00
# find 'publicKey' with `ssh-keyscan`
2023-02-24 21:36:30 +01:00
remotes = [
2023-07-08 21:52:29 +02:00
/**/
2023-03-03 21:42:29 +01:00
{
2023-03-04 01:33:23 +01:00
systems = [ "x86_64-linux" "wasm32-wasi" "wasm64-wasi" "x86_64-windows" "aarch64-linux" "riscv64-linux" ];
hostName = "bolle.pbsds.net";
sshUser = "pbsds";
2023-03-11 00:30:24 +01:00
maxJobs = 12; # 12 cores
2023-03-04 01:33:23 +01:00
#maxJobs = 1; # at least for big-parallel
2023-03-19 04:23:38 +01:00
speedFactor = 3;
2023-03-04 01:33:23 +01:00
supportedFeatures = [ "kvm" "big-parallel" "nixos-test" ];
#mandatoryFeatures = [ ];
2023-03-07 01:02:57 +01:00
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILeOB/57N1fQPVorIUlkkJZaQduBo+4+km2Qbj4ebd/k";
2023-03-04 01:33:23 +01:00
proxy.user = "pederbs";
proxy.host = "isvegg.pvv.ntnu.no";
2023-03-03 21:42:29 +01:00
proxy.publicKey = "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGurF7rdnrDP/VgIK2Tx38of+bX/QGCGL+alrWnZ1Ca5llGneMulUt1RB9xZzNLHiaWIE+HOP0i4spEaeZhilfU=";
}
2023-02-24 21:36:30 +01:00
/**/
{
2023-03-04 01:33:23 +01:00
systems = [ "x86_64-linux" "wasm32-wasi" "wasm64-wasi" "x86_64-windows" "aarch64-linux" "riscv64-linux" ];
2023-03-11 00:30:24 +01:00
hostName = "noximilien.pbsds.net"; # TODO: port 23
2023-03-04 01:33:23 +01:00
sshUser = "pbsds";
2023-03-11 00:30:24 +01:00
maxJobs = 4; # 8 cores
2023-03-04 01:33:23 +01:00
#maxJobs = 1; # at least for big-parallel
2023-07-08 21:52:29 +02:00
speedFactor = 3;
2023-06-11 09:36:00 +02:00
supportedFeatures = [ "kvm" "big-parallel" ]; # TODO: "nixos-test"
2023-03-04 01:33:23 +01:00
#mandatoryFeatures = [ ];
2023-03-07 01:02:57 +01:00
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ3QhTGS03Sqm6OeCEz5AIGqJnBttKaBqMgNXp3Md7t4";
2023-03-04 01:33:23 +01:00
}
2023-07-08 21:52:29 +02:00
/** /
2023-03-04 01:33:23 +01:00
{
systems = ["x86_64-linux"];
hostName = "rocm.pbsds.net";
sshUser = "pbsds";
2023-03-11 00:30:24 +01:00
maxJobs = 8; # 16 cores
2023-03-04 01:33:23 +01:00
#maxJobs = 4;
#maxJobs = 1; # at least for big-parallel
2023-03-07 01:02:57 +01:00
speedFactor = 2;
2023-03-04 01:33:23 +01:00
supportedFeatures = [ "kvm" "big-parallel" ];
#mandatoryFeatures = [ ];
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGDuWdqEQ5mmVjuKi6f/Q2PFxuqB3URpgTHid06Vw7we";
proxy.user = "pederbs";
proxy.host = "isvegg.pvv.ntnu.no";
proxy.publicKey = "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGurF7rdnrDP/VgIK2Tx38of+bX/QGCGL+alrWnZ1Ca5llGneMulUt1RB9xZzNLHiaWIE+HOP0i4spEaeZhilfU=";
2023-02-24 21:36:30 +01:00
}
2023-07-08 21:52:29 +02:00
/**/
2023-03-11 15:59:56 +01:00
{
systems = [ "x86_64-linux" "wasm32-wasi" "wasm64-wasi" "x86_64-windows" "aarch64-linux" "riscv64-linux" ];
2023-06-24 20:23:38 +02:00
hostName = "sopp.pbsds.net";
sshPort = 26;
2023-03-11 15:59:56 +01:00
sshUser = "pbsds";
2023-06-24 20:23:38 +02:00
maxJobs = 4; # 8 cores
2023-03-11 15:59:56 +01:00
#maxJobs = 1; # at least for big-parallel
2023-07-08 21:52:29 +02:00
speedFactor = 1;
2023-03-11 15:59:56 +01:00
supportedFeatures = [ "kvm" "big-parallel" "nixos-test" ];
#mandatoryFeatures = [ ];
2023-06-24 20:23:38 +02:00
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDYB9H1pHB1vTBiGhO/GCQjn70BtVdQuJyXx38zN2CDj";
2023-03-11 15:59:56 +01:00
}
/**/
2023-06-24 20:23:38 +02:00
{
systems = [ "x86_64-linux" "wasm32-wasi" "wasm64-wasi" "x86_64-windows" "aarch64-linux" "riscv64-linux" ];
hostName = "nord.pbsds.net";
sshPort = 24;
sshUser = "pbsds";
maxJobs = 2; # 4 cores
#maxJobs = 1; # at least for big-parallel
speedFactor = 1;
supportedFeatures = [ "kvm" "big-parallel" "nixos-test" ];
#mandatoryFeatures = [ ];
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIBSdIUtUfAxnVbPDmDDFdP2S3Wd3+CC8IfZAANJ76oh";
}
/** /
2023-02-24 21:36:30 +01:00
{
2023-03-04 01:33:23 +01:00
systems = ["x86_64-linux"];
hostName = "isvegg.pvv.ntnu.no";
sshUser = "pederbs";
2023-03-11 00:30:24 +01:00
maxJobs = 2; # 4 cores
2023-02-24 21:36:30 +01:00
speedFactor = 0;
2023-03-04 01:33:23 +01:00
publicKey = "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGurF7rdnrDP/VgIK2Tx38of+bX/QGCGL+alrWnZ1Ca5llGneMulUt1RB9xZzNLHiaWIE+HOP0i4spEaeZhilfU=";
2023-02-24 21:36:30 +01:00
}
{
2023-03-04 01:33:23 +01:00
systems = ["x86_64-linux"];
hostName = "eirin.pvv.ntnu.no";
sshUser = "pederbs";
2023-03-11 00:30:24 +01:00
maxJobs = 2; # 8 cores
2023-02-24 21:36:30 +01:00
speedFactor = 0;
2023-03-04 01:33:23 +01:00
publicKey = "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBILGULKEzYe5kPorM0rWATv10qq6debfCuYUYqw3HWZm4Y5Pi7mVKcf8lKFNPc1DxT/dStfxxtHj/2fbezaxElk=";
2023-02-24 21:36:30 +01:00
}
{
2023-03-04 01:33:23 +01:00
systems = ["x86_64-linux"];
hostName = "demiurgen.pvv.ntnu.no";
sshUser = "pederbs";
2023-03-11 00:30:24 +01:00
maxJobs = 2; # 8 cores
2023-02-24 21:36:30 +01:00
speedFactor = 0;
2023-03-04 01:33:23 +01:00
publicKey = "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKw92q3eB5HZbKJN3p+80MtirqcXPu01USE9LnoGYJuDvko1udjIy4UR0wAwELqgs+r7mJyuQPeXmOZKwjHP6tM=";
2023-02-24 21:36:30 +01:00
}
/**/
];
mkRemoteConfig = {
publicKey,# fetch it with `ssh-keyscan`
proxy ? null, # schema: { user, host, publicKey }
2023-06-24 20:23:38 +02:00
sshPort ? 22,
2023-02-24 21:36:30 +01:00
... # the rest follows nix.buildMachines.<NAME> schema
}@args:
let
2023-06-24 20:23:38 +02:00
buildMachine = lib.filterAttrs (key: _: !builtins.elem key ["publicKey" "proxy" "sshPort"]) args; # this should have syntactic sugar: ...@buildMachine
2023-03-04 01:33:23 +01:00
filter = lib.mkIf (buildMachine.hostName != config.networking.fqdn);
in filter {
2023-02-24 21:36:30 +01:00
nix.buildMachines = [ buildMachine ];
2023-03-04 01:33:23 +01:00
#TODO: users.users.root.openssh.authorizedKeys.keys
2023-02-24 21:36:30 +01:00
programs.ssh.knownHosts.${buildMachine.hostName}.publicKey = publicKey;
2023-03-03 21:42:29 +01:00
# the timeout is great to have when a remote is unresponsive, as nix currently does not give a shit
2023-02-24 21:36:30 +01:00
programs.ssh.extraConfig = ''
Host ${buildMachine.hostName}
ConnectTimeout 3
2023-06-24 20:23:38 +02:00
Port ${builtins.toString sshPort}
2023-02-24 21:36:30 +01:00
${lib.optionalString (proxy != null) ''
ProxyJump ${proxy.user}@${proxy.host}
''}
'';
programs.ssh.knownHosts.${proxy.host or "IGNORE"} = lib.mkIf (proxy != null) { publicKey = proxy.publicKey; };
};
2023-07-04 16:32:09 +02:00
remoteMap = lib.listToAttrs (lib.forEach remotes (remote: {
name = remote.hostName;
value = remote;
}));
2023-02-24 21:36:30 +01:00
in {
nix.distributedBuilds = true;
# TODO: Allow setting speedFactor for local builds, as local is currently fixed to 0
# https://github.com/NixOS/nix/issues/2457
# useful when the builder has a faster internet connection than i do
2023-03-04 01:33:23 +01:00
nix.settings.builders-use-substitutes = true;
2023-02-24 21:36:30 +01:00
2023-07-04 16:32:09 +02:00
/** /
nix.buildMachines = let cfg = remoteMap.${config.networking.fqdn}; in [{
hostName = "localhost"; # https://github.com/NixOS/nix/pull/4938
systems = [ config.nixpkgs.system "builtin" ] ++ config.boot.binfmt.emulatedSystems;
supportedFeatures = ["builtin" "local" "kvm" "nixos-test" "big-parallel" "benchmark"];
inherit (cfg) maxJobs speedFactor;
}];
/**/
2023-02-24 21:36:30 +01:00
# TIL: this can be a list of configurations and lambdas, not just file paths
imports = builtins.map mkRemoteConfig remotes;
}