On 12/14/18 2:07 PM, Daniel P. Berrangé wrote:
The QEMU command line arguments are very long and currently all
written
on a single line to /var/log/libvirt/qemu/$GUEST.log. This introduces
logic to add line breaks after every env variable and "-" optional
argument, and every positional argument. This will create a clearer log
file, which will in turn present better in bug reports when people cut +
paste from the log into a bug comment.
An example log file entry now looks like this:
2018-12-14 12:57:03.677+0000: starting up libvirt version: 5.0.0, qemu version:
3.0.0qemu-3.0.0-1.fc29, kernel: 4.19.5-300.fc29.x86_64, hostname: localhost.localdomain
LC_ALL=C \
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin \
HOME=/home/berrange \
USER=berrange \
LOGNAME=berrange \
QEMU_AUDIO_DRV=none \
/usr/bin/qemu-system-ppc64 \
-name guest=guest,debug-threads=on \
-S \
-object
secret,id=masterKey0,format=raw,file=/home/berrange/.config/libvirt/qemu/lib/domain-33-guest/master-key.aes
\
-machine pseries-2.10,accel=tcg,usb=off,dump-guest-core=off \
-m 1024 \
-realtime mlock=off \
-smp 1,sockets=1,cores=1,threads=1 \
-uuid c8a74977-ab18-41d0-ae3b-4041c7fffbcd \
-display none \
-no-user-config \
-nodefaults \
-chardev socket,id=charmonitor,fd=23,server,nowait \
-mon chardev=charmonitor,id=monitor,mode=control \
-rtc base=utc \
-no-shutdown \
-boot strict=on \
-device qemu-xhci,id=usb,bus=pci.0,addr=0x1 \
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x2 \
-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \
-msg timestamp=on
2018-12-14 12:57:03.730+0000: shutting down, reason=failed
Signed-off-by: Daniel P. Berrangé <berrange(a)redhat.com>
---
docs/internals/command.html.in | 2 +-
src/bhyve/bhyve_driver.c | 4 +-
src/qemu/qemu_driver.c | 2 +-
src/qemu/qemu_interface.c | 2 +-
src/qemu/qemu_process.c | 2 +-
src/security/security_apparmor.c | 2 +-
src/util/vircommand.c | 19 ++++++++--
src/util/vircommand.h | 2 +-
src/util/virfirewall.c | 2 +-
tests/bhyvexml2argvtest.c | 4 +-
tests/commanddata/test26.log | 1 +
tests/commandtest.c | 64 +++++++++++++++++++++++++++++++-
tests/qemuxml2argvtest.c | 2 +-
tests/storagepoolxml2argvtest.c | 2 +-
tests/storagevolxml2argvtest.c | 4 +-
15 files changed, 95 insertions(+), 19 deletions(-)
create mode 100644 tests/commanddata/test26.log
@@ -1991,11 +1993,22 @@ virCommandToString(virCommandPtr cmd)
virBufferAdd(&buf, cmd->env[i], eq - cmd->env[i]);
virBufferEscapeShell(&buf, eq);
virBufferAddChar(&buf, ' ');
+ if (linebreaks)
+ virBufferAddLit(&buf, "\\\n");
}
virBufferEscapeShell(&buf, cmd->args[0]);
for (i = 1; i < cmd->nargs; i++) {
virBufferAddChar(&buf, ' ');
+ if (linebreaks) {
+ /* Line break if this is a --arg or if
+ * the previous arg was a positional option
+ */
+ if (cmd->args[i][0] == '-' ||
+ !prevopt)
+ virBufferAddLit(&buf, "\\\n");
+ }
virBufferEscapeShell(&buf, cmd->args[i]);
+ prevopt = (cmd->args[i][0] == '-');
Unfortunately, cmd->args[i] can be NULL here. So I guess this needs to
look slightly different:
for (i = 1; i < cmd->nargs; i++) {
virBufferAddChar(&buf, ' ');
if (!cmd->args[i])
continue;
if (linebreaks) {
/* Line break if this is a --arg or if
* the previous arg was a positional option
*/
if (cmd->args[i][0] == '-' ||
!prevopt)
virBufferAddLit(&buf, "\\\n");
}
virBufferEscapeShell(&buf, cmd->args[i]);
prevopt = (cmd->args[i][0] == '-');
}
ACK if you fix this.
Michal