nixos/darwin-builder: add disk space options (#224480)
This commit is contained in:
parent
772d05f31d
commit
8b2521bdae
|
@ -61,3 +61,89 @@ builders-use-substitutes = true
|
||||||
```ShellSession
|
```ShellSession
|
||||||
$ sudo launchctl kickstart -k system/org.nixos.nix-daemon
|
$ sudo launchctl kickstart -k system/org.nixos.nix-daemon
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Example flake usage
|
||||||
|
|
||||||
|
```
|
||||||
|
{
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-22.11-darwin";
|
||||||
|
darwin.url = "github:lnl7/nix-darwin/master";
|
||||||
|
darwin.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = { self, darwin, nixpkgs, ... }@inputs:
|
||||||
|
let
|
||||||
|
|
||||||
|
inherit (darwin.lib) darwinSystem;
|
||||||
|
system = "aarch64-darwin";
|
||||||
|
pkgs = nixpkgs.legacyPackages."${system}";
|
||||||
|
linuxSystem = builtins.replaceStrings [ "darwin" ] [ "linux" ] system;
|
||||||
|
|
||||||
|
darwin-builder = nixpkgs.lib.nixosSystem {
|
||||||
|
system = linuxSystem;
|
||||||
|
modules = [
|
||||||
|
"${nixpkgs}/nixos/modules/profiles/macos-builder.nix"
|
||||||
|
{ virtualisation.host.pkgs = pkgs; }
|
||||||
|
];
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
|
||||||
|
darwinConfigurations = {
|
||||||
|
machine1 = darwinSystem {
|
||||||
|
inherit system;
|
||||||
|
modules = [
|
||||||
|
{
|
||||||
|
nix.distributedBuilds = true;
|
||||||
|
nix.buildMachines = [{
|
||||||
|
hostName = "ssh://builder@localhost";
|
||||||
|
system = linuxSystem;
|
||||||
|
maxJobs = 4;
|
||||||
|
supportedFeatures = [ "kvm" "benchmark" "big-parallel" ];
|
||||||
|
}];
|
||||||
|
|
||||||
|
launchd.daemons.darwin-builder = {
|
||||||
|
command = "${darwin-builder.config.system.build.macos-builder-installer}/bin/create-builder";
|
||||||
|
serviceConfig = {
|
||||||
|
KeepAlive = true;
|
||||||
|
RunAtLoad = true;
|
||||||
|
StandardOutPath = "/var/log/darwin-builder.log";
|
||||||
|
StandardErrorPath = "/var/log/darwin-builder.log";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Reconfiguring the builder
|
||||||
|
|
||||||
|
Initially you should not change the builder configuration else you will not be
|
||||||
|
able to use the binary cache. However, after you have the builder running locally
|
||||||
|
you may use it to build a modified builder with additional storage or memory.
|
||||||
|
|
||||||
|
To do this, you just need to set the `virtualisation.darwin-builder.*` parameters as
|
||||||
|
in the example below and rebuild.
|
||||||
|
|
||||||
|
```
|
||||||
|
darwin-builder = nixpkgs.lib.nixosSystem {
|
||||||
|
system = linuxSystem;
|
||||||
|
modules = [
|
||||||
|
"${nixpkgs}/nixos/modules/profiles/macos-builder.nix"
|
||||||
|
{
|
||||||
|
virtualisation.host.pkgs = pkgs;
|
||||||
|
virtualisation.darwin-builder.diskSize = 5120;
|
||||||
|
virtualisation.darwin-builder.memorySize = 1024;
|
||||||
|
virtualisation.darwin-builder.hostPort = 33022;
|
||||||
|
virtualisation.darwin-builder.workingDirectory = "/var/lib/darwin-builder";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
```
|
||||||
|
|
||||||
|
You may make any other changes to your VM in this attribute set. For example,
|
||||||
|
you could enable Docker or X11 forwarding to your Darwin host.
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,8 @@ let
|
||||||
|
|
||||||
keyType = "ed25519";
|
keyType = "ed25519";
|
||||||
|
|
||||||
|
cfg = config.virtualisation.darwin-builder;
|
||||||
|
|
||||||
in
|
in
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -24,6 +26,57 @@ in
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
|
options.virtualisation.darwin-builder = with lib; {
|
||||||
|
diskSize = mkOption {
|
||||||
|
default = 20 * 1024;
|
||||||
|
type = types.int;
|
||||||
|
example = 30720;
|
||||||
|
description = "The maximum disk space allocated to the runner in MB";
|
||||||
|
};
|
||||||
|
memorySize = mkOption {
|
||||||
|
default = 3 * 1024;
|
||||||
|
type = types.int;
|
||||||
|
example = 8192;
|
||||||
|
description = "The runner's memory in MB";
|
||||||
|
};
|
||||||
|
min-free = mkOption {
|
||||||
|
default = 1024 * 1024 * 1024;
|
||||||
|
type = types.int;
|
||||||
|
example = 1073741824;
|
||||||
|
description = ''
|
||||||
|
The threshold (in bytes) of free disk space left at which to
|
||||||
|
start garbage collection on the runner
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
max-free = mkOption {
|
||||||
|
default = 3 * 1024 * 1024 * 1024;
|
||||||
|
type = types.int;
|
||||||
|
example = 3221225472;
|
||||||
|
description = ''
|
||||||
|
The threshold (in bytes) of free disk space left at which to
|
||||||
|
stop garbage collection on the runner
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
workingDirectory = mkOption {
|
||||||
|
default = ".";
|
||||||
|
type = types.str;
|
||||||
|
example = "/var/lib/darwin-builder";
|
||||||
|
description = ''
|
||||||
|
The working directory to use to run the script. When running
|
||||||
|
as part of a flake will need to be set to a non read-only filesystem.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
hostPort = mkOption {
|
||||||
|
default = 22;
|
||||||
|
type = types.int;
|
||||||
|
example = 31022;
|
||||||
|
description = ''
|
||||||
|
The localhost host port to forward TCP to the guest port.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
config = {
|
||||||
# The builder is not intended to be used interactively
|
# The builder is not intended to be used interactively
|
||||||
documentation.enable = false;
|
documentation.enable = false;
|
||||||
|
|
||||||
|
@ -52,9 +105,9 @@ in
|
||||||
nix.settings = {
|
nix.settings = {
|
||||||
auto-optimise-store = true;
|
auto-optimise-store = true;
|
||||||
|
|
||||||
min-free = 1024 * 1024 * 1024;
|
min-free = cfg.min-free;
|
||||||
|
|
||||||
max-free = 3 * 1024 * 1024 * 1024;
|
max-free = cfg.max-free;
|
||||||
|
|
||||||
trusted-users = [ "root" user ];
|
trusted-users = [ "root" user ];
|
||||||
};
|
};
|
||||||
|
@ -86,7 +139,13 @@ in
|
||||||
|
|
||||||
hostPkgs = config.virtualisation.host.pkgs;
|
hostPkgs = config.virtualisation.host.pkgs;
|
||||||
|
|
||||||
script = hostPkgs.writeShellScriptBin "create-builder" ''
|
script = hostPkgs.writeShellScriptBin "create-builder" (
|
||||||
|
# When running as non-interactively as part of a DarwinConfiguration the working directory
|
||||||
|
# must be set to a writeable directory.
|
||||||
|
(if cfg.workingDirectory != "." then ''
|
||||||
|
${hostPkgs.coreutils}/bin/mkdir --parent "${cfg.workingDirectory}"
|
||||||
|
cd "${cfg.workingDirectory}"
|
||||||
|
'' else "") + ''
|
||||||
KEYS="''${KEYS:-./keys}"
|
KEYS="''${KEYS:-./keys}"
|
||||||
${hostPkgs.coreutils}/bin/mkdir --parent "''${KEYS}"
|
${hostPkgs.coreutils}/bin/mkdir --parent "''${KEYS}"
|
||||||
PRIVATE_KEY="''${KEYS}/${user}_${keyType}"
|
PRIVATE_KEY="''${KEYS}/${user}_${keyType}"
|
||||||
|
@ -98,8 +157,8 @@ in
|
||||||
if ! ${hostPkgs.diffutils}/bin/cmp "''${PUBLIC_KEY}" ${publicKey}; then
|
if ! ${hostPkgs.diffutils}/bin/cmp "''${PUBLIC_KEY}" ${publicKey}; then
|
||||||
(set -x; sudo --reset-timestamp ${installCredentials} "''${KEYS}")
|
(set -x; sudo --reset-timestamp ${installCredentials} "''${KEYS}")
|
||||||
fi
|
fi
|
||||||
KEYS="$(nix-store --add "$KEYS")" ${config.system.build.vm}/bin/run-nixos-vm
|
KEYS="$(${hostPkgs.nix}/bin/nix-store --add "$KEYS")" ${config.system.build.vm}/bin/run-nixos-vm
|
||||||
'';
|
'');
|
||||||
|
|
||||||
in
|
in
|
||||||
script.overrideAttrs (old: {
|
script.overrideAttrs (old: {
|
||||||
|
@ -139,12 +198,12 @@ in
|
||||||
'';
|
'';
|
||||||
|
|
||||||
virtualisation = {
|
virtualisation = {
|
||||||
diskSize = 20 * 1024;
|
diskSize = cfg.diskSize;
|
||||||
|
|
||||||
memorySize = 3 * 1024;
|
memorySize = cfg.memorySize;
|
||||||
|
|
||||||
forwardPorts = [
|
forwardPorts = [
|
||||||
{ from = "host"; guest.port = 22; host.port = 22; }
|
{ from = "host"; guest.port = 22; host.port = cfg.hostPort; }
|
||||||
];
|
];
|
||||||
|
|
||||||
# Disable graphics for the builder since users will likely want to run it
|
# Disable graphics for the builder since users will likely want to run it
|
||||||
|
@ -176,4 +235,5 @@ in
|
||||||
# restarted.
|
# restarted.
|
||||||
writableStoreUseTmpfs = false;
|
writableStoreUseTmpfs = false;
|
||||||
};
|
};
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue