From 36cab842e813cff3b04c101fd35c3d6dd6a4e142 Mon Sep 17 00:00:00 2001 From: Daniel Veillard Date: Apr 12 2010 18:05:13 +0000 Subject: - Upstream release 0.8.0 - Snapshotting support (QEmu/VBox/ESX) - Network filtering API - XenAPI driver - new APIs for domain events - Libvirt managed save API - timer subselection for domain clock - synchronous hooks - API to update guest CPU to host CPU - virDomainUpdateDeviceFlags new API - migrate max downtime API - volume wiping API - and many bug fixes Daniel --- diff --git a/.cvsignore b/.cvsignore index cfb6ffd..9faa076 100644 --- a/.cvsignore +++ b/.cvsignore @@ -17,3 +17,4 @@ libvirt-0.7.4.tar.gz libvirt-0.7.5.tar.gz libvirt-0.7.6.tar.gz libvirt-0.7.7.tar.gz +libvirt-0.8.0.tar.gz diff --git a/libvirt-0.7.7-fix-usb-product.patch b/libvirt-0.7.7-fix-usb-product.patch deleted file mode 100644 index 8ce24a9..0000000 --- a/libvirt-0.7.7-fix-usb-product.patch +++ /dev/null @@ -1,233 +0,0 @@ -From 3a441522017aa9c1b8b54d2ce4569d0f0d96fa72 Mon Sep 17 00:00:00 2001 -From: Cole Robinson -Date: Fri, 12 Mar 2010 12:36:56 -0500 -Subject: [PATCH] qemu: Add some debugging at domain startup - ---- - src/qemu/qemu_driver.c | 24 +++++++++++++++++++++++- - 1 files changed, 23 insertions(+), 1 deletions(-) - -diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c -index f8ab545..040d645 100644 ---- a/src/qemu/qemu_driver.c -+++ b/src/qemu/qemu_driver.c -@@ -2695,6 +2695,8 @@ static int qemudStartVMDaemon(virConnectPtr conn, - - FD_ZERO(&keepfd); - -+ DEBUG0("Beginning VM startup process"); -+ - if (virDomainObjIsActive(vm)) { - qemuReportError(VIR_ERR_OPERATION_INVALID, - "%s", _("VM is already active")); -@@ -2703,22 +2705,27 @@ static int qemudStartVMDaemon(virConnectPtr conn, - - /* If you are using a SecurityDriver with dynamic labelling, - then generate a security label for isolation */ -+ DEBUG0("Generating domain security label (if required)"); - if (driver->securityDriver && - driver->securityDriver->domainGenSecurityLabel && - driver->securityDriver->domainGenSecurityLabel(vm) < 0) - return -1; - -+ DEBUG0("Generating setting domain security labels (if required)"); - if (driver->securityDriver && - driver->securityDriver->domainSetSecurityAllLabel && - driver->securityDriver->domainSetSecurityAllLabel(vm) < 0) - goto cleanup; - -- /* Ensure no historical cgroup for this VM is lieing around bogus settings */ -+ /* Ensure no historical cgroup for this VM is lying around bogus -+ * settings */ -+ DEBUG0("Ensuring no historical cgroup is lying around"); - qemuRemoveCgroup(driver, vm, 1); - - if ((vm->def->ngraphics == 1) && - vm->def->graphics[0]->type == VIR_DOMAIN_GRAPHICS_TYPE_VNC && - vm->def->graphics[0]->data.vnc.autoport) { -+ DEBUG0("Determining VNC port"); - int port = qemudNextFreeVNCPort(driver); - if (port < 0) { - qemuReportError(VIR_ERR_INTERNAL_ERROR, -@@ -2735,6 +2742,7 @@ static int qemudStartVMDaemon(virConnectPtr conn, - goto cleanup; - } - -+ DEBUG0("Creating domain log file"); - if ((logfile = qemudLogFD(driver, vm->def->name)) < 0) - goto cleanup; - -@@ -2751,14 +2759,17 @@ static int qemudStartVMDaemon(virConnectPtr conn, - goto cleanup; - } - -+ DEBUG0("Determing emulator version"); - if (qemudExtractVersionInfo(emulator, - NULL, - &qemuCmdFlags) < 0) - goto cleanup; - -+ DEBUG0("Setting up domain cgroup (if required)"); - if (qemuSetupCgroup(driver, vm) < 0) - goto cleanup; - -+ DEBUG0("Preparing host devices"); - if (qemuPrepareHostDevices(driver, vm->def) < 0) - goto cleanup; - -@@ -2767,6 +2778,7 @@ static int qemudStartVMDaemon(virConnectPtr conn, - goto cleanup; - } - -+ DEBUG0("Preparing monitor state"); - if (qemuPrepareMonitorChr(driver, priv->monConfig, vm->def->name) < 0) - goto cleanup; - -@@ -2798,6 +2810,7 @@ static int qemudStartVMDaemon(virConnectPtr conn, - * use in hotplug - */ - if (qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE) { -+ DEBUG0("Assigning domain PCI addresses"); - /* Populate cache with current addresses */ - if (priv->pciaddrs) { - qemuDomainPCIAddressSetFree(priv->pciaddrs); -@@ -2816,6 +2829,7 @@ static int qemudStartVMDaemon(virConnectPtr conn, - priv->persistentAddrs = 0; - } - -+ DEBUG0("Building emulator command line"); - vm->def->id = driver->nextvmid++; - if (qemudBuildCommandLine(conn, driver, vm->def, priv->monConfig, - priv->monJSON, qemuCmdFlags, &argv, &progenv, -@@ -2899,25 +2913,31 @@ static int qemudStartVMDaemon(virConnectPtr conn, - if (ret == -1) /* The VM failed to start */ - goto cleanup; - -+ DEBUG0("Waiting for monitor to show up"); - if (qemudWaitForMonitor(driver, vm, pos) < 0) - goto abort; - -+ DEBUG0("Detecting VCPU PIDs"); - if (qemuDetectVcpuPIDs(driver, vm) < 0) - goto abort; - -+ DEBUG0("Setting CPU affinity"); - if (qemudInitCpuAffinity(vm) < 0) - goto abort; - -+ DEBUG0("Setting any required VM passwords"); - if (qemuInitPasswords(conn, driver, vm, qemuCmdFlags) < 0) - goto abort; - - /* If we have -device, then addresses are assigned explicitly. - * If not, then we have to detect dynamic ones here */ - if (!(qemuCmdFlags & QEMUD_CMD_FLAG_DEVICE)) { -+ DEBUG0("Determining domain device PCI addresses"); - if (qemuInitPCIAddresses(driver, vm) < 0) - goto abort; - } - -+ DEBUG0("Setting initial memory amount"); - qemuDomainObjEnterMonitorWithDriver(driver, vm); - if (qemuMonitorSetBalloon(priv->mon, vm->def->memory) < 0) { - qemuDomainObjExitMonitorWithDriver(driver, vm); -@@ -2925,6 +2945,7 @@ static int qemudStartVMDaemon(virConnectPtr conn, - } - - if (migrateFrom == NULL) { -+ DEBUG0("Starting domain CPUs"); - /* Allow the CPUS to start executing */ - if (qemuMonitorStartCPUs(priv->mon, conn) < 0) { - if (virGetLastError() == NULL) -@@ -2937,6 +2958,7 @@ static int qemudStartVMDaemon(virConnectPtr conn, - qemuDomainObjExitMonitorWithDriver(driver, vm); - - -+ DEBUG0("Writing domain status to disk"); - if (virDomainSaveStatus(driver->caps, driver->stateDir, vm) < 0) - goto abort; - --- -1.6.6.1 - -From 6d5c8a8f51db8ce97ab35ab6022dd5c94ab016b4 Mon Sep 17 00:00:00 2001 -From: Cole Robinson -Date: Fri, 12 Mar 2010 12:37:52 -0500 -Subject: [PATCH] qemu: Fix USB by product with security enabled - -We need to call PrepareHostdevs to determine the USB device path before -any security calls. PrepareHostUSBDevices was also incorrectly skipping -all USB devices. ---- - src/qemu/qemu_driver.c | 11 ++++++----- - 1 files changed, 6 insertions(+), 5 deletions(-) - -diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c -index 040d645..b17d26d 100644 ---- a/src/qemu/qemu_driver.c -+++ b/src/qemu/qemu_driver.c -@@ -2360,7 +2360,7 @@ qemuPrepareHostUSBDevices(struct qemud_driver *driver ATTRIBUTE_UNUSED, - - if (hostdev->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS) - continue; -- if (hostdev->source.subsys.type != VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI) -+ if (hostdev->source.subsys.type != VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB) - continue; - - /* Resolve a vendor/product to bus/device */ -@@ -2703,6 +2703,11 @@ static int qemudStartVMDaemon(virConnectPtr conn, - return -1; - } - -+ /* Must be run before security labelling */ -+ DEBUG0("Preparing host devices"); -+ if (qemuPrepareHostDevices(driver, vm->def) < 0) -+ goto cleanup; -+ - /* If you are using a SecurityDriver with dynamic labelling, - then generate a security label for isolation */ - DEBUG0("Generating domain security label (if required)"); -@@ -2769,10 +2774,6 @@ static int qemudStartVMDaemon(virConnectPtr conn, - if (qemuSetupCgroup(driver, vm) < 0) - goto cleanup; - -- DEBUG0("Preparing host devices"); -- if (qemuPrepareHostDevices(driver, vm->def) < 0) -- goto cleanup; -- - if (VIR_ALLOC(priv->monConfig) < 0) { - virReportOOMError(); - goto cleanup; --- -1.6.6.1 - -From 65e97240e6e4606820dd1c42ac172319e0af4d8d Mon Sep 17 00:00:00 2001 -From: Cole Robinson -Date: Mon, 22 Mar 2010 10:45:36 -0400 -Subject: [PATCH] security: selinux: Fix crash when releasing non-existent label - -This can be triggered by the qemuStartVMDaemon cleanup path if a -VM references a non-existent USB device (by product) in the XML. - -Signed-off-by: Cole Robinson ---- - src/security/security_selinux.c | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -diff --git a/src/security/security_selinux.c b/src/security/security_selinux.c -index 975b315..6680e2d 100644 ---- a/src/security/security_selinux.c -+++ b/src/security/security_selinux.c -@@ -632,7 +632,8 @@ SELinuxReleaseSecurityLabel(virDomainObjPtr vm) - { - const virSecurityLabelDefPtr secdef = &vm->def->seclabel; - -- if (secdef->type == VIR_DOMAIN_SECLABEL_STATIC) -+ if (secdef->type == VIR_DOMAIN_SECLABEL_STATIC || -+ secdef->label == NULL) - return 0; - - context_t con = context_new(secdef->label); --- -1.6.6.1 - diff --git a/libvirt-0.7.7-set-kernel-perms.patch b/libvirt-0.7.7-set-kernel-perms.patch deleted file mode 100644 index aa623ff..0000000 --- a/libvirt-0.7.7-set-kernel-perms.patch +++ /dev/null @@ -1,87 +0,0 @@ -From 3f1aa08af6580c215d973bc6bf57f505dbf8b926 Mon Sep 17 00:00:00 2001 -From: Cole Robinson -Date: Fri, 12 Mar 2010 13:38:39 -0500 -Subject: [PATCH] security: Set permissions for kernel/initrd - -Fixes URL installs when running virt-install as root on Fedora. ---- - src/qemu/qemu_security_dac.c | 21 +++++++++++++++++++++ - src/security/security_selinux.c | 16 ++++++++++++++++ - 2 files changed, 37 insertions(+), 0 deletions(-) - -diff --git a/src/qemu/qemu_security_dac.c b/src/qemu/qemu_security_dac.c -index 6911f48..1883fbe 100644 ---- a/src/qemu/qemu_security_dac.c -+++ b/src/qemu/qemu_security_dac.c -@@ -332,6 +332,15 @@ qemuSecurityDACRestoreSecurityAllLabel(virDomainObjPtr vm) - vm->def->disks[i]) < 0) - rc = -1; - } -+ -+ if (vm->def->os.kernel && -+ qemuSecurityDACRestoreSecurityFileLabel(vm->def->os.kernel) < 0) -+ rc = -1; -+ -+ if (vm->def->os.initrd && -+ qemuSecurityDACRestoreSecurityFileLabel(vm->def->os.initrd) < 0) -+ rc = -1; -+ - return rc; - } - -@@ -356,6 +365,18 @@ qemuSecurityDACSetSecurityAllLabel(virDomainObjPtr vm) - return -1; - } - -+ if (vm->def->os.kernel && -+ qemuSecurityDACSetOwnership(vm->def->os.kernel, -+ driver->user, -+ driver->group) < 0) -+ return -1; -+ -+ if (vm->def->os.initrd && -+ qemuSecurityDACSetOwnership(vm->def->os.initrd, -+ driver->user, -+ driver->group) < 0) -+ return -1; -+ - return 0; - } - -diff --git a/src/security/security_selinux.c b/src/security/security_selinux.c -index b2c8581..975b315 100644 ---- a/src/security/security_selinux.c -+++ b/src/security/security_selinux.c -@@ -616,6 +616,14 @@ SELinuxRestoreSecurityAllLabel(virDomainObjPtr vm) - rc = -1; - } - -+ if (vm->def->os.kernel && -+ SELinuxRestoreSecurityFileLabel(vm->def->os.kernel) < 0) -+ rc = -1; -+ -+ if (vm->def->os.initrd && -+ SELinuxRestoreSecurityFileLabel(vm->def->os.initrd) < 0) -+ rc = -1; -+ - return rc; - } - -@@ -736,6 +744,14 @@ SELinuxSetSecurityAllLabel(virDomainObjPtr vm) - return -1; - } - -+ if (vm->def->os.kernel && -+ SELinuxSetFilecon(vm->def->os.kernel, default_content_context) < 0) -+ return -1; -+ -+ if (vm->def->os.initrd && -+ SELinuxSetFilecon(vm->def->os.initrd, default_content_context) < 0) -+ return -1; -+ - return 0; - } - --- -1.6.6.1 - diff --git a/libvirt.spec b/libvirt.spec index 3caa9d7..24674a5 100644 --- a/libvirt.spec +++ b/libvirt.spec @@ -61,6 +61,7 @@ %define with_udev 0%{!?_without_udev:0} %define with_hal 0%{!?_without_hal:0} %define with_yajl 0%{!?_without_yajl:0} +%define with_libpcap 0%{!?_without_libpcap:0} # Non-server/HV driver defaults which are always enabled %define with_python 0%{!?_without_python:1} @@ -147,6 +148,11 @@ %define with_yajl 0%{!?_without_yajl:%{server_drivers}} %endif +# Enable libpcap library +%if %{with_qemu} +%define with_libpcap 0%{!?_without_libpcap:%{server_drivers}} +%endif + # Force QEMU to run as non-root %if 0%{?fedora} >= 12 || 0%{?rhel} >= 6 %define qemu_user qemu @@ -168,15 +174,11 @@ Summary: Library providing a simple API virtualization Name: libvirt -Version: 0.7.7 -Release: 3%{?dist}%{?extra_release} +Version: 0.8.0 +Release: 1%{?dist}%{?extra_release} License: LGPLv2+ Group: Development/Libraries Source: http://libvirt.org/sources/libvirt-%{version}.tar.gz -# Fix USB devices by product with security enabled (bz 574136) -Patch1: %{name}-%{version}-fix-usb-product.patch -# Set kernel/initrd in security driver, fixes some URL installs (bz 566425) -Patch2: %{name}-%{version}-set-kernel-perms.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root URL: http://libvirt.org/ BuildRequires: python-devel @@ -270,6 +272,9 @@ BuildRequires: libpciaccess-devel >= 0.10.9 %if %{with_yajl} BuildRequires: yajl-devel %endif +%if %{with_libpcap} +BuildRequires: libpcap-devel +%endif %if %{with_avahi} BuildRequires: avahi-devel %endif @@ -398,8 +403,6 @@ of recent versions of Linux (and other OSes). %prep %setup -q -%patch1 -p1 -%patch2 -p1 %build %if ! %{with_xen} @@ -598,9 +601,14 @@ rm -rf $RPM_BUILD_ROOT%{_datadir}/doc/libvirt-%{version} %if ! %{with_qemu} rm -rf $RPM_BUILD_ROOT%{_sysconfdir}/libvirt/qemu.conf +rm -rf $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/libvirtd.qemu %endif %if ! %{with_lxc} rm -rf $RPM_BUILD_ROOT%{_sysconfdir}/libvirt/lxc.conf +rm -rf $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/libvirtd.qemu +%endif +%if ! %{with_uml} +rm -rf $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/libvirtd.uml %endif %if %{with_libvirtd} @@ -630,7 +638,7 @@ getent passwd qemu >/dev/null || \ # or on the first upgrade from a non-network aware libvirt only. # We check this by looking to see if the daemon is already installed /sbin/chkconfig --list libvirtd 1>/dev/null 2>&1 -if [ $? != 0 -a ! -f %{_sysconfdir}/libvirt/qemu/networks/default.xml ] +if test $? != 0 && test ! -f %{_sysconfdir}/libvirt/qemu/networks/default.xml then UUID=`/usr/bin/uuidgen` sed -e "s,,\n $UUID," \ @@ -671,19 +679,26 @@ fi %dir %attr(0700, root, root) %{_sysconfdir}/libvirt/qemu/networks/autostart %endif +%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/nwfilter/ +%{_sysconfdir}/libvirt/nwfilter/*.xml + %{_sysconfdir}/rc.d/init.d/libvirtd %config(noreplace) %{_sysconfdir}/sysconfig/libvirtd %config(noreplace) %{_sysconfdir}/libvirt/libvirtd.conf -%config(noreplace) %{_sysconfdir}/logrotate.d/libvirtd %dir %attr(0700, root, root) %{_localstatedir}/log/libvirt/qemu/ %dir %attr(0700, root, root) %{_localstatedir}/log/libvirt/lxc/ %dir %attr(0700, root, root) %{_localstatedir}/log/libvirt/uml/ %if %{with_qemu} %config(noreplace) %{_sysconfdir}/libvirt/qemu.conf +%config(noreplace) %{_sysconfdir}/logrotate.d/libvirtd.qemu %endif %if %{with_lxc} %config(noreplace) %{_sysconfdir}/libvirt/lxc.conf +%config(noreplace) %{_sysconfdir}/logrotate.d/libvirtd.lxc +%endif +%if %{with_uml} +%config(noreplace) %{_sysconfdir}/logrotate.d/libvirtd.uml %endif %dir %{_datadir}/libvirt/ @@ -779,6 +794,7 @@ fi %{_datadir}/libvirt/schemas/interface.rng %{_datadir}/libvirt/schemas/secret.rng %{_datadir}/libvirt/schemas/storageencryption.rng +%{_datadir}/libvirt/schemas/nwfilter.rng %{_datadir}/libvirt/cpu_map.xml @@ -821,6 +837,21 @@ fi %endif %changelog +* Mon Apr 12 2010 Daniel Veillard - 0.8.0-1 +- Upstream release 0.8.0 +- Snapshotting support (QEmu/VBox/ESX) +- Network filtering API +- XenAPI driver +- new APIs for domain events +- Libvirt managed save API +- timer subselection for domain clock +- synchronous hooks +- API to update guest CPU to host CPU +- virDomainUpdateDeviceFlags new API +- migrate max downtime API +- volume wiping API +- and many bug fixes + * Tue Mar 30 2010 Richard W.M. Jones - 0.7.7-3.fc14 - No change, just rebuild against new libparted with bumped soname. diff --git a/sources b/sources index f68b14e..4fab133 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -5f315b0bf20e3964f7657ba1e630cd67 libvirt-0.7.7.tar.gz +189aff9385e4de88a127dbf15495a3af libvirt-0.8.0.tar.gz