From 53e5da6c11b9fb00b460363e0ff670f5454c00e5 Mon Sep 17 00:00:00 2001 From: aszlig Date: Sun, 29 May 2016 20:09:38 +0200 Subject: programs/taalo-build: Split into realize and build With just taalo-build we can't realize plain .drv files, so let's use the Perl part to just realize the derivations given by the command line and provide two shell script wrappers on top of it: * taalo-build: Similar to nix-build * taalo-realize: Similar to nix-store -r Having a command like taalo-realize is very useful if evaluation is done on a different machine and the closure is just copied over to the local machine before being sent to taalo. Signed-off-by: aszlig --- .../user/aszlig/programs/taalo-build/default.nix | 106 +++++++++++---------- 1 file changed, 58 insertions(+), 48 deletions(-) diff --git a/modules/user/aszlig/programs/taalo-build/default.nix b/modules/user/aszlig/programs/taalo-build/default.nix index 6b50df1d..6e3ee86e 100644 --- a/modules/user/aszlig/programs/taalo-build/default.nix +++ b/modules/user/aszlig/programs/taalo-build/default.nix @@ -1,65 +1,75 @@ { config, pkgs, lib, ... }: -with lib; +let + backend = pkgs.writeScript "taalo-realize-backend" '' + #!${pkgs.perl}/bin/perl -I${pkgs.nix}/lib/perl5/site_perl + use strict; + use Nix::CopyClosure; + use Nix::SSH; + use IPC::Open2; -{ - options.vuizvui.user.aszlig.programs.taalo-build = { - enable = mkEnableOption "aszlig's build helper for remote builds"; - }; - config = mkIf config.vuizvui.user.aszlig.programs.taalo-build.enable { - environment.systemPackages = singleton (pkgs.writeScriptBin "taalo-build" '' - #!${pkgs.perl}/bin/perl -I${pkgs.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); - binmode STDERR, ":encoding(utf8)"; + # Do the handshake. + my $magic; + eval { + my $SERVE_MAGIC_1 = 0x390c9deb; # FIXME + my $clientVersion = 0x200; + syswrite($to, pack("L; - close $instantiate or exit $? >> 8; + die "unable to connect to taalo\n" if $@; + die "did not get valid handshake from taalo\n" if $magic != 0x5452eecb; - chomp $to_realize; + my $serverVersion = readInt($from); + die "unsupported server version\n" + if $serverVersion < 0x200 || $serverVersion >= 0x300; - 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); + Nix::CopyClosure::copyToOpen( + $from, $to, "taalo", \@ARGV, 0, 0, 0, 1 + ); - # Do the handshake. - my $magic; - eval { - my $SERVE_MAGIC_1 = 0x390c9deb; # FIXME - my $clientVersion = 0x200; - syswrite($to, pack("L= 0x300; + close $to; - Nix::CopyClosure::copyToOpen( - $from, $to, "taalo", [$to_realize], 0, 0, 0, 1 - ); + waitpid($pid, 0); + exit $res; + ''; - writeInt(6, $to) or die; - writeStrings([$to_realize], $to); - writeInt(0, $to); - writeInt(0, $to); + 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 - my $res = readInt($from); + exec ${backend} "$@" + ''; - close $to; + taalo-build = pkgs.writeScriptBin "taalo-build" '' + #!${pkgs.stdenv.shell} + drvs="$(nix-instantiate "$@")" || exit 1 + exec ${backend} $drvs + ''; - waitpid($pid, 0); - exit $res; - ''); +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 ]; }; } -- cgit 1.4.1