summaryrefslogtreecommitdiffstats
path: root/urpm/parallel_ssh.pm
diff options
context:
space:
mode:
Diffstat (limited to 'urpm/parallel_ssh.pm')
-rw-r--r--urpm/parallel_ssh.pm23
1 files changed, 13 insertions, 10 deletions
diff --git a/urpm/parallel_ssh.pm b/urpm/parallel_ssh.pm
index b698bbe1..c9dd283f 100644
--- a/urpm/parallel_ssh.pm
+++ b/urpm/parallel_ssh.pm
@@ -2,7 +2,10 @@ package urpm::parallel_ssh;
use Time::HiRes qw(gettimeofday);
-sub _nolock($) { $_[0] eq 'localhost' ? '--nolock ' : '' }
+sub _localhost { $_[0] eq 'localhost' }
+sub _nolock { &_localhost ? '--nolock ' : '' }
+sub _ssh { &_localhost ? '' : "ssh $_[0] " }
+sub _host { &_localhost ? '' : "$_[0]:" }
#- parallel copy
sub parallel_register_rpms {
@@ -10,7 +13,7 @@ sub parallel_register_rpms {
foreach (keys %{$parallel->{nodes}}) {
$urpm->{log}("parallel_ssh: scp @files $_:$urpm->{cachedir}/rpms");
- system 'scp' => @files, "$_:$urpm->{cachedir}/rpms";
+ system 'scp' => @files, _host($_) . "$urpm->{cachedir}/rpms";
$? == 0 or $urpm->{fatal}(1, urpm::N("scp failed on host %s (%d)", $_, $? >> 8));
}
@@ -42,7 +45,7 @@ sub parallel_find_remove {
#- now try an iteration of urpme.
foreach my $node (keys %{$parallel->{nodes}}) {
- my $command = "ssh $node urpme --no-locales --auto $test" . (join ' ', map { "'$_'" } @$l);
+ my $command = _ssh($node) . "urpme --no-locales --auto $test" . (join ' ', map { "'$_'" } @$l);
$urpm->{log}("parallel_ssh: $command");
open my $fh, "$command 2>&1 |"
or $urpm->{fatal}(1, "Can't fork ssh: $!");
@@ -106,9 +109,9 @@ sub parallel_resolve_dependencies {
my ($parallel, $synthesis, $urpm, $state, $requested, %options) = @_;
#- first propagate the synthesis file to all machines
- foreach (keys %{$parallel->{nodes}}) {
- $urpm->{ui_msg}("parallel_ssh: scp -q '$synthesis' '$_:$synthesis'", urpm::N("Propagating synthesis to %s...", $_));
- system "scp", "-q", $synthesis, "$_:$synthesis";
+ foreach (grep { !_localhost($_) } keys %{$parallel->{nodes}}) {
+ $urpm->{ui_msg}("parallel_ssh: scp -q $synthesis $_:$synthesis", urpm::N("Propagating synthesis to %s...", $_));
+ system "scp", "-q", $synthesis, _host($_) . $synthesis;
$? == 0 or $urpm->{fatal}(1, urpm::N("scp failed on host %s (%d)", $_, $? >> 8));
}
$parallel->{synthesis} = $synthesis;
@@ -159,7 +162,7 @@ sub parallel_resolve_dependencies {
delete $state->{selected};
#- now try an iteration of urpmq.
foreach my $node (keys %{$parallel->{nodes}}) {
- my $command = "ssh $node urpmq " . _nolock($node) . "--synthesis $synthesis -fduc $line " . join(' ', keys %chosen);
+ my $command = _ssh($node) . "urpmq " . _nolock($node) . "--synthesis $synthesis -fduc $line " . join(' ', keys %chosen);
$urpm->{ui_msg}("parallel_ssh: $command", urpm::N("Resolving dependencies on %s...", $node));
open my $fh, "$command |"
or $urpm->{fatal}(1, "Can't fork ssh: $!");
@@ -207,14 +210,14 @@ sub parallel_install {
foreach (keys %{$parallel->{nodes}}) {
my @sources = (values %$install, values %$upgrade);
$urpm->{ui_msg}("parallel_ssh: scp @sources $_:$urpm->{cachedir}/rpms", urpm::N("Distributing files to %s...", $_));
- system "scp" => @sources, "$_:$urpm->{cachedir}/rpms";
+ system "scp" => @sources, _host($_) . "$urpm->{cachedir}/rpms";
$? == 0 or $urpm->{fatal}(1, urpm::N("scp failed on host %s (%d)", $_, $? >> 8));
}
my %bad_nodes;
foreach my $node (keys %{$parallel->{nodes}}) {
local $_;
- my $command = "ssh $node urpmi --pre-clean --no-locales --test --no-verify-rpm --auto " . _nolock($node) . "--synthesis $parallel->{synthesis} $parallel->{line}";
+ my $command = _ssh($node) . "urpmi --pre-clean --no-locales --test --no-verify-rpm --auto " . _nolock($node) . "--synthesis $parallel->{synthesis} $parallel->{line}";
$urpm->{ui_msg}("parallel_ssh: $command", urpm::N("Verifying if install is possible on %s...", $node));
open my $fh, "$command |"
or $urpm->{fatal}(1, "Can't fork ssh: $!");
@@ -238,7 +241,7 @@ sub parallel_install {
my $line = $parallel->{line} . ($options{excludepath} ? " --excludepath $options{excludepath}" : "");
#- continue installation on each node
foreach my $node (keys %{$parallel->{nodes}}) {
- my $command = "ssh $node urpmi --no-locales --no-verify-rpm --auto " . _nolock($node) . "--synthesis $parallel->{synthesis} $line";
+ my $command = _ssh($node) . "urpmi --no-locales --no-verify-rpm --auto " . _nolock($node) . "--synthesis $parallel->{synthesis} $line";
$urpm->{ui_msg}("parallel_ssh: $command", urpm::N("Performing install on %s...", $node));
$urpm->{ui}{progress}->(0) if ref $urpm->{ui}{progress};
open my $fh, "$command |"