summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fish/fish.c7
-rw-r--r--fish/guestfish.pod46
-rw-r--r--fish/options.h7
-rw-r--r--fuse/guestmount.c7
-rw-r--r--fuse/guestmount.pod7
5 files changed, 66 insertions, 8 deletions
diff --git a/fish/fish.c b/fish/fish.c
index 9f20bba2..5d7aac6a 100644
--- a/fish/fish.c
+++ b/fish/fish.c
@@ -150,7 +150,7 @@ main (int argc, char *argv[])
enum { HELP_OPTION = CHAR_MAX + 1 };
- static const char *options = "a:c:d:Df:h::im:nN:rv?Vx";
+ static const char *options = "a:c:d:Df:h::im:nN:rv?Vwx";
static const struct option long_options[] = {
{ "add", 1, 0, 'a' },
{ "cmd-help", 2, 0, 'h' },
@@ -172,6 +172,7 @@ main (int argc, char *argv[])
{ "no-progress-bars", 0, 0, 0 },
{ "remote", 2, 0, 0 },
{ "ro", 0, 0, 'r' },
+ { "rw", 0, 0, 'w' },
{ "selinux", 0, 0, 0 },
{ "verbose", 0, 0, 'v' },
{ "version", 0, 0, 'V' },
@@ -362,6 +363,10 @@ main (int argc, char *argv[])
OPTION_V;
break;
+ case 'w':
+ OPTION_w;
+ break;
+
case 'x':
OPTION_x;
break;
diff --git a/fish/guestfish.pod b/fish/guestfish.pod
index d265a3d4..c52b773c 100644
--- a/fish/guestfish.pod
+++ b/fish/guestfish.pod
@@ -10,13 +10,13 @@ guestfish - the libguestfs Filesystem Interactive SHell
guestfish
- guestfish -a disk.img
+ guestfish [--ro|--rw] -a disk.img
- guestfish -a disk.img -m dev[:mountpoint]
+ guestfish [--ro|--rw] -a disk.img -m dev[:mountpoint]
guestfish -d libvirt-domain
- guestfish -a disk.img -i
+ guestfish [--ro|--rw] -a disk.img -i
guestfish -d libvirt-domain -i
@@ -99,7 +99,7 @@ Update C</etc/resolv.conf> in a guest:
Edit C</boot/grub/grub.conf> interactively:
- guestfish --add disk.img \
+ guestfish --rw --add disk.img \
--mount /dev/vg_guest/lv_root \
--mount /dev/sda1:/boot \
edit /boot/grub/grub.conf
@@ -115,7 +115,7 @@ disks from a virtual machine:
Another way to edit C</boot/grub/grub.conf> interactively is:
- guestfish -a disk.img -i edit /boot/grub/grub.conf
+ guestfish --rw -a disk.img -i edit /boot/grub/grub.conf
=head2 As a script interpreter
@@ -245,7 +245,7 @@ Typical usage is either:
(for active domains, readonly), or specify the block device directly:
- guestfish -a /dev/Guests/MyGuest -i
+ guestfish --rw -a /dev/Guests/MyGuest -i
Note that the command line syntax changed slightly over older
versions of guestfish. You can still use the old syntax:
@@ -320,6 +320,8 @@ don't need write access to the disk.
Note that prepared disk images created with I<-N> are not affected by
the I<--ro> option.
+See also L</OPENING DISKS FOR READ AND WRITE> below.
+
=item B<--selinux>
Enable SELinux support for the guest. See L<guestfs(3)/SELINUX>.
@@ -333,6 +335,11 @@ a bug.
Display the guestfish / libguestfs version number and exit.
+=item B<-w> | B<--rw>
+
+This option does nothing at the moment.
+See L</OPENING DISKS FOR READ AND WRITE> below.
+
=item B<-x>
Echo each command before executing it.
@@ -392,6 +399,33 @@ I<-N> or I<--new> options were given then C<run> is done
automatically, simply because guestfish can't perform the action you
asked for without doing this.
+=head1 OPENING DISKS FOR READ AND WRITE
+
+The guestfish (and L<guestmount(1)>) options I<--ro> and I<--rw>
+affect whether the other command line options I<-a>, I<-c>, I<-d>,
+I<-i> and I<-m> open disk images read-only or for writing.
+
+In libguestfs E<lt> 1.6.2, guestfish and guestmount defaulted to
+opening disk images supplied on the command line for write. To open a
+disk image read-only you have to do I<-a image --ro>.
+
+This matters: If you accidentally open a live VM disk image writable
+then you will cause irreversible disk corruption.
+
+By libguestfs 1.8 we intend to change the default the other way. Disk
+images will be opened read-only. You will have to either specify
+I<guestfish --rw> or change a configuration file in order to get write
+access for disk images specified by those other command line options.
+
+This version of guestfish has a I<--rw> option which does nothing (it
+is already the default). However it is highly recommended that you
+use this option to indicate that guestfish needs write access, and to
+prepare your scripts for the day when this option will be required for
+write access.
+
+B<Note:> This does I<not> affect commands like L</add> and L</mount>,
+or any other libguestfs program apart from guestfish and guestmount.
+
=head1 QUOTING
You can quote ordinary parameters using either single or double
diff --git a/fish/options.h b/fish/options.h
index e36c57a0..9cb7f4bb 100644
--- a/fish/options.h
+++ b/fish/options.h
@@ -185,6 +185,13 @@ extern int add_libvirt_drives (const char *guest);
exit (EXIT_SUCCESS); \
}
+#define OPTION_w \
+ if (read_only) { \
+ fprintf (stderr, _("%s: cannot mix --ro and --rw options\n"), \
+ program_name); \
+ exit (EXIT_FAILURE); \
+ }
+
#define OPTION_x \
guestfs_set_trace (g, 1)
diff --git a/fuse/guestmount.c b/fuse/guestmount.c
index 55b71d77..1b3abf97 100644
--- a/fuse/guestmount.c
+++ b/fuse/guestmount.c
@@ -884,7 +884,7 @@ main (int argc, char *argv[])
/* The command line arguments are broadly compatible with (a subset
* of) guestfish. Thus we have to deal mainly with -a, -m and --ro.
*/
- static const char *options = "a:c:d:im:no:rv?Vx";
+ static const char *options = "a:c:d:im:no:rv?Vwx";
static const struct option long_options[] = {
{ "add", 1, 0, 'a' },
{ "connect", 1, 0, 'c' },
@@ -900,6 +900,7 @@ main (int argc, char *argv[])
{ "no-sync", 0, 0, 'n' },
{ "option", 1, 0, 'o' },
{ "ro", 0, 0, 'r' },
+ { "rw", 0, 0, 'w' },
{ "selinux", 0, 0, 0 },
{ "trace", 0, 0, 'x' },
{ "verbose", 0, 0, 'v' },
@@ -1043,6 +1044,10 @@ main (int argc, char *argv[])
OPTION_V;
break;
+ case 'w':
+ OPTION_w;
+ break;
+
case 'x':
OPTION_x;
ADD_FUSE_ARG ("-f");
diff --git a/fuse/guestmount.pod b/fuse/guestmount.pod
index 4ddea5fd..e86d76c7 100644
--- a/fuse/guestmount.pod
+++ b/fuse/guestmount.pod
@@ -203,6 +203,8 @@ disk. If the guest is running and this option is I<not> supplied,
then there is a strong risk of disk corruption in the guest. We try
to prevent this from happening, but it is not always possible.
+See also L<guestfish(1)/OPENING DISKS FOR READ AND WRITE>.
+
=item B<--selinux>
Enable SELinux support for the guest.
@@ -215,6 +217,11 @@ Enable verbose messages from underlying libguestfs.
Display the program version and exit.
+=item B<-w> | B<--rw>
+
+This option does nothing at the moment.
+See L<guestfish(1)/OPENING DISKS FOR READ AND WRITE>.
+
=item B<-x> | B<--trace>
Trace libguestfs calls.