Or even better this version which will add the qemu stderr to the
error message.
Rich.
From 7d39462ae81e04d5e50f6a2b37b8b4369c3fc5d4 Mon Sep 17 00:00:00 2001
From: Hilko Bengen <bengen(a)hilluzination.de>
Date: Mon, 16 Feb 2026 19:40:33 +0100
Subject: [PATCH] lib/qemu.c: Dump qemu's stderr if QMP test fails
Qemu will refuse to start on some (all?) architectures if firmware
files are missing, or for other reasons, and complain to stderr. Those
messages should be made visible to the user as part of the error message.
---
lib/qemu.c | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/lib/qemu.c b/lib/qemu.c
index 9edbe8208..a26e8c438 100644
--- a/lib/qemu.c
+++ b/lib/qemu.c
@@ -68,6 +68,8 @@ generic_qmp_test (guestfs_h *g, const char *qmp_command, char **outp)
size_t allocsize = 0;
ssize_t len;
unsigned lineno;
+ const char *errmsg;
+ CLEANUP_FREE char *errors = NULL;
guestfs_int_cmd_add_string_unquoted (cmd, "echo ");
/* QMP is modal. You have to send the qmp_capabilities command first. */
@@ -108,8 +110,8 @@ generic_qmp_test (guestfs_h *g, const char *qmp_command, char **outp)
if (len >= 0) debug (g, "generic_qmp_test: %u: %s", lineno, line);
if (len == -1 || strstr (line, "\"QMP\"") == NULL) {
parse_failure:
- error (g, "did not understand QMP monitor output from %s", g->hv);
- return -1;
+ errmsg = "did not understand QMP monitor output";
+ goto err;
}
lineno++; /* line 2 */
@@ -133,11 +135,16 @@ generic_qmp_test (guestfs_h *g, const char *qmp_command, char
**outp)
r = guestfs_int_cmd_pipe_wait (cmd);
/* QMP tests are optional, don't fail if the tests fail. */
if (r == -1 || !WIFEXITED (r) || WEXITSTATUS (r) != 0) {
- error (g, "%s wait failed or unexpected exit status", g->hv);
- return -1;
+ errmsg = "wait failed or unexpected exit status";
+ goto err;
}
return 0;
+
+ err:
+ errors = guestfs_int_cmd_get_pipe_errors (cmd);
+ error (g, "%s: %s\nError output of qemu: %s", g->hv, errmsg, errors);
+ return -1;
}
/**
--
2.52.0
--
Richard Jones, Virtualization Group, Red Hat
http://people.redhat.com/~rjones
Read my programming and virtualization blog:
http://rwmj.wordpress.com
nbdkit - Flexible, fast NBD server with plugins
https://gitlab.com/nbdkit/nbdkit