Remove obsolete SSH master connection code

This commit is contained in:
Eelco Dolstra 2014-07-24 16:19:17 +02:00
parent 03103c0a36
commit 7b351da680
2 changed files with 2 additions and 55 deletions

View file

@ -6,63 +6,12 @@ use IPC::Open2;
our @ISA = qw(Exporter); our @ISA = qw(Exporter);
our @EXPORT = qw( our @EXPORT = qw(
sshOpts openSSHConnection closeSSHConnection
readN readInt readString readStrings readN readInt readString readStrings
writeInt writeString writeStrings writeInt writeString writeStrings
connectToRemoteNix connectToRemoteNix
); );
our @sshOpts = split ' ', ($ENV{"NIX_SSHOPTS"} or "");
push @sshOpts, "-x";
my $sshStarted = 0;
my $sshHost;
# Open a master SSH connection to `host', unless there already is a
# running master connection (as determined by `-O check').
sub openSSHConnection {
my ($host) = @_;
die if $sshStarted;
$sshHost = $host;
return 1 if system("ssh $sshHost @sshOpts -O check 2> /dev/null") == 0;
my $tmpDir = tempdir("nix-ssh.XXXXXX", CLEANUP => 1, TMPDIR => 1)
or die "cannot create a temporary directory";
push @sshOpts, "-S", "$tmpDir/control";
# Start the master. We can't use the `-f' flag (fork into
# background after establishing the connection) because then the
# child continues to run if we are killed. So instead make SSH
# print "started" when it has established the connection, and wait
# until we see that.
open SSHPIPE, "ssh $sshHost @sshOpts -M -N -o LocalCommand='echo started' -o PermitLocalCommand=yes |" or die;
while (<SSHPIPE>) {
chomp;
if ($_ eq "started") {
$sshStarted = 1;
return 1;
}
}
return 0;
}
# Tell the master SSH client to exit.
sub closeSSHConnection {
if ($sshStarted) {
system("ssh $sshHost @sshOpts -O exit 2> /dev/null") == 0
or warn "unable to stop SSH master: $?";
$sshStarted = 0;
}
}
sub readN { sub readN {
my ($bytes, $from) = @_; my ($bytes, $from) = @_;
my $res = ""; my $res = "";
@ -133,7 +82,7 @@ sub connectToRemoteNix {
# Start nix-store --serve on the remote host. # Start nix-store --serve on the remote host.
my ($from, $to); my ($from, $to);
# FIXME: don't start a shell, start ssh directly. # FIXME: don't start a shell, start ssh directly.
my $pid = open2($from, $to, "exec ssh $sshHost @{$sshOpts} nix-store --serve --write $extraFlags"); my $pid = open2($from, $to, "exec ssh -x -a $sshHost @{$sshOpts} nix-store --serve --write $extraFlags");
# Do the handshake. # Do the handshake.
my $SERVE_MAGIC_1 = 0x390c9deb; # FIXME my $SERVE_MAGIC_1 = 0x390c9deb; # FIXME
@ -147,6 +96,4 @@ sub connectToRemoteNix {
} }
END { my $saved = $?; closeSSHConnection; $? = $saved; }
1; 1;

View file

@ -194,7 +194,7 @@ REQ: while (1) {
# Connect to the selected machine. # Connect to the selected machine.
@sshOpts = ("-i", $machine->{sshKeys}, "-x"); my @sshOpts = ("-i", $machine->{sshKeys});
$hostName = $machine->{hostName}; $hostName = $machine->{hostName};
eval { eval {
($from, $to) = connectToRemoteNix($hostName, \@sshOpts, "2>&4"); ($from, $to) = connectToRemoteNix($hostName, \@sshOpts, "2>&4");