forked from lix-project/lix
Remove obsolete SSH master connection code
This commit is contained in:
parent
03103c0a36
commit
7b351da680
|
@ -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;
|
||||||
|
|
|
@ -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");
|
||||||
|
|
Loading…
Reference in a new issue