X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=inspector%2Fvirt-inspector.pl;h=76c9096764b3c28138a7dbfd5bb03772aa97d22b;hb=135d55fe24bce65f8eb8ca50193eda8287fe7c9a;hp=b2983b3d35664d74a8ef3d26c39ef3d6c3340f4f;hpb=e4733575efff31742444b180cdcfbc2504b144c8;p=libguestfs.git diff --git a/inspector/virt-inspector.pl b/inspector/virt-inspector.pl index b2983b3..76c9096 100755 --- a/inspector/virt-inspector.pl +++ b/inspector/virt-inspector.pl @@ -434,8 +434,7 @@ sub check_windows_root local $_; my $r = shift; - # XXX Windows version. - # List of applications. + # Windows version? } sub check_grub @@ -443,7 +442,7 @@ sub check_grub local $_; my $r = shift; - # XXX Kernel versions, grub version. + # Grub version, if we care. } #print Dumper (\%fses); @@ -575,7 +574,40 @@ sub check_for_applications local $_; my $root_dev = shift; - # XXX rpm -qa, look in Program Files, or whatever + my @apps; + + my $os = $oses{$root_dev}->{os}; + if ($os eq "linux") { + my $distro = $oses{$root_dev}->{distro}; + if ($distro eq "redhat") { + my @lines = $g->command_lines + (["rpm", "-q", "-a", "--qf", + "%{name} %{epoch} %{version} %{release} %{arch}\n"]); + foreach (@lines) { + if (m/^(.*) (.*) (.*) (.*) (.*)$/) { + my $epoch = $2; + $epoch = "" if $epoch eq "(none)"; + my $app = { + name => $1, + epoch => $epoch, + version => $3, + release => $4, + arch => $5 + }; + push @apps, $app + } + } + } + } elsif ($os eq "windows") { + # XXX + # I worked out a general plan for this, but haven't + # implemented it yet. We can iterate over /Program Files + # looking for *.EXE files, which we download, then use + # i686-pc-mingw32-windres on, to find the VERSIONINFO + # section, which has a lot of useful information. + } + + $oses{$root_dev}->{apps} = \@apps; } sub check_for_kernels @@ -583,7 +615,35 @@ sub check_for_kernels local $_; my $root_dev = shift; - # XXX + my @kernels; + + my $os = $oses{$root_dev}->{os}; + if ($os eq "linux") { + # Installed kernels will have a corresponding /lib/modules/ + # directory, which is the easiest way to find out what kernels + # are installed, and what modules are available. + foreach ($g->ls ("/lib/modules")) { + if ($g->is_dir ("/lib/modules/$_")) { + my %kernel; + $kernel{version} = $_; + + + # XXX List modules. + + + + + + + push @kernels, \%kernel; + } + } + + } elsif ($os eq "windows") { + # XXX + } + + $oses{$root_dev}->{kernels} = \@kernels; } #---------------------------------------------------------------------- @@ -661,8 +721,20 @@ sub output_text_os if exists $filesystems->{$_}{content}; } - # XXX Applications. - # XXX Kernel. + print " Applications:\n"; + my @apps = @{$os->{apps}}; + foreach (@apps) { + print " $_->{name} $_->{version}\n" + } + + print " Kernels:\n"; + my @kernels = @{$os->{kernels}}; + foreach (@kernels) { + print " $_->{version}\n" + + + + } } sub output_xml @@ -707,8 +779,30 @@ sub output_xml_os } print "\n"; - # XXX Applications. - # XXX Kernel. + print "\n"; + my @apps = @{$os->{apps}}; + foreach (@apps) { + print "\n"; + print "$_->{name}$_->{version}\n"; + print "\n"; + } + print "\n"; + + print "\n"; + my @kernels = @{$os->{kernels}}; + foreach (@kernels) { + print "\n"; + print "$_->{version}\n"; + + + + + + + print "\n"; + } + print "\n"; + print "\n"; }