--- src/meson.build | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/meson.build b/src/meson.build index ac79b7fc..00903170 100644 --- a/src/meson.build +++ b/src/meson.build @@ -125,8 +125,8 @@ dependencies = [ dependency ('libsecret-1'), dependency ('libsoup-2.4', version: '>= 2.38'), dependency ('libusb-1.0', version: '>= 1.0.9'), - dependency ('libvirt-gconfig-1.0', version: '>= 0.2.0'), - dependency ('libvirt-gobject-1.0', version: '>= 0.2.0'), + dependency ('libvirt-gconfig-1.0', version: '>= 2.0.0'), + dependency ('libvirt-gobject-1.0', version: '>= 2.0.0'), dependency ('libxml-2.0', version: '>= 2.7.8'), dependency ('spice-client-gtk-3.0', version: '>= 0.32'), dependency ('tracker-sparql-2.0'), -- --- src/installer-media.vala | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/installer-media.vala b/src/installer-media.vala index feb5d7b..b29c10b 100644 --- a/src/installer-media.vala +++ b/src/installer-media.vala @@ -25,12 +25,24 @@ private class Boxes.InstallerMedia : GLib.Object { public virtual bool need_user_input_for_vm_creation { get { return false; } } public virtual bool ready_to_create { get { return true; } } + public bool supports_virtio1_disk { + get { + return (find_device_by_prop (supported_devices, DEVICE_PROP_NAME, "virtio1.0-block") != null); + } + } + public bool supports_virtio_disk { get { return (find_device_by_prop (supported_devices, DEVICE_PROP_NAME, "virtio-block") != null); } } + public bool supports_virtio1_net { + get { + return (find_device_by_prop (supported_devices, DEVICE_PROP_NAME, "virtio1.0-net") != null); + } + } + public bool supports_virtio_net { get { return (find_device_by_prop (supported_devices, DEVICE_PROP_NAME, "virtio-net") != null); -- --- src/unattended-installer.vala | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/unattended-installer.vala b/src/unattended-installer.vala index 4e0ba23..6a37e20 100644 --- a/src/unattended-installer.vala +++ b/src/unattended-installer.vala @@ -232,7 +232,7 @@ private class Boxes.UnattendedInstaller: InstallerMedia { if (os.distro == "win") config.set_target_disk ("C"); else - config.set_target_disk (supports_virtio_disk? "/dev/vda" : "/dev/sda"); + config.set_target_disk (supports_virtio_disk || supports_virtio1_disk? "/dev/vda" : "/dev/sda"); var disk_config = get_unattended_disk_config (script.path_format); var device_path = device_name_to_path (script.path_format, disk_config.get_target_dev ()); @@ -360,7 +360,7 @@ private class Boxes.UnattendedInstaller: InstallerMedia { disk.set_target_bus (DomainDiskBus.FDC); } else { // Path format checks below are most probably practically redundant but a small price for future safety - if (supports_virtio_disk) + if (supports_virtio_disk || supports_virtio1_disk) disk.set_target_dev ((path_format == PathFormat.UNIX)? "sda" : "E"); else disk.set_target_dev ((path_format == PathFormat.UNIX)? "sdb" : "E"); -- --- src/vm-configurator.vala | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/vm-configurator.vala b/src/vm-configurator.vala index e8eefa3..ceadc80 100644 --- a/src/vm-configurator.vala +++ b/src/vm-configurator.vala @@ -114,9 +114,10 @@ private class Boxes.VMConfigurator { console.set_source (new DomainChardevSourcePty ()); domain.add_device (console); + var supports_virtio_net = install_media.supports_virtio_net || install_media.supports_virtio1_net; var iface = create_network_interface (domain, is_libvirt_bridge_net_available (), - install_media.supports_virtio_net); + supports_virtio_net); domain.add_device (iface); return domain; @@ -309,7 +310,7 @@ private class Boxes.VMConfigurator { disk.set_driver_cache (DomainDiskCacheType.WRITEBACK); var dev_letter_str = ((char) (dev_index + 97)).to_string (); - if (install_media.supports_virtio_disk) { + if (install_media.supports_virtio_disk || install_media.supports_virtio1_disk) { debug ("Using virtio controller for the main disk"); disk.set_target_bus (DomainDiskBus.VIRTIO); disk.set_target_dev ("vd" + dev_letter_str); -- --- src/installer-media.vala | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/installer-media.vala b/src/installer-media.vala index b29c10b..0a83ba0 100644 --- a/src/installer-media.vala +++ b/src/installer-media.vala @@ -49,6 +49,12 @@ private class Boxes.InstallerMedia : GLib.Object { } } + public bool prefers_q35 { + get { + return false; + } + } + public virtual bool live { get { return os_media == null || os_media.live; } } public virtual bool eject_after_install { get { return os_media == null || os_media.eject_after_install; } } -- --- src/installer-media.vala | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/installer-media.vala b/src/installer-media.vala index 0a83ba0..7d95d65 100644 --- a/src/installer-media.vala +++ b/src/installer-media.vala @@ -55,6 +55,12 @@ private class Boxes.InstallerMedia : GLib.Object { } } + public bool prefers_ich9 { + get { + return false; + } + } + public virtual bool live { get { return os_media == null || os_media.live; } } public virtual bool eject_after_install { get { return os_media == null || os_media.eject_after_install; } } -- --- src/installer-media.vala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/installer-media.vala b/src/installer-media.vala index 7d95d65..ba6bfc8 100644 --- a/src/installer-media.vala +++ b/src/installer-media.vala @@ -173,7 +173,7 @@ private class Boxes.InstallerMedia : GLib.Object { disk.set_target_dev (device_name); if (iso_path != null) disk.set_source (iso_path); - disk.set_target_bus (DomainDiskBus.IDE); + disk.set_target_bus (prefers_q35? DomainDiskBus.SATA : DomainDiskBus.IDE); if (mandatory) disk.set_startup_policy (DomainDiskStartupPolicy.MANDATORY); -- --- src/unattended-installer.vala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/unattended-installer.vala b/src/unattended-installer.vala index 6a37e20..e3fd115 100644 --- a/src/unattended-installer.vala +++ b/src/unattended-installer.vala @@ -379,7 +379,7 @@ private class Boxes.UnattendedInstaller: InstallerMedia { disk.set_source (secondary_disk_file.get_path ()); disk.set_target_dev ((path_format == PathFormat.DOS)? "E" : "hdd"); disk.set_guest_device_type (DomainDiskGuestDeviceType.CDROM); - disk.set_target_bus (DomainDiskBus.IDE); + disk.set_target_bus (prefers_q35? DomainDiskBus.SATA : DomainDiskBus.IDE); return disk; } -- --- src/vm-configurator.vala | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/vm-configurator.vala b/src/vm-configurator.vala index ceadc80..c537316 100644 --- a/src/vm-configurator.vala +++ b/src/vm-configurator.vala @@ -315,8 +315,13 @@ private class Boxes.VMConfigurator { disk.set_target_bus (DomainDiskBus.VIRTIO); disk.set_target_dev ("vd" + dev_letter_str); } else { - debug ("Using IDE controller for the main disk"); - disk.set_target_bus (DomainDiskBus.IDE); + if (install_media.prefers_q35) { + debug ("Using SATA controller for the main disk"); + disk.set_target_bus (DomainDiskBus.SATA); + } else { + debug ("Using IDE controller for the main disk"); + disk.set_target_bus (DomainDiskBus.IDE); + } disk.set_target_dev ("hd" + dev_letter_str); } -- --- src/vm-configurator.vala | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/vm-configurator.vala b/src/vm-configurator.vala index c537316..07804f9 100644 --- a/src/vm-configurator.vala +++ b/src/vm-configurator.vala @@ -363,13 +363,22 @@ private class Boxes.VMConfigurator { domain.add_device (video); } - private static void set_sound_config (Domain domain, InstallerMedia install_media) { - var sound = new DomainSound (); + private static DomainSoundModel get_sound_model (InstallerMedia install_media) { + if (install_media.prefers_ich9) + return (DomainSoundModel) DomainSoundModel.ICH9; + var device = find_device_by_prop (install_media.supported_devices, DEVICE_PROP_CLASS, "audio"); - var model = (device != null)? get_enum_value (device.get_name (), typeof (DomainSoundModel)) : - DomainSoundModel.AC97; + if (device == null) + return (DomainSoundModel) DomainSoundModel.ICH6; + + var model = get_enum_value (device.get_name (), typeof (DomainSoundModel)); return_if_fail (model != -1); - sound.set_model ((DomainSoundModel) model); + return (DomainSoundModel) model; + } + + private static void set_sound_config (Domain domain, InstallerMedia install_media) { + var sound = new DomainSound (); + sound.set_model (get_sound_model (install_media)); domain.add_device (sound); } -- --- src/vm-configurator.vala | 1 + 1 file changed, 1 insertion(+) diff --git a/src/vm-configurator.vala b/src/vm-configurator.vala index 07804f9..3dc1c8e 100644 --- a/src/vm-configurator.vala +++ b/src/vm-configurator.vala @@ -338,6 +338,7 @@ private class Boxes.VMConfigurator { os.set_boot_devices (boot_devices); os.set_arch (old_os.get_arch ()); + os.set_machine (old_os.get_machine ()); domain.set_os (os); } -- --- src/vm-configurator.vala | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/vm-configurator.vala b/src/vm-configurator.vala index 3dc1c8e..6c20f5e 100644 --- a/src/vm-configurator.vala +++ b/src/vm-configurator.vala @@ -347,6 +347,8 @@ private class Boxes.VMConfigurator { 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"); var boot_devices = new GLib.List (); install_media.set_direct_boot_params (os); -- --- src/installer-media.vala | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/installer-media.vala b/src/installer-media.vala index ba6bfc8..4a8d913 100644 --- a/src/installer-media.vala +++ b/src/installer-media.vala @@ -57,7 +57,14 @@ private class Boxes.InstallerMedia : GLib.Object { public bool prefers_ich9 { get { - return false; + if (!prefers_q35) + return false; + + var device = find_device_by_prop (supported_devices, DEVICE_PROP_NAME, "ich9-hda"); + if (device == null) + return false; + + return true; } } -- --- src/installer-media.vala | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/installer-media.vala b/src/installer-media.vala index 4a8d913..5bde3ca 100644 --- a/src/installer-media.vala +++ b/src/installer-media.vala @@ -51,7 +51,17 @@ private class Boxes.InstallerMedia : GLib.Object { public bool prefers_q35 { get { - return false; + if (os == null) + return true; + + var device = find_device_by_prop (supported_devices, DEVICE_PROP_NAME, "qemu-x86-q35"); + if (device == null) + return false; + + if (supports_virtio_net && !supports_virtio1_net) + return false; + + return true; } } --