[Libguestfs] [PATCH v2] fish: fuse: Add -m dev:mnt:opts to allow mount options to be specified.

Richard W.M. Jones rjones at redhat.com
Mon Mar 28 13:48:36 UTC 2011


-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
libguestfs lets you edit virtual machines.  Supports shell scripting,
bindings from many languages.  http://libguestfs.org
-------------- next part --------------
>From 4e529e06a4500959cd783f5029354fea47a253a6 Mon Sep 17 00:00:00 2001
From: Richard W.M. Jones <rjones at redhat.com>
Date: Mon, 28 Mar 2011 13:35:53 +0100
Subject: [PATCH 1/2] fish: fuse: Add -m dev:mnt:opts to allow mount options to be specified.

This lets you turn on ACLs and xattrs by doing:

  -m /dev/sda1:/:acl,user_xattr

The extra parameter is passed through to mount_options:

  libguestfs: trace: mount_options "acl,user_xattr" "/dev/sda1" "/"
---
 fish/fish.c         |    2 +-
 fish/guestfish.pod  |   17 +++++++++++++----
 fish/options.c      |   11 +++++++++--
 fish/options.h      |   17 +++++++++++++----
 fuse/guestmount.pod |   14 +++++++++++++-
 5 files changed, 49 insertions(+), 12 deletions(-)

diff --git a/fish/fish.c b/fish/fish.c
index 22f3359..65a0c1d 100644
--- a/fish/fish.c
+++ b/fish/fish.c
@@ -117,7 +117,7 @@ usage (int status)
              "  --keys-from-stdin    Read passphrases from stdin\n"
              "  --listen             Listen for remote commands\n"
              "  --live               Connect to a live virtual machine\n"
-             "  -m|--mount dev[:mnt] Mount dev on mnt (if omitted, /)\n"
+             "  -m|--mount dev[:mnt[:opts]] Mount dev on mnt (if omitted, /)\n"
              "  -n|--no-sync         Don't autosync\n"
              "  -N|--new type        Create prepared disk (test1.img, ...)\n"
              "  --progress-bars      Enable progress bars even when not interactive\n"
diff --git a/fish/guestfish.pod b/fish/guestfish.pod
index abf6d7a..98286d1 100644
--- a/fish/guestfish.pod
+++ b/fish/guestfish.pod
@@ -299,9 +299,9 @@ L</REMOTE CONTROL GUESTFISH OVER A SOCKET> below.
 Connect to a live virtual machine.
 (Experimental, see L<guestfs(3)/ATTACHING TO RUNNING DAEMONS>).
 
-=item B<-m dev[:mountpoint]>
+=item B<-m dev[:mountpoint[:options]]>
 
-=item B<--mount dev[:mountpoint]>
+=item B<--mount dev[:mountpoint[:options]]>
 
 Mount the named partition or logical volume on the given mountpoint.
 
@@ -318,8 +318,17 @@ filesystems and LVs available (see L</list-partitions>,
 L</list-filesystems> and L</lvs> commands), or you can use the
 L<virt-filesystems(1)> program.
 
-Using this flag is mostly equivalent to using the C<mount-options>
-command or the C<mount-ro> command if the I<--ro> flag was given.
+The third (and rarely used) part of the mount parameter is the list of
+mount options used to mount the underlying filesystem.  If this is not
+given, then the mount options are either the empty string or C<ro>
+(the latter if the I<--ro> flag is used).  By specifying the mount
+options, you override this default choice.  Probably the only time you
+would use this is to enable ACLs and/or extended attributes if the
+filesystem can support them:
+
+ -m /dev/sda1:/:acl,user_xattr
+
+Using this flag is equivalent to using the C<mount-options> command.
 
 =item B<-n>
 
