diff options
author | tv <tv@krebsco.de> | 2019-12-30 14:17:06 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-12-30 14:17:06 +0100 |
commit | f1b7112ac3cbe090e96f2c82c525b6db69b82034 (patch) | |
tree | 28d3132d3628d9e53fefec2d94a98cc564e2d94f | |
parent | fce5826802ca36d451978baa83a97bfbc1d2475f (diff) | |
parent | ea7e0c3a35e94eec5242d9344db9bc4d54056497 (diff) |
Merge pull request #11 from Mic92/build-host
Support for build hosts
-rw-r--r-- | README.md | 43 | ||||
-rw-r--r-- | pkgs/krops/default.nix | 21 |
2 files changed, 57 insertions, 7 deletions
@@ -1,6 +1,6 @@ # krops (krebs ops) -krops is a lightweigt toolkit to deploy NixOS systems, remotely or locally. +krops is a lightweight toolkit to deploy NixOS systems, remotely or locally. ## Some Features @@ -56,7 +56,9 @@ and run `$(nix-build --no-out-link krops.nix)` to deploy the target machine. Under the hood, this will make the sources available on the target machine below `/var/src`, and execute `nixos-rebuild switch -I /var/src`. -## Deployment Target Attribute +## Deployment Attributes + +### `target` The `target` attribute to `writeDeploy` can either be a string or an attribute set, specifying where to make the sources available, as well as where to run @@ -84,9 +86,42 @@ pkgs.krops.writeDeploy "deploy" { }; } ``` - For more details about the `target` attribute, please check the `mkTarget` -function in lib/default.nix. +function in [lib/default.nix](lib/defaults.nix). + +### `backup` (optional, defaults to false) + +Backup all paths specified in source before syncing new sources. + +### `buildTarget` (optional) + +If set the evaluation and build of the system will be executed on this host. +`buildTarget` takes the same arguments as target. +Sources will be synced to both `buildTarget` and `target`. +Built packages will be uploaded from the `buildTarget` to `target` directly +This requires the building machine to have ssh access to the target. +To build the system on the same machine, that runs the krops command, +set up a local ssh service and set the build host to localhost. + +### `crossDeploy` (optional, defaults to false) + +Use this option if target host architecture is not the same as the build host +architecture as set by `buildHost` i.e. deploying to aarch64 from a x86_64 +machine. Setting this option will disable building & running nix in the wrong +architecture when running `nixos-rebuild` on the deploying machine. It is +required to set `nixpkgs.localSystem.system` in the NixOS configuration to the +architecture of the target host. This option is only useful if the build host +also has remote builders that are capable of producing artifacts for the deploy +architecture. + +### `fast` (optional, defaults to false) + +Run `nixos-rebuild switch` immediately without building the system +in a dedicated `nix build` step. + +### `force` (optional, defaults to false) + +Create the sentinel file (`/var/src/.populate`) before syncing the new source. ## Source Types diff --git a/pkgs/krops/default.nix b/pkgs/krops/default.nix index a3e7745..16ef936 100644 --- a/pkgs/krops/default.nix +++ b/pkgs/krops/default.nix @@ -47,21 +47,36 @@ in writeDeploy = name: { backup ? false, + buildTarget ? null, + crossDeploy ? false, fast ? false, force ? false, source, target }: let + buildTarget' = + if buildTarget == null + then target' + else lib.mkTarget buildTarget; target' = lib.mkTarget target; in writeDash name '' set -efu + ${lib.optionalString (buildTarget' != target') + (populate { inherit backup force source; target = buildTarget'; })} ${populate { inherit backup force source; target = target'; }} ${lib.optionalString (! fast) '' - ${rebuild ["dry-build"] target'} - ${build target'} + ${rebuild ["dry-build"] buildTarget'} + ${build buildTarget'} ''} - ${rebuild ["switch"] target'} + ${rebuild ([ + "switch" + ] ++ lib.optionals crossDeploy [ + "--no-build-nix" + ] ++ lib.optionals (buildTarget' != target') [ + "--build-host" "${buildTarget'.user}@${buildTarget'.host}" + "--target-host" "${target'.user}@${target'.host}" + ]) buildTarget'} ''; writeTest = name: { |