[libvirt] [test-API] RFC: Stabilization of libvirt-test-API
by Martin Kletzander
Hi everyone,
following our minutes, I'd like to start a discussion on what should be
done with libvirt-test-API so we can say it's stable and usable.
I would like to stress out that everything mentioned here is just an
opinion and I don't mean to talk down to someone as it may have seemed
earlier.
I think we should get some ideas from everyone, mostly QE as they will
be (are) the ones using this the most (if I understood correctly), and
then I'll be happy to help getting the code to the agreed status. I was
thinking about this from the wrong way probably and changing the angle
from what I look at it (and knowing there is some deadline) makes me
think of few levels of changes, which when introduced, could speed up
the test development and code understandability.
So here are the things I would like to do definitely (the optional
things follow later on):
- fix hard-coded options into real options (e.g. commit 65449e)
- fix some env_* and util* code (functions duplicated with different
behavior)
- fix or remove harmful and pointless code (at this point, when
creating domain on remote machine, be prepared for the test to fail with
any other user then root and with root, have backup of both local and
remote '/root/.ssh' directories as the contents will be erased!)
- fix method names for the {connect,domain,etc.}API (get_host_name vs.
lookupByUUID etc.)
The optional things:
- get rid of classes in lib and make just few utility functions
covering *only* the methods that do something else than call the same
method in underlying class from the libvirt module.
- get rid of the new exception (I don't see any other difference than
in the name, which can make a difference in "except:" clause, but it's
converted everywhere)
- be able to share variables between tests (connection object and
anything else)
- introduce new config file for tests (.ini format, can be parsed by
ConfigParser, same as env.cfg, define variables used throughout the test
specifications
- update the documentation
- use some python code style (PEP-8?), make use of True/False, None
- eliminate duplicated (and x-plicated) code (append_path in all the
files, etc.)
I have all of these figured out, so I'm willing to discuss all of them,
but in most cases changing it in the current code seems very
time-consumable to me.
Please, feel free to comment on any of these, add yours, discuss, shout
at me, etc. =)
Regards,
Martin
P.S.: I don't see any point in sending my patches until some of these
points are resolved as that could mean rewriting more code.
12 years, 7 months
[libvirt] problems starting several qemu VMS simultaneously
by Serge Hallyn
Hi,
I grabbed today's git head of libvirt. Created a VM (clean install of
ubuntu oneiric, installed through virt-manager), and cloned it 3 times.
Then I did
serge@ubuntu:~$ for i in `seq 1 4`; do virsh start o$i > /tmp/o$i 2>&1 & done
[1] 12184
[2] 12185
[3] 12186
[4] 12187
serge@ubuntu:~$ virsh list
error: Failed to list active domains
error: End of file while reading data: Input/output error
serge@ubuntu:~$ virsh list
Id Name State
----------------------------------------------------
5 o2 shut off
7 o3 shut off
8 o4 shut off
[1] Exit 1 virsh start o$i > /tmp/o$i 2>&1
[2] Done virsh start o$i > /tmp/o$i 2>&1
serge@ubuntu:~$ virsh list
Id Name State
----------------------------------------------------
5 o2 running
7 o3 running
8 o4 running
[3]- Done virsh start o$i > /tmp/o$i 2>&1
[4]+ Done virsh start o$i > /tmp/o$i 2>&1
serge@ubuntu:~$ cat /tmp/o1
error: Failed to start domain o1
error: Unable to wait for child process: Bad file descriptor
It's quite reproducible. An ubuntu bug report was filed at
https://bugs.launchpad.net/ubuntu/+source/libvirt/+bug/961217
It's also very reminiscent of some lxc startup handshake issues
which have been fixed.
You can find the last chunk of the log file at
http://people.canonical.com/~serge/libvirtd-parallel-startup.log
-serge
12 years, 7 months
[libvirt] [PATCH] Refactor the libvirt RPM daemon pieces
by Daniel P. Berrange
From: "Daniel P. Berrange" <berrange(a)redhat.com>
There are a number of flaws with our packaging of the libvirtd
daemon:
- Installing 'libvirt' does not install 'qemu-kvm' or 'xen'
etc which are required to actually run the hypervisor in
question
- Installing 'libvirt' pulls in the default configuration
files which may not be wanted & cause problems if installed
inside a guest
- It is not possible to explicitly required all the peices
required to manage a specific hypervisor
This change takes the 'libvirt' RPM and and changes it thus
- libvirt: just a virtual package with dep on libvirt-daemon,
libvirt-daemon-config-network & libvirt-daemon-config-nwfilter
- libvirt-daemon: the libvirt daemon and related pieces
- libvirt-daemon-config-network: the default network config
- libvirt-daemon-config-nwfilter: the network filter configs
- libvirt-docs: the website HTML
We then introduce some more virtual (empty) packages
- libvirt-daemon-qemu: Deps on libvirt-daemon & 'qemu'
- libvirt-daemon-kvm: Deps on libvirt-daemon & 'qemu-kvm'
- libvirt-daemon-lxc: Deps on libvirt-daemon
- libvirt-daemon-uml: Deps on libvirt-daemon
- libvirt-daemon-xen: Deps on libvirt-daemon & 'xen'
- libvirt-qemu: Deps on libvirt-daemon-qemu & libvirt-daemon-config-{network,nwfilter}
- libvirt-kvm: Deps on libvirt-daemon-kvm & libvirt-daemon-config-{network,nwfilter}
- libvirt-lxc: Deps on libvirt-daemon-lxc & libvirt-daemon-config-{network,nwfilter}
- libvirt-uml: Deps on libvirt-daemon-uml & libvirt-daemon-config-{network,nwfilter}
- libvirt-xen: Deps on libvirt-daemon-xen & libvirt-daemon-config-network
My intent in the future is to turn on the driver modules by
default, at which time 'libvirt-daemon' will cease to include
any specific drivers, instead we'll get libvirt-daemon-driver-XXXX
packages for each driver. The libvirt-daemon-XXX packages will
then pull in each driver that they require.
It is recommended that applications required a locally installed
libvirtd daemon, use either 'Requires: libvirt-daemon-XXXX' or
'Requires: libvirt-XXX' and *not* "Requires: libvirt-daemon"
or 'Requires: libvirt'
* libvirt.spec.in: Refactor RPMs
* docs/packaging.html.in, docs/sitemap.html.in: Document
new RPM split rationale
---
docs/packaging.html.in | 106 ++++++++++
docs/sitemap.html.in | 4 +
libvirt.spec.in | 512 +++++++++++++++++++++++++++++++++++++-----------
3 files changed, 505 insertions(+), 117 deletions(-)
create mode 100644 docs/packaging.html.in
In v2:
- Split libvirt-daemon-configs into libvirt-daemon-config-network
and libvirt-daemon-config-nwfilter
- Fix ordering of QEMU/KVM bits
- Don't install nwfilter configs if the driver is turned off
- Enable nwfilter for LXC/UML drivers explicitly, not just KVM
- Fix docs typos
- Make all %files sections conditional
Tested build on F17 and RHEL-6.3
diff --git a/docs/packaging.html.in b/docs/packaging.html.in
new file mode 100644
index 0000000..0adffd3
--- /dev/null
+++ b/docs/packaging.html.in
@@ -0,0 +1,106 @@
+<?xml version="1.0"?>
+<html>
+ <body>
+ <h1>Distribution packaging</h1>
+
+ <ul id="toc"></ul>
+
+ <p>
+ This page describes the rationale behind the libvirt distribution
+packaging in RPM format. The RPM specfile provided with libvirt targets
+all Fedora and RHEL releases. It is split up into a number of sub-RPMs
+in order to facilitate minimal installations, targetting specific
+feature sets.
+ </p>
+
+ <h2><a name="real">Real packages</a></h2>
+
+ <p>
+ The so called "real" packages provide the actual file payloads
+ related to libvirt. If very specific / targetted functionality
+ is required, then applications can depend on one or more of these
+ real packages.
+ </p>
+
+ <dl>
+ <dt>libvirt-client</dt>
+ <dd>This package provides the main libvirt.so library along with
+ the virsh command line tool. If a C based application only wants
+ to be able to manage remote hypervisors, this is all that they
+ need depend on</dd>
+ <dt>libvirt-devel</dt>
+ <dd>This package provides the header files and libraries required
+ to compile and link C applications using libvirt</dd>
+ <dt>libvirt-python</dt>
+ <dd>This package provides the Python binding to the C libraries.
+ It will pull in the libvirt-client RPM. If a Python application
+ only wants to be able to manage remote hypervisors, this is all
+ that they need depend on</dd>
+ <dt>libvirt-daemon</dt>
+ <dd>This package provides server side libvirtd daemon, which is
+ required in order to manage any stateful hypervisors (currently
+ QEMU, KVM, Xen, LXC and UML).</dd>
+ <dt>libvirt-daemon-config-network</dt>
+ <dd>This package provides the standard configuration files for
+ setting up a NAT based network</dd>
+ <dt>libvirt-daemon-config-nwfilter</dt>
+ <dd>This package provides the standard configuration files for
+ network filter rules for ensuring clean VM traffic.</dd>
+ </dl>
+
+ <h2><a name="virtual">Virtual packages</a></h2>
+
+ <p>
+ The virtual packages provide convenient targets for application dependencies to
+ pull in functionality related to specific hypervisors. Since the packaging of
+ the <code>libvirt-daemon</code> RPM is expected to change in the future to split
+ each hypervisor driver out into a separate RPM, applications are strongly
+ recommended to depend on one of the following virtual packages, instead of
+ depending directly on <code>libvirt-daemon</code>
+ </p>
+
+ <dl>
+ <dt>libvirt</dt>
+ <dd>This package, simply pulls in every single other server side RPM.
+ If an application wants to ensure all possible libvirt drivers are installed,
+ this is what they should depend on</dd>
+
+ <dt>libvirt-daemon-qemu</dt>
+ <dd>This package pulls in the server side daemon, drivers and the QEMU TCG binaries
+ required to provide emulation of non-native architectures</dd>
+ <dt>libvirt-daemon-kvm</dt>
+ <dd>This package pulls in the server side daemon, drivers and the KVM binaries
+ required to provide hardware accelerated virtualization of the native
+ architectures</dd>
+ <dt>libvirt-daemon-lxc</dt>
+ <dd>This package pulls in the server side daemon and drivers required to
+ run native Linux containers</dd>
+ <dt>libvirt-daemon-uml</dt>
+ <dd>This package pulls in the server side daemon and drivers required to
+ run User Mode Linux. The application must still provide the actual
+ UML binary kernels</dd>
+ <dt>libvirt-daemon-xen</dt>
+ <dd>This package pulls in the server side daemon and drivers required to
+ run guests on the Xen hypervisor.</dd>
+
+ <dt>libvirt-qemu</dt>
+ <dd>This package pulls in the server side daemon, drivers and the QEMU TCG binaries
+ required to provide emulation of non-native architectures</dd>
+ <dt>libvirt-kvm</dt>
+ <dd>This package pulls in the server side daemon, drivers and the KVM binaries
+ required to provide hardware accelerated virtualization of the native
+ architectures</dd>
+ <dt>libvirt-lxc</dt>
+ <dd>This package pulls in the server side daemon, drivers and default
+ configuration files required to run native Linux containers</dd>
+ <dt>libvirt-uml</dt>
+ <dd>This package pulls in the server side daemon, drivers and default
+ configuration files required to run User Mode Linux. The application
+ must still provide the actual UML binary kernels</dd>
+ <dt>libvirt-xen</dt>
+ <dd>This package pulls in the server side daemon, drivers and default
+ configuration files required to run guests on the Xen hypervisor.</dd>
+ </dl>
+
+ </body>
+</html>
diff --git a/docs/sitemap.html.in b/docs/sitemap.html.in
index 1de2b20..620c989 100644
--- a/docs/sitemap.html.in
+++ b/docs/sitemap.html.in
@@ -84,6 +84,10 @@
<a href="hooks.html">Hooks</a>
<span>Hooks for system specific management</span>
</li>
+ <li>
+ <a href="packaging.html">Distribution packaging</a>
+ <span>Rationale for distribution RPM packaging</span>
+ </li>
</ul>
</li>
<li>
diff --git a/libvirt.spec.in b/libvirt.spec.in
index 67f1c33..8730881 100644
--- a/libvirt.spec.in
+++ b/libvirt.spec.in
@@ -52,6 +52,14 @@
%define with_libxl 0%{!?_without_libxl:%{server_drivers}}
%define with_vmware 0%{!?_without_vmware:%{server_drivers}}
+%define with_qemu_tcg %{with_qemu}
+# Change if we ever provide qemu-kvm binaries on non-x86 hosts
+%ifarch %{ix86} x86_64
+%define with_qemu_kvm %{with_qemu}
+%else
+%define with_qemu_kvm 0
+%endif
+
# Then the hypervisor drivers that talk via a native remote protocol
%define with_phyp 0%{!?_without_phyp:1}
%define with_esx 0%{!?_without_esx:1}
@@ -125,8 +133,10 @@
# RHEL-5 has restricted QEMU to x86_64 only and is too old for LXC
%if 0%{?rhel} == 5
+%define with_qemu_tcg 0
%ifnarch x86_64
%define with_qemu 0
+%define with_qemu_kvm 0
%endif
%define with_lxc 0
%endif
@@ -134,8 +144,10 @@
# RHEL-6 has restricted QEMU to x86_64 only, stopped including Xen
# on all archs. Other archs all have LXC available though
%if 0%{?rhel} >= 6
+%define with_qemu_tcg 0
%ifnarch x86_64
%define with_qemu 0
+%define with_qemu_kvm 0
%endif
%define with_xen 0
%endif
@@ -206,10 +218,13 @@
%define with_storage_disk 0
%endif
-%if %{with_qemu}
+%if %{with_qemu} || %{with_lxc} || %{with_uml}
%define with_nwfilter 0%{!?_without_nwfilter:%{server_drivers}}
# Enable libpcap library
%define with_libpcap 0%{!?_without_libpcap:%{server_drivers}}
+%endif
+
+%if %{with_qemu}
%define with_macvtap 0%{!?_without_macvtap:%{server_drivers}}
# numad is used to manage the CPU placement dynamically,
@@ -268,109 +283,22 @@ Source: http://libvirt.org/sources/libvirt-%{version}.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
URL: http://libvirt.org/
-# All runtime requirements for the libvirt package (runtime requrements
-# for subpackages are listed later in those subpackages)
-
-# The client side, i.e. shared libs and virsh are in a subpackage
-Requires: %{name}-client = %{version}-%{release}
-
-# Used by many of the drivers, so turn it on whenever the
-# daemon is present
%if %{with_libvirtd}
-# for modprobe of pci devices
-Requires: module-init-tools
-# for /sbin/ip & /sbin/tc
-Requires: iproute
-%if %{with_avahi}
-Requires: avahi-libs
-%endif
-%endif
+Requires: libvirt-daemon = %{version}-%{release}
%if %{with_network}
-Requires: dnsmasq >= 2.41
-Requires: radvd
-%endif
-%if %{with_network} || %{with_nwfilter}
-Requires: iptables
-Requires: iptables-ipv6
+Requires: libvirt-daemon-config-network = %{version}-%{release}
%endif
%if %{with_nwfilter}
-Requires: ebtables
-%endif
-# needed for device enumeration
-%if %{with_hal}
-Requires: hal
-%endif
-%if %{with_udev}
-Requires: udev >= 145
-%endif
-%if %{with_polkit}
-%if 0%{?fedora} >= 12 || 0%{?rhel} >=6
-Requires: polkit >= 0.93
-%else
-Requires: PolicyKit >= 0.6
-%endif
-%endif
-%if %{with_storage_fs}
-Requires: nfs-utils
-# For mkfs
-Requires: util-linux-ng
-# For pool-build probing for existing pools
-BuildRequires: libblkid-devel >= 2.17
-# For glusterfs
-%if 0%{?fedora} >= 11
-Requires: glusterfs-client >= 2.0.1
-%endif
-%endif
-%if %{with_qemu}
-# From QEMU RPMs
-Requires: /usr/bin/qemu-img
-# For image compression
-Requires: gzip
-Requires: bzip2
-Requires: lzop
-Requires: xz
-%else
-%if %{with_xen}
-# From Xen RPMs
-Requires: /usr/sbin/qcow-create
-%endif
-%endif
-%if %{with_storage_lvm}
-# For LVM drivers
-Requires: lvm2
-%endif
-%if %{with_storage_iscsi}
-# For ISCSI driver
-Requires: iscsi-initiator-utils
-%endif
-%if %{with_storage_disk}
-# For disk driver
-Requires: parted
-Requires: device-mapper
-%endif
-%if %{with_storage_mpath}
-# For multipath support
-Requires: device-mapper
-%endif
-%if %{with_cgconfig}
-Requires: libcgroup
-%endif
-%ifarch %{ix86} x86_64 ia64
-# For virConnectGetSysinfo
-Requires: dmidecode
+Requires: libvirt-daemon-config-nwfilter = %{version}-%{release}
%endif
-# For service management
-%if %{with_systemd}
-Requires(post): systemd-units
-Requires(post): systemd-sysv
-Requires(preun): systemd-units
-Requires(postun): systemd-units
-%endif
-%if %{with_numad}
-Requires: numad
+# XXX when we turn on driver modules, we need to add
+# deps on each driver (Requires: libvirt-daemon-drv-qemu)
%endif
+Requires: libvirt-docs = %{version}-%{release}
+Requires: libvirt-client = %{version}-%{release}
-# All build-time requirements
+# All build-time requirements. Run-time requirements are
+# listed against each sub-RPM
%if 0%{?enable_autotools}
BuildRequires: autoconf
BuildRequires: automake
@@ -537,6 +465,279 @@ Libvirt is a C toolkit to interact with the virtualization capabilities
of recent versions of Linux (and other OSes). The main package includes
the libvirtd server exporting the virtualization support.
+%package docs
+Summary: Documentation for libvirt library and daemon
+Group: Development/Libraries
+
+%description docs
+Copy of the libvirt website documentation
+
+%if %{with_libvirtd}
+%package daemon
+Summary: Server side daemon and supporting files for libvirt library
+Group: Development/Libraries
+
+# All runtime requirements for the libvirt package (runtime requrements
+# for subpackages are listed later in those subpackages)
+
+# The client side, i.e. shared libs and virsh are in a subpackage
+Requires: %{name}-client = %{version}-%{release}
+
+# Used by many of the drivers, so turn it on whenever the
+# daemon is present
+%if %{with_libvirtd}
+# for modprobe of pci devices
+Requires: module-init-tools
+# for /sbin/ip & /sbin/tc
+Requires: iproute
+%if %{with_avahi}
+Requires: avahi-libs
+%endif
+%endif
+%if %{with_network}
+Requires: dnsmasq >= 2.41
+Requires: radvd
+%endif
+%if %{with_network} || %{with_nwfilter}
+Requires: iptables
+Requires: iptables-ipv6
+%endif
+%if %{with_nwfilter}
+Requires: ebtables
+%endif
+# needed for device enumeration
+%if %{with_hal}
+Requires: hal
+%endif
+%if %{with_udev}
+Requires: udev >= 145
+%endif
+%if %{with_polkit}
+%if 0%{?fedora} >= 12 || 0%{?rhel} >=6
+Requires: polkit >= 0.93
+%else
+Requires: PolicyKit >= 0.6
+%endif
+%endif
+%if %{with_storage_fs}
+Requires: nfs-utils
+# For mkfs
+Requires: util-linux-ng
+# For pool-build probing for existing pools
+BuildRequires: libblkid-devel >= 2.17
+# For glusterfs
+%if 0%{?fedora} >= 11
+Requires: glusterfs-client >= 2.0.1
+%endif
+%endif
+%if %{with_qemu}
+# From QEMU RPMs
+Requires: /usr/bin/qemu-img
+# For image compression
+Requires: gzip
+Requires: bzip2
+Requires: lzop
+Requires: xz
+%else
+%if %{with_xen}
+# From Xen RPMs
+Requires: /usr/sbin/qcow-create
+%endif
+%endif
+%if %{with_storage_lvm}
+# For LVM drivers
+Requires: lvm2
+%endif
+%if %{with_storage_iscsi}
+# For ISCSI driver
+Requires: iscsi-initiator-utils
+%endif
+%if %{with_storage_disk}
+# For disk driver
+Requires: parted
+Requires: device-mapper
+%endif
+%if %{with_storage_mpath}
+# For multipath support
+Requires: device-mapper
+%endif
+%if %{with_cgconfig}
+Requires: libcgroup
+%endif
+%ifarch %{ix86} x86_64 ia64
+# For virConnectGetSysinfo
+Requires: dmidecode
+%endif
+# For service management
+%if %{with_systemd}
+Requires(post): systemd-units
+Requires(post): systemd-sysv
+Requires(preun): systemd-units
+Requires(postun): systemd-units
+%endif
+%if %{with_numad}
+Requires: numad
+%endif
+
+%description daemon
+Server side daemon required to manage the virtualization capabilities
+of recent versions of Linux. Requires a hypervisor specific sub-RPM
+for specific drivers.
+
+%if %{with_network}
+%package daemon-config-network
+Summary: Default configuration files for the libvirtd daemon
+Group: Development/Libraries
+
+Requires: libvirt-daemon = %{version}-%{release}
+
+%description daemon-config-network
+Default configuration files for setting up NAT based networking
+%endif
+
+%if %{with_nwfilter}
+%package daemon-config-nwfilter
+Summary: Network filter configuration files for the libvirtd daemon
+Group: Development/Libraries
+
+Requires: libvirt-daemon = %{version}-%{release}
+
+%description daemon-config-nwfilter
+Network filter configuration files for cleaning guest traffic
+%endif
+
+# XXX when we turn on driver modules, we will need to
+# create daemon-drv-XXX sub-RPMs and add them as deps
+# to all of the following daemon-XXX RPMs
+
+%if %{with_qemu_tcg}
+%package daemon-qemu
+Summary: Server side daemon & driver required to run QEMU guests
+Group: Development/Libraries
+
+Requires: libvirt-daemon = %{version}-%{release}
+Requires: qemu
+
+%description daemon-qemu
+Server side daemon and driver required to manage the virtualization
+capabilities of the QEMU TCG emulators
+
+%package qemu
+Summary: Server side daemon, driver & default configs required to run QEMU guests
+Group: Development/Libraries
+
+Requires: libvirt-daemon-qemu = %{version}-%{release}
+Requires: libvirt-daemon-config-network = %{version}-%{release}
+Requires: libvirt-daemon-config-nwfilter = %{version}-%{release}
+
+%description qemu
+Server side daemon, driver and default network & firewall configs
+required to manage the virtualization capabilities of QEMU.
+%endif
+
+
+%if %{with_qemu_kvm}
+%package daemon-kvm
+Summary: Server side daemon & driver required to run QEMU guests
+Group: Development/Libraries
+
+Requires: libvirt-daemon = %{version}-%{release}
+Requires: qemu-kvm
+
+%description daemon-kvm
+Server side daemon and driver required to manage the virtualization
+capabilities of the QEMU KVM hypervisor
+
+%package kvm
+Summary: Server side daemon, driver & default configs required to run KVM guests
+Group: Development/Libraries
+
+Requires: libvirt-daemon-kvm = %{version}-%{release}
+Requires: libvirt-daemon-config-network = %{version}-%{release}
+Requires: libvirt-daemon-config-nwfilter = %{version}-%{release}
+
+%description kvm
+Server side daemon, driver and default network & firewall configs
+required to manage the virtualization capabilities of KVM.
+%endif
+
+
+%if %{with_lxc}
+%package daemon-lxc
+Summary: Server side daemon & driver required to run LXC guests
+Group: Development/Libraries
+
+Requires: libvirt-daemon = %{version}-%{release}
+
+%description daemon-lxc
+Server side daemon and driver required to manage the virtualization
+capabilities of LXC
+
+%package lxc
+Summary: Server side daemon, driver & default configs required to run LXC guests
+Group: Development/Libraries
+
+Requires: libvirt-daemon-lxc = %{version}-%{release}
+Requires: libvirt-daemon-config-network = %{version}-%{release}
+Requires: libvirt-daemon-config-nwfilter = %{version}-%{release}
+
+%description lxc
+Server side daemon, driver and default network & firewall configs
+required to manage the virtualization capabilities of LXC.
+%endif
+
+
+%if %{with_uml}
+%package daemon-uml
+Summary: Server side daemon & driver required to run UML guests
+Group: Development/Libraries
+
+Requires: libvirt-daemon = %{version}-%{release}
+# There are no UML kernel RPMs in Fedora/RHEL to depend on.
+
+%description daemon-uml
+Server side daemon and driver required to manage the virtualization
+capabilities of UML
+
+%package uml
+Summary: Server side daemon, driver & default configs required to run UML guests
+Group: Development/Libraries
+
+Requires: libvirt-daemon-uml = %{version}-%{release}
+Requires: libvirt-daemon-config-network = %{version}-%{release}
+Requires: libvirt-daemon-config-nwfilter = %{version}-%{release}
+
+%description uml
+Server side daemon, driver and default network & firewall configs
+required to manage the virtualization capabilities of UML.
+%endif
+
+
+%if %{with_xen}
+%package daemon-xen
+Summary: Server side daemon & driver required to run XEN guests
+Group: Development/Libraries
+
+Requires: libvirt-daemon = %{version}-%{release}
+Requires: xen
+
+%description daemon-xen
+Server side daemon and driver required to manage the virtualization
+capabilities of XEN
+
+%package xen
+Summary: Server side daemon, driver & default configs required to run XEN guests
+Group: Development/Libraries
+
+Requires: libvirt-daemon-xen = %{version}-%{release}
+Requires: libvirt-daemon-config-network = %{version}-%{release}
+
+%description xen
+Server side daemon, driver and default network & firewall configs
+required to manage the virtualization capabilities of Xen.
+%endif
+%endif
+
%package client
Summary: Client side library and utilities of the libvirt library
Group: Development/Libraries
@@ -582,7 +783,7 @@ Group: Development/Libraries
Requires: sanlock >= 1.8
#for virt-sanlock-cleanup require augeas
Requires: augeas
-Requires: %{name} = %{version}-%{release}
+Requires: %{name}-daemon = %{version}-%{release}
%description lock-sanlock
Includes the Sanlock lock manager plugin for the QEMU
@@ -884,6 +1085,12 @@ rm -rf $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/libvirtd.lxc
rm -rf $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/libvirtd.uml
%endif
+mv $RPM_BUILD_ROOT%{_datadir}/doc/libvirt-%{version} $RPM_BUILD_ROOT%{_datadir}/doc/libvirt-docs-%{version}
+
+%if ! %{with_nwfilter}
+rm -rf $RPM_BUILD_ROOT%{_sysconfdir}/libvirt/nwfilter
+%endif
+
%clean
rm -fr %{buildroot}
@@ -898,7 +1105,8 @@ do
done
make check
-%pre
+%if %{with_libvirtd}
+%pre daemon
%if 0%{?fedora} >= 12 || 0%{?rhel} >= 6
# Normally 'setup' adds this in /etc/passwd, but this is
# here for case of upgrades from earlier Fedora/RHEL. This
@@ -910,22 +1118,9 @@ getent passwd qemu >/dev/null || \
-c "qemu user" qemu
%endif
-%post
+%post daemon
-%if %{with_libvirtd}
%if %{with_network}
-# 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
-if ! /sbin/chkconfig libvirtd && test ! -f %{_sysconfdir}/libvirt/qemu/networks/default.xml
-then
- UUID=`/usr/bin/uuidgen`
- sed -e "s,</name>,</name>\n <uuid>$UUID</uuid>," \
- < %{_datadir}/libvirt/networks/default.xml \
- > %{_sysconfdir}/libvirt/qemu/networks/default.xml
- ln -s ../default.xml %{_sysconfdir}/libvirt/qemu/networks/autostart/default.xml
-fi
-
# All newly defined networks will have a mac address for the bridge
# auto-generated, but networks already existing at the time of upgrade
# will not. We need to go through all the network configs, look for
@@ -991,8 +1186,8 @@ fi
%endif
%endif
-%preun
%if %{with_libvirtd}
+%preun daemon
%if %{with_systemd}
if [ $1 -eq 0 ] ; then
# Package removal, not upgrade
@@ -1007,8 +1202,8 @@ fi
%endif
%endif
-%postun
%if %{with_libvirtd}
+%postun daemon
%if %{with_systemd}
/bin/systemctl daemon-reload >/dev/null 2>&1 || :
if [ $1 -ge 1 ] ; then
@@ -1019,6 +1214,20 @@ fi
%endif
%if %{with_libvirtd}
+%if %{with_network}
+%post daemon-config-network
+if test $1 -eq 1 && test ! -f %{_sysconfdir}/libvirt/qemu/networks/default.xml ; then
+ UUID=`/usr/bin/uuidgen`
+ sed -e "s,</name>,</name>\n <uuid>$UUID</uuid>," \
+ < %{_datadir}/libvirt/networks/default.xml \
+ > %{_sysconfdir}/libvirt/qemu/networks/default.xml
+ ln -s ../default.xml %{_sysconfdir}/libvirt/qemu/networks/autostart/default.xml
+fi
+%endif
+%endif
+
+
+%if %{with_libvirtd}
%if %{with_systemd}
%triggerun -- libvirt < 0.9.4
%{_bindir}/systemd-sysv-convert --save libvirtd >/dev/null 2>&1 ||:
@@ -1064,10 +1273,19 @@ fi
/bin/systemctl try-restart libvirt-guests.service >/dev/null 2>&1 || :
%endif
-%if %{with_libvirtd}
%files
%defattr(-, root, root)
+%files docs
+%defattr(-, root, root)
+%dir %{_datadir}/doc/libvirt-docs-%{version}
+%dir %{_datadir}/doc/libvirt-docs-%{version}/html
+%{_datadir}/doc/libvirt-docs-%{version}/html/*
+
+%if %{with_libvirtd}
+%files daemon
+%defattr(-, root, root)
+
%doc AUTHORS ChangeLog.gz NEWS README COPYING.LIB TODO
%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/
@@ -1078,7 +1296,6 @@ fi
%endif
%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/nwfilter/
-%{_sysconfdir}/libvirt/nwfilter/*.xml
%{_sysconfdir}/rc.d/init.d/libvirtd
%if %{with_systemd}
@@ -1190,6 +1407,67 @@ rm -f $RPM_BUILD_ROOT%{_sysconfdir}/sysctl.d/libvirtd
%{_mandir}/man8/libvirtd.8*
%doc docs/*.xml
+
+%if %{with_network}
+%files daemon-config-network
+%defattr(-, root, root)
+%endif
+
+%if %{with_nwfilter}
+%files daemon-config-nwfilter
+%defattr(-, root, root)
+%{_sysconfdir}/libvirt/nwfilter/*.xml
+%endif
+
+%if %{with_qemu_tcg}
+%files daemon-qemu
+%defattr(-, root, root)
+%endif
+
+%if %{with_qemu_kvm}
+%files daemon-kvm
+%defattr(-, root, root)
+%endif
+
+%if %{with_lxc}
+%files daemon-lxc
+%defattr(-, root, root)
+%endif
+
+%if %{with_uml}
+%files daemon-uml
+%defattr(-, root, root)
+%endif
+
+%if %{with_xen}
+%files daemon-xen
+%defattr(-, root, root)
+%endif
+
+%if %{with_qemu_tcg}
+%files qemu
+%defattr(-, root, root)
+%endif
+
+%if %{with_qemu_kvm}
+%files kvm
+%defattr(-, root, root)
+%endif
+
+%if %{with_lxc}
+%files lxc
+%defattr(-, root, root)
+%endif
+
+%if %{with_uml}
+%files uml
+%defattr(-, root, root)
+%endif
+
+%if %{with_xen}
+%files xen
+%defattr(-, root, root)
+%endif
%endif
%if %{with_sanlock}
--
1.7.7.6
12 years, 7 months
[libvirt] [PATCH] python: improve conversion validation
by Eric Blake
Laszlo Ersek pointed out that in trying to convert a long to an
unsigned int, we used:
long long_val = ...;
if ((unsigned int)long_val == long_val)
According to C99 integer promotion rules, the if statement is
equivalent to:
(unsigned long)(unsigned int)long_val == (unsigned long)long_val
since you get an unsigned comparison if at least one side is
unsigned, using the largest rank of the two sides; but on 32-bit
platforms, where unsigned long and unsigned int are the same size,
this comparison is always true and ends up converting negative
long_val into posigive unsigned int values, rather than rejecting
the negative value as we had originally intended (python longs
are unbounded size, and we don't want to do silent modulo
arithmetic when converting to C code).
Fix this by using direct comparisons, rather than casting.
* python/typewrappers.c (libvirt_intUnwrap, libvirt_uintUnwrap)
(libvirt_ulongUnwrap, libvirt_ulonglongUnwrap): Fix conversion
checks.
---
python/typewrappers.c | 27 ++++++++++++++++++++-------
1 files changed, 20 insertions(+), 7 deletions(-)
diff --git a/python/typewrappers.c b/python/typewrappers.c
index af209e6..4ae3ee1 100644
--- a/python/typewrappers.c
+++ b/python/typewrappers.c
@@ -132,7 +132,7 @@ libvirt_intUnwrap(PyObject *obj, int *val)
if ((long_val == -1) && PyErr_Occurred())
return -1;
- if ((int)long_val == long_val) {
+ if (long_val <= INT_MAX && long_val >= INT_MIN) {
*val = long_val;
} else {
PyErr_SetString(PyExc_OverflowError,
@@ -151,7 +151,7 @@ libvirt_uintUnwrap(PyObject *obj, unsigned int *val)
if ((long_val == -1) && PyErr_Occurred())
return -1;
- if ((unsigned int)long_val == long_val) {
+ if (long_val >= 0 && long_val <= UINT_MAX) {
*val = long_val;
} else {
PyErr_SetString(PyExc_OverflowError,
@@ -183,7 +183,13 @@ libvirt_ulongUnwrap(PyObject *obj, unsigned long *val)
if ((long_val == -1) && PyErr_Occurred())
return -1;
- *val = long_val;
+ if (long_val >= 0) {
+ *val = long_val;
+ } else {
+ PyErr_SetString(PyExc_OverflowError,
+ "negative Python int cannot be converted to C unsigned long");
+ return -1;
+ }
return 0;
}
@@ -207,16 +213,23 @@ int
libvirt_ulonglongUnwrap(PyObject *obj, unsigned long long *val)
{
unsigned long long ullong_val = -1;
+ long long llong_val;
/* The PyLong_AsUnsignedLongLong doesn't check the type of
* obj, only accept argument of PyLong_Type, so we check it instead.
*/
- if (PyInt_Check(obj))
- ullong_val = PyInt_AsLong(obj);
- else if (PyLong_Check(obj))
+ if (PyInt_Check(obj)) {
+ llong_val = PyInt_AsLong(obj);
+ if (llong_val < 0)
+ PyErr_SetString(PyExc_OverflowError,
+ "negative Python int cannot be converted to C unsigned long long");
+ else
+ ullong_val = llong_val;
+ } else if (PyLong_Check(obj)) {
ullong_val = PyLong_AsUnsignedLongLong(obj);
- else
+ } else {
PyErr_SetString(PyExc_TypeError, "an integer is required");
+ }
if ((ullong_val == -1) && PyErr_Occurred())
return -1;
--
1.7.1
12 years, 7 months
[libvirt] [PATCH] libvirt:qemu: fix max_balloon less than cur_balloon
by Zhou Peng
In qemuDomainGetXMLDesc, if cur_balloon is bigger than max_balloon,
max_balloon should be updated too, otherwise the currentMemory is
bigger than memory in dumped xml, which will produce invalid
checkpoint by virsh-save.
The bug appears like this below:
$virsh save vm-num foo.ckp
$virsh restore foo.ckp
error: XML error: current memory '824320k' exceeds maximum '824288k'
Signed-off-by: Zhou Peng <ailvpeng25(a)gmail.com>
---
src/qemu/qemu_driver.c | 6 ++++++
1 files changed, 6 insertions(+), 0 deletions(-)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 0d3b0bd..96d3219 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -4485,7 +4485,13 @@ endjob:
if (err < 0)
goto cleanup;
if (err > 0)
+ {
vm->def->mem.cur_balloon = balloon;
+ if (balloon > vm->def->mem.max_balloon)
+ {
+ vm->def->mem.max_balloon = balloon;
+ }
+ }
/* err == 0 indicates no balloon support, so ignore it */
}
}
--
1.7.7.6
12 years, 7 months
[libvirt] [PATCH] Fix client only RPM build & other misc RPM problems
by Daniel P. Berrange
From: "Daniel P. Berrange" <berrange(a)redhat.com>
Pushing under build break rule - some misc problems discovered while
doing the RPM refactoring
* libvirt.spec.in: Remove obsolete --with-remote-pid-file arg.
Add missing %{without_libxl} statement. Fix handling of docs
in client only build. Put systemtap files in -client RPM
instead of -daemon RPM
* examples/xml/nwfilter/Makefile.am: Don't install examples if
nwfilter is disabled.
---
examples/xml/nwfilter/Makefile.am | 2 ++
libvirt.spec.in | 30 +++++++++---------------------
2 files changed, 11 insertions(+), 21 deletions(-)
diff --git a/examples/xml/nwfilter/Makefile.am b/examples/xml/nwfilter/Makefile.am
index 12a3619..c503682 100644
--- a/examples/xml/nwfilter/Makefile.am
+++ b/examples/xml/nwfilter/Makefile.am
@@ -22,6 +22,7 @@ FILTERS = \
EXTRA_DIST=$(FILTERS)
+if WITH_NWFILTER
confdir = $(sysconfdir)/libvirt
NWFILTER_DIR = "$(DESTDIR)$(sysconfdir)/libvirt/nwfilter"
@@ -37,3 +38,4 @@ uninstall-local::
rm -f "$(NWFILTER_DIR)/$$f"; \
done
-test -z $(shell ls $(NWFILTER_DIR)) || rmdir $(NWFILTER_DIR)
+endif
diff --git a/libvirt.spec.in b/libvirt.spec.in
index d91653c..b787fde 100644
--- a/libvirt.spec.in
+++ b/libvirt.spec.in
@@ -973,6 +973,7 @@ autoreconf -if
%{?_without_openvz} \
%{?_without_lxc} \
%{?_without_vbox} \
+ %{?_without_libxl} \
%{?_without_xenapi} \
%{?_without_sasl} \
%{?_without_avahi} \
@@ -1008,8 +1009,7 @@ autoreconf -if
%{with_packager_version} \
--with-qemu-user=%{qemu_user} \
--with-qemu-group=%{qemu_group} \
- %{init_scripts} \
- --with-remote-pid-file=%{_localstatedir}/run/libvirtd.pid
+ %{init_scripts}
make %{?_smp_mflags}
gzip -9 ChangeLog
@@ -1059,16 +1059,6 @@ rm -f $RPM_BUILD_ROOT%{_datadir}/augeas/lenses/tests/test_libvirtd_lxc.aug
rm -rf $RPM_BUILD_ROOT%{_datadir}/doc/libvirt-python-%{version}
%endif
-%if %{client_only}
-rm -rf $RPM_BUILD_ROOT%{_datadir}/doc/libvirt-%{version}
-%endif
-
-%if ! %{with_libvirtd}
-rm -rf $RPM_BUILD_ROOT%{_sysconfdir}/libvirt/nwfilter
-mv $RPM_BUILD_ROOT%{_datadir}/doc/libvirt-%{version}/html \
- $RPM_BUILD_ROOT%{_datadir}/doc/libvirt-devel-%{version}/
-%endif
-
%if ! %{with_qemu}
rm -rf $RPM_BUILD_ROOT%{_sysconfdir}/libvirt/qemu.conf
rm -rf $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/libvirtd.qemu
@@ -1081,11 +1071,8 @@ rm -rf $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/libvirtd.lxc
rm -rf $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/libvirtd.uml
%endif
-mv $RPM_BUILD_ROOT%{_datadir}/doc/libvirt-%{version} $RPM_BUILD_ROOT%{_datadir}/doc/libvirt-docs-%{version}
-
-%if ! %{with_nwfilter}
-rm -rf $RPM_BUILD_ROOT%{_sysconfdir}/libvirt/nwfilter
-%endif
+mv $RPM_BUILD_ROOT%{_datadir}/doc/libvirt-%{version} \
+ $RPM_BUILD_ROOT%{_datadir}/doc/libvirt-docs-%{version}
%clean
rm -fr %{buildroot}
@@ -1305,10 +1292,6 @@ fi
%else
rm -f $RPM_BUILD_ROOT%{_sysconfdir}/sysctl.d/libvirtd
%endif
-%if %{with_dtrace}
-%{_datadir}/systemtap/tapset/libvirt_probes.stp
-%{_datadir}/systemtap/tapset/libvirt_functions.stp
-%endif
%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/
@@ -1495,6 +1478,11 @@ rm -f $RPM_BUILD_ROOT%{_sysconfdir}/sysctl.d/libvirtd
%{_bindir}/virt-host-validate
%{_libdir}/lib*.so.*
+%if %{with_dtrace}
+%{_datadir}/systemtap/tapset/libvirt_probes.stp
+%{_datadir}/systemtap/tapset/libvirt_functions.stp
+%endif
+
%dir %{_datadir}/libvirt/
%dir %{_datadir}/libvirt/schemas/
--
1.7.7.6
12 years, 7 months