Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package virt-manager for openSUSE:Factory checked in at 2025-01-29 16:09:32 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/virt-manager (Old) and /work/SRC/openSUSE:Factory/.virt-manager.new.2316 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "virt-manager" Wed Jan 29 16:09:32 2025 rev:267 rq:1241008 version:5.0.0 Changes: -------- --- /work/SRC/openSUSE:Factory/virt-manager/virt-manager.changes 2024-12-06 14:25:26.650117091 +0100 +++ /work/SRC/openSUSE:Factory/.virt-manager.new.2316/virt-manager.changes 2025-01-29 16:09:39.069655511 +0100 @@ -1,0 +2,22 @@ +Tue Jan 28 10:24:44 MST 2025 - carn...@suse.com + +- Upstream bug fixes (bsc#1027942) (jsc#PED-8910) + 001-cli-Support-cpu-maximum.patch + 002-gui-Support-maximum-CPU-mode.patch + 003-cpu-Prefer-maximum-mode-for-many-emulated-guests.patch + 004-domcaps-get-list-of-supported-panic-device-models.patch + 005-tests-Update-capabilities-for-advertisting-panic-device-models.patch + 006-addhardware-panic-Fill-in-model-combo-with-advertised-values-by-libvirt.patch + 007-cli-man-Always-list-osinfo-before-os-variant.patch + 008-snapshots-default-to-same-snapshot-mode-as-currently-used-snapshot.patch + 009-snapshots-warn-users-to-not-mix-snapshot-modes.patch +- Drop virtinst-dont-use-special-copy-cpu-features.patch + +------------------------------------------------------------------- +Fri Jan 17 13:16:07 MST 2025 - carn...@suse.com + +- Fix issue being able to detect SLES 16 media (jsc#PED-8910) + See also bsc#1236252 + virtinst-add-sle16-detection-support.patch + +------------------------------------------------------------------- Old: ---- virtinst-dont-use-special-copy-cpu-features.patch New: ---- 001-cli-Support-cpu-maximum.patch 002-gui-Support-maximum-CPU-mode.patch 003-cpu-Prefer-maximum-mode-for-many-emulated-guests.patch 004-domcaps-get-list-of-supported-panic-device-models.patch 005-tests-Update-capabilities-for-advertisting-panic-device-models.patch 006-addhardware-panic-Fill-in-model-combo-with-advertised-values-by-libvirt.patch 007-cli-man-Always-list-osinfo-before-os-variant.patch 008-snapshots-default-to-same-snapshot-mode-as-currently-used-snapshot.patch 009-snapshots-warn-users-to-not-mix-snapshot-modes.patch virtinst-add-sle16-detection-support.patch BETA DEBUG BEGIN: Old: 009-snapshots-warn-users-to-not-mix-snapshot-modes.patch - Drop virtinst-dont-use-special-copy-cpu-features.patch BETA DEBUG END: BETA DEBUG BEGIN: New:- Upstream bug fixes (bsc#1027942) (jsc#PED-8910) 001-cli-Support-cpu-maximum.patch 002-gui-Support-maximum-CPU-mode.patch New: 001-cli-Support-cpu-maximum.patch 002-gui-Support-maximum-CPU-mode.patch 003-cpu-Prefer-maximum-mode-for-many-emulated-guests.patch New: 002-gui-Support-maximum-CPU-mode.patch 003-cpu-Prefer-maximum-mode-for-many-emulated-guests.patch 004-domcaps-get-list-of-supported-panic-device-models.patch New: 003-cpu-Prefer-maximum-mode-for-many-emulated-guests.patch 004-domcaps-get-list-of-supported-panic-device-models.patch 005-tests-Update-capabilities-for-advertisting-panic-device-models.patch New: 004-domcaps-get-list-of-supported-panic-device-models.patch 005-tests-Update-capabilities-for-advertisting-panic-device-models.patch 006-addhardware-panic-Fill-in-model-combo-with-advertised-values-by-libvirt.patch New: 005-tests-Update-capabilities-for-advertisting-panic-device-models.patch 006-addhardware-panic-Fill-in-model-combo-with-advertised-values-by-libvirt.patch 007-cli-man-Always-list-osinfo-before-os-variant.patch New: 006-addhardware-panic-Fill-in-model-combo-with-advertised-values-by-libvirt.patch 007-cli-man-Always-list-osinfo-before-os-variant.patch 008-snapshots-default-to-same-snapshot-mode-as-currently-used-snapshot.patch New: 007-cli-man-Always-list-osinfo-before-os-variant.patch 008-snapshots-default-to-same-snapshot-mode-as-currently-used-snapshot.patch 009-snapshots-warn-users-to-not-mix-snapshot-modes.patch New: 008-snapshots-default-to-same-snapshot-mode-as-currently-used-snapshot.patch 009-snapshots-warn-users-to-not-mix-snapshot-modes.patch - Drop virtinst-dont-use-special-copy-cpu-features.patch New: See also bsc#1236252 virtinst-add-sle16-detection-support.patch BETA DEBUG END: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ virt-manager.spec ++++++ --- /var/tmp/diff_new_pack.IwMLY0/_old 2025-01-29 16:09:40.893731153 +0100 +++ /var/tmp/diff_new_pack.IwMLY0/_new 2025-01-29 16:09:40.897731319 +0100 @@ -1,7 +1,7 @@ # # spec file # -# Copyright (c) 2024 SUSE LLC +# Copyright (c) 2025 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -19,6 +19,11 @@ %global __python %{__python3} %global with_guestfs 0 %global default_hvs "qemu,xen,lxc" +%if 0%{?suse_version} < 1600 + %define have_spice 1 +%else + %define have_spice 0 +%endif %global flavor @BUILD_FLAVOR@%{nil} %if "%{flavor}" == "test" @@ -41,6 +46,15 @@ Source2: virt-install.desktop Source3: virt-manager-supportconfig # Upstream Patches +Patch1: 001-cli-Support-cpu-maximum.patch +Patch2: 002-gui-Support-maximum-CPU-mode.patch +Patch3: 003-cpu-Prefer-maximum-mode-for-many-emulated-guests.patch +Patch4: 004-domcaps-get-list-of-supported-panic-device-models.patch +Patch5: 005-tests-Update-capabilities-for-advertisting-panic-device-models.patch +Patch6: 006-addhardware-panic-Fill-in-model-combo-with-advertised-values-by-libvirt.patch +Patch7: 007-cli-man-Always-list-osinfo-before-os-variant.patch +Patch8: 008-snapshots-default-to-same-snapshot-mode-as-currently-used-snapshot.patch +Patch9: 009-snapshots-warn-users-to-not-mix-snapshot-modes.patch Patch100: revert-363fca41-virt-install-Require-osinfo-for-non-x86-HVM-case-too.patch # SUSE Only Patch150: virtman-desktop.patch @@ -80,7 +94,6 @@ Patch273: virtinst-use-xenpae-kernel-for-32bit.patch Patch274: virtinst-use-qemu-for-cdrom-device.patch Patch275: virtinst-keep-install-iso-attached.patch -Patch276: virtinst-dont-use-special-copy-cpu-features.patch Patch277: virtinst-set-default-nic.patch Patch278: virtinst-sap-detection.patch Patch279: virtinst-smbios-unsupported-for-xenpv.patch @@ -91,6 +104,7 @@ Patch284: virtinst-add-slem60-detection-support.patch Patch285: virtinst-windows-server-detection.patch Patch286: virtinst-drop-removeprefix-usage.patch +Patch287: virtinst-add-sle16-detection-support.patch BuildArch: noarch @@ -104,7 +118,9 @@ Requires: python3-dbus-python Requires: python3-gobject-Gdk Requires: python3-gobject-cairo +%if %{have_spice} Recommends: python3-SpiceClientGtk +%endif Requires: virt-install Requires: virt-manager-common = %{verrel} Requires: typelib(GtkSource) @@ -123,6 +139,7 @@ BuildRequires: python3-pytest BuildRequires: virt-install = %{version} BuildRequires: virt-manager = %{version} +BuildRequires: pkgconfig(vte-2.91) %endif %description @@ -179,8 +196,14 @@ %if %{default_hvs} %global _default_hvs --default-hvs %{default_hvs} %endif +%if ! %{have_spice} +%global _default_graphics -Ddefault-graphics=vnc +%else +%global _default_graphics -Ddefault-graphics=spice +%endif %meson \ -Ddefault-hvs=%{default_hvs} \ + %{?_default_graphics} \ -Dupdate-icon-cache=false \ -Dcompile-schemas=false \ -Dtests=disabled @@ -255,6 +278,7 @@ donttest="$donttest or testCLI0460virt_clone" donttest="$donttest or testCLI0461virt_clone" donttest="$donttest or testCLI0468virt_clone" +donttest="$donttest or test_virtinstall_no_testsuite" donttest="$donttest or testCheckXMLBuilderProps" donttest="$donttest or testCheckCLISuboptions" # ++++++ 001-cli-Support-cpu-maximum.patch ++++++ Subject: cli: Support --cpu maximum From: Andrea Bolognani abolo...@redhat.com Fri Dec 6 22:10:31 2024 +0100 Date: Tue Dec 10 14:01:32 2024 +0100: Git: fca41cfaa970ba5a4e695f482fd599f53572b6c7 This mode has been introduced in libvirt 7.1.0 (March 2021) and can be already used today with --cpu mode=maximum This is however slightly inconvenient to type and is not consistent with the special treatment that the other modes (host-passthrough, host-model) get. Introduce a proper special mode for it. Signed-off-by: Andrea Bolognani <abolo...@redhat.com> diff --git a/man/virt-install.rst b/man/virt-install.rst index 86152d214..775d7ce70 100644 --- a/man/virt-install.rst +++ b/man/virt-install.rst @@ -438,6 +438,11 @@ Some examples: ``--cpu host-passthrough,cache.mode=passthrough`` Example of passing through the host cpu's cache information. +``--cpu maximum`` + Expose the most feature-rich CPU possible. Useful when running a foreign + architecture guest, for example a riscv64 guest on an x86_64 host. Not + recommended when using KVM to run a same-architecture guest. + Use --cpu=? to see a list of all available sub options. Complete details at https://libvirt.org/formatdomain.html#cpu-model-and-topology diff --git a/tests/data/cli/compare/virt-install-linux2020.xml b/tests/data/cli/compare/virt-install-linux2020.xml index 5a7d7adf3..b37b87758 100644 --- a/tests/data/cli/compare/virt-install-linux2020.xml +++ b/tests/data/cli/compare/virt-install-linux2020.xml @@ -19,7 +19,7 @@ <apic/> <vmport state="off"/> </features> - <cpu mode="host-passthrough"/> + <cpu mode="maximum"/> <clock offset="utc"> <timer name="rtc" tickpolicy="catchup"/> <timer name="pit" tickpolicy="delay"/> @@ -102,7 +102,7 @@ <apic/> <vmport state="off"/> </features> - <cpu mode="host-passthrough"/> + <cpu mode="maximum"/> <clock offset="utc"> <timer name="rtc" tickpolicy="catchup"/> <timer name="pit" tickpolicy="delay"/> diff --git a/tests/test_cli.py b/tests/test_cli.py index 23ad1cadb..03c3316e1 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -1153,7 +1153,7 @@ c.add_compare("--os-variant http://fedoraproject.org/fedora/20 --disk %(EXISTIMG c.add_compare("--cdrom %(EXISTIMG2)s --file %(EXISTIMG1)s --os-variant win2k3 --sound --controller usb", "kvm-win2k3-cdrom") # HVM windows install with disk c.add_compare("--os-variant name=ubuntusaucy --nodisks --boot cdrom --virt-type qemu --cpu Penryn --input tablet --boot uefi --graphics vnc", "qemu-plain") # plain qemu c.add_compare("--os-variant fedora20 --nodisks --boot network --graphics default --arch i686 --rng none", "qemu-32-on-64", prerun_check=has_old_osinfo) # 32 on 64 -c.add_compare("--osinfo linux2020 --pxe", "linux2020", prerun_check=no_osinfo_linux2020_virtio) +c.add_compare("--osinfo linux2020 --pxe --cpu maximum", "linux2020", prerun_check=no_osinfo_linux2020_virtio) # also --cpu maximum c.add_compare("--check disk_size=off --osinfo win11 --cdrom %(EXISTIMG1)s", "win11", prerun_check=no_osinfo_win11) c.add_compare("--check disk_size=off --osinfo win11 --cdrom %(EXISTIMG1)s --boot uefi=off", "win11-no-uefi") c.add_compare("--osinfo generic --disk none --location %(ISO-NO-OS)s,kernel=frib.img,initrd=/frob.img", "location-manual-kernel", prerun_check=missing_xorriso) # --location with an unknown ISO but manually specified kernel paths diff --git a/virtinst/domain/cpu.py b/virtinst/domain/cpu.py index df0ca2250..91a9481cf 100644 --- a/virtinst/domain/cpu.py +++ b/virtinst/domain/cpu.py @@ -267,12 +267,13 @@ class DomainCpu(XMLBuilder): SPECIAL_MODE_HOST_COPY = "host-copy" SPECIAL_MODE_HOST_MODEL = "host-model" SPECIAL_MODE_HOST_PASSTHROUGH = "host-passthrough" + SPECIAL_MODE_MAXIMUM = "maximum" SPECIAL_MODE_CLEAR = "clear" SPECIAL_MODE_APP_DEFAULT = "default" SPECIAL_MODES = [SPECIAL_MODE_HOST_MODEL_ONLY, SPECIAL_MODE_HV_DEFAULT, SPECIAL_MODE_HOST_COPY, SPECIAL_MODE_HOST_MODEL, - SPECIAL_MODE_HOST_PASSTHROUGH, SPECIAL_MODE_CLEAR, - SPECIAL_MODE_APP_DEFAULT] + SPECIAL_MODE_HOST_PASSTHROUGH, SPECIAL_MODE_MAXIMUM, + SPECIAL_MODE_CLEAR, SPECIAL_MODE_APP_DEFAULT] def _get_app_default_mode(self, guest): # Depending on if libvirt+qemu is new enough, we prefer @@ -295,7 +296,8 @@ class DomainCpu(XMLBuilder): log.debug("Using default cpu mode=%s", val) if (val == self.SPECIAL_MODE_HOST_MODEL or - val == self.SPECIAL_MODE_HOST_PASSTHROUGH): + val == self.SPECIAL_MODE_HOST_PASSTHROUGH or + val == self.SPECIAL_MODE_MAXIMUM): self.model = None self.vendor = None self.model_fallback = None ++++++ 002-gui-Support-maximum-CPU-mode.patch ++++++ Subject: gui: Support maximum CPU mode From: Andrea Bolognani abolo...@redhat.com Fri Dec 6 22:28:09 2024 +0100 Date: Tue Dec 10 14:01:32 2024 +0100: Git: 11b70218d3b38efae36db8ba4149702a6d51afc0 Allow the user to set it and recognize it correctly when the domain is already using it. Signed-off-by: Andrea Bolognani <abolo...@redhat.com> diff --git a/virtManager/details/details.py b/virtManager/details/details.py index e53c52ef0..0dc9d2d64 100644 --- a/virtManager/details/details.py +++ b/virtManager/details/details.py @@ -775,6 +775,8 @@ class vmmDetails(vmmGObjectUI): virtinst.DomainCpu.SPECIAL_MODE_HOST_MODEL, False]) model.append(["host-passthrough", "05", virtinst.DomainCpu.SPECIAL_MODE_HOST_PASSTHROUGH, False]) + model.append(["maximum", "06", + virtinst.DomainCpu.SPECIAL_MODE_MAXIMUM, False]) model.append([None, None, None, True]) for name in domcaps.get_cpu_models(): model.append([name, name, name, False]) @@ -1915,7 +1917,8 @@ class vmmDetails(vmmGObjectUI): # CPU model config model = cpu.model or None is_host = (cpu.mode in ["host-model", "host-passthrough"]) - if not model and is_host: + is_special_mode = (cpu.mode in virtinst.DomainCpu.SPECIAL_MODES) + if not model and is_special_mode: model = cpu.mode if model: diff --git a/virtManager/preferences.py b/virtManager/preferences.py index 5022f7ed3..df599d044 100644 --- a/virtManager/preferences.py +++ b/virtManager/preferences.py @@ -172,7 +172,8 @@ class vmmPreferences(vmmGObjectUI): [DomainCpu.SPECIAL_MODE_HOST_MODEL_ONLY, _("Nearest host CPU model")], [DomainCpu.SPECIAL_MODE_HOST_MODEL, "host-model"], - [DomainCpu.SPECIAL_MODE_HOST_PASSTHROUGH, "host-passthrough"]]: + [DomainCpu.SPECIAL_MODE_HOST_PASSTHROUGH, "host-passthrough"], + [DomainCpu.SPECIAL_MODE_MAXIMUM, "maximum"]]: model.append(row) combo.set_model(model) uiutil.init_combo_text_column(combo, 1) ++++++ 003-cpu-Prefer-maximum-mode-for-many-emulated-guests.patch ++++++ Subject: cpu: Prefer maximum mode for many emulated guests From: Andrea Bolognani abolo...@redhat.com Fri Dec 6 23:02:29 2024 +0100 Date: Tue Dec 10 14:01:32 2024 +0100: Git: 8af438dd58cafe90d591eef25e7510c313cf3036 The actual default CPU at the QEMU level is often a relatively poor choice, which is stuck with just baseline functionality and can sometimes not run modern guests at all. Whenever possible, prefer maximum mode for a much nicer out of the box experience. Signed-off-by: Andrea Bolognani <abolo...@redhat.com> diff --git a/tests/data/cli/compare/virt-install-aarch64-machdefault.xml b/tests/data/cli/compare/virt-install-aarch64-machdefault.xml index f88a0fc17..d17c82573 100644 --- a/tests/data/cli/compare/virt-install-aarch64-machdefault.xml +++ b/tests/data/cli/compare/virt-install-aarch64-machdefault.xml @@ -18,9 +18,7 @@ <features> <acpi/> </features> - <cpu mode="custom" match="exact"> - <model>cortex-a57</model> - </cpu> + <cpu mode="maximum"/> <clock offset="utc"/> <devices> <emulator>/usr/bin/qemu-system-aarch64</emulator> diff --git a/tests/data/cli/compare/virt-install-aarch64-machvirt.xml b/tests/data/cli/compare/virt-install-aarch64-machvirt.xml index f88a0fc17..d17c82573 100644 --- a/tests/data/cli/compare/virt-install-aarch64-machvirt.xml +++ b/tests/data/cli/compare/virt-install-aarch64-machvirt.xml @@ -18,9 +18,7 @@ <features> <acpi/> </features> - <cpu mode="custom" match="exact"> - <model>cortex-a57</model> - </cpu> + <cpu mode="maximum"/> <clock offset="utc"/> <devices> <emulator>/usr/bin/qemu-system-aarch64</emulator> diff --git a/tests/data/cli/compare/virt-install-arm-defaultmach-f20.xml b/tests/data/cli/compare/virt-install-arm-defaultmach-f20.xml index b56d07880..bc8006252 100644 --- a/tests/data/cli/compare/virt-install-arm-defaultmach-f20.xml +++ b/tests/data/cli/compare/virt-install-arm-defaultmach-f20.xml @@ -15,6 +15,7 @@ <initrd>/f19-arm.initrd</initrd> <cmdline>foo</cmdline> </os> + <cpu mode="maximum"/> <clock offset="utc"/> <devices> <emulator>/usr/bin/qemu-system-arm</emulator> diff --git a/tests/data/cli/compare/virt-install-arm-virt-f20.xml b/tests/data/cli/compare/virt-install-arm-virt-f20.xml index 9d2001697..dc74281b7 100644 --- a/tests/data/cli/compare/virt-install-arm-virt-f20.xml +++ b/tests/data/cli/compare/virt-install-arm-virt-f20.xml @@ -15,6 +15,7 @@ <initrd>/f19-arm.initrd</initrd> <cmdline>console=ttyAMA0,1234 rw root=/dev/vda3</cmdline> </os> + <cpu mode="maximum"/> <clock offset="utc"/> <devices> <emulator>/usr/bin/qemu-system-arm</emulator> diff --git a/tests/data/cli/compare/virt-install-riscv64-cdrom.xml b/tests/data/cli/compare/virt-install-riscv64-cdrom.xml index 35cd1e712..1d6bd923c 100644 --- a/tests/data/cli/compare/virt-install-riscv64-cdrom.xml +++ b/tests/data/cli/compare/virt-install-riscv64-cdrom.xml @@ -14,6 +14,7 @@ <boot dev="cdrom"/> <boot dev="hd"/> </os> + <cpu mode="maximum"/> <clock offset="utc"/> <devices> <emulator>/usr/bin/qemu-system-riscv64</emulator> @@ -92,6 +93,7 @@ <type arch="riscv64" machine="virt">hvm</type> <boot dev="hd"/> </os> + <cpu mode="maximum"/> <clock offset="utc"/> <devices> <emulator>/usr/bin/qemu-system-riscv64</emulator> diff --git a/tests/data/cli/compare/virt-install-riscv64-cloud-init.xml b/tests/data/cli/compare/virt-install-riscv64-cloud-init.xml index b83937ca5..815f93ea0 100644 --- a/tests/data/cli/compare/virt-install-riscv64-cloud-init.xml +++ b/tests/data/cli/compare/virt-install-riscv64-cloud-init.xml @@ -12,6 +12,7 @@ <os firmware="efi"> <type arch="riscv64" machine="virt">hvm</type> </os> + <cpu mode="maximum"/> <clock offset="utc"/> <devices> <emulator>/usr/bin/qemu-system-riscv64</emulator> @@ -87,6 +88,7 @@ <type arch="riscv64" machine="virt">hvm</type> <boot dev="hd"/> </os> + <cpu mode="maximum"/> <clock offset="utc"/> <devices> <emulator>/usr/bin/qemu-system-riscv64</emulator> diff --git a/tests/data/cli/compare/virt-install-riscv64-graphics.xml b/tests/data/cli/compare/virt-install-riscv64-graphics.xml index 659dae74f..04ab41933 100644 --- a/tests/data/cli/compare/virt-install-riscv64-graphics.xml +++ b/tests/data/cli/compare/virt-install-riscv64-graphics.xml @@ -13,6 +13,7 @@ <type arch="riscv64" machine="virt">hvm</type> <boot dev="hd"/> </os> + <cpu mode="maximum"/> <clock offset="utc"/> <devices> <emulator>/usr/bin/qemu-system-riscv64</emulator> diff --git a/tests/data/cli/compare/virt-install-riscv64-headless.xml b/tests/data/cli/compare/virt-install-riscv64-headless.xml index 939e71b2a..27328a123 100644 --- a/tests/data/cli/compare/virt-install-riscv64-headless.xml +++ b/tests/data/cli/compare/virt-install-riscv64-headless.xml @@ -13,6 +13,7 @@ <type arch="riscv64" machine="virt">hvm</type> <boot dev="hd"/> </os> + <cpu mode="maximum"/> <clock offset="utc"/> <devices> <emulator>/usr/bin/qemu-system-riscv64</emulator> diff --git a/tests/data/cli/compare/virt-install-riscv64-kernel-boot.xml b/tests/data/cli/compare/virt-install-riscv64-kernel-boot.xml index 640e5ee0d..c3714594a 100644 --- a/tests/data/cli/compare/virt-install-riscv64-kernel-boot.xml +++ b/tests/data/cli/compare/virt-install-riscv64-kernel-boot.xml @@ -15,6 +15,7 @@ <initrd>/initrd.img</initrd> <cmdline>root=/dev/vda2</cmdline> </os> + <cpu mode="maximum"/> <clock offset="utc"/> <devices> <emulator>/usr/bin/qemu-system-riscv64</emulator> diff --git a/tests/data/cli/compare/virt-install-riscv64-unattended.xml b/tests/data/cli/compare/virt-install-riscv64-unattended.xml index 0a9f88b4e..7fdb32d04 100644 --- a/tests/data/cli/compare/virt-install-riscv64-unattended.xml +++ b/tests/data/cli/compare/virt-install-riscv64-unattended.xml @@ -12,6 +12,7 @@ <os firmware="efi"> <type arch="riscv64" machine="virt">hvm</type> </os> + <cpu mode="maximum"/> <clock offset="utc"/> <devices> <emulator>/usr/bin/qemu-system-riscv64</emulator> @@ -90,6 +91,7 @@ <type arch="riscv64" machine="virt">hvm</type> <boot dev="hd"/> </os> + <cpu mode="maximum"/> <clock offset="utc"/> <devices> <emulator>/usr/bin/qemu-system-riscv64</emulator> diff --git a/tests/test_cli.py b/tests/test_cli.py index 03c3316e1..dc9c156da 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -1247,7 +1247,7 @@ c.add_compare("--connect %(URI-KVM-ARMV7L)s --disk %(EXISTIMG1)s --import --os-v c.add_valid("--arch aarch64 --osinfo fedora19 --nodisks --pxe --connect " + utils.URIs.kvm_x86_nodomcaps, grep="Libvirt version does not support UEFI") # attempt to default to aarch64 UEFI, but it fails, but should only print warnings c.add_invalid("--arch aarch64 --nodisks --pxe --connect " + utils.URIs.kvm_x86, grep="OS name is required") # catch missing osinfo for non-x86 -c.add_compare("--arch aarch64 --osinfo fedora19 --machine virt --boot kernel=/f19-arm.kernel,initrd=/f19-arm.initrd,kernel_args=\"console=ttyAMA0,1234 rw root=/dev/vda3\" --disk %(EXISTIMG1)s", "aarch64-machvirt") +c.add_compare("--arch aarch64 --osinfo fedora19 --machine virt --cpu default --boot kernel=/f19-arm.kernel,initrd=/f19-arm.initrd,kernel_args=\"console=ttyAMA0,1234 rw root=/dev/vda3\" --disk %(EXISTIMG1)s", "aarch64-machvirt") c.add_compare("--arch aarch64 --osinfo fedora19 --boot kernel=/f19-arm.kernel,initrd=/f19-arm.initrd,kernel_args=\"console=ttyAMA0,1234 rw root=/dev/vda3\" --disk %(EXISTIMG1)s", "aarch64-machdefault") c.add_compare("--arch aarch64 --cdrom %(ISO-F26-NETINST)s --boot loader=CODE.fd,nvram.template=VARS.fd --disk %(EXISTIMG1)s --cpu none --events on_crash=preserve,on_reboot=destroy,on_poweroff=restart", "aarch64-cdrom") # cdrom test, but also --cpu none override, --events override, and headless c.add_compare("--connect %(URI-KVM-AARCH64)s --disk %(EXISTIMG1)s --import --os-variant fedora21 --panic default --graphics vnc", "aarch64-kvm-import") # --import test, but also test --panic no-op, and --graphics diff --git a/virtinst/domain/cpu.py b/virtinst/domain/cpu.py index 91a9481cf..cc4053f88 100644 --- a/virtinst/domain/cpu.py +++ b/virtinst/domain/cpu.py @@ -275,11 +275,26 @@ class DomainCpu(XMLBuilder): SPECIAL_MODE_HOST_PASSTHROUGH, SPECIAL_MODE_MAXIMUM, SPECIAL_MODE_CLEAR, SPECIAL_MODE_APP_DEFAULT] + def _should_use_maximum_cpu_mode(self, guest, domcaps): + if (domcaps.supports_maximum_cpu_mode() and + guest.type == "qemu" and + (guest.os.is_x86() or + guest.os.is_arm_machvirt() or + guest.os.is_riscv_virt() or + guest.os.is_loongarch64())): + return True + + return False + def _get_app_default_mode(self, guest): # Depending on if libvirt+qemu is new enough, we prefer # host-passthrough, then host-model, and finally host-model-only + # Emulated guests use maximum mode if available domcaps = guest.lookup_domcaps() + if (self._should_use_maximum_cpu_mode(guest, domcaps)): + return self.SPECIAL_MODE_MAXIMUM + if domcaps.supports_safe_host_passthrough(): return self.SPECIAL_MODE_HOST_PASSTHROUGH @@ -460,9 +475,12 @@ class DomainCpu(XMLBuilder): if guest.os.is_arm_machvirt() and guest.type == "kvm": self.mode = self.SPECIAL_MODE_HOST_PASSTHROUGH - elif guest.os.is_arm64() and guest.os.is_arm_machvirt(): - # -M virt defaults to a 32bit CPU, even if using aarch64 - self.set_model(guest, "cortex-a57") - elif guest.os.is_x86() and guest.type == "kvm": self._set_cpu_x86_kvm_default(guest) + + else: + domcaps = guest.lookup_domcaps() + + # Prefer to emulate a feature-rich CPU instead of a basic one + if (self._should_use_maximum_cpu_mode(guest, domcaps)): + self.set_special_mode(guest, self.SPECIAL_MODE_MAXIMUM) diff --git a/virtinst/domcapabilities.py b/virtinst/domcapabilities.py index 3a19591d9..5d82a351e 100644 --- a/virtinst/domcapabilities.py +++ b/virtinst/domcapabilities.py @@ -382,6 +382,10 @@ class DomainCapabilities(XMLBuilder): return (m and m.supported and "on" in m.get_enum("hostPassthroughMigratable").get_values()) + def supports_maximum_cpu_mode(self): + m = self.cpu.get_mode("maximum") + return (m and m.supported) + def get_cpu_models(self): models = [] ++++++ 004-domcaps-get-list-of-supported-panic-device-models.patch ++++++ Subject: domcaps: get list of supported panic device models From: Lin Ma l...@suse.de Tue Dec 3 13:32:15 2024 +0800 Date: Tue Dec 10 14:05:20 2024 +0100: Git: c859c7acec38a68a46b3ee98b1ff494fa88d508e libvirt commit a52cd504 added support for advertisting panic device models. Let's use it in domcapabilities. Signed-off-by: Lin Ma <l...@suse.de> diff --git a/virtinst/domcapabilities.py b/virtinst/domcapabilities.py index 5d82a351e..9e1b11932 100644 --- a/virtinst/domcapabilities.py +++ b/virtinst/domcapabilities.py @@ -115,6 +115,7 @@ class _Devices(_CapsBlock): filesystem = XMLChildProperty(_make_capsblock("filesystem"), is_single=True) redirdev = XMLChildProperty(_make_capsblock("redirdev"), is_single=True) channel = XMLChildProperty(_make_capsblock("channel"), is_single=True) + panic = XMLChildProperty(_make_capsblock("panic"), is_single=True) class _Features(_CapsBlock): @@ -508,3 +509,9 @@ class DomainCapabilities(XMLBuilder): return [] return self.features.hyperv.get_enum("features").get_values() + + def supported_panic_models(self): + """ + Return list of supported panic device models. + """ + return self.devices.panic.get_enum("model").get_values() ++++++ 005-tests-Update-capabilities-for-advertisting-panic-device-models.patch ++++++ Subject: tests: Update capabilities for advertisting panic device models From: Lin Ma l...@suse.de Tue Dec 3 18:45:52 2024 +0800 Date: Tue Dec 10 14:05:20 2024 +0100: Git: f9ceec2b14cb4012cb40226f3c0c05ff1ac8f708 Signed-off-by: Lin Ma <l...@suse.de> diff --git a/tests/data/capabilities/kvm-aarch64-domcaps.xml b/tests/data/capabilities/kvm-aarch64-domcaps.xml index eeef1a17a..af8354b08 100644 --- a/tests/data/capabilities/kvm-aarch64-domcaps.xml +++ b/tests/data/capabilities/kvm-aarch64-domcaps.xml @@ -215,6 +215,11 @@ <value>lkcf</value> </enum> </crypto> + <panic supported='yes'> + <enum name='model'> + <value>pvpanic</value> + </enum> + </panic> </devices> <features> <gic supported='yes'> diff --git a/tests/data/capabilities/kvm-loongarch64-domcaps.xml b/tests/data/capabilities/kvm-loongarch64-domcaps.xml index e9836fec4..d2b348f4c 100644 --- a/tests/data/capabilities/kvm-loongarch64-domcaps.xml +++ b/tests/data/capabilities/kvm-loongarch64-domcaps.xml @@ -152,6 +152,11 @@ <value>lkcf</value> </enum> </crypto> + <panic supported='yes'> + <enum name='model'> + <value>pvpanic</value> + </enum> + </panic> </devices> <features> <gic supported='no'/> diff --git a/tests/data/capabilities/kvm-ppc64le-domcaps.xml b/tests/data/capabilities/kvm-ppc64le-domcaps.xml index 7d40b12ff..46234fd19 100644 --- a/tests/data/capabilities/kvm-ppc64le-domcaps.xml +++ b/tests/data/capabilities/kvm-ppc64le-domcaps.xml @@ -160,6 +160,12 @@ <value>lkcf</value> </enum> </crypto> + <panic supported='yes'> + <enum name='model'> + <value>pseries</value> + <value>pvpanic</value> + </enum> + </panic> </devices> <features> <gic supported='no'/> diff --git a/tests/data/capabilities/kvm-x86_64-domcaps-latest.xml b/tests/data/capabilities/kvm-x86_64-domcaps-latest.xml index 91fabc5fa..b5e06eda6 100644 --- a/tests/data/capabilities/kvm-x86_64-domcaps-latest.xml +++ b/tests/data/capabilities/kvm-x86_64-domcaps-latest.xml @@ -259,6 +259,13 @@ <value>lkcf</value> </enum> </crypto> + <panic supported='yes'> + <enum name='model'> + <value>isa</value> + <value>hyperv</value> + <value>pvpanic</value> + </enum> + </panic> </devices> <features> <gic supported='no'/> diff --git a/tests/data/capabilities/qemu-riscv64-domcaps.xml b/tests/data/capabilities/qemu-riscv64-domcaps.xml index c8a9e5915..30eca7129 100644 --- a/tests/data/capabilities/qemu-riscv64-domcaps.xml +++ b/tests/data/capabilities/qemu-riscv64-domcaps.xml @@ -167,6 +167,11 @@ <value>lkcf</value> </enum> </crypto> + <panic supported='yes'> + <enum name='model'> + <value>pvpanic</value> + </enum> + </panic> </devices> <features> <gic supported='no'/> diff --git a/tests/test_capabilities.py b/tests/test_capabilities.py index 1ebd564d4..5351c8352 100644 --- a/tests/test_capabilities.py +++ b/tests/test_capabilities.py @@ -101,6 +101,7 @@ def testDomainCapabilitiesx86(): assert caps.supports_memorybacking_memfd() assert caps.supports_redirdev_usb() assert caps.supports_channel_spicevmc() + assert caps.supported_panic_models() == ["isa", "hyperv", "pvpanic"] xml = open(DATADIR + "/kvm-x86_64-domcaps-amd-sev.xml").read() caps = DomainCapabilities(utils.URIs.open_testdriver_cached(), xml) @@ -119,6 +120,7 @@ def testDomainCapabilitiesAArch64(): assert caps.supports_memorybacking_memfd() assert caps.supports_redirdev_usb() assert caps.supports_channel_spicevmc() + assert caps.supported_panic_models() == ["pvpanic"] def testDomainCapabilitiesPPC64le(): @@ -137,6 +139,7 @@ def testDomainCapabilitiesPPC64le(): assert caps.supports_memorybacking_memfd() assert caps.supports_redirdev_usb() assert not caps.supports_channel_spicevmc() + assert caps.supported_panic_models() == ["pseries", "pvpanic"] def testDomainCapabilitiesRISCV64(): @@ -167,6 +170,7 @@ def testDomainCapabilitiesRISCV64(): assert caps.supports_memorybacking_memfd() assert caps.supports_redirdev_usb() assert caps.supports_channel_spicevmc() + assert caps.supported_panic_models() == ["pvpanic"] def testDomainCapabilitiesLoongArch64(): @@ -197,3 +201,4 @@ def testDomainCapabilitiesLoongArch64(): assert caps.supports_memorybacking_memfd() assert caps.supports_redirdev_usb() assert caps.supports_channel_spicevmc() + assert caps.supported_panic_models() == ["pvpanic"] ++++++ 006-addhardware-panic-Fill-in-model-combo-with-advertised-values-by-libvirt.patch ++++++ Subject: addhardware: panic: Fill in model combo with advertised values by libvirt From: Lin Ma l...@suse.de Tue Dec 3 18:46:28 2024 +0800 Date: Tue Dec 10 14:05:20 2024 +0100: Git: f92c25749bcd88bb7412c74119b25802327916e6 The commit c5a46646 asks libvirt to fill in a default panic model for us. Now libvirt domcaps can advertise panic models, Let's fill in the panic model combo with the advertised values. Signed-off-by: Lin Ma <l...@suse.de> diff --git a/virtManager/addhardware.py b/virtManager/addhardware.py index e6e4ec1d1..0faf30a53 100644 --- a/virtManager/addhardware.py +++ b/virtManager/addhardware.py @@ -860,8 +860,13 @@ class vmmAddHardware(vmmGObjectUI): def _build_panic_model_combo(self): + guest = self.vm.get_xmlobj() values = [[None, _("Hypervisor default")]] + for m in guest.lookup_domcaps().supported_panic_models(): + values.append([m, m]) + uiutil.build_simple_combo(self.widget("panic-model"), values) + uiutil.set_list_selection(self.widget("panic-model"), None) def _build_controller_type_combo(self): ++++++ 007-cli-man-Always-list-osinfo-before-os-variant.patch ++++++ Subject: cli, man: Always list --osinfo before --os-variant From: Andrea Bolognani abolo...@redhat.com Mon Dec 2 19:25:51 2024 +0100 Date: Tue Dec 10 14:06:12 2024 +0100: Git: c3debb4eda6b251fdad87f1ba5326671bb558d2b The former is the preferred spelling and it should always be presented first to the user. Signed-off-by: Andrea Bolognani <abolo...@redhat.com> diff --git a/man/virt-install.rst b/man/virt-install.rst index 775d7ce70..dc0b6d9cc 100644 --- a/man/virt-install.rst +++ b/man/virt-install.rst @@ -1022,7 +1022,7 @@ GUEST OS OPTIONS ================ -``--os-variant``, ``--osinfo`` +``--osinfo``, ``--os-variant`` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ **Syntax:** ``--osinfo`` [OSNAME|OPT1=VAL1,...] @@ -1031,7 +1031,7 @@ Optimize the guest configuration for a specific operating system. For most cases, an OS must be specified or detected from the install media so performance critical features like virtio can be enabled. -The simplest usage is ``--os-variant OSNAME`` or ``--osinfo OSNAME``, +The simplest usage is ``--osinfo OSNAME`` or ``--os-variant OSNAME``, for example ``--osinfo fedora32``. The supported suboptions are: ``name=``, ``short-id=`` @@ -1076,7 +1076,7 @@ VIRTINSTALL_OSINFO_DISABLE_REQUIRE=1. Use the command ``virt-install --osinfo list`` to get the list of the accepted OS variants. See ``osinfo-query os`` for even more output. -Note: ``--os-variant`` and ``--osinfo`` are aliases for one another. +Note: ``--osinfo`` and ``--os-variant`` are aliases for one another. ``--osinfo`` is the preferred new style naming. diff --git a/man/virt-xml.rst b/man/virt-xml.rst index dfb6fd9fb..7bccffbf9 100644 --- a/man/virt-xml.rst +++ b/man/virt-xml.rst @@ -180,7 +180,7 @@ These options decide what action to take after altering the XML. In the common c GUEST OS OPTIONS ================ -``--os-variant``, ``--osinfo`` OS_VARIANT +``--osinfo``, ``--os-variant`` OS_VARIANT Optimize the guest configuration for a specific operating system (ex. 'fedora29', 'rhel7', 'win10'). While not required, specifying this options is HIGHLY RECOMMENDED, as it can greatly increase performance @@ -194,7 +194,7 @@ GUEST OS OPTIONS Use the command ``virt-xml --osinfo list`` to get the list of the accepted OS variants. See ``osinfo-query os`` for even more output. - See virt-install(1) documentation for more details about ``--os-variant/--osinfo`` + See virt-install(1) documentation for more details about ``--osinfo/--os-variant`` CONVERSION OPTIONS diff --git a/tests/test_cli.py b/tests/test_cli.py index dc9c156da..51a1883c4 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -1039,8 +1039,8 @@ c.add_compare("--connect %(URI-KVM-X86)s --install fedora26", "osinfo-url") # g c.add_valid("--location https://foobar.com --os-variant detect=yes,name=win7", nogrep="Please file a bug against virt-install") # os detection succeeds, the fallback warning shouldn't be printed c.add_valid("--pxe --os-variant detect=yes,name=win7", grep="Please file a bug against virt-install") # os detection fails, so fallback warning should be printed c.add_valid("--cdrom http://example.com/path/to/some.iso --os-variant detect=yes,require=no", grep="Please file a bug against virt-install") # detection fails with require=no, we should print the error about using fallback name= -c.add_invalid("--pxe --os-variant detect=yes,require=yes", grep="--os-variant/--osinfo OS name is required") # No os-variant detected, but require=yes -c.add_invalid("--pxe --osinfo detect=yes", grep="--os-variant/--osinfo OS name is required") # --osinfo detect=on failed, but with implied require=yes +c.add_invalid("--pxe --os-variant detect=yes,require=yes", grep="--osinfo/--os-variant OS name is required") # No os-variant detected, but require=yes +c.add_invalid("--pxe --osinfo detect=yes", grep="--osinfo/--os-variant OS name is required") # --osinfo detect=on failed, but with implied require=yes c.add_invalid("--pxe --virt-type foobar", grep="Host does not support domain type") c.add_invalid("--pxe --os-variant farrrrrrrge", grep="Unknown OS name") c.add_invalid("--pxe --boot menu=foobar", grep="menu must be 'yes' or 'no'") @@ -1409,9 +1409,9 @@ c.add_valid("test-for-virtxml --edit --cpu host-passthrough --no-define --start c.add_valid("test-for-virtxml --edit --metadata name=test-for-virtxml", grep="requested changes will have no effect") c.add_valid("--print-diff test-for-virtxml --remove-device --disk boot.order=5", grep="boot order=\"5") c.add_invalid("test --edit 2 --events on_poweroff=destroy", grep="'--edit 2' doesn't make sense with --events") -c.add_invalid("test --os-variant fedora26 --edit --cpu host-passthrough", grep="--os-variant/--osinfo is not supported") -c.add_invalid("test-for-virtxml --os-variant fedora26 --remove-device --disk 1", grep="--os-variant/--osinfo is not supported") -c.add_invalid("--build-xml --os-variant fedora26 --disk path=foo", grep="--os-variant/--osinfo is not supported") +c.add_invalid("test --os-variant fedora26 --edit --cpu host-passthrough", grep="--osinfo/--os-variant is not supported") +c.add_invalid("test-for-virtxml --os-variant fedora26 --remove-device --disk 1", grep="--osinfo/--os-variant is not supported") +c.add_invalid("--build-xml --os-variant fedora26 --disk path=foo", grep="--osinfo/--os-variant is not supported") c.add_invalid("domain-idontexist --edit --cpu host-passthrough --start", grep="Could not find domain") c.add_invalid("test-state-shutoff --edit --update --boot menu=on --start", grep="Cannot use --update") c.add_invalid("test --edit --update --events on_poweroff=destroy", grep="Don't know how to --update for --events") diff --git a/virtManager/createvm.py b/virtManager/createvm.py index d5f49fb70..e37921603 100644 --- a/virtManager/createvm.py +++ b/virtManager/createvm.py @@ -103,7 +103,7 @@ class _GuestData: self.init = None self.machine = None - self.os_variant = None + self.osinfo = None self.uefi_requested = None self.name = None @@ -138,8 +138,8 @@ class _GuestData: # If no machine was explicitly selected, we don't overwrite # it, because we want to guest.os.machine = self.machine - if self.os_variant: - guest.set_os_name(self.os_variant) + if self.osinfo: + guest.set_os_name(self.osinfo) if self.uefi_requested: guest.uefi_requested = self.uefi_requested @@ -1578,7 +1578,7 @@ class vmmCreateVM(vmmGObjectUI): self._gdata.cdrom = cdrom self._gdata.extra_args = extra self._gdata.livecd = False - self._gdata.os_variant = osobj and osobj.name or None + self._gdata.osinfo = osobj and osobj.name or None guest = self._gdata.build_guest() installer = self._gdata.build_installer() except Exception as e: diff --git a/virtinst/cli.py b/virtinst/cli.py index b58717ab2..43d45a508 100644 --- a/virtinst/cli.py +++ b/virtinst/cli.py @@ -494,7 +494,7 @@ def fail_conflicting(option1, option2): def _get_completer_parsers(): return VIRT_PARSERS + [ParserCheck, ParserLocation, ParserUnattended, ParserInstall, ParserCloudInit, - ParserOSVariant] + ParserOSInfo] def _virtparser_completer(prefix, **kwargs): @@ -930,7 +930,7 @@ def add_disk_option(stog, editexample=False): "--disk=?") + editmsg) -def add_os_variant_option(parser, virtinstall): +def add_osinfo_option(parser, virtinstall): osg = parser.add_argument_group(_("OS options")) if virtinstall: @@ -942,7 +942,7 @@ def add_os_variant_option(parser, virtinstall): "Example values: fedora29, rhel7.0, win10, ...\n" "Use '--osinfo list' to see a full list.") - osg.add_argument("--os-variant", "--osinfo", help=msg) + osg.add_argument("--osinfo", "--os-variant", help=msg) return osg @@ -1880,11 +1880,11 @@ def parse_location(optstr): return parsedata.location, parsedata.kernel, parsedata.initrd -######################## -# --os-variant parsing # -######################## +#################### +# --osinfo parsing # +#################### -class OSVariantData(object): +class OSInfoData(object): _REQUIRE_ON = 1 _REQUIRE_AUTO = 3 @@ -1936,8 +1936,8 @@ class OSVariantData(object): return self._name -class ParserOSVariant(VirtCLIParser): - cli_arg_name = "os_variant" +class ParserOSInfo(VirtCLIParser): + cli_arg_name = "osinfo" supports_clearxml = False @classmethod @@ -1956,9 +1956,9 @@ class ParserOSVariant(VirtCLIParser): return super().parse(inst) -def parse_os_variant(optstr): - data = OSVariantData() - parser = ParserOSVariant(optstr) +def parse_osinfo(optstr): + data = OSInfoData() + parser = ParserOSInfo(optstr) parser.parse(data) data.validate() return data @@ -5051,7 +5051,7 @@ def check_option_introspection(options): def check_osinfo_list(options): - if options.os_variant != "list": + if options.osinfo != "list": return False for osobj in OSDB.list_os(): diff --git a/virtinst/install/installertreemedia.py b/virtinst/install/installertreemedia.py index 8b208bf50..dc6519eef 100644 --- a/virtinst/install/installertreemedia.py +++ b/virtinst/install/installertreemedia.py @@ -29,15 +29,15 @@ def _is_url(url): class _LocationData(object): - def __init__(self, os_variant, kernel_pairs, os_media, os_tree): - self.os_variant = os_variant + def __init__(self, osinfo, kernel_pairs, os_media, os_tree): + self.osinfo = osinfo self.kernel_pairs = kernel_pairs self.os_media = os_media self.os_tree = os_tree self.kernel_url_arg = None - if self.os_variant: - osobj = OSDB.lookup_os(self.os_variant) + if self.osinfo: + osobj = OSDB.lookup_os(self.osinfo) self.kernel_url_arg = osobj.get_kernel_url_arg() @@ -171,7 +171,7 @@ class InstallerTreeMedia(object): return self._cached_data store = None - os_variant = None + osinfo = None os_media = None os_tree = None kernel_paths = [] @@ -187,14 +187,14 @@ class InstallerTreeMedia(object): if store: kernel_paths = store.get_kernel_paths() - os_variant = store.get_osdict_info() + osinfo = store.get_osdict_info() os_media = store.get_os_media() os_tree = store.get_os_tree() if has_location_kernel: kernel_paths = [ (self._location_kernel, self._location_initrd)] - self._cached_data = _LocationData(os_variant, kernel_paths, + self._cached_data = _LocationData(osinfo, kernel_paths, os_media, os_tree) return self._cached_data @@ -236,8 +236,8 @@ class InstallerTreeMedia(object): self._initrd_injections.append((scriptpath, expected_filename)) def _prepare_kernel_url_arg(self, guest, cache): - os_variant = cache.os_variant or guest.osinfo.name - osobj = OSDB.lookup_os(os_variant) + osinfo = cache.osinfo or guest.osinfo.name + osobj = OSDB.lookup_os(osinfo) return osobj.get_kernel_url_arg() def _prepare_kernel_args(self, guest, cache, unattended_scripts): @@ -304,7 +304,7 @@ class InstallerTreeMedia(object): def detect_distro(self, guest): fetcher = self._get_fetcher(guest, None) cache = self._get_cached_data(guest, fetcher) - return cache.os_variant + return cache.osinfo def get_os_media(self, guest, meter): fetcher = self._get_fetcher(guest, meter) diff --git a/virtinst/virtinstall.py b/virtinst/virtinstall.py index 15fd6ae9d..e56486055 100644 --- a/virtinst/virtinstall.py +++ b/virtinst/virtinstall.py @@ -571,7 +571,7 @@ def installer_detect_distro(guest, installer, osdata): fail(_("Error validating install location: %s") % str(e)) msg = _( - "--os-variant/--osinfo OS name is required, but no value was\n" + "--osinfo/--os-variant OS name is required, but no value was\n" "set or detected.") if os_set: return @@ -650,7 +650,7 @@ def _build_options_guest(conn, options): def build_guest_instance(conn, options): installdata = cli.parse_install(options.install) - osdata = cli.parse_os_variant(options.os_variant or installdata.os) + osdata = cli.parse_osinfo(options.osinfo or installdata.os) options.boot_was_set = bool(options.boot) if options.reinstall: @@ -1076,7 +1076,7 @@ def parse_args(): cli.add_boot_options(insg) insg.add_argument("--init", help=argparse.SUPPRESS) - osg = cli.add_os_variant_option(parser, virtinstall=True) + osg = cli.add_osinfo_option(parser, virtinstall=True) osg.add_argument("--os-type", dest="old_os_type", help=argparse.SUPPRESS) devg = parser.add_argument_group(_("Device Options")) @@ -1188,8 +1188,8 @@ def set_test_stub_options(options): # pragma: no cover options.disk = "none" if not options.graphics: options.graphics = "none" - if not options.os_variant: - options.os_variant = "fedora27" + if not options.osinfo: + options.osinfo = "fedora27" def main(conn=None): diff --git a/virtinst/virtxml.py b/virtinst/virtxml.py index 6a16532cd..bcd25eb48 100644 --- a/virtinst/virtxml.py +++ b/virtinst/virtxml.py @@ -44,11 +44,11 @@ def get_diff(origxml, newxml): return diff -def set_os_variant(guest, os_variant): - if os_variant is None: +def set_osinfo(guest, osinfo): + if osinfo is None: return - osdata = cli.parse_os_variant(os_variant) + osdata = cli.parse_osinfo(osinfo) if osdata.get_name(): guest.set_os_name(osdata.get_name()) @@ -97,13 +97,13 @@ class Action: def validate_action(action, conn, options): - if options.os_variant is not None: + if options.osinfo is not None: if action.is_edit: - fail(_("--os-variant/--osinfo is not supported with --edit")) + fail(_("--osinfo/--os-variant is not supported with --edit")) if action.is_remove_device: - fail(_("--os-variant/--osinfo is not supported with --remove-device")) + fail(_("--osinfo/--os-variant is not supported with --remove-device")) if action.is_build_xml: - fail(_("--os-variant/--osinfo is not supported with --build-xml")) + fail(_("--osinfo/--os-variant is not supported with --build-xml")) if not action.parserclass.guest_propname and action.is_build_xml: fail(_("--build-xml not supported for {cli_flag}").format( @@ -251,11 +251,11 @@ def action_edit(action, guest): return devs -def action_add_device(action, guest, os_variant, input_devs): +def action_add_device(action, guest, osinfo, input_devs): parserclass = action.parserclass parservalue = action.parservalue - set_os_variant(guest, os_variant) + set_osinfo(guest, osinfo) if input_devs: for dev in input_devs: @@ -294,7 +294,7 @@ def action_build_xml(action, guest): def perform_action(action, guest, options, input_devs): if action.is_add_device: - return action_add_device(action, guest, options.os_variant, input_devs) + return action_add_device(action, guest, options.osinfo, input_devs) if action.is_remove_device: return action_remove_device(action, guest) if action.is_edit: @@ -483,7 +483,7 @@ def parse_args(): outg.add_argument("--confirm", action="store_true", help=_("Require confirmation before saving any results.")) - cli.add_os_variant_option(parser, virtinstall=False) + cli.add_osinfo_option(parser, virtinstall=False) conv = parser.add_argument_group(_("Conversion options")) cli.ParserConvertToQ35.register() ++++++ 008-snapshots-default-to-same-snapshot-mode-as-currently-used-snapshot.patch ++++++ Subject: snapshots: default to same snapshot mode as currently used snapshot From: Pavel Hrdina phrd...@redhat.com Tue Jan 21 11:09:00 2025 +0100 Date: Mon Jan 27 22:59:56 2025 +0100: Git: 40d86086b6b903982b5d0f97bd6763fc54bfb115 Using internal and external snapshot mode for the same VM has some limitations. When creating new snapshot default to the same mode as already existing currently used snapshot. If there is no existing snapshot default to external snapshot. Signed-off-by: Pavel Hrdina <phrd...@redhat.com> diff --git a/virtManager/details/snapshots.py b/virtManager/details/snapshots.py index a4f38de6d..00aa00708 100644 --- a/virtManager/details/snapshots.py +++ b/virtManager/details/snapshots.py @@ -138,7 +138,14 @@ class vmmSnapshotNew(vmmGObjectUI): mode_external = self.widget("snapshot-new-mode-external") mode_internal = self.widget("snapshot-new-mode-internal") - if mode_external.is_sensitive(): + use_external = mode_external.is_sensitive() + + if use_external: + current_mode = self._get_current_mode() + if current_mode == "internal": + use_external = False + + if use_external: mode_external.set_active(True) else: mode_internal.set_active(True) @@ -342,6 +349,17 @@ class vmmSnapshotNew(vmmGObjectUI): self.topwin) progWin.run() + def _get_current_mode(self): + current = self.vm.get_current_snapshot() + + if current is None: + return None + + if current.is_external(): + return "external" + + return "internal" + ################ # UI listeners # diff --git a/virtManager/object/domain.py b/virtManager/object/domain.py index dbb932162..5aade01d8 100644 --- a/virtManager/object/domain.py +++ b/virtManager/object/domain.py @@ -1156,6 +1156,16 @@ class vmmDomain(vmmLibvirtObject): self._snapshot_list = newlist return self._snapshot_list[:] + def get_current_snapshot(self): + + if self._backend.hasCurrentSnapshot(0): + rawsnap = self._backend.snapshotCurrent(0) + obj = vmmDomainSnapshot(self.conn, rawsnap) + obj.init_libvirt_state() + return obj + + return None + @vmmLibvirtObject.lifecycle_action def revert_to_snapshot(self, snap): # no use trying to set the guest time if is going to be switched off ++++++ 009-snapshots-warn-users-to-not-mix-snapshot-modes.patch ++++++ Subject: snapshots: warn users to not mix snapshot modes From: Pavel Hrdina phrd...@redhat.com Tue Jan 21 12:11:10 2025 +0100 Date: Mon Jan 27 22:59:56 2025 +0100: Git: 54dc858f79a973242394aa50c4db7c00385e9f5d Signed-off-by: Pavel Hrdina <phrd...@redhat.com> diff --git a/virtManager/details/snapshots.py b/virtManager/details/snapshots.py index 00aa00708..3da7d5aca 100644 --- a/virtManager/details/snapshots.py +++ b/virtManager/details/snapshots.py @@ -370,6 +370,16 @@ class vmmSnapshotNew(vmmGObjectUI): self._populate_memory_path() def _ok_clicked_cb(self, src): + current_mode = self._get_current_mode() + + if current_mode and current_mode != self._get_mode(): + result = self.err.yes_no(_("Mixing external and internal snapshots for " + "the same VM is not recommended. Are you " + "sure you want to continue?")) + + if not result: + return + return self._create_new_snapshot() def _mode_toggled_cb(self, src): ++++++ revert-363fca41-virt-install-Require-osinfo-for-non-x86-HVM-case-too.patch ++++++ --- /var/tmp/diff_new_pack.IwMLY0/_old 2025-01-29 16:09:41.065738286 +0100 +++ /var/tmp/diff_new_pack.IwMLY0/_new 2025-01-29 16:09:41.069738452 +0100 @@ -14,9 +14,11 @@ Signed-off-by: Cole Robinson <crobi...@redhat.com> ---- a/man/virt-install.rst -+++ b/man/virt-install.rst -@@ -1062,8 +1062,8 @@ all other settings off or unset. +Index: virt-manager-5.0.0/man/virt-install.rst +=================================================================== +--- virt-manager-5.0.0.orig/man/virt-install.rst ++++ virt-manager-5.0.0/man/virt-install.rst +@@ -1067,8 +1067,8 @@ all other settings off or unset. By default, virt-install will always attempt ``--osinfo detect=on`` for appropriate install media. If no OS is detected, we will fail @@ -27,18 +29,22 @@ above, or disabling the ``require`` option. If you just need to get back to the old non-fatal behavior ASAP, set the environment variable VIRTINSTALL_OSINFO_DISABLE_REQUIRE=1. ---- a/tests/test_cli.py -+++ b/tests/test_cli.py +Index: virt-manager-5.0.0/tests/test_cli.py +=================================================================== +--- virt-manager-5.0.0.orig/tests/test_cli.py ++++ virt-manager-5.0.0/tests/test_cli.py @@ -1246,7 +1246,6 @@ c.add_compare("--connect %(URI-KVM-ARMV7 ################# c.add_valid("--arch aarch64 --osinfo fedora19 --nodisks --pxe --connect " + utils.URIs.kvm_x86_nodomcaps, grep="Libvirt version does not support UEFI") # attempt to default to aarch64 UEFI, but it fails, but should only print warnings -c.add_invalid("--arch aarch64 --nodisks --pxe --connect " + utils.URIs.kvm_x86, grep="OS name is required") # catch missing osinfo for non-x86 - c.add_compare("--arch aarch64 --osinfo fedora19 --machine virt --boot kernel=/f19-arm.kernel,initrd=/f19-arm.initrd,kernel_args=\"console=ttyAMA0,1234 rw root=/dev/vda3\" --disk %(EXISTIMG1)s", "aarch64-machvirt") + c.add_compare("--arch aarch64 --osinfo fedora19 --machine virt --cpu default --boot kernel=/f19-arm.kernel,initrd=/f19-arm.initrd,kernel_args=\"console=ttyAMA0,1234 rw root=/dev/vda3\" --disk %(EXISTIMG1)s", "aarch64-machvirt") c.add_compare("--arch aarch64 --osinfo fedora19 --boot kernel=/f19-arm.kernel,initrd=/f19-arm.initrd,kernel_args=\"console=ttyAMA0,1234 rw root=/dev/vda3\" --disk %(EXISTIMG1)s", "aarch64-machdefault") c.add_compare("--arch aarch64 --cdrom %(ISO-F26-NETINST)s --boot loader=CODE.fd,nvram.template=VARS.fd --disk %(EXISTIMG1)s --cpu none --events on_crash=preserve,on_reboot=destroy,on_poweroff=restart", "aarch64-cdrom") # cdrom test, but also --cpu none override, --events override, and headless ---- a/virtinst/virtinstall.py -+++ b/virtinst/virtinstall.py +Index: virt-manager-5.0.0/virtinst/virtinstall.py +=================================================================== +--- virt-manager-5.0.0.orig/virtinst/virtinstall.py ++++ virt-manager-5.0.0/virtinst/virtinstall.py @@ -355,13 +355,9 @@ def _show_memory_warnings(guest): ++++++ virtinst-add-sle16-detection-support.patch ++++++ --- virt-manager-5.0.0/virtinst/install/urldetect.py.orig 2025-01-17 13:13:11.582745934 -0700 +++ virt-manager-5.0.0/virtinst/install/urldetect.py 2025-01-17 13:15:08.122748711 -0700 @@ -279,6 +279,10 @@ class _SUSEContent(object): else: if "SUSE SL Micro" in self.product_name: sle_version = self.product_name.strip().rsplit(' ')[3] + elif "SUSE SLES" in self.product_name: + # For SLES 16 + sle_version = self.product_name.strip().rsplit(' ')[2] + sle_version = sle_version.rstrip(".0") else: sle_version = self.product_name.strip().rsplit(' ')[4] if len(self.product_name.strip().rsplit(' ')) > 5 and not " Micro " in self.product_name: ++++++ virtman-add-sev-memory-support.patch ++++++ --- /var/tmp/diff_new_pack.IwMLY0/_old 2025-01-29 16:09:41.193743595 +0100 +++ /var/tmp/diff_new_pack.IwMLY0/_new 2025-01-29 16:09:41.197743760 +0100 @@ -1,9 +1,9 @@ References: bsc#1196806, jsc#SLE-18834 -Index: virt-manager-4.2.0/ui/details.ui +Index: virt-manager-5.0.0/ui/details.ui =================================================================== ---- virt-manager-4.2.0.orig/ui/details.ui -+++ virt-manager-4.2.0/ui/details.ui +--- virt-manager-5.0.0.orig/ui/details.ui ++++ virt-manager-5.0.0/ui/details.ui @@ -1927,7 +1927,20 @@ </packing> </child> @@ -26,10 +26,10 @@ </child> </object> <packing> -Index: virt-manager-4.2.0/virtManager/details/details.py +Index: virt-manager-5.0.0/virtManager/details/details.py =================================================================== ---- virt-manager-4.2.0.orig/virtManager/details/details.py -+++ virt-manager-4.2.0/virtManager/details/details.py +--- virt-manager-5.0.0.orig/virtManager/details/details.py ++++ virt-manager-5.0.0/virtManager/details/details.py @@ -49,6 +49,7 @@ from ..delete import vmmDeleteStorage EDIT_MEM, @@ -55,7 +55,7 @@ "on_boot_list_changed": self._boot_list_changed_cb, "on_boot_moveup_clicked": self._boot_moveup_clicked_cb, -@@ -1498,6 +1500,9 @@ class vmmDetails(vmmGObjectUI): +@@ -1500,6 +1502,9 @@ class vmmDetails(vmmGObjectUI): if self._edited(EDIT_MEM_SHARED): kwargs["mem_shared"] = self.widget("shared-memory").get_active() @@ -65,7 +65,7 @@ return self._change_config( self.vm.define_memory, kwargs, hotplug_args=hotplug_args) -@@ -2004,6 +2009,14 @@ class vmmDetails(vmmGObjectUI): +@@ -2007,6 +2012,14 @@ class vmmDetails(vmmGObjectUI): curmem.set_value(int(round(vm_cur_mem))) maxmem.set_value(int(round(vm_max_mem))) @@ -80,10 +80,10 @@ shared_mem, shared_mem_err = self.vm.has_shared_mem() self.widget("shared-memory").set_active(shared_mem) self.widget("shared-memory").set_sensitive(not bool(shared_mem_err)) -Index: virt-manager-4.2.0/virtManager/object/domain.py +Index: virt-manager-5.0.0/virtManager/object/domain.py =================================================================== ---- virt-manager-4.2.0.orig/virtManager/object/domain.py -+++ virt-manager-4.2.0/virtManager/object/domain.py +--- virt-manager-5.0.0.orig/virtManager/object/domain.py ++++ virt-manager-5.0.0/virtManager/object/domain.py @@ -675,15 +675,33 @@ class vmmDomain(vmmLibvirtObject): guest.memoryBacking.access_mode = access_mode @@ -119,7 +119,7 @@ self._redefine_xmlobj(guest) -@@ -1310,6 +1328,9 @@ class vmmDomain(vmmLibvirtObject): +@@ -1320,6 +1338,9 @@ class vmmDomain(vmmLibvirtObject): def get_description(self): return self.get_xmlobj().description @@ -129,10 +129,10 @@ def get_boot_order(self): legacy = not self.can_use_device_boot_order() return self.xmlobj.get_boot_order(legacy=legacy) -Index: virt-manager-4.2.0/virtinst/domain/memorybacking.py +Index: virt-manager-5.0.0/virtinst/domain/memorybacking.py =================================================================== ---- virt-manager-4.2.0.orig/virtinst/domain/memorybacking.py -+++ virt-manager-4.2.0/virtinst/domain/memorybacking.py +--- virt-manager-5.0.0.orig/virtinst/domain/memorybacking.py ++++ virt-manager-5.0.0/virtinst/domain/memorybacking.py @@ -27,6 +27,9 @@ class DomainMemoryBacking(XMLBuilder): XML_NAME = "memoryBacking" _XML_PROP_ORDER = ["hugepages", "nosharepages", "locked", "pages"] @@ -143,10 +143,10 @@ hugepages = XMLProperty("./hugepages", is_bool=True) nosharepages = XMLProperty("./nosharepages", is_bool=True) locked = XMLProperty("./locked", is_bool=True) -Index: virt-manager-4.2.0/virtinst/domcapabilities.py +Index: virt-manager-5.0.0/virtinst/domcapabilities.py =================================================================== ---- virt-manager-4.2.0.orig/virtinst/domcapabilities.py -+++ virt-manager-4.2.0/virtinst/domcapabilities.py +--- virt-manager-5.0.0.orig/virtinst/domcapabilities.py ++++ virt-manager-5.0.0/virtinst/domcapabilities.py @@ -93,6 +93,9 @@ def _make_capsblock(xml_root_name): class _SEV(XMLBuilder): XML_NAME = "sev" @@ -157,7 +157,7 @@ maxESGuests = XMLProperty("./maxESGuests") -@@ -415,6 +418,9 @@ class DomainCapabilities(XMLBuilder): +@@ -420,6 +423,9 @@ class DomainCapabilities(XMLBuilder): self.features.sev.maxESGuests) return bool(self.features.sev.supported) @@ -167,10 +167,10 @@ def supports_video_bochs(self): """ Returns False if either libvirt or qemu do not have support to bochs -Index: virt-manager-4.2.0/virtinst/domain/launch_security.py +Index: virt-manager-5.0.0/virtinst/domain/launch_security.py =================================================================== ---- virt-manager-4.2.0.orig/virtinst/domain/launch_security.py -+++ virt-manager-4.2.0/virtinst/domain/launch_security.py +--- virt-manager-5.0.0.orig/virtinst/domain/launch_security.py ++++ virt-manager-5.0.0/virtinst/domain/launch_security.py @@ -25,8 +25,12 @@ class DomainLaunchSecurity(XMLBuilder): vcek = XMLProperty("./@vcek", is_yesno=True) @@ -186,10 +186,10 @@ # The 'policy' is a mandatory 4-byte argument for the SEV firmware. # If missing, we use 0x03 for the original SEV implementation and -Index: virt-manager-4.2.0/virtinst/devices/interface.py +Index: virt-manager-5.0.0/virtinst/devices/interface.py =================================================================== ---- virt-manager-4.2.0.orig/virtinst/devices/interface.py -+++ virt-manager-4.2.0/virtinst/devices/interface.py +--- virt-manager-5.0.0.orig/virtinst/devices/interface.py ++++ virt-manager-5.0.0/virtinst/devices/interface.py @@ -310,6 +310,9 @@ class DeviceInterface(Device): portForward = XMLChildProperty(_PortForward) @@ -200,11 +200,11 @@ ############# # Build API # -Index: virt-manager-4.2.0/virtManager/addhardware.py +Index: virt-manager-5.0.0/virtManager/addhardware.py =================================================================== ---- virt-manager-4.2.0.orig/virtManager/addhardware.py -+++ virt-manager-4.2.0/virtManager/addhardware.py -@@ -1429,6 +1429,9 @@ class vmmAddHardware(vmmGObjectUI): +--- virt-manager-5.0.0.orig/virtManager/addhardware.py ++++ virt-manager-5.0.0/virtManager/addhardware.py +@@ -1434,6 +1434,9 @@ class vmmAddHardware(vmmGObjectUI): mac = self.widget("create-mac-address").get_text() dev = self._netlist.build_device(mac, model) ++++++ virtman-add-tooltip-to-firmware.patch ++++++ --- /var/tmp/diff_new_pack.IwMLY0/_old 2025-01-29 16:09:41.209744259 +0100 +++ /var/tmp/diff_new_pack.IwMLY0/_new 2025-01-29 16:09:41.209744259 +0100 @@ -2,10 +2,10 @@ When a particular firmware is selected, read the json file for a description. Add a tooltip of the json description when the mouse move overs the selected firmware. -Index: virt-manager-4.1.0/virtManager/details/details.py +Index: virt-manager-5.0.0/virtManager/details/details.py =================================================================== ---- virt-manager-4.1.0.orig/virtManager/details/details.py -+++ virt-manager-4.1.0/virtManager/details/details.py +--- virt-manager-5.0.0.orig/virtManager/details/details.py ++++ virt-manager-5.0.0/virtManager/details/details.py @@ -4,6 +4,10 @@ # This work is licensed under the GNU GPLv2 or later. # See the COPYING file in the top-level directory. @@ -26,7 +26,7 @@ "on_overview_chipset_changed": _e(EDIT_MACHTYPE), "on_details_inspection_refresh_clicked": self._inspection_refresh_clicked_cb, -@@ -1098,6 +1102,52 @@ class vmmDetails(vmmGObjectUI): +@@ -1100,6 +1104,52 @@ class vmmDetails(vmmGObjectUI): self.storage_browser.set_browse_reason(reason) self.storage_browser.show(self.topwin) ++++++ virtman-fix-restore-vm-menu-selection.patch ++++++ --- /var/tmp/diff_new_pack.IwMLY0/_old 2025-01-29 16:09:41.241745585 +0100 +++ /var/tmp/diff_new_pack.IwMLY0/_new 2025-01-29 16:09:41.245745752 +0100 @@ -3,11 +3,11 @@ Libvirt returns libvirt.VIR_DOMAIN_PMSUSPENDED after a vm has been 'saved'. -Index: virt-manager-4.2.0/virtManager/object/domain.py +Index: virt-manager-5.0.0/virtManager/object/domain.py =================================================================== ---- virt-manager-4.2.0.orig/virtManager/object/domain.py -+++ virt-manager-4.2.0/virtManager/object/domain.py -@@ -1603,7 +1603,8 @@ class vmmDomain(vmmLibvirtObject): +--- virt-manager-5.0.0.orig/virtManager/object/domain.py ++++ virt-manager-5.0.0/virtManager/object/domain.py +@@ -1613,7 +1613,8 @@ class vmmDomain(vmmLibvirtObject): return (self.is_stoppable() or self.status() in [libvirt.VIR_DOMAIN_CRASHED]) def is_runable(self):