X-Git-Url: http://git.annexia.org/?p=libguestfs.git;a=blobdiff_plain;f=inspector%2Fvirt-inspector.pl;h=66b1553e5d583d3b2442b6ef6f92c9bb081259b4;hp=b5d62ae8d669fe8259197455f69637bf39a97f4f;hb=128f822e16bb96677c75b88125e18f48d7ccedaf;hpb=228b19aa9c28b03b339e8e23fcb46359e3ab617e diff --git a/inspector/virt-inspector.pl b/inspector/virt-inspector.pl index b5d62ae..66b1553 100755 --- a/inspector/virt-inspector.pl +++ b/inspector/virt-inspector.pl @@ -672,6 +672,7 @@ sub assign_mount_points } else { $fs->{used} = 1 } + $fs->{spec} = $spec; } } } @@ -733,9 +734,6 @@ sub find_filesystem # we don't need to know. if ($output !~ /.*fish$/) { - # Temporary directory for use by check_for_initrd. - my $dir = tempdir (CLEANUP => 1); - my $root_dev; foreach $root_dev (sort keys %oses) { my $mounts = $oses{$root_dev}->{mounts}; @@ -750,7 +748,7 @@ if ($output !~ /.*fish$/) { check_for_kernels ($root_dev); if ($oses{$root_dev}->{os} eq "linux") { check_for_modprobe_aliases ($root_dev); - check_for_initrd ($root_dev, $dir); + check_for_initrd ($root_dev); } $g->umount_all (); @@ -884,13 +882,22 @@ sub check_for_modprobe_aliases @results = $g->aug_match($pattern); for my $path ( @results ) { + $path =~ m{^/files(.*)/alias(?:\[\d*\])?$} + or die("$path doesn't match augeas pattern"); + my $file = $1; + my $alias; $alias = $g->aug_get($path); my $modulename; $modulename = $g->aug_get($path.'/modulename'); - $modprobe_aliases{$alias} = $modulename; + my %aliasinfo; + $aliasinfo{modulename} = $modulename; + $aliasinfo{augeas} = $path; + $aliasinfo{file} = $file; + + $modprobe_aliases{$alias} = \%aliasinfo; } } @@ -904,42 +911,22 @@ sub check_for_initrd { local $_; my $root_dev = shift; - my $dir = shift; my %initrd_modules; foreach my $initrd ($g->ls ("/boot")) { if ($initrd =~ m/^initrd-(.*)\.img$/ && $g->is_file ("/boot/$initrd")) { my $version = $1; - my @modules = (); - # We have to download these to a temporary file. - $g->download ("/boot/$initrd", "$dir/initrd"); - - my $cmd = "zcat $dir/initrd | file -"; - open P, "$cmd |" or die "$cmd: $!"; - my $lines; - { local $/ = undef; $lines =

; } - close P; - if ($lines =~ /ext\d filesystem data/) { - # Before initramfs came along, these were compressed - # ext2 filesystems. We could run another libguestfs - # instance to unpack these, but punt on them for now. (XXX) - warn "initrd image is unsupported ext2/3/4 filesystem\n"; - } - elsif ($lines =~ /cpio/) { - my $cmd = "zcat $dir/initrd | cpio --quiet -it"; - open P, "$cmd |" or die "$cmd: $!"; - while (

) { - push @modules, $1 - if m,([^/]+)\.ko$, || m,([^/]+)\.o$,; - } - close P; - unlink "$dir/initrd"; - $initrd_modules{$version} = \@modules; - } - else { - # What? - warn "unrecognized initrd image: $lines\n"; + my @modules; + + eval { + @modules = $g->initrd_list ("/boot/$initrd"); + }; + unless ($@) { + @modules = grep { m,([^/]+)\.ko$, || m,([^/]+)\.o$, } @modules; + $initrd_modules{$version} = \@modules + } else { + warn "/boot/$initrd: could not read initrd format" } } } @@ -1040,7 +1027,7 @@ sub output_text_os if (@keys) { print " Modprobe aliases:\n"; foreach (@keys) { - printf " %-30s %s\n", $_, $aliases{$_} + printf " %-30s %s\n", $_, $aliases{$_}->{modulename} } } } @@ -1122,7 +1109,8 @@ sub output_xml_os foreach my $field ( [ "label" => "label" ], [ "uuid" => "uuid" ], [ "type" => "fstype" ], - [ "content" => "content" ] ) { + [ "content" => "content" ], + [ "spec" => "spec" ] ) { $xml->dataElement($field->[0], $filesystems->{$_}{$field->[1]}) if exists $filesystems->{$_}{$field->[1]}; } @@ -1137,7 +1125,15 @@ sub output_xml_os if (@keys) { $xml->startTag("modprobealiases"); foreach (@keys) { - $xml->dataElement("alias", $aliases{$_}, "device" => $_); + $xml->startTag("alias", "device" => $_); + + foreach my $field ( [ "modulename" => "modulename" ], + [ "augeas" => "augeas" ], + [ "file" => "file" ] ) { + $xml->dataElement($field->[0], $aliases{$_}->{$field->[1]}); + } + + $xml->endTag("alias"); } $xml->endTag("modprobealiases"); }