[Libguestfs] [nbdkit PATCH] captive: Support $uri in --run

Eric Blake eblake at redhat.com
Wed Jun 26 02:35:11 UTC 2019


The existing --run '$nbd' outputs an older form that differs between
libguestfs and qemu, and which is not always a valid URI.  For
historical compatibility, we probably can't change that; but we can
instead add a new '$uri' that outputs a valid URI.  Note that the
libguestfs '$nbd' TCP form is already a valid URI, but that libguestfs
still needs to be taught about the nbd+unix:// scheme, so for there,
you are still better off using '$nbd'; but for qemu, using '$uri'
already works since qemu v1.3.0 in 2012.

Note that the NBD project has not actually yet posted a link for the
preferred URI syntax; once Rich is happy with his work on that
project, we can touch this up to link to that page.

Reported-by: Martin Kletzander <mkletzan at redhat.com>
Signed-off-by: Eric Blake <eblake at redhat.com>
---
 docs/nbdkit-captive.pod |  8 +++++++-
 server/captive.c        | 14 +++++++++++++-
 2 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/docs/nbdkit-captive.pod b/docs/nbdkit-captive.pod
index 6f69cca5..59df6690 100644
--- a/docs/nbdkit-captive.pod
+++ b/docs/nbdkit-captive.pod
@@ -42,9 +42,15 @@ The following shell variables are available in the I<--run> argument:

 =over 4

+=item C<$uri>
+
+A URI that refers to the nbdkit port or socket in the preferred form
+documented by the NBD project.
+
 =item C<$nbd>

-A URL that refers to the nbdkit port or socket.
+An older URL that refers to the nbdkit port or socket in a manner
+specific to certain tools.

 Note there is some magic here, since qemu and guestfish URLs have a
 different format, so nbdkit tries to guess which you are running.  If
diff --git a/server/captive.c b/server/captive.c
index 6971af2e..c5274f65 100644
--- a/server/captive.c
+++ b/server/captive.c
@@ -66,7 +66,19 @@ run_command (void)
     exit (EXIT_FAILURE);
   }

-  /* Construct $nbd "URL".  Unfortunately guestfish and qemu take
+  /* Construct $uri. */
+  fprintf (fp, "uri=");
+  if (port) {
+    fprintf (fp, "nbd://localhost:");
+    shell_quote (port, fp);
+  }
+  else if (unixsocket) {
+    fprintf (fp, "nbd+unix://\\?socket=");
+    shell_quote (unixsocket, fp);
+  }
+  fprintf (fp, "\n");
+
+  /* Construct older $nbd "URL".  Unfortunately guestfish and qemu take
    * different syntax, so try to guess which one we need.
    */
   fprintf (fp, "nbd=");
-- 
2.20.1




More information about the Libguestfs mailing list