summary refs log tree commit diff stats
path: root/results/classifier/118/all/1913012
diff options
context:
space:
mode:
Diffstat (limited to 'results/classifier/118/all/1913012')
-rw-r--r--results/classifier/118/all/1913012192
1 files changed, 192 insertions, 0 deletions
diff --git a/results/classifier/118/all/1913012 b/results/classifier/118/all/1913012
new file mode 100644
index 000000000..dc3294323
--- /dev/null
+++ b/results/classifier/118/all/1913012
@@ -0,0 +1,192 @@
+debug: 0.972
+network: 0.963
+architecture: 0.961
+device: 0.955
+boot: 0.953
+permissions: 0.948
+files: 0.943
+assembly: 0.940
+KVM: 0.938
+risc-v: 0.938
+semantic: 0.938
+register: 0.937
+virtual: 0.936
+TCG: 0.930
+graphic: 0.930
+PID: 0.928
+arm: 0.927
+socket: 0.927
+i386: 0.923
+performance: 0.922
+vnc: 0.906
+peripherals: 0.905
+kernel: 0.896
+hypervisor: 0.888
+ppc: 0.886
+user-level: 0.885
+VMM: 0.868
+x86: 0.801
+mistranslation: 0.740
+
+Installed firmware descriptor files contain (invalid) relative paths
+
+Unless the Qemu build is configured using `./configure --datadir=<path> where <path> is some absolute path which is a subdirectory of <prefix>, the resulting installed firmware descriptor files contain relative paths for their `mapping.filename` properties. These relative paths will not be accepted as valid by tools like `virt-install`, resulting in the inability to configure new VMs using these firmware descriptors.
+
+# QEMU version
+$ qemu-system-x86_64 -version
+QEMU emulator version 5.2.0
+
+(I've also reproduced the issue with QEMU built from Git master @ v5.2.0-1300-g0e32462630, see next comment.)
+
+# OS version
+Void Linux x86_64 (glibc)
+
+Steps to reproduce (with results on my system):
+
+# Verify the symptom
+
+$ virt-install --boot firmware=efi --disk none --memory 2048
+Using default --name vm4
+WARNING  No operating system detected, VM performance may suffer. Specify an OS with --os-variant for optimal results.
+
+Starting install...
+ERROR    Failed to open file 'share/qemu/edk2-i386-vars.fd': No such file or directory
+Domain installation does not appear to have been successful.
+If it was, you can restart your domain by running:
+  virsh --connect qemu:///session start vm4
+otherwise, please restart your installation.
+
+# Verify most likely cause
+
+$ grep filename /usr/share/qemu/firmware/*i386*.json 
+/usr/share/qemu/firmware/50-edk2-i386-secure.json:            "filename": "share/qemu/edk2-i386-secure-code.fd",
+/usr/share/qemu/firmware/50-edk2-i386-secure.json:            "filename": "share/qemu/edk2-i386-vars.fd",
+/usr/share/qemu/firmware/60-edk2-i386.json:            "filename": "share/qemu/edk2-i386-code.fd",
+/usr/share/qemu/firmware/60-edk2-i386.json:            "filename": "share/qemu/edk2-i386-vars.fd",
+
+There is an issue on Void Linux packages issue tracker about this bug[1]
+
+# Steps to verify the issue on a fresh Git clone of QEMU source
+
+$ git clone https://github.com/qemu/qemu
+$ cd qemu
+$ make DEBUG=1 docker-test-misc@alpine
+[...]
+  COPY    RUNNER
+    RUN test-misc in qemu/alpine 
+* Prepared to run command:
+  ./test-misc
+* Hit Ctrl-D to continue, or type 'exit 1' to abort
+
+bash-5.1$ . common-rc
+[...]
+bash-5.1$ configure_qemu --disable-system --disable-user
+Configure options:
+--enable-werror --prefix=/tmp/qemu-test/install --disable-system --disable-user
+cross containers  no
+The Meson build system
+Version: 0.56.2
+Source dir: /tmp/qemu-test/src
+Build dir: /tmp/qemu-test/src/tests/docker
+Build type: native build
+Project name: qemu
+Project version: 5.2.50
+[...]
+bash-5.1$ grep filename pc-bios/descriptors/*
+pc-bios/descriptors/50-edk2-i386-secure.json:            "filename": "share/qemu/edk2-i386-secure-code.fd",
+pc-bios/descriptors/50-edk2-i386-secure.json:            "filename": "share/qemu/edk2-i386-vars.fd",
+[...all other matches have relative paths...]
+bash-5.1$ exit 1
+[...]
+
+# Research
+
+The filename path substitution appears to be done in the file `pc-bios/descriptors/meson.build`.
+In particular, occurrences of `@DATADIR@` in the template files get substituted using the value of `qemu_datadir`:
+
+  configure_file(input: files(f),                                               
+                 output: f,                                                     
+                 configuration: {'DATADIR': qemu_datadir},                      
+                 install: get_option('install_blobs'),                          
+                 install_dir: qemu_datadir / 'firmware')
+
+The variable `qemu_datadir` gets initialized from toplevel `meson.build` file using:
+
+   qemu_datadir = get_option('datadir') / get_option('qemu_suffix')
+
+From the Meson documentation on built-in (build) options[2], `datadir` option gets initialized to `"share"` (note: a relative path!) by default, unless `datadir` build option is configured explicitly, so the value of `qemu_datadir`, as well as the substitution made ends up being a relative path as well.
+
+I found a commit which I think is relevant to why this choice was made[3].
+
+# Test a workaround, try #1: specify `datadir` manually
+
+$ make DEBUG=1 docker-test-misc@alpine
+[...]
+bash-5.1$ configure_qemu --datadir=/usr/share --disable-system --disable-user
+Configure options:
+--enable-werror --prefix=/tmp/qemu-test/install --datadir=/usr/share --disable-system --disable-user
+cross containers  no
+The Meson build system
+Version: 0.56.2
+Source dir: /tmp/qemu-test/src
+Build dir: /tmp/qemu-test/src/tests/docker
+Build type: native build
+
+../../meson.build:1:0: ERROR: The value of the 'datadir' option is '/usr/share' which must be a subdir of the prefix '/tmp/qemu-test/install'.
+Note that if you pass a relative path, it is assumed to be a subdir of prefix.
+
+A full log can be found at /tmp/qemu-test/src/tests/docker/meson-logs/meson-log.txt
+
+ERROR: meson setup failed
+
+Ah! So perhaps `datadir` can be an absolute path, but then it must be a subdir of the (already specified) `prefix`.
+Let's try again.
+
+# Test a workaround, try #2: specify `datadir` as subdir of <prefix> manually
+
+$ make DEBUG=1 docker-test-misc@alpine
+[...]
+bash-5.1$ configure_qemu --datadir=/tmp/qemu-test/install/share --disable-system --disable-user
+Configure options:
+--enable-werror --prefix=/tmp/qemu-test/install --datadir=/tmp/qemu-test/install/share --disable-system --disable-user
+[...]
+bash-5.1$ grep filename pc-bios/descriptors/*
+pc-bios/descriptors/50-edk2-i386-secure.json:            "filename": "share/qemu/edk2-i386-secure-code.fd",
+pc-bios/descriptors/50-edk2-i386-secure.json:            "filename": "share/qemu/edk2-i386-vars.fd",
+bash-5.1$ exit 1
+
+Getting there, but the paths are still relative, missing the initial `/`.
+
+[1]: https://github.com/void-linux/void-packages/issues/27965
+[2]: https://mesonbuild.com/Builtin-options.html
+[3]: https://github.com/qemu/qemu/commit/ab4c0996f80d43d1fc28c6e76f4ecb27423a7e29
+
+
+
+I think this needs to be fixed in QEMU source. The `configure_file()` action needs both an absolute path for `configuration` (to substitute into the descriptor files) _and_ a relative path for use with the `install_dir` keyword argument.
+
+Please disregard the `# Test a coworkaround` stuff in comment #1, bad copypasta, too late at night ;-)
+
+Gentoo also noticed the bug: https://bugs.gentoo.org/766743
+
+Jannik Glückert proposed a fix:
+
+```
+--- a/pc-bios/descriptors/meson.build
++++ b/pc-bios/descriptors/meson.build
+@@ -8,7 +8,7 @@ foreach f: [
+ ]
+   configure_file(input: files(f),
+                  output: f,
+-                 configuration: {'DATADIR': qemu_datadir},
++                 configuration: {'DATADIR': get_option('prefix') / qemu_datadir},
+                  install: get_option('install_blobs'),
+                  install_dir: qemu_datadir / 'firmware')
+ endforeach
+```
+
+
+
+Fixed here:
+https://gitlab.com/qemu-project/qemu/-/commit/4b956a399969c0c497a
+