10 Commits

Author SHA1 Message Date
Tom Alexander
3c17d56664 Separate enabling distributed build vs substituters. 2026-08-05 17:54:38 -04:00
Tom Alexander
adff9fcd29 Update nix_builder to support tar in the flake lockfile. 2026-08-04 21:39:54 -04:00
Tom Alexander
649e4033fd Update nix_builder to record the revisions of the flake inputs. 2026-07-28 10:20:18 -04:00
Tom Alexander
1b38004e03 Add more hosts to /etc/hosts. 2026-07-28 08:22:47 -04:00
Tom Alexander
d8ef4356a0 Enable some more builds in nix_builder. 2026-07-23 20:25:42 -04:00
Tom Alexander
5dd5f2e4e0 Fix docker credential generation. 2026-07-23 20:08:40 -04:00
Tom Alexander
84e8983974 Update nix_builder. 2026-07-18 23:30:39 -04:00
Tom Alexander
24f4a8c2d9 Tweak the containerd garbage collect threshold on kubelets.
Pods were getting evicted due to disk pressure, so this causes garbage collection to trigger sooner.
2026-07-18 13:59:56 -04:00
Tom Alexander
a3cdaa9128 Increase subuid/subgid range to support running buildkit inside podman. 2026-07-18 08:42:02 -04:00
Tom Alexander
51295a23dc Enable the build VM as a substituter.
This should enable me to have local build jobs without rebuilding stuff that already exists on the build VM server.
2026-07-18 08:41:11 -04:00
17 changed files with 160 additions and 55 deletions

View File

@@ -170,11 +170,11 @@
"rust-overlay": "rust-overlay_2" "rust-overlay": "rust-overlay_2"
}, },
"locked": { "locked": {
"lastModified": 1783278211, "lastModified": 1785893798,
"narHash": "sha256-/1u+MIQIge+cNPukQoK4Jp8nLuFZRbx4U+MyyxG0RpM=", "narHash": "sha256-69nKdvM+E/66sj9R2HEK8i0p0TOt/0MSqfXiZjcJ9nI=",
"ref": "refs/heads/main", "ref": "refs/heads/main",
"rev": "9281ba7e10d362d4edb489d0df0e78936dfe7b58", "rev": "6386febdb81eb1e072ad7cb568019f06618008fe",
"revCount": 32, "revCount": 41,
"type": "git", "type": "git",
"url": "https://code.fizz.buzz/talexander/nix_builder.git" "url": "https://code.fizz.buzz/talexander/nix_builder.git"
}, },

View File

@@ -4,17 +4,19 @@
config = { config = {
me.distributed_build.enable = true; me.distributed_build.enable = true;
me.distributed_build.machines.quark = { me.distributed_build.machines.quark = {
enable = false; enable_build = false;
enable_substituter = false;
additional_config = { additional_config = {
speedFactor = 2; speedFactor = 2;
}; };
}; };
me.distributed_build.machines.hydra = { me.distributed_build.machines.hydra = {
enable = true; enable_build = false;
enable_substituter = true;
additional_config = { additional_config = {
speedFactor = 2; speedFactor = 2;
}; };
substituter_url = "ssh-ng://nixworker@ns1.fizz.buzz:65122?compress=true&ssh-key=/persist/manual/ssh/root/keys/id_ed25519&remote-store=/.disk/root"; substituter_url = "ssh-ng://nixworker@ns1.fizz.buzz:65122?compress=true&ssh-key=/persist/manual/ssh/root/keys/id_ed25519&remote-store=local?root=/.disk/root";
}; };
}; };
} }

View File

