[libvirt] [tck PATCH 3/9] Use Net::OpenSSH instead of Net::SSH::Perl

Daniel P. Berrangé berrange at redhat.com
Thu Feb 8 09:17:30 UTC 2018


On Wed, Feb 07, 2018 at 09:04:53PM -0500, Laine Stump wrote:
> Net::SSH::Perl is out of date in the Fedora git repos. The version
> currently supported in Fedora fails to connect to most modern sshd's,
> and updating to the new version would require adding several new perl
> packages to Fedora. Instead, this patch switches to using
> Net::OpenSSH, whose current version in Fedora works properly *EXCEPT*
> that it is missing the line "Requires: perl(IO:TTy)" in its specfiles
> (I filed https://bugzilla.redhat.com/1542666 requesting that fix to be
> applied to Fedora git repos. For now, just run "dnf install
> perl-IO-Tty" separately)
> 
> NB: prior to this patch, Net::SSH::Perl was required, but had no
> Required: line in the specfile, so you would have to install it by
> hand. If you had done that, you can probably now dnf erase it.

Fedora RPM has magic dependancy generators - it should have added a
Requires: perl(Net::SSH::Perl) line automatically at build time

> diff --git a/perl-Sys-Virt-TCK.spec.PL b/perl-Sys-Virt-TCK.spec.PL
> index 9a10880..4172499 100644
> --- a/perl-Sys-Virt-TCK.spec.PL
> +++ b/perl-Sys-Virt-TCK.spec.PL
> @@ -37,7 +37,7 @@ __DATA__
>  Summary: Sys::Virt::TCK - libvirt Technology Compatibility Kit
>  Name: perl-%{appname}
>  Version: @VERSION@
> -Release: 1%{_extra_release}
> +Release: 99%{_extra_release}

Opps can revert that bit :-)

