X-Git-Url: http://git.annexia.org/?p=libguestfs.git;a=blobdiff_plain;f=tools%2Fvirt-rescue;h=40245c76b38f9083550028b0c767ce2504c80a9a;hp=1f292f6071968c0e2b4b0ad3e36d0a40a681451e;hb=61da709722ec244da1c3c7d4f1a8706f76687cb3;hpb=f35365ecbf348f1030581e59795435987b8adf0f diff --git a/tools/virt-rescue b/tools/virt-rescue index 1f292f6..40245c7 100755 --- a/tools/virt-rescue +++ b/tools/virt-rescue @@ -19,6 +19,7 @@ use warnings; use strict; +use Errno; use Sys::Guestfs; use Sys::Guestfs::Lib qw(open_guest); use Pod::Usage; @@ -141,6 +142,23 @@ 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 $memsize; =item B<--memsize MB> | B<-m MB> @@ -179,6 +197,7 @@ GetOptions ("help|?" => \$help, "version" => \$version, "append=s" => \$append, "connect|c=s" => \$uri, + "format=s" => \$format, "memsize|m=i" => \$memsize, "ro|r" => \$readonly, "selinux" => \$selinux, @@ -197,6 +216,7 @@ pod2usage (__"virt-rescue: no image or VM names rescue given") my @args = (\@ARGV); push @args, address => $uri if $uri; push @args, rw => 1 unless $readonly; +push @args, format => $format if defined $format; my $g = open_guest (@args); # Setting "direct mode" is required for the rescue appliance. @@ -212,9 +232,13 @@ my $str = "guestfs_rescue=1"; $str .= " $append" if defined $append; $g->set_append ($str); -# Run the appliance. This won't return until the user quite the +# Run the appliance. This won't return until the user quits the # appliance. -$g->launch (); +eval { $g->launch (); }; + +# launch() expects guestfsd to start. However, virt-rescue doesn't run guestfsd, +# so this will always fail with ECHILD when the appliance exits unexpectedly. +die $@ unless $!{ECHILD}; exit 0; @@ -223,6 +247,13 @@ exit 0; Several environment variables affect virt-rescue. See L for the complete list. +=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 for details. + =head1 SEE ALSO L,