From aab53e145bda4b6d52eed57b596e2553e8cdab1e Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Wed, 12 Oct 2011 19:15:30 +0200 Subject: [PATCH] better handling of ssh tunnels and listen on all IPs --- bak-git-server.pl | 29 +++++++++++++++++++++++++---- klin.sh | 2 +- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/bak-git-server.pl b/bak-git-server.pl index 67febd2..dd717a5 100755 --- a/bak-git-server.pl +++ b/bak-git-server.pl @@ -92,6 +92,16 @@ warn "# ssh_client $hostname $server"; return $path; } +sub _kill_ssh { + while ( my($host,$pid) = each %$ssh_tunnel ) { + warn "$host kill TERM $pid"; + kill 15, $pid; # TERM + } +} + +#$SIG{INT}; +$SIG{TERM} = &_kill_ssh; + chdir $dir; system 'git init' unless -e '.git'; @@ -112,21 +122,32 @@ if ( $upgrade || $install ) { warn "# start $ssh tunnels..."; foreach my $host ( keys %$ssh_tunnel ) { warn "## $host\n"; - open( $ssh_tunnel->{$host}, '-|', "$ssh -N root\@$host &" ) or die $!; + my $pid = fork; + if ( ! defined $pid ) { + die "fork: $!"; + } elsif ( $pid ) { +# waitpid $pid, 0; + warn "FIXME: waitpid $pid"; + } else { + warn "EXEC $ssh $host"; + exec "$ssh -N root\@$host"; + } + + $ssh_tunnel->{$host} = $pid; } } +warn "dir: $dir listen: $server_ip:9001\n"; + my $server = IO::Socket::INET->new( Proto => 'tcp', - LocalAddr => $server_ip, +# LocalAddr => $server_ip, LocalPort => 9001, Listen => SOMAXCONN, Reuse => 1 ) || die $!; -warn "dir: $dir listen: $server_ip:9001\n"; - sub rsync { warn "# rsync ",join(' ', @_), "\n"; system 'rsync', @_; diff --git a/klin.sh b/klin.sh index d1a8ff0..1c1be19 100755 --- a/klin.sh +++ b/klin.sh @@ -6,4 +6,4 @@ if [ -z "$1" ] ; then fi -SSH=autossh ./bak-git-server.pl /home/dpavlin/klin/backup/ 10.60.0.92 $* +SSH=autossh ./bak-git-server.pl /home/dpavlin/klin/backup/ '' $* -- 2.20.1