>  License: GPLv2
>  Group: Development/Tools
>  Source: http://libvirt.org/sources/tck/%{appname}-v%{version}.tar.gz
> @@ -73,6 +73,7 @@ Requires: perl(Test::Exception)
>  Requires: perl(TAP::Formatter::HTML)
>  Requires: perl(TAP::Formatter::JUnit)
>  Requires: perl(TAP::Harness::Archive)
> +Requires: perl(Net::OpenSSH)
>  Requires: /usr/bin/mkisofs
>  BuildArchitectures: noarch
>  
> diff --git a/scripts/nwfilter/100-ping-still-working.t b/scripts/nwfilter/100-ping-still-working.t
> index dc1efd2..5afc6a6 100644
> --- a/scripts/nwfilter/100-ping-still-working.t
> +++ b/scripts/nwfilter/100-ping-still-working.t
> @@ -32,7 +32,6 @@ use Test::More tests => 4;
>  use Sys::Virt::TCK;
>  use Sys::Virt::TCK::NetworkHelpers;
>  use Test::Exception;
> -use Net::SSH::Perl;
>  
>  use File::Spec::Functions qw(catfile catdir rootdir);
>  
> diff --git a/scripts/nwfilter/210-no-mac-spoofing.t b/scripts/nwfilter/210-no-mac-spoofing.t
> index 03001a8..eb01d13 100644
> --- a/scripts/nwfilter/210-no-mac-spoofing.t
> +++ b/scripts/nwfilter/210-no-mac-spoofing.t
> @@ -31,7 +31,7 @@ use Test::More tests => 5;
>  use Sys::Virt::TCK;
>  use Sys::Virt::TCK::NetworkHelpers;
>  use Test::Exception;
> -use Net::SSH::Perl;
> +use Net::OpenSSH;
>  
>  use File::Spec::Functions qw(catfile catdir rootdir);
>  
> @@ -88,9 +88,10 @@ diag $ping;
>  ok($ping =~ "10 received", "ping $guestip test");
>  
>  # log into guest
> -my $ssh = Net::SSH::Perl->new($guestip);
>  diag "ssh'ing into $guestip";
> -$ssh->login("root", $tck->root_password());
> +my $ssh = Net::OpenSSH->new($guestip,
> +                            user => "root",
> +                            password => $tck->root_password());
>  
>  # now bring eth0 down, change MAC and bring it up again
>  diag "fiddling with mac";
> @@ -108,26 +109,26 @@ echo "DEV=`ip link | head -3 | tail -1 | awk '{print \\\$2}' | sed -e 's/://'`
>  /sbin/ip addr show dev \\\$DEV" > /test.sh
>  EOF
>  diag $cmdfile;
> -my ($stdout, $stderr, $exit)  = $ssh->cmd($cmdfile);
> +my ($stdout, $stderr)  = $ssh->capture2($cmdfile);
>  diag $stdout;
>  diag $stderr;
> -diag $exit;
> -($stdout, $stderr, $exit)  = $ssh->cmd("chmod +x /test.sh");
> +diag "Exit Code: $?";
> +($stdout, $stderr)  = $ssh->capture2("chmod +x /test.sh");
>  diag $stdout;
>  diag $stderr;
> -diag $exit;
> -($stdout, $stderr, $exit)  = $ssh->cmd("/test.sh > /test.log");
> +diag "Exit Code: $?";
> +($stdout, $stderr)  = $ssh->capture2("/test.sh > /test.log");
>  diag $stdout;
>  diag $stderr;
> -diag $exit;
> -($stdout, $stderr, $exit)  = $ssh->cmd("cat /test.sh");
> +diag "Exit Code: $?";
> +($stdout, $stderr)  = $ssh->capture2("cat /test.sh");
>  diag $stdout;
>  diag $stderr;
> -diag $exit;
> -($stdout, $stderr, $exit)  = $ssh->cmd("cat /test.log");
> +diag "Exit Code: $?";
> +($stdout, $stderr)  = $ssh->capture2("cat /test.log");
>  diag $stdout;
>  diag $stderr;
> -diag $exit;
> +diag "Exit Code: $?";
>  ok($stdout =~ /100% packet loss|Network is unreachable/, "packet loss expected");
>  
>  shutdown_vm_gracefully($dom);
> diff --git a/scripts/nwfilter/220-no-ip-spoofing.t b/scripts/nwfilter/220-no-ip-spoofing.t
> index d447a19..872dcc3 100644
> --- a/scripts/nwfilter/220-no-ip-spoofing.t
> +++ b/scripts/nwfilter/220-no-ip-spoofing.t
> @@ -31,7 +31,7 @@ use Test::More tests => 4;
>  use Sys::Virt::TCK;
>  use Sys::Virt::TCK::NetworkHelpers;
>  use Test::Exception;
> -use Net::SSH::Perl;
> +use Net::OpenSSH;
>  
>  use File::Spec::Functions qw(catfile catdir rootdir);
>  
> @@ -71,9 +71,10 @@ diag $ebtable;
>  ok($ebtable =~ "$guestip", "check ebtables entry");
>  
>  # log into guest
> -my $ssh = Net::SSH::Perl->new($guestip);
>  diag "ssh'ing into $guestip";
> -$ssh->login("root", $tck->root_password());
> +my $ssh = Net::OpenSSH->new($guestip,
> +                            user => "root",
> +                            password => $tck->root_password());
>  
>  # now bring eth0 down, change IP and bring it up again
>  diag "preparing ip spoof";
> @@ -95,23 +96,23 @@ MASK=`ip addr show \\\$DEV | grep 'inet ' | awk '{print \\\$2}' | sed -e 's/.*\\
>  /sbin/ip addr show \\\$DEV" > /test.sh
>  EOF
>  diag $cmdfile;
> -my ($stdout, $stderr, $exit)  = $ssh->cmd($cmdfile);
> +my ($stdout, $stderr) = $ssh->capture2($cmdfile);
>  diag $stdout;
>  diag $stderr;
> -diag $exit;
> -($stdout, $stderr, $exit)  = $ssh->cmd("chmod +x /test.sh");
> +diag "Exit Code: $?";
> +($stdout, $stderr) = $ssh->capture2("chmod +x /test.sh");
>  diag $stdout;
>  diag $stderr;
> -diag $exit;
> -($stdout, $stderr, $exit)  = $ssh->cmd("cat /test.sh");
> +diag "Exit Code: $?";
> +($stdout, $stderr) = $ssh->capture2("cat /test.sh");
>  diag $stdout;
>  diag $stderr;
> -diag $exit;
> +diag "Exit Code: $?";
>  diag "running ip spoof";
> -($stdout, $stderr, $exit)  = $ssh->cmd("/test.sh");
> +($stdout, $stderr) = $ssh->capture2("/test.sh");
>  diag $stdout;
>  diag $stderr;
> -diag $exit;
> +diag "Exit Code: $?";
>  diag "checking result";
>  ok($stdout =~ "100% packet loss", "packet loss expected");
>  
> diff --git a/scripts/nwfilter/230-no-mac-broadcast.t b/scripts/nwfilter/230-no-mac-broadcast.t
> index 9d00dc4..70c1ab4 100644
> --- a/scripts/nwfilter/230-no-mac-broadcast.t
> +++ b/scripts/nwfilter/230-no-mac-broadcast.t
> @@ -31,7 +31,7 @@ use Test::More tests => 4;
>  use Sys::Virt::TCK;
>  use Sys::Virt::TCK::NetworkHelpers;
>  use Test::Exception;
> -use Net::SSH::Perl;
> +use Net::OpenSSH;
>  use File::Spec::Functions qw(catfile catdir rootdir);
>  
>  my $tck = Sys::Virt::TCK->new();
> @@ -85,9 +85,10 @@ diag "prepare tcpdump";
>  system("/usr/sbin/tcpdump -v -i virbr0 -n host 255.255.255.255 2> /tmp/tcpdump.log &");
>  
>  # log into guest
> -my $ssh = Net::SSH::Perl->new($guestip);
>  diag "ssh'ing into $guestip";
> -$ssh->login("root", $tck->root_password());
> +my $ssh = Net::OpenSSH->new($guestip,
> +                            user => "root",
> +                            password => $tck->root_password());
>  
>  # now generate a mac broadcast paket 
>  diag "generate mac broadcast";
> @@ -95,22 +96,22 @@ my $cmdfile = <<EOF;
>  echo '/bin/ping -c 1 192.168.122.255 -b' > /test.sh
>  EOF
>  diag $cmdfile;
> -my ($stdout, $stderr, $exit)  = $ssh->cmd($cmdfile);
> +my ($stdout, $stderr) = $ssh->capture2($cmdfile);
>  diag $stdout;
>  diag $stderr;
> -diag $exit;
> -($stdout, $stderr, $exit)  = $ssh->cmd("chmod +x /test.sh");
> +diag "Exit Code: $?";
> +($stdout, $stderr) = $ssh->capture2("chmod +x /test.sh");
>  diag $stdout;
>  diag $stderr;
> -diag $exit;
> -($stdout, $stderr, $exit)  = $ssh->cmd("/test.sh > /test.log");
> +diag "Exit Code: $?";
> +($stdout, $stderr) = $ssh->capture2("/test.sh > /test.log");
>  diag $stdout;
>  diag $stderr;
> -diag $exit;
> -($stdout, $stderr, $exit)  = $ssh->cmd("cat /test.log");
> +diag "Exit Code: $?";
> +($stdout, $stderr) = $ssh->capture2("cat /test.log");
>  diag $stdout;
>  diag $stderr;
> -diag $exit;
> +diag "Exit Code: $?";
>  
>  # now stop tcpdump and verify result
>  diag "stopping tcpdump";
> diff --git a/scripts/nwfilter/240-no-arp-spoofing.t b/scripts/nwfilter/240-no-arp-spoofing.t
> index f1e6870..141fb92 100644
> --- a/scripts/nwfilter/240-no-arp-spoofing.t
> +++ b/scripts/nwfilter/240-no-arp-spoofing.t
> @@ -31,7 +31,7 @@ use Test::More tests => 4;
>  use Sys::Virt::TCK;
>  use Sys::Virt::TCK::NetworkHelpers;
>  use Test::Exception;
> -use Net::SSH::Perl;
> +use Net::OpenSSH;
>  use File::Spec::Functions qw(catfile catdir rootdir);
>  
>  my $spoofid = "192.168.122.183";
> @@ -85,9 +85,10 @@ diag "prepare tcpdump";
>  system("/usr/sbin/tcpdump -v -i virbr0 not ip  > /tmp/tcpdump.log &");
>  
>  # log into guest
> -my $ssh = Net::SSH::Perl->new($guestip);
>  diag "ssh'ing into $guestip";
> -$ssh->login("root", $tck->root_password());
> +my $ssh = Net::OpenSSH->new($guestip,
> +                            user => "root",
> +                            password => $tck->root_password());
>  
>  # now generate a arp spoofing packets 
>  diag "generate arpspoof";
> @@ -100,23 +101,23 @@ EOF
>  diag "content of cmdfile:";
>  diag $cmdfile;
>  diag "creating cmdfile";
> -my ($stdout, $stderr, $exit)  = $ssh->cmd($cmdfile);
> +my ($stdout, $stderr) = $ssh->capture2($cmdfile);
>  diag $stdout;
>  diag $stderr;
> -diag $exit;
> -($stdout, $stderr, $exit)  = $ssh->cmd("chmod +x /test.sh");
> +diag "Exit Code: $?";
> +($stdout, $stderr) = $ssh->capture2("chmod +x /test.sh");
>  diag $stdout;
>  diag $stderr;
> -diag $exit;
> +diag "Exit Code: $?";
>  diag "excuting cmdfile";
> -($stdout, $stderr, $exit)  = $ssh->cmd("/test.sh > /test.log");
> +($stdout, $stderr) = $ssh->capture2("/test.sh > /test.log");
>  diag $stdout;
>  diag $stderr;
> -diag $exit;
> -($stdout, $stderr, $exit)  = $ssh->cmd("echo test.log\ncat /test.log");
> +diag "Exit Code: $?";
> +($stdout, $stderr) = $ssh->capture2("echo test.log\ncat /test.log");
>  diag $stdout;
>  diag $stderr;
> -diag $exit;
> +diag "Exit Code: $?";
>  
>  # now stop tcpdump and verify result
>  diag "stopping tcpdump";
> diff --git a/scripts/nwfilter/300-vsitype.t b/scripts/nwfilter/300-vsitype.t
> index 430618f..d169339 100644
> --- a/scripts/nwfilter/300-vsitype.t
> +++ b/scripts/nwfilter/300-vsitype.t
> @@ -31,7 +31,6 @@ use Test::More;
>  use Sys::Virt::TCK;
>  use Sys::Virt::TCK::NetworkHelpers;
>  use Test::Exception;
> -use Net::SSH::Perl;
>  use File::Spec::Functions qw(catfile catdir rootdir);
>  
>  my $tck = Sys::Virt::TCK->new();
> -- 

Reviewed-by: Daniel P. Berrange <berrange at redhat.com>


Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|




More information about the libvir-list mailing list