Compare commits

...

9 Commits

Author SHA1 Message Date
Daniel P. Berrange
8baff3185c Fix QEMU startup timeout/race (rhbz #484649)
Setup DBus threading. Don't allow dbus to call _exit / change SIGPIPE (rhbz #484553)
Fix timeout when autostarting session daemon
2009-02-18 14:15:19 +00:00
Daniel P. Berrange
0d2e066a49 Fix libvirtd --timeout usage
Fix RPC call problems and QEMU startup handling (rhbz #484414)
Fix unowned directories (rhbz #483442)
2009-02-06 20:01:02 +00:00
Daniel Veillard
e7980eb45c Upstream release of 0.6.0, Daniel 2009-01-31 10:16:17 +00:00
Daniel Veillard
11000f2289 fix missing read-only access checks, fixes CVE-2008-5086
daniel
2008-12-17 16:39:37 +00:00
Daniel Veillard
c1031efec2 fixing #460510 2008-12-12 07:39:23 +00:00
Daniel Veillard
8d7711c12b Upstream 0.5.1 release, Daniel 2008-12-05 05:44:19 +00:00
Daniel Veillard
357c713f67 Upstream release of 0.5.0, Daniel 2008-11-26 09:14:37 +00:00
Daniel Veillard
387160a388 - a subtle bug in python submakefile broke the 0.4.6-1.fc9 build #463733
daniel
2008-09-24 13:29:30 +00:00
Daniel Veillard
a2e8e9c344 update to 0.4.6 to fix a couple of bugs, Daniel 2008-09-24 07:36:24 +00:00
8 changed files with 595 additions and 32 deletions

View File

@@ -1,13 +0,0 @@
diff --git a/src/qemu_conf.c b/src/qemu_conf.c
index d742c32..23ef050 100644
--- a/src/qemu_conf.c
+++ b/src/qemu_conf.c
@@ -790,7 +790,7 @@ int qemudBuildCommandLine(virConnectPtr conn,
if (!emulator)
return -1;
- ADD_ARG_LIT(vm->def->emulator);
+ ADD_ARG_LIT(emulator);
ADD_ARG_LIT("-S");
ADD_ARG_LIT("-M");
ADD_ARG_LIT(vm->def->os.machine);

View File

@@ -0,0 +1,21 @@
diff -rup libvirt-0.6.0.orig/src/remote_internal.c libvirt-0.6.0.new/src/remote_internal.c
--- libvirt-0.6.0.orig/src/remote_internal.c 2009-02-18 10:56:34.000000000 +0000
+++ libvirt-0.6.0.new/src/remote_internal.c 2009-02-18 13:35:26.000000000 +0000
@@ -654,12 +654,13 @@ doRemoteOpen (virConnectPtr conn,
*/
if (errno == ECONNREFUSED &&
flags & VIR_DRV_OPEN_REMOTE_AUTOSTART &&
- trials < 5) {
+ trials < 20) {
close(priv->sock);
priv->sock = -1;
- if (remoteForkDaemon(conn) == 0) {
+ if (trials > 0 ||
+ remoteForkDaemon(conn) == 0) {
trials++;
- usleep(5000 * trials * trials);
+ usleep(1000 * 100 * trials);
goto autostart_retry;
}
}
Only in libvirt-0.6.0.new/src: remote_internal.c~

View File

@@ -0,0 +1,44 @@
diff -rup libvirt-0.6.0.orig/qemud/qemud.c libvirt-0.6.0.new/qemud/qemud.c
--- libvirt-0.6.0.orig/qemud/qemud.c 2009-02-18 10:56:34.000000000 +0000
+++ libvirt-0.6.0.new/qemud/qemud.c 2009-02-18 12:52:18.000000000 +0000
@@ -860,6 +860,10 @@ static struct qemud_server *qemudNetwork
if (auth_unix_rw == REMOTE_AUTH_POLKIT ||
auth_unix_ro == REMOTE_AUTH_POLKIT) {
DBusError derr;
+
+ dbus_connection_set_change_sigpipe(FALSE);
+ dbus_threads_init_default();
+
dbus_error_init(&derr);
server->sysbus = dbus_bus_get(DBUS_BUS_SYSTEM, &derr);
if (!(server->sysbus)) {
@@ -868,6 +872,7 @@ static struct qemud_server *qemudNetwork
dbus_error_free(&derr);
goto cleanup;
}
+ dbus_connection_set_exit_on_disconnect(server->sysbus, FALSE);
}
#endif
diff -rup libvirt-0.6.0.orig/src/node_device_hal.c libvirt-0.6.0.new/src/node_device_hal.c
--- libvirt-0.6.0.orig/src/node_device_hal.c 2009-01-16 12:44:22.000000000 +0000
+++ libvirt-0.6.0.new/src/node_device_hal.c 2009-02-18 12:52:48.000000000 +0000
@@ -685,6 +685,9 @@ static int halDeviceMonitorStartup(void)
nodeDeviceLock(driverState);
/* Allocate and initialize a new HAL context */
+ dbus_connection_set_change_sigpipe(FALSE);
+ dbus_threads_init_default();
+
dbus_error_init(&err);
hal_ctx = libhal_ctx_new();
if (hal_ctx == NULL) {
@@ -696,6 +699,8 @@ static int halDeviceMonitorStartup(void)
fprintf(stderr, "%s: dbus_bus_get failed\n", __FUNCTION__);
goto failure;
}
+ dbus_connection_set_exit_on_disconnect(dbus_conn, FALSE);
+
if (!libhal_ctx_set_dbus_connection(hal_ctx, dbus_conn)) {
fprintf(stderr, "%s: libhal_ctx_set_dbus_connection failed\n",
__FUNCTION__);

View File

@@ -0,0 +1,109 @@
diff -rup libvirt-0.6.0.orig/src/qemu_driver.c libvirt-0.6.0.new/src/qemu_driver.c
--- libvirt-0.6.0.orig/src/qemu_driver.c 2009-01-31 09:04:18.000000000 +0000
+++ libvirt-0.6.0.new/src/qemu_driver.c 2009-02-18 11:15:37.000000000 +0000
@@ -633,6 +633,7 @@ qemudReadMonitorOutput(virConnectPtr con
{
int got = 0;
buf[0] = '\0';
+ timeout *= 1000; /* poll wants milli seconds */
/* Consume & discard the initial greeting */
while (got < (buflen-1)) {
@@ -694,6 +695,56 @@ qemudReadMonitorOutput(virConnectPtr con
}
+
+/*
+ * Returns -1 for error, 0 on success
+ */
+static int
+qemudReadLogOutput(virConnectPtr conn,
+ virDomainObjPtr vm,
+ int fd,
+ char *buf,
+ int buflen,
+ qemudHandlerMonitorOutput func,
+ const char *what,
+ int timeout)
+{
+ int got = 0;
+ int ret;
+ int retries = timeout*10;
+ buf[0] = '\0';
+
+ while (retries) {
+ while((ret = read(fd, buf+got, buflen-got-1)) > 0) {
+ got += ret;
+ buf[got] = '\0';
+ if ((buflen-got-1) == 0) {
+ qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
+ _("Out of space while reading %s log output"), what);
+ return -1;
+ }
+ }
+
+ if (ret < 0 && errno != EINTR) {
+ virReportSystemError(conn, errno,
+ _("Failure while reading %s log output"),
+ what);
+ return -1;
+ }
+
+ ret = func(conn, vm, buf, fd);
+ if (ret <= 0)
+ return ret;
+
+ usleep(100*1000);
+ retries--;
+ }
+ if (retries == 0)
+ qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
+ _("Timed out while reading %s log output"), what);
+ return -1;
+}
+
static int
qemudCheckMonitorPrompt(virConnectPtr conn ATTRIBUTE_UNUSED,
virDomainObjPtr vm,
@@ -738,7 +789,7 @@ static int qemudOpenMonitor(virConnectPt
vm, monfd,
buf, sizeof(buf),
qemudCheckMonitorPrompt,
- "monitor", 10000) <= 0)
+ "monitor", 10) <= 0)
ret = -1;
else
ret = 0;
@@ -770,6 +821,7 @@ static int qemudOpenMonitor(virConnectPt
return ret;
}
+/* Returns -1 for error, 0 success, 1 continue reading */
static int qemudExtractMonitorPath(virConnectPtr conn,
const char *haystack,
size_t *offset,
@@ -873,19 +925,16 @@ static int qemudWaitForMonitor(virConnec
< 0)
return -1;
- ret = qemudReadMonitorOutput(conn, vm, logfd, buf, sizeof(buf),
- qemudFindCharDevicePTYs,
- "console", 3000);
+ ret = qemudReadLogOutput(conn, vm, logfd, buf, sizeof(buf),
+ qemudFindCharDevicePTYs,
+ "console", 3);
if (close(logfd) < 0)
qemudLog(QEMUD_WARN, _("Unable to close logfile: %s\n"),
strerror(errno));
- if (ret == 1) /* Success */
+ if (ret == 0) /* success */
return 0;
- if (ret == -1)
- return -1;
-
/* Unexpected end of file - inform user of QEMU log data */
qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
_("unable to start guest: %s"), buf);

View File

@@ -0,0 +1,70 @@
diff -rup libvirt-0.6.0.orig/qemud/event.c libvirt-0.6.0.new/qemud/event.c
--- libvirt-0.6.0.orig/qemud/event.c 2009-02-06 19:30:58.000000000 +0000
+++ libvirt-0.6.0.new/qemud/event.c 2009-02-06 19:30:00.000000000 +0000
@@ -657,6 +657,8 @@ virPollEventToEventHandleType(int events
ret |= VIR_EVENT_HANDLE_WRITABLE;
if(events & POLLERR)
ret |= VIR_EVENT_HANDLE_ERROR;
+ if(events & POLLNVAL) /* Treat NVAL as error, since libvirt doesn't distinguish */
+ ret |= VIR_EVENT_HANDLE_ERROR;
if(events & POLLHUP)
ret |= VIR_EVENT_HANDLE_HANGUP;
return ret;
diff -rup libvirt-0.6.0.orig/src/domain_conf.c libvirt-0.6.0.new/src/domain_conf.c
--- libvirt-0.6.0.orig/src/domain_conf.c 2009-01-31 09:04:17.000000000 +0000
+++ libvirt-0.6.0.new/src/domain_conf.c 2009-02-06 19:30:00.000000000 +0000
@@ -504,6 +504,7 @@ virDomainObjPtr virDomainAssignDef(virCo
domain->state = VIR_DOMAIN_SHUTOFF;
domain->def = def;
domain->monitor_watch = -1;
+ domain->monitor = -1;
if (VIR_REALLOC_N(doms->objs, doms->count + 1) < 0) {
virReportOOMError(conn);
diff -rup libvirt-0.6.0.orig/src/remote_internal.c libvirt-0.6.0.new/src/remote_internal.c
--- libvirt-0.6.0.orig/src/remote_internal.c 2009-01-31 09:04:18.000000000 +0000
+++ libvirt-0.6.0.new/src/remote_internal.c 2009-02-06 19:30:00.000000000 +0000
@@ -6198,17 +6198,17 @@ processCalls(virConnectPtr conn,
continue;
virReportSystemError(in_open ? NULL : conn, errno,
"%s", _("poll on socket failed"));
- return -1;
+ goto error;
}
if (fds[0].revents & POLLOUT) {
if (processCallSend(conn, priv, in_open) < 0)
- return -1;
+ goto error;
}
if (fds[0].revents & POLLIN) {
if (processCallRecv(conn, priv, in_open) < 0)
- return -1;
+ goto error;
}
/* Iterate through waiting threads and if
@@ -6259,9 +6259,21 @@ processCalls(virConnectPtr conn,
if (fds[0].revents & (POLLHUP | POLLERR)) {
errorf(in_open ? NULL : conn, VIR_ERR_INTERNAL_ERROR,
"%s", _("received hangup / error event on socket"));
- return -1;
+ goto error;
}
}
+
+
+error:
+ priv->waitDispatch = thiscall->next;
+ DEBUG("Giving up the buck due to I/O error %d %p %p", thiscall->proc_nr, thiscall, priv->waitDispatch);
+ /* See if someone else is still waiting
+ * and if so, then pass the buck ! */
+ if (priv->waitDispatch) {
+ DEBUG("Passing the buck to %d %p", priv->waitDispatch->proc_nr, priv->waitDispatch);
+ virCondSignal(&priv->waitDispatch->cond);
+ }
+ return -1;
}
/*

124
libvirt-0.6.0-timeout.patch Normal file
View File

@@ -0,0 +1,124 @@
diff -rup libvirt-0.6.0.orig/qemud/event.c libvirt-0.6.0.new/qemud/event.c
--- libvirt-0.6.0.orig/qemud/event.c 2008-12-22 13:02:54.000000000 +0000
+++ libvirt-0.6.0.new/qemud/event.c 2009-02-06 19:29:28.000000000 +0000
@@ -68,6 +68,7 @@ struct virEventTimeout {
/* State for the main event loop */
struct virEventLoop {
pthread_mutex_t lock;
+ int running;
pthread_t leader;
int wakeupfd[2];
int handlesCount;
@@ -521,6 +522,7 @@ int virEventRunOnce(void) {
int ret, timeout, nfds;
virEventLock();
+ eventLoop.running = 1;
eventLoop.leader = pthread_self();
if ((nfds = virEventMakePollFDs(&fds)) < 0) {
virEventUnlock();
@@ -572,7 +574,7 @@ int virEventRunOnce(void) {
return -1;
}
- eventLoop.leader = 0;
+ eventLoop.running = 0;
virEventUnlock();
return 0;
}
@@ -611,7 +613,9 @@ int virEventInit(void)
static int virEventInterruptLocked(void)
{
char c = '\0';
- if (pthread_self() == eventLoop.leader)
+
+ if (!eventLoop.running ||
+ pthread_self() == eventLoop.leader)
return 0;
if (safewrite(eventLoop.wakeupfd[1], &c, sizeof(c)) != sizeof(c))
diff -rup libvirt-0.6.0.orig/qemud/qemud.c libvirt-0.6.0.new/qemud/qemud.c
--- libvirt-0.6.0.orig/qemud/qemud.c 2009-01-31 09:04:17.000000000 +0000
+++ libvirt-0.6.0.new/qemud/qemud.c 2009-02-06 19:29:28.000000000 +0000
@@ -2013,11 +2013,15 @@ static int qemudOneLoop(void) {
return 0;
}
-static void qemudInactiveTimer(int timer ATTRIBUTE_UNUSED, void *data) {
+static void qemudInactiveTimer(int timerid, void *data) {
struct qemud_server *server = (struct qemud_server *)data;
- DEBUG0("Got inactive timer expiry");
- if (!virStateActive()) {
- DEBUG0("No state active, shutting down");
+
+ if (virStateActive() ||
+ server->clients) {
+ DEBUG0("Timer expired but still active, not shutting down");
+ virEventUpdateTimeoutImpl(timerid, -1);
+ } else {
+ DEBUG0("Timer expired and inactive, shutting down");
server->shutdown = 1;
}
}
@@ -2048,9 +2052,18 @@ static void qemudFreeClient(struct qemud
static int qemudRunLoop(struct qemud_server *server) {
int timerid = -1;
int ret = -1, i;
+ int timerActive = 0;
virMutexLock(&server->lock);
+ if (timeout > 0 &&
+ (timerid = virEventAddTimeoutImpl(-1,
+ qemudInactiveTimer,
+ server, NULL)) < 0) {
+ VIR_ERROR0(_("Failed to register shutdown timeout"));
+ return -1;
+ }
+
if (min_workers > max_workers)
max_workers = min_workers;
@@ -2071,11 +2084,21 @@ static int qemudRunLoop(struct qemud_ser
* if any drivers have active state, if not
* shutdown after timeout seconds
*/
- if (timeout > 0 && !virStateActive() && !server->clients) {
- timerid = virEventAddTimeoutImpl(timeout*1000,
- qemudInactiveTimer,
- server, NULL);
- DEBUG("Scheduling shutdown timer %d", timerid);
+ if (timeout > 0) {
+ if (timerActive) {
+ if (server->clients) {
+ DEBUG("Deactivating shutdown timer %d", timerid);
+ virEventUpdateTimeoutImpl(timerid, -1);
+ timerActive = 0;
+ }
+ } else {
+ if (!virStateActive() &&
+ !server->clients) {
+ DEBUG("Activating shutdown timer %d", timerid);
+ virEventUpdateTimeoutImpl(timerid, timeout * 1000);
+ timerActive = 1;
+ }
+ }
}
virMutexUnlock(&server->lock);
@@ -2129,15 +2152,6 @@ static int qemudRunLoop(struct qemud_ser
}
}
- /* Unregister any timeout that's active, since we
- * just had an event processed
- */
- if (timerid != -1) {
- DEBUG("Removing shutdown timer %d", timerid);
- virEventRemoveTimeoutImpl(timerid);
- timerid = -1;
- }
-
if (server->shutdown) {
ret = 0;
break;

View File

@@ -1,11 +1,17 @@
# -*- rpm-spec -*-
%define with_xen 1
%define with_xen_proxy 1
%define with_qemu 1
%define with_openvz 1
%define with_lxc 1
%define with_polkit 0
%define with_xen 0%{!?_without_xen:1}
%define with_xen_proxy 0%{!?_without_xen_proxy:1}
%define with_qemu 0%{!?_without_qemu:1}
%define with_openvz 0%{!?_without_openvz:1}
%define with_lxc 0%{!?_without_lxc:1}
%define with_sasl 0%{!?_without_sasl:1}
%define with_avahi 0%{!?_without_avahi:1}
%define with_polkit 0%{!?_without_polkit:0}
%define with_python 0%{!?_without_python:1}
%define with_libvirtd 0%{!?_without_libvirtd:1}
%define with_uml 0%{!?_without_uml:1}
%define with_network 0%{!?_without_network:1}
# Xen is available only on i386 x86_64 ia64
%ifnarch i386 i686 x86_64 ia64
@@ -16,25 +22,40 @@
%define with_xen_proxy 0
%endif
%if "%{fedora}"
%if 0%{?fedora}
%ifarch ppc64
%define with_qemu 0
%endif
%endif
%if 0%{fedora} >= 8
%define with_polkit 1
%if 0%{?fedora} >= 8
%define with_polkit 0%{!?_without_polkit:1}
%define with_xen_proxy 0
%endif
#
# If building on RHEL switch on the specific support
# for the specific Xen version
#
%if 0%{?fedora}
%define with_rhel5 0
%else
%define with_rhel5 1
%endif
Summary: Library providing a simple API virtualization
Name: libvirt
Version: 0.4.5
Release: 2%{?dist}%{?extra_release}
Version: 0.6.0
Release: 3%{?dist}%{?extra_release}
License: LGPLv2+
Group: Development/Libraries
Source: libvirt-%{version}.tar.gz
Patch0: libvirt-0.4.5-no-emulator-segfault.patch
Patch1: %{name}-%{version}-timeout.patch
Patch2: %{name}-%{version}-rpccall.patch
Patch3: %{name}-%{version}-qemu-startup.patch
Patch4: %{name}-%{version}-dbus-threads.patch
Patch5: %{name}-%{version}-autostart-timeout.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
URL: http://libvirt.org/
BuildRequires: python python-devel
@@ -44,13 +65,17 @@ Requires: ncurses
Requires: dnsmasq
Requires: bridge-utils
Requires: iptables
# needed for device enumeration
Requires: hal
# So remote clients can access libvirt over SSH tunnel
# (client invokes 'nc' against the UNIX socket on the server)
Requires: nc
%if %{with_sasl}
Requires: cyrus-sasl
# Not technically required, but makes 'out-of-box' config
# work correctly & doesn't have onerous dependencies
Requires: cyrus-sasl-md5
%endif
%if %{with_polkit}
Requires: PolicyKit >= 0.6
%endif
@@ -83,14 +108,19 @@ BuildRequires: readline-devel
BuildRequires: ncurses-devel
BuildRequires: gettext
BuildRequires: gnutls-devel
BuildRequires: hal-devel
%if %{with_avahi}
BuildRequires: avahi-devel
%endif
BuildRequires: libselinux-devel
BuildRequires: dnsmasq
BuildRequires: bridge-utils
%if %{with_qemu}
BuildRequires: qemu
%endif
%if %{with_sasl}
BuildRequires: cyrus-sasl-devel
%endif
%if %{with_polkit}
BuildRequires: PolicyKit-devel >= 0.6
%endif
@@ -111,6 +141,8 @@ BuildRequires: lvm2
BuildRequires: iscsi-initiator-utils
# For disk driver
BuildRequires: parted-devel
# For QEMU/LXC numa info
BuildRequires: numactl-devel
Obsoletes: libvir
# Fedora build root suckage
@@ -134,6 +166,7 @@ Obsoletes: libvir-devel
Includes and documentations for the C library providing an API to use
the virtualization capabilities of recent versions of Linux (and other OSes).
%if %{with_python}
%package python
Summary: Python bindings for the libvirt library
Group: Development/Libraries
@@ -145,10 +178,15 @@ The libvirt-python package contains a module that permits applications
written in the Python programming language to use the interface
supplied by the libvirt library to use the virtualization capabilities
of recent versions of Linux (and other OSes).
%endif
%prep
%setup -q
%patch0 -p1
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
%build
%if ! %{with_xen}
@@ -167,10 +205,50 @@ of recent versions of Linux (and other OSes).
%define _without_lxc --without-lxc
%endif
%if ! %{with_sasl}
%define _without_sasl --without-sasl
%endif
%if ! %{with_avahi}
%define _without_avahi --without-avahi
%endif
%if ! %{with_polkit}
%define _without_polkit --without-polkit
%endif
%if ! %{with_python}
%define _without_python --without-python
%endif
%if ! %{with_libvirtd}
%define _without_libvirtd --without-libvirtd
%endif
%if ! %{with_uml}
%define _without_uml --without-uml
%endif
%if %{with_rhel5}
%define _with_rhel5_api --with-rhel5-api
%endif
%if ! %{with_network}
%define _without_network --without-network
%endif
%configure %{?_without_xen} \
%{?_without_qemu} \
%{?_without_openvz} \
%{?_without_lxc} \
%{?_without_sasl} \
%{?_without_avahi} \
%{?_without_polkit} \
%{?_without_python} \
%{?_without_libvirtd} \
%{?_without_uml} \
%{?_without_network} \
%{?_with_rhel5_api} \
--with-init-script=redhat \
--with-qemud-pid-file=%{_localstatedir}/run/libvirt_qemud.pid \
--with-remote-file=%{_localstatedir}/run/libvirtd.pid
@@ -192,6 +270,7 @@ install -d -m 0755 $RPM_BUILD_ROOT%{_localstatedir}/lib/libvirt/images/
# Default dir for kernel+initrd images defnied in SELinux policy
install -d -m 0755 $RPM_BUILD_ROOT%{_localstatedir}/lib/libvirt/boot/
%if %{with_qemu}
# We don't want to install /etc/libvirt/qemu/networks in the main %files list
# because if the admin wants to delete the default network completely, we don't
# want to end up re-incarnating it on every RPM upgrade.
@@ -202,19 +281,35 @@ rm -f $RPM_BUILD_ROOT%{_sysconfdir}/libvirt/qemu/networks/default.xml
rm -f $RPM_BUILD_ROOT%{_sysconfdir}/libvirt/qemu/networks/autostart/default.xml
# Strip auto-generated UUID - we need it generated per-install
sed -i -e "/<uuid>/d" $RPM_BUILD_ROOT%{_datadir}/libvirt/networks/default.xml
%else
rm -f $RPM_BUILD_ROOT%{_sysconfdir}/libvirt/qemu/networks/default.xml
rm -f $RPM_BUILD_ROOT%{_sysconfdir}/libvirt/qemu/networks/autostart/default.xml
rm -f $RPM_BUILD_ROOT%{_datadir}/augeas/lenses/libvirtd_qemu.aug
rm -f $RPM_BUILD_ROOT%{_datadir}/augeas/lenses/tests/test_libvirtd_qemu.aug
%endif
%find_lang %{name}
%if ! %{with_python}
rm -rf $RPM_BUILD_ROOT%{_datadir}/doc/libvirt-python-%{version}
%endif
%if ! %{with_qemu}
rm -rf $RPM_BUILD_ROOT%{_sysconfdir}/libvirt/qemu.conf
%endif
%clean
rm -fr %{buildroot}
%post
/sbin/ldconfig
%if %{with_libvirtd}
%if %{with_qemu}
# We want to install the default network for initial RPM installs
# 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 ]
if [ $? != 0 -a ! -f %{_sysconfdir}/libvirt/qemu/networks/default.xml ]
then
UUID=`/usr/bin/uuidgen`
sed -e "s,</name>,</name>\n <uuid>$UUID</uuid>," \
@@ -222,14 +317,18 @@ then
> %{_sysconfdir}/libvirt/qemu/networks/default.xml
ln -s ../default.xml %{_sysconfdir}/libvirt/qemu/networks/autostart/default.xml
fi
%endif
/sbin/chkconfig --add libvirtd
%endif
%preun
%if %{with_libvirtd}
if [ $1 = 0 ]; then
/sbin/service libvirtd stop 1>/dev/null 2>&1
/sbin/chkconfig --del libvirtd
fi
%endif
%postun
/sbin/ldconfig
@@ -242,38 +341,102 @@ fi
%{_bindir}/virsh
%{_libdir}/lib*.so.*
%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/
%if %{with_qemu}
%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/qemu/
%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/qemu/networks/
%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/qemu/networks/autostart
%endif
%if %{with_libvirtd}
%{_sysconfdir}/rc.d/init.d/libvirtd
%config(noreplace) %{_sysconfdir}/sysconfig/libvirtd
%config(noreplace) %{_sysconfdir}/libvirt/libvirtd.conf
%config(noreplace) %{_sysconfdir}/logrotate.d/libvirtd
%endif
%if %{with_qemu}
%config(noreplace) %{_sysconfdir}/libvirt/qemu.conf
%endif
%if %{with_sasl}
%config(noreplace) %{_sysconfdir}/sasl2/libvirt.conf
%endif
%if %{with_qemu}
%dir %{_datadir}/libvirt/
%dir %{_datadir}/libvirt/networks/
%{_datadir}/libvirt/networks/default.xml
%endif
%dir %{_datadir}/libvirt/
%dir %{_datadir}/libvirt/schemas/
%{_datadir}/libvirt/schemas/domain.rng
%{_datadir}/libvirt/schemas/network.rng
%{_datadir}/libvirt/schemas/storagepool.rng
%{_datadir}/libvirt/schemas/storagevol.rng
%{_datadir}/libvirt/schemas/nodedev.rng
%{_datadir}/libvirt/schemas/capability.rng
%dir %{_localstatedir}/run/libvirt/
%dir %{_localstatedir}/lib/libvirt/
%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/images/
%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/boot/
%{_datadir}/augeas/lenses/libvirtd.aug
%if %{with_qemu}
%dir %{_localstatedir}/run/libvirt/qemu/
%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/qemu/
%endif
%if %{with_lxc}
%dir %{_localstatedir}/run/libvirt/lxc/
%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/lxc/
%endif
%if %{with_uml}
%dir %{_localstatedir}/run/libvirt/uml/
%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/uml/
%endif
%if %{with_network}
%dir %{_localstatedir}/run/libvirt/network/
%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/network/
%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/iptables/
%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/iptables/filter/
%dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/iptables/nat/
%endif
%if %{with_qemu}
%{_datadir}/augeas/lenses/libvirtd_qemu.aug
%{_datadir}/augeas/lenses/tests/test_libvirtd.aug
%{_datadir}/augeas/lenses/tests/test_libvirtd_qemu.aug
%endif
%if %{with_libvirtd}
%{_datadir}/augeas/lenses/libvirtd.aug
%{_datadir}/augeas/lenses/tests/test_libvirtd.aug
%endif
%if %{with_polkit}
%{_datadir}/PolicyKit/policy/org.libvirt.unix.policy
%endif
%dir %attr(0700, root, root) %{_localstatedir}/log/libvirt/
%if %{with_qemu}
%dir %attr(0700, root, root) %{_localstatedir}/log/libvirt/qemu/
%endif
%if %{with_xen_proxy}
%attr(4755, root, root) %{_libexecdir}/libvirt_proxy
%endif
%attr(0755, root, root) %{_libexecdir}/libvirt_parthelper
%if %{with_lxc}
%attr(0755, root, root) %{_libexecdir}/libvirt_lxc
%endif
%if %{with_libvirtd}
%attr(0755, root, root) %{_libexecdir}/libvirt_parthelper
%attr(0755, root, root) %{_sbindir}/libvirtd
%doc docs/*.rng
%endif
%doc docs/*.xml
%files devel
@@ -292,6 +455,7 @@ fi
%doc docs/examples
%doc docs/libvirt-api.xml
%if %{with_python}
%files python
%defattr(-, root, root)
@@ -302,8 +466,52 @@ fi
%doc python/TODO
%doc python/libvirtclass.txt
%doc docs/examples/python
%endif
%changelog
* Wed Feb 18 2009 Daniel P. Berrange <berrange@redhat.com> - 0.6.0-3.fc9
- Fix QEMU startup timeout/race (rhbz #484649)
- Setup DBus threading. Don't allow dbus to call _exit / change SIGPIPE (rhbz #484553)
- Fix timeout when autostarting session daemon
* Fri Feb 6 2009 Daniel P. Berrange <berrange@redhat.com> - 0.6.0-2.fc9
- Fix libvirtd --timeout usage
- Fix RPC call problems and QEMU startup handling (rhbz #484414)
- Fix unowned directories (rhbz #483442)
* Sat Jan 31 2009 Daniel Veillard <veillard@redhat.com> - 0.6.0-1.fc9
- upstream release 0.6.0
- thread safety of API
- allow QEmu/KVM domains to survive daemon restart
- extended logging capabilities
- support copy on write storage volumes for QEmu/KVM
- support of storage cache control options for QEmu/KVM
- a lot of bug fixes
* Wed Dec 17 2008 Daniel Veillard <veillard@redhat.com> - 0.5.1-2.fc9
- fix missing read-only access checks, fixes CVE-2008-5086
* Fri Dec 5 2008 Daniel Veillard <veillard@redhat.com> - 0.5.1-1.fc9
- upstream release 0.5.1
- mostly bugfixes e.g #473071
- some driver improvments
* Wed Nov 26 2008 Daniel Veillard <veillard@redhat.com> - 0.5.0-1.fc9
- upstream release 0.5.0
- domain lifecycle event support
- node device enumeration
- KVM/QEmu migration support
- improved LXC support
- SDL display configuration
- User Mode Linux driver
* Wed Sep 24 2008 Daniel Veillard <veillard@redhat.com> - 0.4.6-2.fc9
- a subtle bug in python submakefile broke the 0.4.6-1.fc9 build #463733
* Wed Sep 24 2008 Daniel Veillard <veillard@redhat.com> - 0.4.6-1.fc9
- upstream release 0.4.6
- fixes a couple of serious bugs in the previous release
* Tue Sep 9 2008 Daniel Veillard <veillard@redhat.com> - 0.4.5-2.fc9
- fix a crash if a QEmu/KVM domain is defined without an emulator path

View File

@@ -1 +1 @@
dcb590a6202c332907eae7b44e47ca4b libvirt-0.4.5.tar.gz
8e0120d5452b37179f682031bf0895ea libvirt-0.6.0.tar.gz