[gnome-boxes/restore-efi-support: 1/2] Revert "Revert the UEFI series"
- From: Felipe Borges <felipeborges src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-boxes/restore-efi-support: 1/2] Revert "Revert the UEFI series"
- Date: Tue, 26 Nov 2019 14:40:59 +0000 (UTC)
commit 4792d39ea5cb7bb2e17b2aac9843aa643896bb58
Author: Felipe Borges <felipeborges gnome org>
Date: Tue Nov 26 14:35:55 2019 +0100
Revert "Revert the UEFI series"
This reverts commit 0ff259ccaeb858bf30a6acc6bfb1cf5617b1797a.
build-aux/flatpak/org.gnome.Boxes.json | 10 ++++------
meson_options.txt | 5 +++++
src/installer-media.vala | 14 ++++++++++++++
src/meson.build | 3 +++
src/vm-configurator.vala | 33 ++++++++++++++++++++++++++++++---
src/vm-creator.vala | 3 ++-
6 files changed, 58 insertions(+), 10 deletions(-)
---
diff --git a/build-aux/flatpak/org.gnome.Boxes.json b/build-aux/flatpak/org.gnome.Boxes.json
index cd7cc5b8..5a3eea70 100644
--- a/build-aux/flatpak/org.gnome.Boxes.json
+++ b/build-aux/flatpak/org.gnome.Boxes.json
@@ -173,9 +173,8 @@
"name" : "libvirt-glib",
"sources" : [
{
- "type" : "archive",
- "url" : "http://libvirt.org/sources/glib/libvirt-glib-2.0.0.tar.gz",
- "sha256" : "94e8c410c67501303d3b32ca8ce2c36edf898511ec4de9b7f29cd35d274b3d6a"
+ "type" : "git",
+ "url": "https://libvirt.org/git/libvirt-glib.git"
}
]
},
@@ -422,9 +421,8 @@
"name" : "libosinfo",
"sources" : [
{
- "type" : "archive",
- "url" : "https://releases.pagure.org/libosinfo/libosinfo-1.4.0.tar.gz",
- "sha256": "a29e61a82b1a5727b145403914812273dfa033a0c07a15500078726bb3b84165"
+ "type" : "git",
+ "url" : "https://gitlab.com/libosinfo/libosinfo.git"
},
{
"type" : "file",
diff --git a/meson_options.txt b/meson_options.txt
index c55a4712..a5f1be87 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -29,3 +29,8 @@ option ('profile',
],
value: 'default'
)
+
+option ('uefi',
+ type: 'boolean',
+ value: true,
+ description: 'Use UEFI whenever it is possible')
diff --git a/src/installer-media.vala b/src/installer-media.vala
index dd66c8a9..db3e2480 100644
--- a/src/installer-media.vala
+++ b/src/installer-media.vala
@@ -55,6 +55,20 @@
}
}
+ public bool supports_efi {
+ get {
+ if (os == null)
+ return false;
+
+ foreach (var iter in os.get_firmware_list (null) .get_elements ()) {
+ var firmware = iter as Firmware;
+ if (firmware.get_firmware_type () == "efi")
+ return true;
+ }
+ return false;
+ }
+ }
+
public bool prefers_q35 {
get {
if (os == null)
diff --git a/src/meson.build b/src/meson.build
index c78b8fbd..f0a3a674 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -193,6 +193,9 @@ else
dependencies += libovf.get_variable('govf_vapi')
endif
+if get_option('uefi')
+ vala_args += '--define=USE_UEFI'
+endif
executable ('gnome-boxes', vala_sources + resources,
include_directories: config_h_dir,
diff --git a/src/vm-configurator.vala b/src/vm-configurator.vala
index f3ca1888..7dba8c49 100644
--- a/src/vm-configurator.vala
+++ b/src/vm-configurator.vala
@@ -38,7 +38,7 @@
private const string LIBOSINFO_XML = "<libosinfo>%s</libosinfo>";
private const string LIBOSINFO_OS_ID_XML = "<os id=\"%s\"/>";
- public static Domain create_domain_config (InstallerMedia install_media, string target_path,
Capabilities caps)
+ public static Domain create_domain_config (InstallerMedia install_media, string target_path,
Capabilities caps, DomainCapabilities domain_caps)
throws VMConfiguratorError {
var domain = new Domain ();
@@ -51,7 +51,7 @@ public static Domain create_domain_config (InstallerMedia install_media, string
var virt_type = guest_kvm_enabled (best_caps) ? DomainVirtType.KVM : DomainVirtType.QEMU;
domain.set_virt_type (virt_type);
- set_os_config (domain, install_media, best_caps);
+ set_os_config (domain, install_media, best_caps, domain_caps);
string[] features = {};
if (guest_supports_feature (best_caps, "acpi"))
@@ -368,17 +368,44 @@ private static void set_post_install_os_config (Domain domain) {
os.set_arch (old_os.get_arch ());
os.set_machine (old_os.get_machine ());
+#if USE_UEFI
+ os.set_firmware (old_os.get_firmware ());
+#endif
domain.set_os (os);
}
- private static void set_os_config (Domain domain, InstallerMedia install_media, CapabilitiesGuest
guest_caps) {
+ private static bool domain_caps_supports_efi (DomainCapabilities domain_caps) {
+ foreach (var firmware in domain_caps.get_os ().get_firmwares()) {
+ if (firmware == GVirConfig.DomainOsFirmware.EFI)
+ return true;
+ }
+
+ return false;
+ }
+
+ private static bool supports_efi (InstallerMedia install_media, DomainCapabilities domain_caps) {
+ if (install_media == null || !install_media.supports_efi)
+ return false;
+
+ if (domain_caps == null || !domain_caps_supports_efi (domain_caps))
+ return false;
+
+ return true;
+ }
+
+ private static void set_os_config (Domain domain, InstallerMedia install_media, CapabilitiesGuest
guest_caps, DomainCapabilities domain_caps) {
var os = new DomainOs ();
os.set_os_type (DomainOsType.HVM);
os.set_arch (guest_caps.get_arch ().get_name ());
if (install_media.prefers_q35)
os.set_machine ("q35");
+#if USE_UEFI
+ if (supports_efi (install_media, domain_caps))
+ os.set_firmware (GVirConfig.DomainOsFirmware.EFI);
+#endif
+
var boot_devices = new GLib.List<DomainOsBootDevice> ();
install_media.set_direct_boot_params (os);
boot_devices.append (DomainOsBootDevice.CDROM);
diff --git a/src/vm-creator.vala b/src/vm-creator.vala
index 7fe0d7f6..8aa9af29 100644
--- a/src/vm-creator.vala
+++ b/src/vm-creator.vala
@@ -209,7 +209,8 @@ protected void set_post_install_config (LibvirtMachine machine) {
StorageVol volume,
Cancellable? cancellable) throws
GLib.Error {
var caps = yield connection.get_capabilities_async (cancellable);
- var config = VMConfigurator.create_domain_config (install_media, volume.get_path (), caps);
+ var domcaps = yield connection.get_domain_capabilities_async (null, null, null, null, 0,
cancellable);
+ var config = VMConfigurator.create_domain_config (install_media, volume.get_path (), caps, domcaps);
config.name = name;
config.title = title;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]