diff --git a/fish/options.c b/fish/options.c
index 436e10d..43a15e4 100644
--- a/fish/options.c
+++ b/fish/options.c
@@ -1,5 +1,5 @@
 /* libguestfs - guestfish and guestmount shared option parsing
- * Copyright (C) 2010 Red Hat Inc.
+ * Copyright (C) 2010-2011 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -106,11 +106,18 @@ mount_mps (struct mp *mp)
   if (mp) {
     mount_mps (mp->next);
 
+    const char *options;
+    if (mp->options)
+      options = mp->options;
+    else if (read_only)
+      options = "ro";
+    else
+      options = "";
+
     /* Don't use guestfs_mount here because that will default to mount
      * options -o sync,noatime.  For more information, see guestfs(3)
      * section "LIBGUESTFS GOTCHAS".
      */
-    const char *options = read_only ? "ro" : "";
     r = guestfs_mount_options (g, options, mp->device, mp->mountpoint);
     if (r == -1) {
       /* Display possible mountpoints before exiting. */
diff --git a/fish/options.h b/fish/options.h
index b755d90..e0cad01 100644
--- a/fish/options.h
+++ b/fish/options.h
@@ -1,5 +1,5 @@
 /* libguestfs - guestfish and guestmount shared option parsing
- * Copyright (C) 2010 Red Hat Inc.
+ * Copyright (C) 2010-2011 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -109,6 +109,7 @@ struct mp {
   struct mp *next;
   char *device;
   char *mountpoint;
+  char *options;
 };
 
 /* in inspect.c */
@@ -173,12 +174,20 @@ extern int add_libvirt_drives (const char *guest);
     perror ("malloc");                          \
     exit (EXIT_FAILURE);                        \
   }                                             \
+  mp->options = NULL;                           \
+  mp->mountpoint = bad_cast ("/");              \
   p = strchr (optarg, ':');                     \
   if (p) {                                      \
     *p = '\0';                                  \
-    mp->mountpoint = p+1;                       \
-  } else                                        \
-    mp->mountpoint = bad_cast ("/");            \
+    p++;                                        \
+    mp->mountpoint = p;                         \
+    p = strchr (p, ':');                        \
+    if (p) {                                    \
+      *p = '\0';                                \
+      p++;                                      \
+      mp->options = p;                          \
+    }                                           \
+  }                                             \
   mp->device = optarg;                          \
   mp->next = mps;                               \
   mps = mp
diff --git a/fuse/guestmount.pod b/fuse/guestmount.pod
index 338af97..ea0cb63 100644
--- a/fuse/guestmount.pod
+++ b/fuse/guestmount.pod
@@ -148,7 +148,9 @@ to try to read passphrases from the user by opening C</dev/tty>.
 Connect to a live virtual machine.
 (Experimental, see L<guestfs(3)/ATTACHING TO RUNNING DAEMONS>).
 
-=item B<-m dev[:mnt]> | B<--mount dev[:mnt]>
+=item B<-m dev[:mountpoint[:options]]>
+
+=item B<--mount dev[:mountpoint[:options]]>
 
 Mount the named partition or logical volume on the given mountpoint
 B<in the guest> (this has nothing to do with mountpoints in the host).
@@ -156,6 +158,16 @@ B<in the guest> (this has nothing to do with mountpoints in the host).
 If the mountpoint is omitted, it defaults to C</>.  You have to mount
 something on C</>.
 
+The third (and rarely used) part of the mount parameter is the list of
+mount options used to mount the underlying filesystem.  If this is not
+given, then the mount options are either the empty string or C<ro>
+(the latter if the I<--ro> flag is used).  By specifying the mount
+options, you override this default choice.  Probably the only time you
+would use this is to enable ACLs and/or extended attributes if the
+filesystem can support them:
+
+ -m /dev/sda1:/:acl,user_xattr
+
 =item B<-n> | B<--no-sync>
 
 By default, we attempt to sync the guest disk when the FUSE mountpoint
-- 
1.7.4.1



More information about the Libguestfs mailing list