It is never normally valid to use the mount-local* APIs when you
haven't mounted some filesystems in the libguestfs namespace.
If you try it, it results in some odd errors. The mount-local-run
call is successful, but subsequent operations fail:
$ mkdir -p /tmp/mnt
$ guestfish -x -N fs mount-local /tmp/mnt : mount-local-run
libguestfs: error: lstat: lstat_stub: you must call 'mount' first to mount the
root filesystem
libguestfs: error: lstat: lstat_stub: you must call 'mount' first to mount the
root filesystem
With this commit, the mount-local-run call gives an error.
The error is implemented by calling guestfs_exists (g, "/") which has
the side effect of running the NEED_ROOT macro in the daemon. (There
is no simple equivalent of NEED_ROOT on the library side.)
---
src/fuse.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/src/fuse.c b/src/fuse.c
index dd4f139..c22cbba 100644
--- a/src/fuse.c
+++ b/src/fuse.c
@@ -1028,6 +1028,12 @@ guestfs__mount_local_run (guestfs_h *g)
return -1;
}
+ /* Test if root is mounted. We do this by using a side-effect of
+ * guestfs_exists (which is that it calls NEED_ROOT).
+ */
+ if (guestfs_exists (g, "/") == -1)
+ return -1;
+
debug (g, "%s: entering fuse_loop", __func__);
/* Enter the main loop. */
--
1.8.4.2