diff options
Diffstat (limited to 'modules/user')
-rw-r--r-- | modules/user/aszlig/programs/taalo-build/default.nix | 106 |
1 files 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<x4L<x4", $SERVE_MAGIC_1, $clientVersion)) + or die; + $magic = readInt($from); + }; - open my $instantiate, "-|", "nix-instantiate", @ARGV - or die "Failed to run nix-instantiate"; - my $to_realize = join "", <$instantiate>; - 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<x4L<x4", $SERVE_MAGIC_1, $clientVersion)) - or die; - $magic = readInt($from); - }; + writeInt(6, $to) or die; + writeStrings(\@ARGV, $to); + writeInt(0, $to); + writeInt(0, $to); - die "unable to connect to taalo\n" if $@; - die "did not get valid handshake from taalo\n" if $magic != 0x5452eecb; + my $res = readInt($from); - my $serverVersion = readInt($from); - die "unsupported server version\n" - if $serverVersion < 0x200 || $serverVersion >= 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 ]; }; } |