@@ -129,6 +129,8 @@
# systemd.user.extraConfig = "DefaultLimitNOFILE=8192"; # systemd.user.extraConfig = "DefaultLimitNOFILE=8192";
# systemd.services."user@11400".serviceConfig.LimitNOFILE = "8192"; # systemd.services."user@11400".serviceConfig.LimitNOFILE = "8192";
nix.settings.secret-key-files = [ "/persist/manual/nix/nix-cache-key.sec" ];
me.build_in_ram.enable = true; me.build_in_ram.enable = true;
me.dont_use_substituters.enable = true; me.dont_use_substituters.enable = true;
me.hydra.enable = true; me.hydra.enable = true;

View File

@@ -4,10 +4,19 @@
config = { config = {
me.distributed_build.enable = true; me.distributed_build.enable = true;
me.distributed_build.machines.quark = { me.distributed_build.machines.quark = {
enable = true; enable_build = false;
enable_substituter = false;
additional_config = { additional_config = {
speedFactor = 2; speedFactor = 2;
}; };
}; };
me.distributed_build.machines.hydra = {
enable_build = false;
enable_substituter = true;
additional_config = {
speedFactor = 2;
};
substituter_url = "ssh-ng://nixworker@ns1.fizz.buzz:65122?compress=true&ssh-key=/persist/manual/ssh/root/keys/id_ed25519&remote-store=local?root=/.disk/root";
};
}; };
} }

View File

@@ -4,17 +4,19 @@
config = { config = {
me.distributed_build.enable = true; me.distributed_build.enable = true;
me.distributed_build.machines.quark = { me.distributed_build.machines.quark = {
enable = false; enable_build = false;
enable_substituter = false;
additional_config = { additional_config = {
speedFactor = 2; speedFactor = 2;
}; };
}; };
me.distributed_build.machines.hydra = { me.distributed_build.machines.hydra = {
enable = true; enable_build = false;
enable_substituter = true;
additional_config = { additional_config = {
speedFactor = 2; speedFactor = 2;
}; };
substituter_url = "ssh-ng://nixworker@ns1.fizz.buzz:65122?compress=true&ssh-key=/persist/manual/ssh/root/keys/id_ed25519&remote-store=/.disk/root"; substituter_url = "ssh-ng://nixworker@ns1.fizz.buzz:65122?compress=true&ssh-key=/persist/manual/ssh/root/keys/id_ed25519&remote-store=local?root=/.disk/root";
}; };
}; };
} }

View File

@@ -4,17 +4,19 @@
config = { config = {
me.distributed_build.enable = true; me.distributed_build.enable = true;
me.distributed_build.machines.quark = { me.distributed_build.machines.quark = {
enable = false; enable_build = false;
enable_substituter = false;
additional_config = { additional_config = {
speedFactor = 2; speedFactor = 2;
}; };
}; };
me.distributed_build.machines.hydra = { me.distributed_build.machines.hydra = {
enable = true; enable_build = false;
enable_substituter = true;
additional_config = { additional_config = {
speedFactor = 2; speedFactor = 2;
}; };
substituter_url = "ssh-ng://nixworker@ns1.fizz.buzz:65122?compress=true&ssh-key=/persist/manual/ssh/root/keys/id_ed25519&remote-store=/.disk/root"; substituter_url = "ssh-ng://nixworker@ns1.fizz.buzz:65122?compress=true&ssh-key=/persist/manual/ssh/root/keys/id_ed25519&remote-store=local?root=/.disk/root";
}; };
}; };
} }

View File

@@ -3,12 +3,20 @@
config = { config = {
me.distributed_build.enable = true; me.distributed_build.enable = true;
me.distributed_build.machines.hydra = { me.distributed_build.machines.quark = {
enable = true; enable_build = false;
enable_substituter = false;
additional_config = { additional_config = {
speedFactor = 2; speedFactor = 2;
}; };
substituter_url = "ssh-ng://nixworker@ns1.fizz.buzz:65122?compress=true&ssh-key=/persist/manual/ssh/root/keys/id_ed25519&remote-store=/.disk/root"; };
me.distributed_build.machines.hydra = {
enable_build = false;
enable_substituter = true;
additional_config = {
speedFactor = 2;
};
substituter_url = "ssh-ng://nixworker@ns1.fizz.buzz:65122?compress=true&ssh-key=/persist/manual/ssh/root/keys/id_ed25519&remote-store=local?root=/.disk/root";
}; };
}; };
} }

