* We don't really need this here.
This commit is contained in:
parent
83ae1723da
commit
b302e5f63b
3 changed files with 0 additions and 165 deletions
|
@ -1,151 +0,0 @@
|
||||||
#! /usr/bin/perl -w
|
|
||||||
|
|
||||||
use strict;
|
|
||||||
|
|
||||||
my $amWilling = shift @ARGV;
|
|
||||||
my $localSystem = shift @ARGV;
|
|
||||||
my $neededSystem = shift @ARGV;
|
|
||||||
my $storeExpr = shift @ARGV;
|
|
||||||
|
|
||||||
sub sendReply {
|
|
||||||
my $reply = shift;
|
|
||||||
open OUT, ">&3" or die;
|
|
||||||
print OUT "$reply\n";
|
|
||||||
close OUT;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Decline if the local system can do the build.
|
|
||||||
if ($amWilling && ($localSystem eq $neededSystem)) {
|
|
||||||
sendReply "decline";
|
|
||||||
exit 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
# Otherwise find a willing remote machine.
|
|
||||||
my %machines;
|
|
||||||
my %systemTypes;
|
|
||||||
my %sshKeys;
|
|
||||||
my %maxJobs;
|
|
||||||
my %curJobs;
|
|
||||||
|
|
||||||
# Read the list of machines.
|
|
||||||
open CONF, "< /home/eelco/nix/distributed/remote-systems.conf" or die;
|
|
||||||
|
|
||||||
while (<CONF>) {
|
|
||||||
chomp;
|
|
||||||
next if /^\s*$/;
|
|
||||||
/^\s*(\S+)\s+(\S+)\s+(\S+)\s+(\d+)\s*$/ or die;
|
|
||||||
$machines{$1} = "";
|
|
||||||
$systemTypes{$1} = $2;
|
|
||||||
$sshKeys{$1} = $3;
|
|
||||||
$maxJobs{$1} = $4;
|
|
||||||
}
|
|
||||||
|
|
||||||
close CONF;
|
|
||||||
|
|
||||||
# Read the current load status.
|
|
||||||
open LOAD, "< /home/eelco/nix/distributed/current-load" or die;
|
|
||||||
while (<LOAD>) {
|
|
||||||
chomp;
|
|
||||||
next if /^\s*$/;
|
|
||||||
/^\s*(\S+)\s+(\d+)\s*$/ or die;
|
|
||||||
$curJobs{$1} = $2;
|
|
||||||
}
|
|
||||||
close LOAD;
|
|
||||||
|
|
||||||
foreach my $cur (keys %machines) {
|
|
||||||
$curJobs{$cur} = 0 unless defined $curJobs{$cur};
|
|
||||||
}
|
|
||||||
|
|
||||||
# Find a suitable system.
|
|
||||||
my $rightType = 0;
|
|
||||||
my $machine;
|
|
||||||
foreach my $cur (keys %machines) {
|
|
||||||
if ($neededSystem eq $systemTypes{$cur}) {
|
|
||||||
$rightType = 1;
|
|
||||||
if ($curJobs{$cur} < $maxJobs{$cur})
|
|
||||||
{
|
|
||||||
$machine = $cur;
|
|
||||||
last;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!defined $machine) {
|
|
||||||
if ($rightType) {
|
|
||||||
sendReply "postpone";
|
|
||||||
exit 0;
|
|
||||||
} else {
|
|
||||||
sendReply "decline";
|
|
||||||
exit 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
sub writeLoad {
|
|
||||||
system "echo A >> /tmp/blaaaa";
|
|
||||||
open LOAD, "> /home/eelco/nix/distributed/current-load" or die;
|
|
||||||
system "echo B >> /tmp/blaaaa";
|
|
||||||
foreach my $cur (keys %machines) {
|
|
||||||
system "echo $cur $curJobs{$cur} >> /tmp/blaaaa";
|
|
||||||
print LOAD "$cur $curJobs{$cur}\n";
|
|
||||||
}
|
|
||||||
system "echo C >> /tmp/blaaaa";
|
|
||||||
close LOAD;
|
|
||||||
}
|
|
||||||
|
|
||||||
$curJobs{$machine} = $curJobs{$machine} + 1;
|
|
||||||
writeLoad;
|
|
||||||
|
|
||||||
sendReply "accept";
|
|
||||||
open IN, "<&4" or die;
|
|
||||||
my $x = <IN>;
|
|
||||||
chomp $x;
|
|
||||||
print "got $x\n";
|
|
||||||
close IN;
|
|
||||||
|
|
||||||
system "echo $x >> /tmp/blaaaa";
|
|
||||||
system "echo $curJobs{$machine} >> /tmp/blaaaa";
|
|
||||||
|
|
||||||
if ($x ne "okay") {
|
|
||||||
$curJobs{$machine} = $curJobs{$machine} - 1;
|
|
||||||
system "echo $curJobs{$machine} >> /tmp/blaaaa";
|
|
||||||
writeLoad;
|
|
||||||
exit 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
print "BUILDING REMOTE: $storeExpr on $machine\n";
|
|
||||||
|
|
||||||
my $ssh = "ssh -i $sshKeys{$machine} -x";
|
|
||||||
|
|
||||||
my $inputs = `cat inputs` or die;
|
|
||||||
$inputs =~ s/\n/ /g;
|
|
||||||
|
|
||||||
my $outputs = `cat outputs` or die;
|
|
||||||
$outputs =~ s/\n/ /g;
|
|
||||||
|
|
||||||
my $successors = `cat successors` or die;
|
|
||||||
$successors =~ s/\n/ /g;
|
|
||||||
|
|
||||||
system "rsync -a -e '$ssh' $storeExpr $inputs $machine:/nix/store";
|
|
||||||
die "cannot rsync inputs to $machine" if ($? != 0);
|
|
||||||
|
|
||||||
system "$ssh $machine /nix/bin/nix-store --validpath $storeExpr $inputs";
|
|
||||||
die "cannot set valid paths on $machine" if ($? != 0);
|
|
||||||
|
|
||||||
system "$ssh $machine /nix/bin/nix-store --successor $successors";
|
|
||||||
die "cannot set successors on $machine" if ($? != 0);
|
|
||||||
|
|
||||||
print "BUILDING...\n";
|
|
||||||
|
|
||||||
system "$ssh $machine /nix/bin/nix-store -qnfvvvv $storeExpr";
|
|
||||||
die "remote build on $machine failed" if ($? != 0);
|
|
||||||
|
|
||||||
print "REMOTE BUILD DONE\n";
|
|
||||||
|
|
||||||
foreach my $output (split '\n', $outputs) {
|
|
||||||
system "rsync -a -e '$ssh' $machine:$output /nix/store";
|
|
||||||
die "cannot rsync outputs from $machine" if ($? != 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
$curJobs{$machine} = $curJobs{$machine} - 1;
|
|
||||||
|
|
||||||
writeLoad;
|
|
|
@ -1,2 +0,0 @@
|
||||||
scratchy.labs.cs.uu.nl i686-linux /home/eelco/.ssh/id_scratchy_auto 1
|
|
||||||
mckroket.labs.cs.uu.nl powerpc-mac /home/eelco/.ssh/id_scratchy_mckroket 1
|
|
|
@ -1,12 +0,0 @@
|
||||||
#! /bin/sh
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
rm -f current-load
|
|
||||||
touch current-load
|
|
||||||
|
|
||||||
storeExpr=$(nix-instantiate ~/nixpkgs/pkgs/system/all.nix)
|
|
||||||
|
|
||||||
export NIX_BUILD_HOOK="build-remote.pl"
|
|
||||||
|
|
||||||
../src/nix-store/nix-store -qnvvvv -j1 $storeExpr
|
|
Loading…
Reference in a new issue