[Libguestfs] [PATCH 0/4] Use libvirt firmware autoselection

Michal Privoznik mprivozn at redhat.com
Thu Jan 16 12:49:09 UTC 2020


On 1/16/20 1:27 PM, Pino Toscano wrote:
> Starting with 5.2.0, libvirt has a way to select the firmware by
> specifying its type, provided configuration files for the firmware are
> shipped. Currently we start the appliance as UEFI if any of the firmware
> are found, so instead we can try to just set the firmware type iff:
> - the libvirt autoselection works
> - the 'efi' firmware is available
> 
> The only behaviour change is that the default firmware may be a
> non-debug version, so we get no debug messages even when running in
> verbose mode. This most probably will need an addition in libvirt to
> select this feature among the available firmwares.

Firmware autoselection parses JSON files at well defined locations 
giving each file precedence over others based on the path it's found 
under and it's name.

The file name precedence is based on alphabetical ordering. That is why 
file names usually consists of two leading numbers, e.g. 40-bios.json, 
50-ovmf-sb.json, 60-ovmf.json and so on. Now, the default, distro wide 
path where these files live is /usr/share/qemu/firmware/ and has the 
least precedence. If a sysadmin wants to alter config of some FW blob, 
instead of fighting with package manager and overwriting files under 
/usr/.. they can put changed versions under /etc/qemu/firmware which 
takes precedence over the former path. For instance, if 40-bios.json is 
found under both paths, only the one from /etc is considered and the 
other is not even parsed. If you would apply this logic one more time, 
you will get $HOME/.config/qemu/firmware which allows non-root users to 
override their sysadmin's config and have their private FW blobs with 
the highest priority.

So if libguestfs wants libvirt to select certain FW image it can install 
its own JSON descriptor somewhere into a suitable path and if the file 
has the correct content it will direct libvirt into using FW blob with 
debug messages enabled.

> 
> Pino Toscano (4):
>    launch: libvirt: parse firmware autoselection
>    lib: uefi: reset out parameters earlier
>    lib: allow to use libvirt firmware autoselection
>    lib: uefi: use the efi libvirt firmware if available
> 
>   lib/appliance-uefi.c   | 32 ++++++++++++++++++++++++++------
>   lib/guestfs-internal.h |  2 +-
>   lib/launch-direct.c    |  3 ++-
>   lib/launch-libvirt.c   | 40 +++++++++++++++++++++++++++++++++++++++-
>   4 files changed, 68 insertions(+), 9 deletions(-)
> 

I'm no libguestfs devel, but this looks sane to me.

Michal




More information about the Libguestfs mailing list