View File

@@ -4,10 +4,19 @@
config = { config = {
me.distributed_build.enable = true; me.distributed_build.enable = true;
me.distributed_build.machines.quark = { me.distributed_build.machines.quark = {
enable = true; enable_build = false;
enable_substituter = false;
additional_config = { additional_config = {
speedFactor = 2; speedFactor = 2;
}; };
}; };
me.distributed_build.machines.hydra = {
enable_build = false;
enable_substituter = true;
additional_config = {
speedFactor = 2;
};
substituter_url = "ssh-ng://nixworker@ns1.fizz.buzz:65122?compress=true&ssh-key=/persist/manual/ssh/root/keys/id_ed25519&remote-store=local?root=/.disk/root";
};
}; };
} }

View File

@@ -10,7 +10,14 @@
let let
make_machine_config = name: { make_machine_config = name: {
enable = lib.mkOption { enable_build = lib.mkOption {
type = lib.types.bool;
default = false;
example = true;
description = "Whether we want to use the ${name} machine during distributed builds.";
};
enable_substituter = lib.mkOption {
type = lib.types.bool; type = lib.types.bool;
default = false; default = false;
example = true; example = true;
@@ -59,11 +66,30 @@ let
hostName = lib.mkForce "hydra?remote-store=local?root=/.disk/root"; hostName = lib.mkForce "hydra?remote-store=local?root=/.disk/root";
}; };
}; };
build_machine_list = (
map (
hostname:
(lib.mkIf config.me.distributed_build.machines."${hostname}".enable_build (
lib.mkMerge [
{
hostName = hostname;
sshUser = "nixworker";
sshKey = "/persist/manual/ssh/root/keys/id_ed25519";
maxJobs = 1;
supportedFeatures = all_nixos_configs."${hostname}".config.me.optimizations.system_features;
protocol = "ssh-ng";
}
static_host_configs."${hostname}"
config.me.distributed_build.machines."${hostname}".additional_config
]
))
) (builtins.attrNames all_nixos_configs)
);
substituters_list = ( substituters_list = (
map ( map (
hostname: hostname:
(lib.mkIf ( (lib.mkIf (
config.me.distributed_build.machines."${hostname}".enable config.me.distributed_build.machines."${hostname}".enable_substituter
&& config.me.distributed_build.machines."${hostname}".substituter_url != null && config.me.distributed_build.machines."${hostname}".substituter_url != null
) (config.me.distributed_build.machines."${hostname}".substituter_url)) ) (config.me.distributed_build.machines."${hostname}".substituter_url))
) (builtins.attrNames all_nixos_configs) ) (builtins.attrNames all_nixos_configs)
@@ -108,28 +134,11 @@ in
"odo:0S/XKSFjjIrihQ7lbHEIebXk/c/xuoodhm0Gz26YhjA=" "odo:0S/XKSFjjIrihQ7lbHEIebXk/c/xuoodhm0Gz26YhjA="
"odowork:zg3UKBAyLy3xtZkL0hMtbxHjxgn5A2QY8NNAgyRT6Yo=" "odowork:zg3UKBAyLy3xtZkL0hMtbxHjxgn5A2QY8NNAgyRT6Yo="
"quark:Eb6ygkIiVlcUqb5hOjEVIQcfYLpCz40YVYA3/rxrgBc=" "quark:Eb6ygkIiVlcUqb5hOjEVIQcfYLpCz40YVYA3/rxrgBc="
"hydra:1s4Cy9YJLgw4jWx5jdSCfJmIm0hfya7WEy/EwJYI5Ys="
]; ];
} }
{ {
nix.buildMachines = ( nix.buildMachines = build_machine_list;
map (
hostname:
(lib.mkIf config.me.distributed_build.machines."${hostname}".enable (
lib.mkMerge [
{
hostName = hostname;
sshUser = "nixworker";
sshKey = "/persist/manual/ssh/root/keys/id_ed25519";
maxJobs = 1;
supportedFeatures = all_nixos_configs."${hostname}".config.me.optimizations.system_features;
protocol = "ssh-ng";
}
static_host_configs."${hostname}"
config.me.distributed_build.machines."${hostname}".additional_config
]
))
) (builtins.attrNames all_nixos_configs)
);
} }
(lib.mkIf has_any_substituters { (lib.mkIf has_any_substituters {
nix.settings.substitute = lib.mkForce true; nix.settings.substitute = lib.mkForce true;

View File

@@ -83,7 +83,10 @@
"worker2_update" "worker2_update"
"family_disks" "family_disks"
"family_disks_update" "family_disks_update"
# "nixbsd" # Disabled due to onetbb tests hanging on one-cpu machines. "nixbsd"
"nix_builder_develop"
"organic_develop"
"natter_develop"
]; ];
build_flags = lib.concatMap (target: [ build_flags = lib.concatMap (target: [
"--target" "--target"

View File

@@ -178,9 +178,30 @@ output_directory = "/home/nixworker/persist/nix_builder"
update = true update = true
update_branch = "nix_update" update_branch = "nix_update"
# [[targets]] [[targets]]
# name = "nixbsd" name = "nixbsd"
# repo = "https://github.com/nixos-bsd/nixbsd.git" repo = "https://github.com/nixos-bsd/nixbsd.git"
# revision = "828ff7a3c4ee91f548de65a963fca40eaedb171c" revision = "2b512eda58e6d77378bd20d6027802b158942e24"
# path = "." path = "."
# attr = "base.vmClosureInfo" attr = "base.vmClosureInfo"
[[targets]]
name = "nix_builder_develop"
repo = "https://code.fizz.buzz/talexander/nix_builder.git"
branch = "main"
path = "."
attr = "devShells.x86_64-linux.default"
[[targets]]
name = "organic_develop"
repo = "https://code.fizz.buzz/talexander/organic.git"
branch = "main"
path = "."
attr = "devShells.x86_64-linux.default"
[[targets]]
name = "natter_develop"
repo = "https://code.fizz.buzz/talexander/natter.git"
branch = "main"
path = "."
attr = "devShells.x86_64-linux.default"

View File

@@ -68,7 +68,15 @@ in
10.217.1.1 drmario 10.217.1.1 drmario
10.217.2.1 mrmanager 10.217.2.1 mrmanager
fdfd:5e8a:ee2d::2:2 mrmanager fdfd:5e8a:ee2d::2:2 mrmanager
172.16.16.1 unifi
172.16.16.231 plug1
172.16.16.232 plug2
172.16.16.233 plug3
172.16.16.234 plug4
172.16.16.235 temperature1
172.16.16.236 temperature2
172.16.16.245 turtle 172.16.16.245 turtle
172.16.16.250 sauna
172.16.16.251 stream 172.16.16.251 stream
''; '';

View File

@@ -50,6 +50,23 @@
DOCKER_HOST = "unix://$XDG_RUNTIME_DIR/podman/podman.sock"; DOCKER_HOST = "unix://$XDG_RUNTIME_DIR/podman/podman.sock";
}; };
# Increase subuid / subgid to support running buildkit-rootless
# ref: https://github.com/moby/buildkit/issues/3297
users.users.talexander = {
subUidRanges = [
{
startUid = 100000;
count = 262144; # default = 65536
}
];
subGidRanges = [
{
startGid = 100000;
count = 262144; # default = 65536
}
];
};
environment.persistence."/state" = lib.mkIf (config.me.mountPersistence) { environment.persistence."/state" = lib.mkIf (config.me.mountPersistence) {
hideMounts = true; hideMounts = true;
directories = [ directories = [

View File

@@ -20,8 +20,9 @@
config = lib.mkIf (config.me.wine.enable && config.me.graphical) { config = lib.mkIf (config.me.wine.enable && config.me.graphical) {
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
# wineWowPackages.stable # supports 32 + 64 bit # wineWowPackages.stable # supports 32 + 64 bit
wineWowPackages.waylandFull # Supports 32 + 64 bit with native wayland support. wineWow64Packages.waylandFull # Supports 32 + 64 bit with native wayland support.
# winetricks # winetricks
# lutris
]; ];
}; };
} }

View File

@@ -22,11 +22,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1780290312, "lastModified": 1781152676,
"narHash": "sha256-eTAlX0CwgB84Ts3GaBd944A3DRXVMzgA0EqroZBISUo=", "narHash": "sha256-RxWs5ND31KzTG7wvMM+PMfUjyNpmIEr999lqNARaM5o=",
"owner": "nix-community", "owner": "nix-community",
"repo": "disko", "repo": "disko",
"rev": "115e5211780054d8a890b41f0b7734cafad54dfe", "rev": "ff8702b4de27f72b4c78573dfb89ec74e36abdf1",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -164,11 +164,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1780749050, "lastModified": 1784120854,
"narHash": "sha256-3av0pIjlOWQ6rDbNOmpUSvbNnJkGORQKKjb4LtCZsIY=", "narHash": "sha256-KesHgItiZPgGX740axSiQLcIQ8D24MDqNpkKYWIek8k=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "a799d3e3886da994fa307f817a6bc705ae538eeb", "rev": "753cc8a3a87467296ddd1fa93f0cc3e81120ee46",
"type": "github" "type": "github"
}, },
"original": { "original": {

View File

@@ -63,6 +63,7 @@ let
username = builtins.readFile "${./secrets/flux-system/registry-credentials/username}"; username = builtins.readFile "${./secrets/flux-system/registry-credentials/username}";
password = builtins.readFile "${./secrets/flux-system/registry-credentials/password}"; password = builtins.readFile "${./secrets/flux-system/registry-credentials/password}";
email = builtins.readFile "${./secrets/flux-system/registry-credentials/email}"; email = builtins.readFile "${./secrets/flux-system/registry-credentials/email}";
address = builtins.readFile "${./secrets/flux-system/registry-credentials/address}";
}) })
// { // {
# "__annotations" = { # "__annotations" = {
@@ -207,16 +208,21 @@ let
username, username,
password, password,
email, email,
address,
}: }:
let let
in in
{ {
"__type" = "kubernetes.io/dockerconfigjson"; "__type" = "kubernetes.io/dockerconfigjson";
".dockerconfigjson" = builtins.toJSON { ".dockerconfigjson" = builtins.toJSON {
auths = {
"${address}" = {
inherit username password email; inherit username password email;
"auth" = toBase64 "${username}:${password}"; "auth" = toBase64 "${username}:${password}";
}; };
}; };
};
};
## dex ## dex
get_dex_config = get_dex_config =
client_id: client_id:

View File

@@ -48,6 +48,12 @@ let
"fd00:3e42:e349::10" "fd00:3e42:e349::10"
]; ];
imageMaximumGCAge = "24h"; # Delete unused images after 1 day. imageMaximumGCAge = "24h"; # Delete unused images after 1 day.
imageGCHighThresholdPercent = 80;
imageGCLowThresholdPercent = 70;
evictionHard = {
"nodefs.available" = "5%";
"imagefs.available" = "10%";
};
}; };
kubelet_config_file = (to_yaml_file "kubelet-config.yaml" kubelet_config); kubelet_config_file = (to_yaml_file "kubelet-config.yaml" kubelet_config);
in in