[Libguestfs] [PATCH 2/2] Don't die during inspection if rpm -qa or dpkg-query fails

Richard W.M. Jones rjones at redhat.com
Wed Apr 21 15:50:46 UTC 2010


On Wed, Apr 21, 2010 at 03:39:49PM +0100, Matthew Booth wrote:
> If a problem in the package database prevented package enumeration from working,
> inspection would die. This change makes it emit a warning and continue.
> ---
>  perl/lib/Sys/Guestfs/Lib.pm |   28 ++++++++++++++++++++--------
>  1 files changed, 20 insertions(+), 8 deletions(-)
> 
> diff --git a/perl/lib/Sys/Guestfs/Lib.pm b/perl/lib/Sys/Guestfs/Lib.pm
> index b5b3906..b6c4a31 100644
> --- a/perl/lib/Sys/Guestfs/Lib.pm
> +++ b/perl/lib/Sys/Guestfs/Lib.pm
> @@ -1463,10 +1463,16 @@ sub _check_for_applications
>      if ($osn eq "linux") {
>          my $package_format = $os->{package_format};
>          if (defined $package_format && $package_format eq "rpm") {
> -            my @lines = $g->command_lines
> -                (["rpm",
> -                  "-q", "-a",
> -                  "--qf", "%{name} %{epoch} %{version} %{release} %{arch}\n"]);
> +            my @lines = ();
> +            eval {
> +                @lines = $g->command_lines
> +                    (["rpm",
> +                      "-q", "-a", "--qf",
> +                      "%{name} %{epoch} %{version} %{release} %{arch}\n"]);
> +            };
> +
> +            warn(__x("Error running rpm -qa: {error}", error => $@)) if ($@);
> +
>              @lines = sort @lines;
>              foreach (@lines) {
>                  if (m/^(.*) (.*) (.*) (.*) (.*)$/) {
> @@ -1483,10 +1489,16 @@ sub _check_for_applications
>                  }
>              }
>          } elsif (defined $package_format && $package_format eq "deb") {
> -            my @lines = $g->command_lines
> -                (["dpkg-query",
> -                  "-f", '${Package} ${Version} ${Architecture} ${Status}\n',
> -                  "-W"]);
> +            my @lines = ();
> +            eval {
> +                @lines = $g->command_lines
> +                    (["dpkg-query",
> +                      "-f", '${Package} ${Version} ${Architecture} ${Status}\n',
> +                      "-W"]);
> +            };
> +
> +            warn(__x("Error running dpkg-query: {error}", error => $@)) if ($@);
> +
>              @lines = sort @lines;
>              foreach (@lines) {
>                  if (m/^(.*) (.*) (.*) (.*) (.*) (.*)$/) {
> -- 
> 1.6.6.1

ACK.  I'll push both of these shortly, and I'm guessing that both are
candidates for the stable branch too?

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
virt-df lists disk usage of guests without needing to install any
software inside the virtual machine.  Supports Linux and Windows.
http://et.redhat.com/~rjones/virt-df/




More information about the Libguestfs mailing list