[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Bug 1913012] Re: Installed firmware descriptor files contain (invalid)
From: |
Alain Kalker |
Subject: |
[Bug 1913012] Re: Installed firmware descriptor files contain (invalid) relative paths |
Date: |
Mon, 25 Jan 2021 06:59:01 -0000 |
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
** Bug watch added: github.com/void-linux/void-packages/issues #27965
https://github.com/void-linux/void-packages/issues/27965
** Description changed:
- 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.
+ After building and installing QEMU, 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
+ which reference 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
+ virsh --connect qemu:///session start vm4
otherwise, please restart your installation.
# Verify most likely cause
- $ grep filename /usr/share/qemu/firmware/*i386*.json
+ $ 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",
--
You received this bug notification because you are a member of qemu-
devel-ml, which is subscribed to QEMU.
https://bugs.launchpad.net/bugs/1913012
Title:
Installed firmware descriptor files contain (invalid) relative paths
Status in QEMU:
New
Bug description:
After building and installing QEMU, 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 which reference 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",
To manage notifications about this bug go to:
https://bugs.launchpad.net/qemu/+bug/1913012/+subscriptions
- [Bug 1913012] [NEW] Installed firmware descriptor files contain (invalid) relative paths, Alain Kalker, 2021/01/25
- [Bug 1913012] Re: Installed firmware descriptor files contain (invalid) relative paths,
Alain Kalker <=
- [Bug 1913012] Re: Installed firmware descriptor files contain (invalid) relative paths, Alain Kalker, 2021/01/25
- [Bug 1913012] Re: Installed firmware descriptor files contain (invalid) relative paths, Alain Kalker, 2021/01/25
- [Bug 1913012] Re: Installed firmware descriptor files contain (invalid) relative paths, Alain Kalker, 2021/01/25
- [Bug 1913012] Re: Installed firmware descriptor files contain (invalid) relative paths, Alain Kalker, 2021/01/25
- [Bug 1913012] Re: Installed firmware descriptor files contain (invalid) relative paths, Sergei Trofimovich, 2021/01/31