about summary refs log tree commit diff
diff options
context:
space:
mode:
authoraszlig <aszlig@nix.build>2017-11-12 20:40:59 +0100
committeraszlig <aszlig@nix.build>2017-11-12 20:40:59 +0100
commitb5954cf18c7933bde5d952821a8457b64da52d65 (patch)
tree9c21b93208ce2af517a634ca023d087b745dfb39
parent9fcd4d0350670b1b7c4edf9c57e5bced82f23134 (diff)
taalo-build: Rewrite as wrapper and move to pkgs
We no longer use the legacy SSH store protocol for taalo but the new
ssh-ng protocol, which makes the implementation of taalo-build a LOT
less clunky.

It also didn't make sense to have this as a NixOS module when we after
all just emit a static store path without any stuff depending on
configuration options.

The new implementation basically just wraps nix-build and nix-store -r
along with the right NIX_REMOTE variable.

With Nix 1.2 this can also be done with the new "nix build" command
using the --store option, but unfortunately "nix build" doesn't yet have
the same functionality as nix-build.

Signed-off-by: aszlig <aszlig@nix.build>
Cc: @Profpatsch, @bendlas
-rw-r--r--machines/profpatsch/katara.nix4
-rw-r--r--modules/module-list.nix1
-rw-r--r--modules/user/aszlig/profiles/workstation/default.nix2
-rw-r--r--modules/user/aszlig/profiles/workstation/packages.nix1
-rw-r--r--modules/user/aszlig/programs/taalo-build/default.nix93
-rw-r--r--pkgs/default.nix2
-rw-r--r--pkgs/taalo-build/default.nix19
7 files changed, 23 insertions, 99 deletions
diff --git a/machines/profpatsch/katara.nix b/machines/profpatsch/katara.nix
index aafbcd6d..84408084 100644
--- a/machines/profpatsch/katara.nix
+++ b/machines/profpatsch/katara.nix
@@ -183,6 +183,7 @@ in {
       nixPkgs = [
         nix-repl                  # nix REPL
         nix-prefetch-scripts      # prefetch store paths from various destinations
+        vuizvui.taalo-build       # build derivation on taalo
       ];
       tmpPkgs = [
         # TODO needs user service
@@ -333,9 +334,6 @@ in {
     # TODO: base config?
     vuizvui.programs.fish.fasd.enable = true;
 
-    # build derivation on taalo
-    vuizvui.user.aszlig.programs.taalo-build.enable = true;
-
     vuizvui.user.profpatsch.programs.scanning = {
       enable = true;
       remoteScanners = ''
diff --git a/modules/module-list.nix b/modules/module-list.nix
index f4538dd0..1ec2a71a 100644
--- a/modules/module-list.nix
+++ b/modules/module-list.nix
@@ -20,7 +20,6 @@
   ./user/aszlig/programs/gajim
   ./user/aszlig/programs/git
   ./user/aszlig/programs/mpv
-  ./user/aszlig/programs/taalo-build
   ./user/aszlig/programs/taskwarrior
   ./user/aszlig/programs/zsh
   ./user/aszlig/services/i3
diff --git a/modules/user/aszlig/profiles/workstation/default.nix b/modules/user/aszlig/profiles/workstation/default.nix
index 45eacb8a..dce7575c 100644
--- a/modules/user/aszlig/profiles/workstation/default.nix
+++ b/modules/user/aszlig/profiles/workstation/default.nix
@@ -111,8 +111,6 @@ in {
     vuizvui.programs.gnupg.agent.sshSupport = true;
     vuizvui.programs.gnupg.agent.scdaemon.enable = true;
 
-    vuizvui.user.aszlig.programs.taalo-build.enable = true;
-
     services = {
       openssh = {
         enable = true;
diff --git a/modules/user/aszlig/profiles/workstation/packages.nix b/modules/user/aszlig/profiles/workstation/packages.nix
index 277e9f0c..d5d76b2b 100644
--- a/modules/user/aszlig/profiles/workstation/packages.nix
+++ b/modules/user/aszlig/profiles/workstation/packages.nix
@@ -67,6 +67,7 @@ pkgs: with pkgs; [
   stdmanpages
   strace
   surfraw
+  vuizvui.taalo-build
   telnet
   unzip
   valgrind
diff --git a/modules/user/aszlig/programs/taalo-build/default.nix b/modules/user/aszlig/programs/taalo-build/default.nix
deleted file mode 100644
index 5fb09438..00000000
--- a/modules/user/aszlig/programs/taalo-build/default.nix
+++ /dev/null
@@ -1,93 +0,0 @@
-{ config, pkgs, lib, ... }:
-
-let
-  # Make sure we use a Nix version prior to 1.12, because taalo currently uses
-  # the legacy SSH protocol, so we can't use the ssh-ng store backend here.
-  #
-  # Apart from that, even if we would use the new store backend we would break
-  # the taalo-build backend for Nix 1.11.
-  inherit (import (import (../../../../../nixpkgs-path.nix)) {
-    config = {};
-  }) nix;
-
-  backend = pkgs.writeScript "taalo-realize-backend" ''
-    #!${pkgs.perl}/bin/perl -I${nix}/lib/perl5/site_perl
-    use strict;
-    use Nix::CopyClosure;
-    use Nix::SSH;
-    use IPC::Open2;
-
-    binmode STDERR, ":encoding(utf8)";
-
-    my ($from, $to);
-    my $dest = 'nix-remote-build@taalo.headcounter.org';
-    my $cmd = "exec ssh $dest -C -- nix-store --serve --write";
-    my $pid = open2($from, $to, $cmd);
-
-    # Do the handshake.
-    my $magic;
-    eval {
-        my $SERVE_MAGIC_1 = 0x390c9deb; # FIXME
-        my $clientVersion = 0x200;
-        syswrite($to, pack("L<x4L<x4", $SERVE_MAGIC_1, $clientVersion))
-          or die;
-        $magic = readInt($from);
-    };
-
-    die "unable to connect to taalo\n" if $@;
-    die "did not get valid handshake from taalo\n" if $magic != 0x5452eecb;
-
-    my $serverVersion = readInt($from);
-    die "unsupported server version\n"
-      if $serverVersion < 0x200 || $serverVersion >= 0x300;
-
-    Nix::CopyClosure::copyToOpen(
-      $from, $to, "taalo", \@ARGV, 0, 0, 0, 1
-    );
-
-    writeInt(6, $to) or die;
-    writeStrings(\@ARGV, $to);
-    writeInt(0, $to);
-    writeInt(0, $to);
-
-    my $res = readInt($from);
-
-    close $to;
-
-    waitpid($pid, 0);
-    exit $res;
-  '';
-
-  taalo-realize = pkgs.writeScriptBin "taalo-realize" ''
-    #!${pkgs.stdenv.shell}
-    if [ $# -le 0 -o "$1" = "--help" -o "$1" = "-h" ]; then
-      echo "Usage: $0 DERIVATION..." >&2
-      exit 1
-    fi
-
-    exec ${backend} "$@"
-  '';
-
-  taalo-build = pkgs.writeScriptBin "taalo-build" ''
-    #!${pkgs.stdenv.shell}
-    if tmpdir="$("${pkgs.coreutils}/bin/mktemp" -d -t taalo-build.XXXXXX)"; then
-      trap "rm -rf '$tmpdir'" EXIT
-      set -o pipefail
-      drvs="$(nix-instantiate --add-root "$tmpdir/derivation" --indirect "$@" \
-        | cut -d'!' -f1)" || exit 1
-      ${backend} $("${pkgs.coreutils}/bin/readlink" $drvs)
-      exit $?
-    else
-      echo "Unable to create temporary directory for build link!" >&2
-      exit 1
-    fi
-  '';
-
-in {
-  options.vuizvui.user.aszlig.programs.taalo-build = {
-    enable = lib.mkEnableOption "aszlig's build helpers for remote builds";
-  };
-  config = lib.mkIf config.vuizvui.user.aszlig.programs.taalo-build.enable {
-    environment.systemPackages = [ taalo-realize taalo-build ];
-  };
-}
diff --git a/pkgs/default.nix b/pkgs/default.nix
index e2e09840..b7255aff 100644
--- a/pkgs/default.nix
+++ b/pkgs/default.nix
@@ -20,6 +20,8 @@ let
       config = pkgs.config.vuizvui.games or null;
     };
 
+    taalo-build = callPackage ./taalo-build { };
+
     aszlig = callPackageScope ./aszlig;
     openlab = callPackageScope ./openlab;
     profpatsch = callPackageScope ./profpatsch;
diff --git a/pkgs/taalo-build/default.nix b/pkgs/taalo-build/default.nix
new file mode 100644
index 00000000..d9ff8976
--- /dev/null
+++ b/pkgs/taalo-build/default.nix
@@ -0,0 +1,19 @@
+{ stdenv, lib, runCommand, nixUnstable }:
+
+let
+  nixRemote = "ssh-ng://nix-remote-build@taalo.headcounter.org?compress=true";
+
+  mkScript = cmd: lib.escapeShellArg ''
+    #!${stdenv.shell}
+    export NIX_REMOTE=${lib.escapeShellArg nixRemote}
+    exec ${lib.escapeShellArg nixUnstable}/bin/${cmd} "$@"
+  '';
+
+in runCommand "taalo-build" {} ''
+  mkdir -p "$out/bin"
+
+  echo -n ${mkScript "nix-build"} > "$out/bin/taalo-build"
+  echo -n ${mkScript "nix-store -r"} > "$out/bin/taalo-realize"
+
+  chmod +x "$out"/bin/taalo-{build,realize}
+''