Disable test for RHBZ#576879 comment 5.
[libguestfs.git] / inspector / virt-inspector
index f62d21f..36fbfa9 100755 (executable)
@@ -107,6 +107,23 @@ then libvirt is not used at all.
 
 =cut
 
+my $format;
+
+=item B<--format> raw
+
+Specify the format of disk images given on the command line.  If this
+is omitted then the format is autodetected from the content of the
+disk image.
+
+If disk images are requested from libvirt, then this program asks
+libvirt for this information.  In this case, the value of the format
+parameter is ignored.
+
+If working with untrusted raw-format guest disk images, you should
+ensure the format is always specified.
+
+=cut
+
 my $output = "text";
 
 =back
@@ -178,6 +195,7 @@ parse information out of the Registry for any Windows guest.
 GetOptions ("help|?" => \$help,
             "version" => \$version,
             "connect|c=s" => \$uri,
+            "format=s" => \$format,
             "text" => sub { $output = "text" },
             "none" => sub { $output = "none" },
             "xml" => sub { $output = "xml" },
@@ -200,17 +218,25 @@ if ($version) {
 pod2usage (__"virt-inspector: no image or VM names given") if @ARGV == 0;
 
 my $rw = 0;
+
+# XXX This is a bug: Originally we intended to open the guest with
+# rw=>1 in order to tell Sys::Guestfs::Lib that we should disallow
+# active domains.  However this also has the effect of opening the
+# disk image in write mode, and in any case we don't use this option
+# in guestfish any more since we moved all the inspection code into
+# the core library.  We should drop the fish output modes completely.
 $rw = 1 if $output eq "fish";
+
 my $g;
 my @images;
 if ($uri) {
     my ($conn, $dom);
     ($g, $conn, $dom, @images) =
-        open_guest (\@ARGV, rw => $rw, address => $uri);
+        open_guest (\@ARGV, rw => $rw, address => $uri, format => $format);
 } else {
     my ($conn, $dom);
     ($g, $conn, $dom, @images) =
-        open_guest (\@ARGV, rw => $rw);
+        open_guest (\@ARGV, rw => $rw, format => $format);
 }
 
 $g->launch ();
@@ -300,7 +326,12 @@ if ($output eq "fish" || $output eq "ro-fish") {
     }
 
     foreach (@images) {
-        printf "-a %s ", shell_quote ($_);
+        unless (defined $_->[1]) {
+            printf "-a %s ", shell_quote ($_->[0]);
+        } else {
+            printf "--format %s -a %s ",
+              shell_quote ($_->[1]), shell_quote ($_->[0]);
+        }
     }
 
     my $mounts = $oses->{$root_dev}->{mounts};
@@ -321,7 +352,7 @@ elsif ($output eq "perl") {
 
 # YAML output
 elsif ($output eq "yaml") {
-    die __"virt-inspector: no YAML support\n"
+    die __"virt-inspector: no YAML support, try installing perl-YAML or libyaml-perl\n"
         unless exists $INC{"YAML/Any.pm"};
 
     print Dump(%$oses);
@@ -843,6 +874,13 @@ sub output_query_kernel_arch
 
 =back
 
+=head1 SHELL QUOTING
+
+Libvirt guest names can contain arbitrary characters, some of which
+have meaning to the shell such as C<#> and space.  You may need to
+quote or escape these characters on the command line.  See the shell
+manual page L<sh(1)> for details.
+
 =head1 SEE ALSO
 
 L<guestfs(3)>,