[libvirt] [PATCHv5 0/3] leaseshelper: Couple of improvements
by Peter Krempa
Nehal J Wani (1):
leaseshelper: improvements to support all events
Peter Krempa (2):
leaseshelper: Refactor control flow
network: dnsmasq: Don't format lease file path
src/network/bridge_driver.c | 16 +-
src/network/bridge_driver.h | 3 -
src/network/leaseshelper.c | 246 +++++++++++++++------
tests/networkxml2confdata/dhcp6-nat-network.conf | 1 -
tests/networkxml2confdata/dhcp6-network.conf | 1 -
tests/networkxml2confdata/isolated-network.conf | 1 -
.../nat-network-dns-srv-record-minimal.conf | 1 -
.../nat-network-dns-srv-record.conf | 1 -
.../nat-network-dns-txt-record.conf | 1 -
tests/networkxml2confdata/nat-network.conf | 1 -
tests/networkxml2confdata/netboot-network.conf | 1 -
.../networkxml2confdata/netboot-proxy-network.conf | 1 -
tests/networkxml2conftest.c | 12 -
13 files changed, 181 insertions(+), 105 deletions(-)
--
2.1.0
9 years, 11 months
[libvirt] [PATCH] storage: fix crash caused by no check return before set close
by Luyao Huang
https://bugzilla.redhat.com/show_bug.cgi?id=1087104#c5
When try to use a invalid offset do volupload, libvirt will
get failed in virFDStreamOpenFileInternal, but seems libvirt do not
check the return in storageVolUpload, and call virFDStreamSetInternalCloseCb
, but stream doesn't have a privateData (is NULL), then crash.
Although libvirt have a check for invalid offset in cmdVolUpload, but i think
there should have some other way to touch off this crash.
0 0x00007f09429a9c10 in pthread_mutex_lock () from /lib64/libpthread.so.0
1 0x00007f094514dbf5 in virMutexLock (m=<optimized out>) at util/virthread.c:88
2 0x00007f09451cb211 in virFDStreamSetInternalCloseCb at fdstream.c:795
3 0x00007f092ff2c9eb in storageVolUpload at storage/storage_driver.c:2098
4 0x00007f09451f46e0 in virStorageVolUpload at libvirt.c:14000
5 0x00007f0945c78fa1 in remoteDispatchStorageVolUpload at remote_dispatch.h:14339
6 remoteDispatchStorageVolUploadHelper at remote_dispatch.h:14309
7 0x00007f094524a192 in virNetServerProgramDispatchCall at rpc/virnetserverprogram.c:437
Signed-off-by: Luyao Huang <lhuang(a)redhat.com>
---
src/storage/storage_driver.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c
index 7f33d6f..7f4de19 100644
--- a/src/storage/storage_driver.c
+++ b/src/storage/storage_driver.c
@@ -2111,8 +2111,9 @@ storageVolUpload(virStorageVolPtr obj,
goto cleanup;
}
- ret = backend->uploadVol(obj->conn, pool, vol, stream,
- offset, length, flags);
+ if ((ret = backend->uploadVol(obj->conn, pool, vol, stream,
+ offset, length, flags)) < 0)
+ goto cleanup;
/* Add cleanup callback - call after uploadVol since the stream
* is then fully set up
--
1.8.3.1
9 years, 11 months
[libvirt] [PATCH 0/2] Rework reference locking; in QEMU, for starters
by Martin Kletzander
Our reference locking for objects is great and powerful thing. The
problem is that it was either not followed through completely or the
design was not complete, but it doesn't matter now. There are few
bugs in the code due to the reference counting and the daemon is
lacking some performance in specific scenarios.
This "series" tried to fix that using the following idea:
- Each API working with a domain object that has to get it from the
list will have its *own* reference, not borrowed one from the list.
- When adding a domain into the list, the reference counter is
increased (this is the reference that is there just for being in
the list) and when being removed, it is decreased. No
special-casing of "if this is was the last reference" and other
funny stuff.
- When job is created, there is no need to increase the reference
counter as there are at least two references for the domain:
1) The API that created the job has one, so if it's not async it
will be kept until the API ends and at that point the job won't
exist any more.
2) The domain list has one and even though I said nobody needs to
rely on that, async APIs probably will do that, but there's an
excuse for that. In order to remove the domain from the list,
you need a job and that won't succeed unless the async one
ended. So we're good in this case as well.
After searching through the code for all things that needed to be
removed and fixing everything I could possibly think of, I tried a few
things on my setup and it looks like it works. However, I haven't
tried *every single API*, but I hope that's understandable. On the
other hand, I asked Pavel to try running virt-test with these patches
applied, hopefully we'll get an idea about how reliable this "series"
is.
I used "series" (with quotes) on purpose, because first patch just
adds two new wrappers for slightly modified function and the second
one changes the whole qemu driver at once. Unfortunately the second
patch couldn't be broken up to more parts due to the nature of the
fix.
Enough chit-chat, let's look at the codes!
Martin Kletzander (2):
conf: Rework virDomainObjListFindByUUID to allow more concurrent APIs
qemu: completely rework reference counting
src/conf/domain_conf.c | 27 +-
src/conf/domain_conf.h | 2 +
src/libvirt_private.syms | 1 +
src/qemu/THREADS.txt | 40 ++-
src/qemu/qemu_domain.c | 28 +-
src/qemu/qemu_domain.h | 12 +-
src/qemu/qemu_driver.c | 708 ++++++++++++++++------------------------------
src/qemu/qemu_migration.c | 108 +++----
src/qemu/qemu_migration.h | 10 +-
src/qemu/qemu_process.c | 126 ++++-----
10 files changed, 406 insertions(+), 656 deletions(-)
--
2.1.3
9 years, 11 months
[libvirt] [PATCH v2] qemu: Allow UEFI paths to be specified at compile time
by Michal Privoznik
Up until now there are just two ways how to specify UEFI paths to
libvirt. The first one is editing qemu.conf, the other is editing
qemu_conf.c and recompile. Therefore, two new configure options
are invented: --with-default-loader --with-default-nvram.
At the same time, the list of default paths is extended to AAVMF.
which is an aarch64 port of OVMF.
Signed-off-by: Michal Privoznik <mprivozn(a)redhat.com>
---
diff to v1:
-introduce configure options too
configure.ac | 22 ++++++++++++++++++++++
src/qemu/qemu.conf | 12 +++++++++---
src/qemu/qemu_conf.c | 24 ++++++++++++++++++++----
src/qemu/test_libvirtd_qemu.aug.in | 1 +
4 files changed, 52 insertions(+), 7 deletions(-)
diff --git a/configure.ac b/configure.ac
index 9fd44b2..c22ac75 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2786,6 +2786,28 @@ AC_ARG_WITH([default-editor],
[DEFAULT_EDITOR=vi])
AC_DEFINE_UNQUOTED([DEFAULT_EDITOR], ["$DEFAULT_EDITOR"], [Default editor to use])
+AC_ARG_WITH([default-loader],
+ [AS_HELP_STRING([--with-default-loader],
+ [Default UEFI loader path @<:@default=paths to OVMF and its clones@:>@])],
+ [with_default_loader=${withval}],
+ [with_default_loader=no])
+AC_ARG_WITH([default-nvram],
+ [AS_HELP_STRING([--with-default-nvram],
+ [Default UEFI NVRAM path @<:@default=paths to OVMF and its clones@:>@])],
+ [with_default_nvram=${withval}],
+ [with_default_nvram=no])
+
+if test "$with_default_loader:$with_default_nvram" != "no:no"; then
+ if test "$with_default_loader" = "no"; then
+ AC_MSG_ERROR([Can't use nvram without loader])
+ fi
+ if test "$with_default_nvram" = "no"; then
+ AC_MSG_ERROR([Can't use loader without nvram])
+ fi
+ AC_DEFINE_UNQUOTED([DEFAULT_LOADER], ["$with_default_loader"], [Default UEFI loader])
+ AC_DEFINE_UNQUOTED([DEFAULT_NVRAM], ["$with_default_nvram"], [Default UEFI nvram])
+fi
+
# Some GNULIB base64 symbols clash with a kerberos library
AC_DEFINE_UNQUOTED([isbase64],[libvirt_gl_isbase64],[Hack to avoid symbol clash])
AC_DEFINE_UNQUOTED([base64_encode],[libvirt_gl_base64_encode],[Hack to avoid symbol clash])
diff --git a/src/qemu/qemu.conf b/src/qemu/qemu.conf
index c6db568..1c589a2 100644
--- a/src/qemu/qemu.conf
+++ b/src/qemu/qemu.conf
@@ -506,6 +506,12 @@
# however, have different variables store. Therefore the nvram is
# a list of strings when a single item is in form of:
# ${PATH_TO_UEFI_FW}:${PATH_TO_UEFI_VARS}.
-# Later, when libvirt creates per domain variable store, this
-# list is searched for the master image.
-#nvram = [ "/usr/share/OVMF/OVMF_CODE.fd:/usr/share/OVMF/OVMF_VARS.fd" ]
+# Later, when libvirt creates per domain variable store, this list is
+# searched for the master image. The UEFI firmware can be called
+# differently for different guest architectures. For instance, it's OVMF
+# for x86_64 and i686, but it's AAVMF for aarch64. The libvirt default
+# follows this scheme.
+#nvram = [
+# "/usr/share/OVMF/OVMF_CODE.fd:/usr/share/OVMF/OVMF_VARS.fd",
+# "/usr/share/AAVMF/AAVMF_CODE.fd:/usr/share/AAVMF/AAVMF_VARS.fd"
+#]
diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c
index 4764bef..d268fc3 100644
--- a/src/qemu/qemu_conf.c
+++ b/src/qemu/qemu_conf.c
@@ -107,8 +107,10 @@ void qemuDomainCmdlineDefFree(qemuDomainCmdlineDefPtr def)
VIR_FREE(def);
}
-#define VIR_QEMU_LOADER_FILE_PATH "/usr/share/OVMF/OVMF_CODE.fd"
-#define VIR_QEMU_NVRAM_FILE_PATH "/usr/share/OVMF/OVMF_VARS.fd"
+#define VIR_QEMU_OVMF_LOADER_PATH "/usr/share/AAVMF/AAVMF_CODE.fd"
+#define VIR_QEMU_OVMF_NVRAM_PATH "/usr/share/AAVMF/AAVMF_VARS.fd"
+#define VIR_QEMU_AAVMF_LOADER_PATH "/usr/share/OVMF/OVMF_CODE.fd"
+#define VIR_QEMU_AAVMF_NVRAM_PATH "/usr/share/OVMF/OVMF_VARS.fd"
virQEMUDriverConfigPtr virQEMUDriverConfigNew(bool privileged)
{
@@ -258,15 +260,29 @@ virQEMUDriverConfigPtr virQEMUDriverConfigNew(bool privileged)
cfg->logTimestamp = true;
+#if defined(DEFAULT_LOADER) && defined(DEFAULT_NVRAM)
if (VIR_ALLOC_N(cfg->loader, 1) < 0 ||
VIR_ALLOC_N(cfg->nvram, 1) < 0)
goto error;
cfg->nloader = 1;
- if (VIR_STRDUP(cfg->loader[0], VIR_QEMU_LOADER_FILE_PATH) < 0 ||
- VIR_STRDUP(cfg->nvram[0], VIR_QEMU_NVRAM_FILE_PATH) < 0)
+ if (VIR_STRDUP(cfg->loader[0], DEFAULT_LOADER) < 0 ||
+ VIR_STRDUP(cfg->nvram[0], DEFAULT_NVRAM) < 0)
goto error;
+#else /* defined(DEFAULT_LOADER && defined(DEFAULT_NVRAM) */
+
+ if (VIR_ALLOC_N(cfg->loader, 2) < 0 ||
+ VIR_ALLOC_N(cfg->nvram, 2) < 0)
+ goto error;
+ cfg->nloader = 2;
+
+ if (VIR_STRDUP(cfg->loader[0], VIR_QEMU_OVMF_LOADER_PATH) < 0 ||
+ VIR_STRDUP(cfg->nvram[0], VIR_QEMU_OVMF_NVRAM_PATH) < 0 ||
+ VIR_STRDUP(cfg->loader[1], VIR_QEMU_AAVMF_LOADER_PATH) < 0 ||
+ VIR_STRDUP(cfg->nvram[1], VIR_QEMU_AAVMF_NVRAM_PATH) < 0)
+ goto error;
+#endif /* defined(DEFAULT_LOADER && defined(DEFAULT_NVRAM) */
return cfg;
error:
diff --git a/src/qemu/test_libvirtd_qemu.aug.in b/src/qemu/test_libvirtd_qemu.aug.in
index 30fd27e..fc4935b 100644
--- a/src/qemu/test_libvirtd_qemu.aug.in
+++ b/src/qemu/test_libvirtd_qemu.aug.in
@@ -76,4 +76,5 @@ module Test_libvirtd_qemu =
{ "log_timestamp" = "0" }
{ "nvram"
{ "1" = "/usr/share/OVMF/OVMF_CODE.fd:/usr/share/OVMF/OVMF_VARS.fd" }
+ { "2" = "/usr/share/AAVMF/AAVMF_CODE.fd:/usr/share/AAVMF/AAVMF_VARS.fd" }
}
--
2.0.4
9 years, 11 months
[libvirt] [PATCH] virsh: vol-upload disallow negative offset
by Shanzhi Yu
In commit 570d0f, it should diable negative offset both in cmdVolDownload and
cmdVolUpload according the description, while it really didn't in cmdVolUpload
Disable it in this patch
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1087104
Signed-off-by: Shanzhi Yu <shyu(a)redhat.com>
---
tools/virsh-volume.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/tools/virsh-volume.c b/tools/virsh-volume.c
index 27bd81d..d585ee2 100644
--- a/tools/virsh-volume.c
+++ b/tools/virsh-volume.c
@@ -677,13 +677,13 @@ cmdVolUpload(vshControl *ctl, const vshCmd *cmd)
const char *name = NULL;
unsigned long long offset = 0, length = 0;
- if (vshCommandOptULongLongWrap(cmd, "offset", &offset) < 0) {
- vshError(ctl, _("Unable to parse integer"));
+ if (vshCommandOptULongLong(cmd, "offset", &offset) < 0) {
+ vshError(ctl, _("Unable to parse offset value"));
return false;
}
if (vshCommandOptULongLongWrap(cmd, "length", &length) < 0) {
- vshError(ctl, _("Unable to parse integer"));
+ vshError(ctl, _("Unable to parse length value"));
return false;
}
--
2.1.0
9 years, 11 months
[libvirt] [PATCH 0/2] fix attached vm cannot get a right label
by Luyao Huang
When call qemuProcessAttach to attach a qemu process, libvirt will
generate a wrong label for DAC, and do not set imagelabel for both
of them, no imagelabel will cause some other issue.
After this patch guest label will be :
<seclabel type='static' model='selinux' relabel='yes'>
<label>unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023</label>
<imagelabel>system_u:object_r:svirt_image_t:s0-s0:c0.c1023</imagelabel>
</seclabel>
<seclabel type='static' model='dac' relabel='yes'>
<label>+0:+0</label>
<imagelabel>+0:+0</imagelabel>
</seclabel>
Luyao Huang (2):
qemu: fix some small issue in qemuProcessAttach
security: Add a new func use stat to get process DAC label
src/qemu/qemu_process.c | 10 ++++++---
src/security/security_dac.c | 50 +++++++++++++++++++++++++++++++++++++++++++--
2 files changed, 55 insertions(+), 5 deletions(-)
--
1.8.3.1
9 years, 11 months
[libvirt] [PATCH] lxc: give RW access to /proc/sys/net/ipv[46] to containers
by Cédric Bosdonnat
Some programs want to change some values for the network interfaces
configuration in /proc/sys/net/ipv[46] folders. Giving RW access on them
allows wicked to work on openSUSE 13.2+.
In order to mount those folders RW but keep the rest of /proc/sys RO,
we add temporary mounts for these folders before bind-mounting
/proc/sys.
---
src/lxc/lxc_container.c | 97 +++++++++++++++++++++++++++++++++++++++++--------
1 file changed, 82 insertions(+), 15 deletions(-)
diff --git a/src/lxc/lxc_container.c b/src/lxc/lxc_container.c
index 3b08b86..8eb2547 100644
--- a/src/lxc/lxc_container.c
+++ b/src/lxc/lxc_container.c
@@ -800,15 +800,20 @@ typedef struct {
int mflags;
bool skipUserNS;
bool skipUnmounted;
+ bool temporary;
} virLXCBasicMountInfo;
static const virLXCBasicMountInfo lxcBasicMounts[] = {
- { "proc", "/proc", "proc", MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false },
- { "/proc/sys", "/proc/sys", NULL, MS_BIND|MS_RDONLY, false, false },
- { "sysfs", "/sys", "sysfs", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_RDONLY, false, false },
- { "securityfs", "/sys/kernel/security", "securityfs", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_RDONLY, true, true },
+ { "proc", "/proc", "proc", MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false, false },
+ { "/proc/sys/net/ipv4", "TMP1", NULL, MS_BIND, false, false, true },
+ { "/proc/sys/net/ipv6", "TMP2", NULL, MS_BIND, false, false, true },
+ { "/proc/sys", "/proc/sys", NULL, MS_BIND|MS_RDONLY, false, false, false },
+ { "TMP1", "/proc/sys/net/ipv4", NULL, MS_BIND, false, false, false },
+ { "TMP2", "/proc/sys/net/ipv6", NULL, MS_BIND, false, false, false },
+ { "sysfs", "/sys", "sysfs", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_RDONLY, false, false, false },
+ { "securityfs", "/sys/kernel/security", "securityfs", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_RDONLY, true, true, false },
#if WITH_SELINUX
- { SELINUX_MOUNT, SELINUX_MOUNT, "selinuxfs", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_RDONLY, true, true },
+ { SELINUX_MOUNT, SELINUX_MOUNT, "selinuxfs", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_RDONLY, true, true, false },
#endif
};
@@ -885,14 +890,23 @@ static int lxcContainerSetReadOnly(void)
static int lxcContainerMountBasicFS(bool userns_enabled,
bool netns_disabled)
{
- size_t i;
+ size_t i, j;
int rc = -1;
char* mnt_src = NULL;
+ char* mnt_dst = NULL;
int mnt_mflags;
+ char **tmpkeys = NULL;
+ char **tmppaths = NULL;
+ size_t nmounts = ARRAY_CARDINALITY(lxcBasicMounts);
VIR_DEBUG("Mounting basic filesystems");
- for (i = 0; i < ARRAY_CARDINALITY(lxcBasicMounts); i++) {
+ if (VIR_ALLOC_N(tmpkeys, nmounts) < 0 ||
+ VIR_ALLOC_N(tmppaths, nmounts) < 0) {
+ goto cleanup;
+ }
+
+ for (i = 0; i < nmounts; i++) {
bool bindOverReadonly;
virLXCBasicMountInfo const *mnt = &lxcBasicMounts[i];
@@ -906,11 +920,36 @@ static int lxcContainerMountBasicFS(bool userns_enabled,
goto cleanup;
mnt_mflags = MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_RDONLY|MS_BIND;
} else {
- if (VIR_STRDUP(mnt_src, mnt->src) < 0)
+ /* Look for potential temporary folder match */
+ for (j = 0; j < i; j++) {
+ if (STREQ_NULLABLE(mnt->src, tmpkeys[j])) {
+ if (VIR_STRDUP(mnt_src, tmppaths[j]) < 0)
+ goto cleanup;
+ break;
+ }
+ }
+ if (!mnt_src && VIR_STRDUP(mnt_src, mnt->src) < 0)
goto cleanup;
mnt_mflags = mnt->mflags;
}
+ if (mnt->temporary) {
+ char tmppath[] = "/tmp/mount-XXXXXX";
+ if (mkdtemp(tmppath) == NULL) {
+ virReportSystemError(errno,
+ _("Failed to create temporary folder %s"),
+ tmppath);
+ }
+ if (VIR_STRDUP(tmppaths[i], tmppath) < 0 ||
+ VIR_STRDUP(tmpkeys[i], mnt->dst) < 0 ||
+ VIR_STRDUP(mnt_dst, tmppath) < 0) {
+ goto cleanup;
+ }
+ } else {
+ if (VIR_STRDUP(mnt_dst, mnt->dst) < 0)
+ goto cleanup;
+ }
+
VIR_DEBUG("Processing %s -> %s",
mnt_src, mnt->dst);
@@ -940,10 +979,18 @@ static int lxcContainerMountBasicFS(bool userns_enabled,
continue;
}
- if (virFileMakePath(mnt->dst) < 0) {
+ /* Some source files or folders may not exist like /proc/sys/net/ipv6
+ * as they may depend on a kernel module being loaded. */
+ if (STRPREFIX(mnt_src, "/") && virFileExists(mnt_src)) {
+ VIR_DEBUG("Skipping: missing %s", mnt_src);
+ VIR_FREE(mnt_src);
+ continue;
+ }
+
+ if (virFileMakePath(mnt_dst) < 0) {
virReportSystemError(errno,
_("Failed to mkdir %s"),
- mnt_src);
+ mnt_dst);
goto cleanup;
}
@@ -957,32 +1004,52 @@ static int lxcContainerMountBasicFS(bool userns_enabled,
bindOverReadonly = !!(mnt_mflags & MS_RDONLY);
VIR_DEBUG("Mount %s on %s type=%s flags=%x",
- mnt_src, mnt->dst, mnt->type, mnt_mflags & ~MS_RDONLY);
- if (mount(mnt_src, mnt->dst, mnt->type, mnt_mflags & ~MS_RDONLY, NULL) < 0) {
+ mnt_src, mnt_dst, mnt->type, mnt_mflags & ~MS_RDONLY);
+ if (mount(mnt_src, mnt_dst, mnt->type, mnt_mflags & ~MS_RDONLY, NULL) < 0) {
virReportSystemError(errno,
_("Failed to mount %s on %s type %s flags=%x"),
- mnt_src, mnt->dst, NULLSTR(mnt->type),
+ mnt_src, mnt_dst, NULLSTR(mnt->type),
mnt_mflags & ~MS_RDONLY);
goto cleanup;
}
if (bindOverReadonly &&
- mount(mnt_src, mnt->dst, NULL,
+ mount(mnt_src, mnt_dst, NULL,
MS_BIND|MS_REMOUNT|MS_RDONLY, NULL) < 0) {
virReportSystemError(errno,
_("Failed to re-mount %s on %s flags=%x"),
- mnt_src, mnt->dst,
+ mnt_src, mnt_dst,
MS_BIND|MS_REMOUNT|MS_RDONLY);
goto cleanup;
}
VIR_FREE(mnt_src);
+ VIR_FREE(mnt_dst);
}
rc = 0;
cleanup:
+ /* Cleanup temporary mounts */
+ for (i = 0; i < nmounts; i++) {
+ virLXCBasicMountInfo const *mnt = &lxcBasicMounts[i];
+ if (mnt->temporary) {
+ if (umount(tmppaths[i]) < 0) {
+ virReportSystemError(errno,
+ _("Failed to un-mount temporary %s"),
+ tmppaths[i]);
+ }
+ if (virFileDeleteTree(tmppaths[i]) < 0)
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("Failed to remove temporary folder %s"),
+ tmppaths[i]);
+ }
+ }
+
+ virStringFreeList(tmpkeys);
+ virStringFreeList(tmppaths);
VIR_FREE(mnt_src);
+ VIR_FREE(mnt_dst);
VIR_DEBUG("rc=%d", rc);
return rc;
}
--
2.1.2
9 years, 11 months
[libvirt] [PATCH] libvirt.spec.in: BuildRequires: python-devel
by Michal Privoznik
As of f48ab7d8 we are trying to use python-devel to check python's
version (or at least gnulib is doing that). However, the specfile
doesn't say anything about it and therefore bootstrapping may fail
on a minimal installation on rawhide.
Signed-off-by: Michal Privoznik <mprivozn(a)redhat.com>
---
libvirt.spec.in | 1 +
1 file changed, 1 insertion(+)
diff --git a/libvirt.spec.in b/libvirt.spec.in
index 0959483..083612c 100644
--- a/libvirt.spec.in
+++ b/libvirt.spec.in
@@ -424,6 +424,7 @@ BuildRequires: automake
BuildRequires: gettext-devel
BuildRequires: libtool
BuildRequires: /usr/bin/pod2man
+BuildRequires: python-devel
%endif
BuildRequires: git
BuildRequires: perl
--
2.0.4
9 years, 11 months
[libvirt] ANNOUNCE: virt-manager 1.1.0 released
by Cole Robinson
I'm happy to announce the release of virt-manager 1.1.0!
virt-manager is a desktop application for managing KVM, Xen, and LXC
virtualization via libvirt.
The release can be downloaded from:
http://virt-manager.org/download/
The direct download links are:
http://virt-manager.org/download/sources/virt-manager/virt-manager-1.1.0....
This release includes:
- Switch to libosinfo as OS metadata database (Giuseppe Scrivano)
- Use libosinfo for OS detection from CDROM media labels (Giuseppe
Scrivano)
- Use libosinfo for improved OS defaults, like recommended disk size
(Giuseppe Scrivano)
- virt-image tool has been removed, as previously announced
- Enable Hyper-V enlightenments for Windows VMs
- Revert virtio-console default, back to plain serial console
- Experimental q35 option in new VM 'customize' dialog
- UI for virtual network QoS settings (Giuseppe Scrivano)
- virt-install: --disk discard= support (Jim Minter)
- addhardware: Add spiceport UI (Marc-André Lureau)
- virt-install: --events on_poweroff etc. support (Chen Hanxiao)
- cli --network portgroup= support and UI support
- cli --boot initargs= and UI support
- addhardware: allow setting controller model (Chen Hanxiao)
- virt-install: support setting hugepage options (Chen Hanxiao)
Thanks to everyone who has contributed to this release through testing,
bug reporting, submitting patches, and otherwise sending in feedback!
Thanks,
Cole
9 years, 11 months
[libvirt] [PATCH v3 0/4] Precreate storage on migration
by Michal Privoznik
diff to v2:
-nits found by Peter fixed
Michal Privoznik (4):
storage: Introduce storagePoolLookupByTargetPath
qemuMonitorJSONBlockStatsUpdateCapacity: Don't skip disks
qemu_migration: Send disk sizes to the other side
qemu_migration: Precreate missing storage
src/libvirt-domain.c | 3 +
src/qemu/qemu_migration.c | 319 ++++++++++++++++++++++++++++++++++++++++---
src/qemu/qemu_monitor_json.c | 14 +-
src/storage/storage_driver.c | 42 ++++++
src/storage/storage_driver.h | 4 +
5 files changed, 358 insertions(+), 24 deletions(-)
--
2.0.4
9 years, 11 months