On Fri, Mar 30, 2012 at 12:13:13PM -0400, Laine Stump wrote:
On 03/30/2012 09:22 AM, Daniel P. Berrange wrote:
> From: "Daniel P. Berrange" <berrange(a)redhat.com>
>
> NB: this is in response to a Fedora 17 beta blocker bug.
> Currently gnome-boxes depends on 'libvirt' which pulls
> in the default virtual network, which kills networking
> if you install Fedora 17 inside a KVM guest.
>
> 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 and
> libvirt-daemon-configs
> - libvirt-daemon: the libvirt daemon and related pieces
> - libvirt-daemon-configs: the default 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-configs
> - libvirt-kvm: Deps on libvirt-daemon-kvm & libvirt-daemon-configs
> - libvirt-lxc: Deps on libvirt-daemon-lxc & libvirt-daemon-configs
> - libvirt-uml: Deps on libvirt-daemon-uml & libvirt-daemon-configs
> - libvirt-xen: Deps on libvirt-daemon-xen & libvirt-daemon-configs
>
> 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.
I like the modularity of this package setup. There is one difference
with the change described in the final paragraph, though, that will
cause some surprises when it's done:
With the current setup, you can install the "libvirt" package, and it
will just use/present whichever hypervisors happen to be installed on
the machine. With the new setup, if you have qemu-kvm and lxc installed
on the machine, then install "libvirt", you won't get the libvirt driver
for either of these - you'll need to explicitly install libvirt-qemu and
libvirt-lxc. This may cause surprises for people who already have
bootstraps that just install "qemu-kvm" and "libvirt".
No, that's not the case. The behaviour of 'yum install libvirt' is
identical before & after. You won't get the 'libvirt-daemon-kvm'
package installed, but that's fine, because that's an empty
virtual package.
> diff --git a/libvirt.spec.in b/libvirt.spec.in
> index 67f1c33..743d43e 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}
qemu_tcg wasn't mentioned anywhere in the documentation or commit log
message. Was this intentional?
(Note after further reading - it looks like qemu_tcg is being used as an
easier-to-differentiate synonym for "qemu" (i.e. software-only qemu), is
that right?)
Yes, this is to let us deal with RHEL where we only provide
qemu-kvm, not the rest of the TCG based binaries.
> +%package docs
> +Summary: Documentation for libvirt library and daemon
> +Group: Development/Libraries
> +
> +%description docs
> +Copy of the libvirt website documentation
> +
> +%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.
Functionally it probably makes no difference, but I think it would be
better if "%description daemon" was put next to "%package daemon"
rather
than having the %package and %description of docs in between. Or is this
grouped in some other way that I missed?
Yes, that ordering is a mistake I've fixed.
> +
> +%package daemon-configs
> +Summary: Default configuration files for the libvirtd daemon
> +Group: Development/Libraries
> +
> +Requires: libvirt-daemon = %{version}-%{release}
> +
> +%description daemon-configs
> +Default configuration files for setting up NAT based networking
> +and guest network traffic filtering.
> +%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
> +%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
> +%endif
> +
> +%if %{with_qemu_tcg}
> +%description daemon-qemu
> +Server side daemon and driver required to manage the virtualization
> +capabilities of the QEMU TCG emulators
> +%endif
> +
> +%if %{with_qemu_kvm}
> +%description daemon-kvm
> +Server side daemon and driver required to manage the virtualization
> +capabilities of the QEMU KVM hypervisor
> +%endif
These sections also seem to be mixed up. But maybe I'm expecting a
different kind of grouping than you're using.
This was an artifact of an intermediate idea I tried. I'll move it back
to the natural ordering.
>
> %description lock-sanlock
> Includes the Sanlock lock manager plugin for the QEMU
> @@ -811,8 +996,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}
What's the story with this bit? Is that option included in some other
way that I missed now? Or is it unneeded? Should it be in this patch, or
is it addressing a separate issue?
Opps, that should have been separate. --with-remote-pid-file was deleted
from configure long ago.
Aside from the above comments everything seems to make sense (for as
far
as I understand specfiles :-/), but the real proof I guess will be in
examining the results of builds, and what is pulled in when particular
packages are installed.
One worry about this from the point of view of Fedora is that final beta
deadline is past, and we basically have one chance to get this right. Is
there any way to do this in two steps such that the 1st would be
sufficient to solve Fedora's problem, but be much less intrusive? Or
would the extra step itself just add a bunch more chances for something
to go wrong in the 2nd step, with no real simplification gain in the
first step?
I don't think there's a good way todo it in two separate steps - in fact
it would likely make it even harder to ensure a correct upgrade paths.
Daniel
--
|:
http://berrange.com -o-
http://www.flickr.com/photos/dberrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|:
http://entangle-photo.org -o-
http://live.gnome.org/gtk-vnc :|