Merge branch 'c9-beta' into a9-beta

This commit is contained in:
eabdullin 2023-03-29 07:02:52 +00:00 committed by Stepan Oksanichenko
commit 3bbd2c5c93
12 changed files with 539 additions and 384 deletions

2
.gitignore vendored
View File

@ -1 +1 @@
SOURCES/virt-manager-4.0.0.tar.gz
SOURCES/virt-manager-4.1.0.tar.gz

View File

@ -1 +1 @@
853b1a65b346ac7be7c68d83697b4107bb780683 SOURCES/virt-manager-4.0.0.tar.gz
caaf397d490095b4a026049aa5d87112a07e3699 SOURCES/virt-manager-4.1.0.tar.gz

View File

@ -0,0 +1,98 @@
From deb27a8c7e1539e687d589edd7ea517018266f77 Mon Sep 17 00:00:00 2001
From: Cole Robinson <crobinso@redhat.com>
Date: Sun, 21 Aug 2022 16:21:10 -0400
Subject: [PATCH] cloner: Sync <uuid> and <sysinfo> system uuid
Otherwise libvirt errors like:
ERROR UUID mismatch between <uuid> and <sysinfo>
https://bugzilla.redhat.com/show_bug.cgi?id=2038040
Signed-off-by: Cole Robinson <crobinso@redhat.com>
(cherry picked from commit b0d0516736320315a70f74aff3759fb35dd35d9d)
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2038040
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
---
tests/data/cli/compare/virt-clone-auto-unmanaged.xml | 5 +++++
tests/data/cli/compare/virt-clone-unmanaged-preserve.xml | 5 +++++
tests/data/cli/virtclone/clone-disk.xml | 5 +++++
virtinst/cloner.py | 6 ++++--
4 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/tests/data/cli/compare/virt-clone-auto-unmanaged.xml b/tests/data/cli/compare/virt-clone-auto-unmanaged.xml
index 21a9a6398..f2043be25 100644
--- a/tests/data/cli/compare/virt-clone-auto-unmanaged.xml
+++ b/tests/data/cli/compare/virt-clone-auto-unmanaged.xml
@@ -1,6 +1,11 @@
<domain type="test">
<name>origtest-clone</name>
<uuid>00000000-1111-2222-3333-444444444444</uuid>
+ <sysinfo type="smbios">
+ <system>
+ <entry name="uuid">00000000-1111-2222-3333-444444444444</entry>
+ </system>
+ </sysinfo>
<memory>8388608</memory>
<currentMemory>2097152</currentMemory>
<vcpu>2</vcpu>
diff --git a/tests/data/cli/compare/virt-clone-unmanaged-preserve.xml b/tests/data/cli/compare/virt-clone-unmanaged-preserve.xml
index 3bdbbbe36..c003ed3ee 100644
--- a/tests/data/cli/compare/virt-clone-unmanaged-preserve.xml
+++ b/tests/data/cli/compare/virt-clone-unmanaged-preserve.xml
@@ -1,6 +1,11 @@
<domain type="test">
<name>clonetest</name>
<uuid>00000000-1111-2222-3333-444444444444</uuid>
+ <sysinfo type="smbios">
+ <system>
+ <entry name="uuid">00000000-1111-2222-3333-444444444444</entry>
+ </system>
+ </sysinfo>
<memory>8388608</memory>
<currentMemory>2097152</currentMemory>
<vcpu>2</vcpu>
diff --git a/tests/data/cli/virtclone/clone-disk.xml b/tests/data/cli/virtclone/clone-disk.xml
index da1eb0a63..2f6e916d7 100644
--- a/tests/data/cli/virtclone/clone-disk.xml
+++ b/tests/data/cli/virtclone/clone-disk.xml
@@ -1,6 +1,11 @@
<domain type='test' id='1'>
<name>origtest</name>
<uuid>db69fa1f-eef0-e567-3c20-3ef16f10376b</uuid>
+ <sysinfo type='smbios'>
+ <system>
+ <entry name='uuid'>db69fa1f-eef0-e567-3c20-3ef16f10376b</entry>
+ </system>
+ </sysinfo>
<memory>8388608</memory>
<currentMemory>2097152</currentMemory>
<vcpu>2</vcpu>
diff --git a/virtinst/cloner.py b/virtinst/cloner.py
index 34a702f91..9334513c5 100644
--- a/virtinst/cloner.py
+++ b/virtinst/cloner.py
@@ -352,8 +352,7 @@ class Cloner(object):
"""
self._new_guest.id = None
self._new_guest.title = None
- self._new_guest.uuid = None
- self._new_guest.uuid = Guest.generate_uuid(self.conn)
+ self.set_clone_uuid(Guest.generate_uuid(self.conn))
for dev in self._new_guest.devices.graphics:
if dev.port and dev.port != -1:
@@ -408,6 +407,9 @@ class Cloner(object):
Override the new VMs generated UUId
"""
self._new_guest.uuid = uuid
+ for sysinfo in self._new_guest.sysinfo:
+ if sysinfo.system_uuid:
+ sysinfo.system_uuid = uuid
def set_replace(self, val):
"""
--
2.38.1

View File

@ -0,0 +1,126 @@
From 3702eed072ae7b2d52398a3c9b1c1feb04ffdce3 Mon Sep 17 00:00:00 2001
From: Cole Robinson <crobinso@redhat.com>
Date: Wed, 14 Dec 2022 12:57:10 -0500
Subject: [PATCH] progress: Fix showing correct final total
Reproducer:
Reproducer:
./virt-install --connect test:///default \
--location tests/data/fakemedia/fake-f26-netinst.iso
Before:
Starting install...
Retrieving 'vmlinuz' | 0 B 00:00:00 ...
Retrieving 'initrd.img' | 0 B 00:00:00 ...
After:
Starting install...
Retrieving 'vmlinuz' | 9 B 00:00:00 ...
Retrieving 'initrd.img' | 9 B 00:00:00 ...
progress.end() currently only reports the total amount of bytes
that were last written to the UI. It should report the total amount
that's been passed to update().
Reported-by: Toshiki Sonoda <sonoda.toshiki@fujitsu.com>
Signed-off-by: Cole Robinson <crobinso@redhat.com>
(cherry picked from commit 4114fa1aa827b836d3a1d11c2ac2d367c9bb0463)
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2156247
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
---
tests/data/meter/meter1.txt | 2 +-
tests/data/meter/meter2.txt | 2 +-
tests/data/meter/meter3.txt | 2 +-
tests/data/meter/meter5.txt | 2 +-
tests/data/meter/meter6.txt | 2 +-
tests/test_misc.py | 4 +++-
virtinst/_progresspriv.py | 4 ++--
7 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/tests/data/meter/meter1.txt b/tests/data/meter/meter1.txt
index a3f7c7d2f..7e154c972 100644
--- a/tests/data/meter/meter1.txt
+++ b/tests/data/meter/meter1.txt
@@ -9,4 +9,4 @@ Meter text test 20% [=== ] 413 B/s | 2.0 kB 00:19 ETA
Meter text test 40% [======- ] 731 B/s | 3.9 kB 00:08 ETA
-Meter text test | 3.9 kB 00:04 ...
+Meter text test | 4.4 kB 00:04 ...
diff --git a/tests/data/meter/meter2.txt b/tests/data/meter/meter2.txt
index 93e93dc31..7ccc31636 100644
--- a/tests/data/meter/meter2.txt
+++ b/tests/data/meter/meter2.txt
@@ -9,4 +9,4 @@ Meter text test 20% [=======
Meter text test 40% [============== ] 731 B/s | 3.9 kB 00:00:08 ETA
-Meter text test | 3.9 kB 00:00:04 ...
+Meter text test | 4.4 kB 00:00:04 ...
diff --git a/tests/data/meter/meter3.txt b/tests/data/meter/meter3.txt
index 474e40f74..6f66608fe 100644
--- a/tests/data/meter/meter3.txt
+++ b/tests/data/meter/meter3.txt
@@ -4,4 +4,4 @@ Meter text test 67 B/s | 200 B 00:02
Meter text test 413 B/s | 2.0 kB 00:03
Meter text test 731 B/s | 3.9 kB 00:04
-Meter text test | 3.9 kB 00:04
+Meter text test | 4.4 kB 00:04
diff --git a/tests/data/meter/meter5.txt b/tests/data/meter/meter5.txt
index 1d232a5de..7142a9718 100644
--- a/tests/data/meter/meter5.txt
+++ b/tests/data/meter/meter5.txt
@@ -9,4 +9,4 @@ Meter text test 1000% [================] 413 B/s | 2.0 kB --:-- ETA
Meter text test 2000% [================] 731 B/s | 3.9 kB --:-- ETA
-Meter text test | 3.9 kB 00:04 !!!
+Meter text test | 4.4 kB 00:04 !!!
diff --git a/tests/data/meter/meter6.txt b/tests/data/meter/meter6.txt
index 07d99bfd8..dd5d3d47b 100644
--- a/tests/data/meter/meter6.txt
+++ b/tests/data/meter/meter6.txt
@@ -9,4 +9,4 @@ Meter text test 100% [================] 413 B/s | 2.0 kB --:-- ETA
Meter text test 100% [================] 731 B/s | 3.9 kB --:-- ETA
-Meter text test | 3.9 kB 00:04
+Meter text test | 4.4 kB 00:04
diff --git a/tests/test_misc.py b/tests/test_misc.py
index aa610f4df..20f5a626b 100644
--- a/tests/test_misc.py
+++ b/tests/test_misc.py
@@ -178,7 +178,9 @@ def test_misc_meter():
m.update(2000)
with unittest.mock.patch("time.time", return_value=5.0):
m.update(4000)
- with unittest.mock.patch("time.time", return_value=6.0):
+ with unittest.mock.patch("time.time", return_value=5.1):
+ m.update(4500)
+ with unittest.mock.patch("time.time", return_value=5.5):
m.end()
# Basic output testing
diff --git a/virtinst/_progresspriv.py b/virtinst/_progresspriv.py
index 5a31a18cc..a035c9c43 100644
--- a/virtinst/_progresspriv.py
+++ b/virtinst/_progresspriv.py
@@ -112,10 +112,10 @@ class BaseMeter:
assert type(amount_read) is int
now = time.time()
+ self.last_amount_read = amount_read
+ self.re.update(amount_read, now)
if (not self.last_update_time or
(now >= self.last_update_time + self.update_period)):
- self.re.update(amount_read, now)
- self.last_amount_read = amount_read
self.last_update_time = now
self._do_update(amount_read)
--
2.39.0

View File

@ -0,0 +1,62 @@
From f44c6ec970413843214f52d5523ee8cf277b0150 Mon Sep 17 00:00:00 2001
From: Andrea Bolognani <abologna@redhat.com>
Date: Mon, 12 Dec 2022 19:38:22 +0100
Subject: [PATCH] virt-install: Document Secure Boot setups
Provide ready to use recipes for explicitly enabling and
explicitly disabling Secure Boot, as well as a pointer to
the more extensive information found on the libvirt website.
Setting loader_secure=yes is only one part of a proper Secure
Boot setup, so stop documenting it in the section about manual
firmware selection to avoid confusion.
https://bugzilla.redhat.com/show_bug.cgi?id=2112154
https://bugzilla.redhat.com/show_bug.cgi?id=2149971
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
(cherry picked from commit 33ff193ee9fcfdb74f95d946a1b93239a1a12a61)
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2112154
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
---
man/virt-install.rst | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
diff --git a/man/virt-install.rst b/man/virt-install.rst
index 684f22655..a0df73280 100644
--- a/man/virt-install.rst
+++ b/man/virt-install.rst
@@ -957,13 +957,26 @@ Some examples:
via domcapabilities XML, so this will likely only work if using properly
configured distro packages. This is the recommended UEFI setup.
+``--boot uefi,firmware.feature0.name=secure-boot,firmware.feature0.enabled=yes,firmware.feature1.name=enrolled-keys,firmware.feature1.enabled=yes``
+ Configure the VM to boot from UEFI with Secure Boot support enabled.
+ Only signed operating systems will be able to boot with this configuration.
+
+``--boot uefi,firmware.feature0.name=secure-boot,firmware.feature0.enabled=no``
+ Configure the VM to boot from UEFI with Secure Boot support disabled.
+ This configuration allows both signed and unsigned operating systems to
+ run.
+
+ Additional information about the ``secure-boot`` and
+ ``enrolled-keys`` firmware features and how they can be used to
+ influence firmware selection is available at
+ https://libvirt.org/kbase/secureboot.html
+
``--boot loader=/.../OVMF_CODE.fd,loader.readonly=yes,loader.type=pflash,nvram.template=/.../OVMF_VARS.fd,loader_secure=no``
Specify that the virtual machine use the custom OVMF binary as boot firmware,
mapped as a virtual flash chip. In addition, request that libvirt instantiate
the VM-specific UEFI varstore from the custom "/.../OVMF_VARS.fd" varstore
template. This setup is not recommended, and should only be used if
- --boot uefi doesn't know about your UEFI binaries. If your UEFI firmware
- supports Secure boot feature you can enable it via loader_secure.
+ --boot uefi doesn't know about your UEFI binaries.
Use --boot=? to see a list of all available sub options.
Complete details at https://libvirt.org/formatdomain.html#elementsOS
--
2.39.1

View File

@ -0,0 +1,42 @@
From 19b683f075d11b920552990d16b9a7a82eed12e3 Mon Sep 17 00:00:00 2001
From: Andrea Bolognani <abologna@redhat.com>
Date: Mon, 12 Dec 2022 19:32:32 +0100
Subject: [PATCH] virt-install: Recommend '--boot uefi'
Firmware autoselection is the way to go in most cases, so
recommend that instead of telling users that they should provide
all information manually.
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
(cherry picked from commit f2b5aaf458764ec7ecf105038e5f2f7cc26b6c17)
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2112154
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
---
man/virt-install.rst | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/man/virt-install.rst b/man/virt-install.rst
index 3a6e8dcd2..684f22655 100644
--- a/man/virt-install.rst
+++ b/man/virt-install.rst
@@ -955,13 +955,13 @@ Some examples:
Configure the VM to boot from UEFI. In order for virt-install to know the
correct UEFI parameters, libvirt needs to be advertising known UEFI binaries
via domcapabilities XML, so this will likely only work if using properly
- configured distro packages.
+ configured distro packages. This is the recommended UEFI setup.
``--boot loader=/.../OVMF_CODE.fd,loader.readonly=yes,loader.type=pflash,nvram.template=/.../OVMF_VARS.fd,loader_secure=no``
Specify that the virtual machine use the custom OVMF binary as boot firmware,
mapped as a virtual flash chip. In addition, request that libvirt instantiate
the VM-specific UEFI varstore from the custom "/.../OVMF_VARS.fd" varstore
- template. This is the recommended UEFI setup, and should be used if
+ template. This setup is not recommended, and should only be used if
--boot uefi doesn't know about your UEFI binaries. If your UEFI firmware
supports Secure boot feature you can enable it via loader_secure.
--
2.39.1

View File

@ -1,146 +0,0 @@
From 6ec78c1b8a935bd5fe0896dc323bfdf51cc67585 Mon Sep 17 00:00:00 2001
From: Jonathon Jongsma <jjongsma@redhat.com>
Date: Wed, 18 May 2022 17:03:29 -0500
Subject: [PATCH] virt-install: add support for qemu-vdagent channel
This allows support for host/guest clipboard sharing when using vnc
guests (and possibly other graphics types in the future). This channel
is similar to the spicevmc channel, but it contains a couple additional
options to enable/disable clipboard sharing and specify the mouse mode.
In the case of spice, these settings are specified on the 'graphics'
element, but for qemu-vdagent, they are specified on the channel. For
example:
--channel=qemu-vdagent,source.clipboard.copypaste=on,source.mouse.mode=client
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
(cherry picked from commit 44355e5ed0d0791675e8113732dde37664d5aa91)
Resolves https://bugzilla.redhat.com/show_bug.cgi?id=2060724
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
---
man/virt-install.rst | 9 +++++++++
tests/data/cli/compare/virt-install-many-devices.xml | 7 +++++++
tests/test_cli.py | 5 +++--
virtinst/cli.py | 2 ++
virtinst/devices/char.py | 8 +++++++-
5 files changed, 28 insertions(+), 3 deletions(-)
diff --git a/man/virt-install.rst b/man/virt-install.rst
index c1d1c1aa1..3a6e8dcd2 100644
--- a/man/virt-install.rst
+++ b/man/virt-install.rst
@@ -1761,6 +1761,15 @@ Some of the types of character device redirection are:
and can be any string, such as the default com.redhat.spice.0 that
specifies how the guest will see the channel.
+``--channel qemu-vdagent,target.type=virtio[,target.name=NAME]``
+ Communication channel for QEMU vd agent, using virtio serial (requires
+ 2.6.34 or later host and guest). This allows copy/paste functionality with
+ VNC guests. Note that the guest clipboard integration is implemented via
+ spice-vdagent, which must be running even when the guest does not use spice
+ graphics. NAME is optional metadata that specifies how the guest will see
+ the channel, and should be left as the default com.redhat.spice.0 unless you
+ know what you are doing.
+
Use --channel=? to see a list of all available sub options.
Complete details at https://libvirt.org/formatdomain.html#elementsCharChannel
diff --git a/tests/data/cli/compare/virt-install-many-devices.xml b/tests/data/cli/compare/virt-install-many-devices.xml
index 4c0024225..be82032fe 100644
--- a/tests/data/cli/compare/virt-install-many-devices.xml
+++ b/tests/data/cli/compare/virt-install-many-devices.xml
@@ -647,6 +647,13 @@
<channel type="spicevmc">
<target type="virtio" name="com.redhat.spice.0"/>
</channel>
+ <channel type="qemu-vdagent">
+ <source>
+ <clipboard copypaste="yes"/>
+ <mouse mode="client"/>
+ </source>
+ <target type="virtio" name="com.redhat.spice.0"/>
+ </channel>
<input type="keyboard" bus="usb"/>
<input type="tablet" bus="usb"/>
<input type="mouse" bus="ps2"/>
diff --git a/tests/test_cli.py b/tests/test_cli.py
index 8b78a1a78..22749d43a 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -669,6 +669,7 @@ source.reservations.managed=no,source.reservations.source.type=unix,source.reser
--channel pty,target_type=virtio,name=org.linux-kvm.port1
--channel pty,target.type=virtio,target.name=org.linux-kvm.port2
--channel spicevmc
+--channel qemu-vdagent,source.clipboard.copypaste=on,source.mouse.mode=client
--console pty,target_type=virtio
@@ -734,7 +735,7 @@ source.reservations.managed=no,source.reservations.source.type=unix,source.reser
--rng /dev/random
---rng device=/dev/urandom,backend.protocol.type=,backend.log.file=,backend.log.append=
+--rng device=/dev/urandom,backend.protocol.type=,backend.log.file=,backend.log.append=,backend.source.clipboard.copypaste=,backend.source.mouse.mode=
--rng type=egd,backend.type=nmdm,backend.source.master=/dev/foo1,backend.source.slave=/dev/foo2
--rng egd,backend_host=127.0.0.1,backend_service=8000,backend_type=udp,backend_mode=bind,backend_connect_host=foo,backend_connect_service=708,rate.bytes=1234,rate.period=1000,model=virtio
@@ -786,7 +787,7 @@ source.reservations.managed=no,source.reservations.source.type=unix,source.reser
--xml xpath.delete=./deleteme/deleteme2
-""", "many-devices", predefine_check="7.4.0")
+""", "many-devices", predefine_check="8.4.0")
# Specific XML test cases #1
diff --git a/virtinst/cli.py b/virtinst/cli.py
index 52be9f298..c869c323a 100644
--- a/virtinst/cli.py
+++ b/virtinst/cli.py
@@ -3396,6 +3396,8 @@ def _add_char_source_args(cls, prefix=""):
_add_arg("protocol.type", "source.protocol")
_add_arg("log.file", "source.log_file")
_add_arg("log.append", "source.log_append", is_onoff=True)
+ _add_arg("source.clipboard.copypaste", "source.clipboard_copypaste", is_onoff=True)
+ _add_arg("source.mouse.mode", "source.mouse_mode")
##################
diff --git a/virtinst/devices/char.py b/virtinst/devices/char.py
index 9547c649e..01fc634b1 100644
--- a/virtinst/devices/char.py
+++ b/virtinst/devices/char.py
@@ -45,6 +45,10 @@ class CharSource(XMLBuilder):
slave = XMLProperty("./@slave")
mode = XMLProperty("./@mode")
+ # for qemu-vdagent channel
+ clipboard_copypaste = XMLProperty("./clipboard/@copypaste", is_yesno=True)
+ mouse_mode = XMLProperty("./mouse/@mode")
+
# It's weird to track these properties here, since the XML is set on
# the parent, but this is how libvirt does it internally, which means
# everything that shares a charsource has these values too.
@@ -80,6 +84,7 @@ class _DeviceChar(Device):
TYPE_SPICEVMC = "spicevmc"
TYPE_SPICEPORT = "spiceport"
TYPE_NMDM = "nmdm"
+ TYPE_QEMUVDAGENT = "qemu-vdagent"
CHANNEL_NAME_SPICE = "com.redhat.spice.0"
CHANNEL_NAME_QEMUGA = "org.qemu.guest_agent.0"
@@ -117,7 +122,8 @@ class _DeviceChar(Device):
self.source.mode = "bind"
if not self.target_type and self.DEVICE_TYPE == "channel":
self.target_type = "virtio"
- if not self.target_name and self.type == self.TYPE_SPICEVMC:
+ if not self.target_name and (self.type == self.TYPE_SPICEVMC or
+ self.type == self.TYPE_QEMUVDAGENT):
self.target_name = self.CHANNEL_NAME_SPICE
--
2.35.3

View File

@ -1,231 +0,0 @@
From e4e7210b3bd669bfeb8015f66163e7e49d710d1d Mon Sep 17 00:00:00 2001
From: Jonathon Jongsma <jjongsma@redhat.com>
Date: Wed, 18 May 2022 17:03:30 -0500
Subject: [PATCH] virt-manager: add support for qemu-vdagent channel
This provides the UI support for the qemu-vdagent channel which allows
clipboard sharing with VNC graphics (see previous commit for more
information).
The channel name in the device list was changed slightly in order to
avoid confusion. Due to the fact that both the spice-vdagent and the
qemu-vdagent specify the same virtio name (com.redhat.spice.0), both of
these channels were showing up in the device list as "Channel spice",
which is a bit confusing.
In order to disambiguate these, channels now show up in the device list
as "Channel {type} ({name})" instead of "Channel {name}". So for
example, a qemu-vdagent channel would show up as:
Channel Qemu vdagent (spice)
Whereas a spice-vdagent channel would show up as:
Channel Spice agent (spice)
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
(cherry picked from commit caa99a6001be0c86a1dd0eb5fc0ce142ab929a31)
Resolves https://bugzilla.redhat.com/show_bug.cgi?id=2060724
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
---
ui/addhardware.ui | 28 +++++++++++++++++++++++++++-
ui/details.ui | 27 ++++++++++++++++++++++++++-
virtManager/addhardware.py | 10 +++++++++-
virtManager/details/details.py | 7 +++++--
4 files changed, 67 insertions(+), 5 deletions(-)
diff --git a/ui/addhardware.ui b/ui/addhardware.ui
index fa88127b8..f212481a3 100644
--- a/ui/addhardware.ui
+++ b/ui/addhardware.ui
@@ -725,7 +725,7 @@
</packing>
</child>
<child>
- <!-- n-columns=2 n-rows=6 -->
+ <!-- n-columns=2 n-rows=7 -->
<object class="GtkGrid" id="char-table">
<property name="visible">True</property>
<property name="can-focus">False</property>
@@ -901,6 +901,32 @@
<property name="top-attach">2</property>
</packing>
</child>
+ <child>
+ <object class="GtkLabel" id="char-vdagent-clipboard-label">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="label" translatable="yes">_Share Clipboard:</property>
+ <property name="use-underline">True</property>
+ <property name="mnemonic-widget">char-vdagent-clipboard</property>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">6</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="char-vdagent-clipboard">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="halign">start</property>
+ <property name="draw-indicator">True</property>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">6</property>
+ </packing>
+ </child>
<child internal-child="accessible">
<object class="AtkObject" id="char-table-atkobject">
<property name="AtkObject::accessible-name">char-tab</property>
diff --git a/ui/details.ui b/ui/details.ui
index 10b308242..264f7cdd4 100644
--- a/ui/details.ui
+++ b/ui/details.ui
@@ -3506,7 +3506,7 @@
<property name="margin-start">12</property>
<property name="margin-top">3</property>
<child>
- <!-- n-columns=2 n-rows=7 -->
+ <!-- n-columns=2 n-rows=8 -->
<object class="GtkGrid" id="table37">
<property name="visible">True</property>
<property name="can-focus">False</property>
@@ -3601,6 +3601,19 @@
<property name="top-attach">6</property>
</packing>
</child>
+ <child>
+ <object class="GtkLabel" id="char-clipboard-sharing">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">label507</property>
+ <property name="selectable">True</property>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">7</property>
+ </packing>
+ </child>
<child>
<object class="GtkLabel" id="char-source-host">
<property name="visible">True</property>
@@ -3673,6 +3686,18 @@
<property name="top-attach">6</property>
</packing>
</child>
+ <child>
+ <object class="GtkLabel" id="char-clipboard-sharing-label">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="halign">end</property>
+ <property name="label" translatable="yes">Clipboard:</property>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">7</property>
+ </packing>
+ </child>
<child>
<object class="GtkLabel" id="char-source-path-label">
<property name="visible">True</property>
diff --git a/virtManager/addhardware.py b/virtManager/addhardware.py
index 8c7fa0c72..0a8e33d30 100644
--- a/virtManager/addhardware.py
+++ b/virtManager/addhardware.py
@@ -308,6 +308,7 @@ class vmmAddHardware(vmmGObjectUI):
self.widget("char-path").set_text("")
self.widget("char-channel").set_text("")
self.widget("char-auto-socket").set_active(True)
+ self.widget("char-vdagent-clipboard").set_active(True)
# RNG params
@@ -399,7 +400,8 @@ class vmmAddHardware(vmmGObjectUI):
DeviceSerial.TYPE_UNIX]
if char_class.XML_NAME == "channel":
ret = [DeviceSerial.TYPE_SPICEVMC,
- DeviceSerial.TYPE_SPICEPORT] + ret
+ DeviceSerial.TYPE_SPICEPORT,
+ DeviceSerial.TYPE_QEMUVDAGENT] + ret
return ret
@staticmethod
@@ -425,6 +427,7 @@ class vmmAddHardware(vmmGObjectUI):
DeviceSerial.TYPE_UNIX: _("UNIX socket"),
DeviceSerial.TYPE_SPICEVMC: _("Spice agent"),
DeviceSerial.TYPE_SPICEPORT: _("Spice port"),
+ DeviceSerial.TYPE_QEMUVDAGENT: _("QEMU vdagent"),
}
return labels.get(val, val)
@@ -1114,11 +1117,14 @@ class vmmAddHardware(vmmGObjectUI):
supports_path = [dev.TYPE_FILE, dev.TYPE_UNIX,
dev.TYPE_DEV, dev.TYPE_PIPE]
supports_channel = [dev.TYPE_SPICEPORT]
+ supports_clipboard = [dev.TYPE_QEMUVDAGENT]
uiutil.set_grid_row_visible(self.widget("char-path-label"),
devtype in supports_path)
uiutil.set_grid_row_visible(self.widget("char-channel-label"),
devtype in supports_channel)
+ uiutil.set_grid_row_visible(self.widget("char-vdagent-clipboard-label"),
+ devtype in supports_clipboard)
uiutil.set_grid_row_visible(
self.widget("char-target-name-label"), ischan)
@@ -1472,6 +1478,7 @@ class vmmAddHardware(vmmGObjectUI):
source_channel = self.widget("char-channel").get_text()
target_name = self.widget("char-target-name").get_child().get_text()
target_type = uiutil.get_list_selection(typebox)
+ clipboard = self.widget("char-vdagent-clipboard").get_active()
if not self.widget("char-path").get_visible():
source_path = None
@@ -1486,6 +1493,7 @@ class vmmAddHardware(vmmGObjectUI):
dev.type = devtype
dev.source.path = source_path
dev.source.channel = source_channel
+ dev.source.clipboard_copypaste = clipboard
dev.target_name = target_name
dev.target_type = target_type
return dev
diff --git a/virtManager/details/details.py b/virtManager/details/details.py
index 24810f0ff..ddc43b767 100644
--- a/virtManager/details/details.py
+++ b/virtManager/details/details.py
@@ -207,10 +207,10 @@ def _label_for_device(dev, disk_bus_index):
return _("Console %(num)d") % {"num": port + 1}
if devtype == "channel":
+ pretty_type = vmmAddHardware.char_pretty_type(dev.type)
name = vmmAddHardware.char_pretty_channel_name(dev.target_name)
if name:
- return _("Channel %(name)s") % {"name": name}
- pretty_type = vmmAddHardware.char_pretty_type(dev.type)
+ return _("Channel %(type)s (%(name)s)") % {"type": pretty_type, "name": name}
return _("Channel %(type)s") % {"type": pretty_type}
if devtype == "graphics":
@@ -2098,6 +2098,7 @@ class vmmDetails(vmmGObjectUI):
primary = self.vm.serial_is_console_dup(chardev)
show_target_type = not (char_type in ["serial", "parallel"])
is_qemuga = chardev.target_name == chardev.CHANNEL_NAME_QEMUGA
+ show_clipboard = chardev.type == chardev.TYPE_QEMUVDAGENT
if char_type == "serial":
typelabel = _("Serial Device")
@@ -2152,6 +2153,8 @@ class vmmDetails(vmmGObjectUI):
# notifiations about connection state. For spice this UI field
# can get out of date
show_ui("char-target-state", chardev.target_state, doshow=is_qemuga)
+ clipboard = _("On") if chardev.source.clipboard_copypaste else _("Off")
+ show_ui("char-clipboard-sharing", clipboard, doshow=show_clipboard)
def _refresh_hostdev_page(self, hostdev):
rom_bar = hostdev.rom_bar
--
2.35.3

View File

@ -0,0 +1,39 @@
From f68b3667591ab5f9edb9a40f9a7c0c798c923bc4 Mon Sep 17 00:00:00 2001
From: Toshiki Sonoda <sonoda.toshiki@fujitsu.com>
Date: Wed, 9 Nov 2022 18:33:56 +0900
Subject: [PATCH] virtinstall: Fix the allocating disk size printed by the
progress bar
When a sparse file is created during a disk allocation,
virt-install prints not the created disk size but a sparse file size.
Therefore, we fix to print the created disk size during disk allocation
instead of the size of the sparse file by updating the meter with the
self.capacity.
Signed-off-by: Toshiki Sonoda <sonoda.toshiki@fujitsu.com>
Signed-off-by: Haruka Ohata <ohata.haruka@fujitsu.com>
(cherry picked from commit 39c7a443146433766e4e71e48ab59145c74924b3)
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2156247
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
---
virtinst/storage.py | 1 +
1 file changed, 1 insertion(+)
diff --git a/virtinst/storage.py b/virtinst/storage.py
index 509f5cb06..617b05e0d 100644
--- a/virtinst/storage.py
+++ b/virtinst/storage.py
@@ -697,6 +697,7 @@ class StorageVolume(_StorageObject):
log.debug("Using vol create flags=%s", createflags)
vol = self.pool.createXML(xml, createflags)
+ meter.update(self.capacity)
meter.end()
log.debug("Storage volume '%s' install complete.", self.name)
return vol
--
2.39.0

View File

@ -0,0 +1,87 @@
From 91cd135f66b517cf247d031966c2f33343c23aa3 Mon Sep 17 00:00:00 2001
From: Toshiki Sonoda <sonoda.toshiki@fujitsu.com>
Date: Wed, 9 Nov 2022 18:33:57 +0900
Subject: [PATCH] virtinstall: Hide total_size in the progress bar if it
doesn't need
virt-install prints the total_size value to the progress bar even if it
is meaningless.
This value can be confusing to user, so for execute prosess that doesn't
copy files (total_size = 0B), we hide the total_size value.
For example, 'Creating domain...' doesn't need to print the total_size
value.
Signed-off-by: Toshiki Sonoda <sonoda.toshiki@fujitsu.com>
Signed-off-by: Haruka Ohata <ohata.haruka@fujitsu.com>
(cherry picked from commit 6ec00474a659158f20248d6af3771d1a12ddac7b)
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2156247
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
---
tests/data/meter/meter-zero.txt | 4 ++++
tests/test_misc.py | 14 ++++++++++++++
virtinst/_progresspriv.py | 8 ++++++--
3 files changed, 24 insertions(+), 2 deletions(-)
create mode 100644 tests/data/meter/meter-zero.txt
diff --git a/tests/data/meter/meter-zero.txt b/tests/data/meter/meter-zero.txt
new file mode 100644
index 000000000..fc81f21fd
--- /dev/null
+++ b/tests/data/meter/meter-zero.txt
@@ -0,0 +1,4 @@
+
+Meter text test 100% [================] 0 B/s | 0 B --:-- ETA
+
+Meter text test | 00:02
diff --git a/tests/test_misc.py b/tests/test_misc.py
index 20f5a626b..2cabc3382 100644
--- a/tests/test_misc.py
+++ b/tests/test_misc.py
@@ -224,6 +224,20 @@ def test_misc_meter():
out = meter.output.getvalue().replace("\r", "\n")
utils.diff_compare(out, os.path.join(utils.DATADIR, "meter", "meter6.txt"))
+ def _test_meter_zero(m, startval=0, text="Meter text test"):
+ with unittest.mock.patch("time.time", return_value=1.0):
+ m.start(text, startval)
+ with unittest.mock.patch("time.time", return_value=3.0):
+ m.update(0)
+ with unittest.mock.patch("time.time", return_value=3.1):
+ m.end()
+
+ # meter with size 0 and startval size 0
+ meter = _progresspriv.TextMeter(output=io.StringIO())
+ _test_meter_zero(meter, 0)
+ out = meter.output.getvalue().replace("\r", "\n")
+ utils.diff_compare(out, os.path.join(utils.DATADIR, "meter", "meter-zero.txt"))
+
# BaseMeter coverage
meter = _progresspriv.BaseMeter()
_test_meter_values(meter)
diff --git a/virtinst/_progresspriv.py b/virtinst/_progresspriv.py
index a035c9c43..207c64796 100644
--- a/virtinst/_progresspriv.py
+++ b/virtinst/_progresspriv.py
@@ -247,11 +247,15 @@ class TextMeter(BaseMeter):
tl = TerminalLine(8)
# For big screens, make it more readable.
use_hours = bool(tl.llen > 80)
- ui_size = tl.add(' | %5sB' % total_size)
ui_time = tl.add(' %s' % format_time(self.re.elapsed_time(),
use_hours))
ui_end, not_done = _term_add_end(tl, self.size, amount_read)
- dummy = not_done
+ if not not_done and amount_read == 0:
+ # Doesn't need to print total_size
+ ui_size = tl.add(' | %5s ' % ' ')
+ else:
+ ui_size = tl.add(' | %5sB' % total_size)
+
out = '\r%-*.*s%s%s%s\n' % (tl.rest(), tl.rest(), self.text,
ui_size, ui_time, ui_end)
self.output.write(out)
--
2.39.0

View File

@ -0,0 +1,58 @@
From afb42b86ad8bd72930859968c92c084134e6d114 Mon Sep 17 00:00:00 2001
From: Cole Robinson <crobinso@redhat.com>
Date: Sat, 20 Aug 2022 09:54:01 -0400
Subject: [PATCH] virtinstall: fix regression with --boot and no install method
Anything passed to --boot should imply --install no_install=yes
in the absence of other --install options. This is historically
what we've done but we regressed in 4.1.0
Resolves: https://github.com/virt-manager/virt-manager/issues/426
Signed-off-by: Cole Robinson <crobinso@redhat.com>
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2144885
(cherry picked from commit e94786c066696781a821f5a4bcef3c377e4bc5e5)
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
---
tests/test_cli.py | 1 +
virtinst/virtinstall.py | 3 ++-
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/tests/test_cli.py b/tests/test_cli.py
index 774db098f..ca8d2340a 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -966,6 +966,7 @@ c.add_valid("--os-variant generic --pxe --ram 16", grep="Requested memory 16 MiB
c.add_valid("--os-variant winxp --ram 32 --cdrom %(EXISTIMG1)s", grep="32 MiB is less than the recommended 64 MiB") # Windows. Catch memory warning
c.add_valid("--osinfo generic --pxe --autostart") # --autostart flag
c.add_valid("--cdrom %(EXISTIMG2)s --os-variant win2k3 --print-step 2") # HVM windows install, print 3rd stage XML
+c.add_valid("--memory 512 --osinfo generic --boot cdrom") # --boot XXX should imply --install no_install
c.add_compare("--location location=%(TREEDIR)s --initrd-inject virt-install --extra-args ks=file:/virt-install", "initrd-inject") # initrd-inject
c.add_compare("--cdrom http://example.com/path/to/some.iso --os-variant detect=yes,require=no", "cdrom-url")
c.add_compare("--pxe --print-step all --os-variant none", "simple-pxe") # Diskless PXE install
diff --git a/virtinst/virtinstall.py b/virtinst/virtinstall.py
index 6d7f56b8d..20b901813 100644
--- a/virtinst/virtinstall.py
+++ b/virtinst/virtinstall.py
@@ -431,7 +431,7 @@ def build_installer(options, guest, installdata):
pass
elif (options.import_install or
options.xmlonly or
- options.boot or
+ options.boot_was_set or
options.cloud_init or
options.unattended):
no_install = True
@@ -641,6 +641,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)
+ options.boot_was_set = bool(options.boot)
if options.reinstall:
dummy1, guest, dummy2 = cli.get_domain_and_guest(conn, options.reinstall)
--
2.38.1

View File

@ -7,8 +7,8 @@
# End local config
Name: virt-manager
Version: 4.0.0
Release: 1%{?dist}%{?extra_release}.alma
Version: 4.1.0
Release: 4%{?dist}%{?extra_release}.alma
%global verrel %{version}-%{release}
Summary: Desktop tool for managing virtual machines via libvirt
@ -18,8 +18,13 @@ URL: https://virt-manager.org/
Source0: https://virt-manager.org/download/sources/%{name}/%{name}-%{version}.tar.gz
Source1: symlinks
Patch1: virt-manager-virt-install-add-support-for-qemu-vdagent-channel.patch
Patch2: virt-manager-virt-manager-add-support-for-qemu-vdagent-channel.patch
Patch1: virt-manager-cloner-Sync-uuid-and-sysinfo-system-uuid.patch
Patch2: virt-manager-virtinstall-fix-regression-with-boot-and-no-install-method.patch
Patch3: virt-manager-progress-Fix-showing-correct-final-total.patch
Patch4: virt-manager-virtinstall-Fix-the-allocating-disk-size-printed-by-the-progress-bar.patch
Patch5: virt-manager-virtinstall-Hide-total_size-in-the-progress-bar-if-it-doesn-t-need.patch
Patch6: virt-manager-virt-install-Recommend-boot-uefi.patch
Patch7: virt-manager-virt-install-Document-Secure-Boot-setups.patch
# AlmaLinux support patch
@ -187,9 +192,24 @@ git config gc.auto 0
%changelog
* Mon Oct 17 2022 Eduard Abdullin <eabdullin@almalinux.org> - 4.0.0-1.alma
* Wed Mar 29 2023 Eduard Abdullin <eabdullin@almalinux.org> - 4.1.0-4.alma
- Add AlmaLinux support
* Tue Feb 14 2023 Jonathon Jongsma <jjongsma@redhat.com> - 4.1.0-4
- virt-install: Recommend '--boot uefi' (rhbz#2112154)
- virt-install: Document Secure Boot setups (rhbz#2112154)
* Wed Feb 1 2023 Jonathon Jongsma <jjongsma@redhat.com> - 4.1.0-3
- progress: Fix showing correct final total (rhbz#2156247)
- virtinstall: Fix the allocating disk size printed by the progress bar (rhbz#2156247)
- virtinstall: Hide total_size in the progress bar if it doesn't need (rhbz#2156247)
* Mon Dec 5 2022 Jonathon Jongsma <jjongsma@redhat.com> - 4.1.0-2
- virtinstall: fix regression with --boot and no install method (rhbz#2144885)
* Tue Nov 15 2022 Jonathon Jongsma <jjongsma@redhat.com> - 4.1.0-1
- Rebased to virt-manager-4.1.0 (rhbz#2135791)
- cloner: Sync <uuid> and <sysinfo> system uuid (rhbz#2038040)
* Thu Jul 7 2022 Jonathon Jongsma <jjongsma@redhat.com> - 4.0.0-1
- Rebased to virt-manager-4.0.0 (rhbz#2100525)
- virt-install: add support for qemu-vdagent channel (rhbz#2060724)