Some architectures in certain RHEL versions do not include any
hypervisors. Update the specfile to allow those to easily build
a remote client only version of libvirt. ie no libvirtd related
bits at all.
* qemud/Makefile.am: Always instal SASL config since its needed
by client too
* libvirt.spec.in: Re-factor specfile conditionals to allow entire
server side build to be disabled easily, eg a remote client only
build. Make RHEL-5 do client only build for s390/ppc. Enable LXC
on RHEL-6. Enable all Fedora >= 6 features on RHEL-6 too. Add some
more conditionals around dnsmasq/iptables/hal Requires tags.
Add missing e2fsprogs-devel BR for RHEL-5 as workaround for broken
parted. Fix the device mapper BR for RHEL-5. Add conditional rules
for ESX build. Add conditional rules for SELinux + HAL builds.
Fix a mistaken %{with_qemu} to be %{with_network} when setting
up default network XML
---
libvirt.spec.in | 214 ++++++++++++++++++++++++++++++++++++++++-------------
qemud/Makefile.am | 31 ++++----
2 files changed, 180 insertions(+), 65 deletions(-)
diff --git a/libvirt.spec.in b/libvirt.spec.in
index f4cfbf1..0ab3b4e 100644
--- a/libvirt.spec.in
+++ b/libvirt.spec.in
@@ -1,60 +1,133 @@
# -*- rpm-spec -*-
-%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_vbox 0%{!?_without_vbox:1}
-%define with_sasl 0%{!?_without_sasl:1}
-%define with_avahi 0%{!?_without_avahi:1}
-%define with_python 0%{!?_without_python:1}
-%define with_libvirtd 0%{!?_without_libvirtd:1}
-%define with_uml 0%{!?_without_uml:1}
-%define with_one 0%{!?_without_one:1}
-%define with_phyp 0%{!?_without_phyp:1}
-%define with_network 0%{!?_without_network:1}
-%define with_storage_fs 0%{!?_without_storage_fs:1}
-%define with_storage_lvm 0%{!?_without_storage_lvm:1}
-%define with_storage_iscsi 0%{!?_without_storage_iscsi:1}
-%define with_storage_disk 0%{!?_without_storage_disk:1}
-%define with_storage_mpath 0%{!?_without_storage_mpath:1}
-%define with_numactl 0%{!?_without_numactl:1}
-
-# default to off - selectively enabled below
+# A client only build will create a libvirt.so only containing
+# the generic RPC driver, and test driver and no libvirtd
+# Default to a full server + client build
+%define client_only 0
+
+# Now turn off server build in certain cases
+
+# RHEL-5 builds are client-only for s390, ppc
+%if 0%{?rhel} == 5
+%ifnarch i386 i586 i686 x86_64 ia64
+%define client_only 1
+%endif
+%endif
+
+# Disable all server side drivers if client only build requested
+%if %{client_only}
+%define server_drivers 0
+%else
+%define server_drivers 1
+%endif
+
+
+# Now set the defaults for all the important features, independant
+# of any particular OS
+
+# First the daemon itself
+%define with_libvirtd 0%{!?_without_libvirtd:%{server_drivers}}
+%define with_avahi 0%{!?_without_avahi:%{server_drivers}}
+
+# Then the hypervisor drivers
+%define with_xen 0%{!?_without_xen:%{server_drivers}}
+%define with_xen_proxy 0%{!?_without_xen_proxy:%{server_drivers}}
+%define with_qemu 0%{!?_without_qemu:%{server_drivers}}
+%define with_openvz 0%{!?_without_openvz:%{server_drivers}}
+%define with_lxc 0%{!?_without_lxc:%{server_drivers}}
+%define with_vbox 0%{!?_without_vbox:%{server_drivers}}
+%define with_uml 0%{!?_without_uml:%{server_drivers}}
+%define with_one 0%{!?_without_one:%{server_drivers}}
+%define with_phyp 0%{!?_without_phyp:%{server_drivers}}
+%define with_esx 0%{!?_without_esx:%{server_drivers}}
+
+# Then the secondary host drivers
+%define with_network 0%{!?_without_network:%{server_drivers}}
+%define with_storage_fs 0%{!?_without_storage_fs:%{server_drivers}}
+%define with_storage_lvm 0%{!?_without_storage_lvm:%{server_drivers}}
+%define with_storage_iscsi 0%{!?_without_storage_iscsi:%{server_drivers}}
+%define with_storage_disk 0%{!?_without_storage_disk:%{server_drivers}}
+%define with_storage_mpath 0%{!?_without_storage_mpath:%{server_drivers}}
+%define with_numactl 0%{!?_without_numactl:%{server_drivers}}
+%define with_selinux 0%{!?_without_selinux:%{server_drivers}}
+%define with_hal 0%{!?_without_hal:%{server_drivers}}
+
+# A few optional bits off by default, we enable later
%define with_polkit 0%{!?_without_polkit:0}
%define with_capng 0%{!?_without_capng:0}
%define with_netcf 0%{!?_without_netcf:0}
+# Non-server/HV driver defaults which are always enabled
+%define with_python 0%{!?_without_python:1}
+%define with_sasl 0%{!?_without_sasl:1}
+
+
+# Finally set the OS / architecture specific special cases
+
# Xen is available only on i386 x86_64 ia64
%ifnarch i386 i586 i686 x86_64 ia64
%define with_xen 0
%endif
+
+# RHEL doesn't ship OpenVZ, VBox, UML, OpenNebula, PowerHypervisor or ESX
+%if 0%{?rhel}
+%define with_openvz 0
+%define with_vbox 0
+%define with_uml 0
+%define with_one 0
+%define with_phyp 0
+%define with_esx 0
+%endif
+
+# RHEL-5 has restricted QEMU to x86_64 only and is too old for LXC
+%if 0%{?rhel} == 5
+%ifnarch x86_64
+%define with_qemu 0
+%endif
+%define with_lxc 0
+%endif
+
+# 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
+%ifnarch x86_64
+%define with_qemu 0
+%endif
+%define with_xen 0
+%endif
+
+# If Xen isn't turned on, we shouldn't build the xen proxy either
%if ! %{with_xen}
%define with_xen_proxy 0
%endif
+# Fedora doesn't have any QEMU on ppc64 - only ppc
%if 0%{?fedora}
%ifarch ppc64
%define with_qemu 0
%endif
%endif
-%if 0%{?fedora} >= 8
+# PolicyKit was introduced in Fedora 8 / RHEL-6 or newer, allowing
+# the setuid Xen proxy to be killed off
+%if 0%{?fedora} >= 8 || 0%{?rhel} >= 6
%define with_polkit 0%{!?_without_polkit:1}
%define with_xen_proxy 0
%endif
-%if 0%{?fedora} >= 12
+# libcapng is used to manage capabilities in Fedora 12 / RHEL-6 or newer
+%if 0%{?fedora} >= 12 || 0%{?rhel} >= 6
%define with_capng 0%{!?_without_capng:1}
%endif
-%if 0%{?fedora} >= 12
-%define with_netcf 0%{!?_without_netcf:1}
+# netcf is used to manage network interfaces in Fedora 12 / RHEL-6 or newer
+%if 0%{?fedora} >= 12 || 0%{?rhel} >= 6
+%define with_netcf 0%{!?_without_netcf:%{server_drivers}}
%endif
-%if 0%{?fedora} >= 12
+# Force QEMU to run as non-root
+%if 0%{?fedora} >= 12 || 0%{?rhel} >= 6
%define qemu_user qemu
%define qemu_group qemu
%else
@@ -62,15 +135,13 @@
%define qemu_group root
%endif
-#
-# If building on RHEL switch on the specific support
-#
-%if 0%{?fedora}
-%define with_rhel5 0
-%else
+
+# The RHEL-5 Xen package has some feature backports. This
+# flag is set to enable use of those special bits on RHEL-5
+%if 0%{?rhel} == 5
%define with_rhel5 1
-%define with_polkit 0
-%define with_one 0
+%else
+%define with_rhel5 0
%endif
@@ -88,13 +159,21 @@ BuildRequires: python-devel
# The client side, i.e. shared libs and virsh are in a subpackage
Requires: libvirt-client = %{version}-%{release}
-Requires: dnsmasq
+# Used by many of the drivers, so turn it on whenever the
+# daemon is present
+%if %{with_libvirtd}
Requires: bridge-utils
+%endif
+%if %{with_network}
+Requires: dnsmasq
Requires: iptables
+%endif
# needed for device enumeration
+%if %{with_hal}
Requires: hal
+%endif
%if %{with_polkit}
-%if 0%{?fedora} >= 12
+%if 0%{?fedora} >= 12 || 0%{?rhel} >=6
Requires: polkit >= 0.93
%else
Requires: PolicyKit >= 0.6
@@ -153,18 +232,24 @@ BuildRequires: readline-devel
BuildRequires: ncurses-devel
BuildRequires: gettext
BuildRequires: gnutls-devel
+%if %{with_hal}
BuildRequires: hal-devel
+%endif
%if %{with_avahi}
BuildRequires: avahi-devel
%endif
+%if %{with_selinux}
BuildRequires: libselinux-devel
+%endif
+%if %{with_network}
BuildRequires: dnsmasq
+%endif
BuildRequires: bridge-utils
%if %{with_sasl}
BuildRequires: cyrus-sasl-devel
%endif
%if %{with_polkit}
-%if 0%{?fedora} >= 12
+%if 0%{?fedora} >= 12 || 0%{?rhel} >= 6
# Only need the binary, not -devel
BuildRequires: polkit >= 0.93
%else
@@ -195,11 +280,20 @@ BuildRequires: iscsi-initiator-utils
%if %{with_storage_disk}
# For disk driver
BuildRequires: parted-devel
+%if 0%{?rhel} == 5
+# Broken RHEL-5 parted RPM is missing a dep
+BuildRequires: e2fsprogs-devel
+%endif
%endif
%if %{with_storage_mpath}
# For Multipath support
+%if 0%{?rhel} == 5
+# Broken RHEL-5 packaging has header files in main RPM :-(
+BuildRequires: device-mapper
+%else
BuildRequires: device-mapper-devel
%endif
+%endif
%if %{with_numactl}
# For QEMU/LXC numa info
BuildRequires: numactl-devel
@@ -303,6 +397,10 @@ of recent versions of Linux (and other OSes).
%define _without_phyp --without-phyp
%endif
+%if ! %{with_esx}
+%define _without_esx --without-esx
+%endif
+
%if ! %{with_polkit}
%define _without_polkit --without-polkit
%endif
@@ -363,6 +461,14 @@ of recent versions of Linux (and other OSes).
%define _without_netcf --without-netcf
%endif
+%if ! %{with_selinux}
+%define _without_selinux --without-selinux
+%endif
+
+%if ! %{with_hal}
+%define _without_hal --without-hal
+%endif
+
%configure %{?_without_xen} \
%{?_without_qemu} \
%{?_without_openvz} \
@@ -376,6 +482,7 @@ of recent versions of Linux (and other OSes).
%{?_without_uml} \
%{?_without_one} \
%{?_without_phyp} \
+ %{?_without_esx} \
%{?_without_network} \
%{?_with_rhel5_api} \
%{?_without_storage_fs} \
@@ -386,6 +493,8 @@ of recent versions of Linux (and other OSes).
%{?_without_numactl} \
%{?_without_capng} \
%{?_without_netcf} \
+ %{?_without_selinux} \
+ %{?_without_hal} \
--with-qemu-user=%{qemu_user} \
--with-qemu-group=%{qemu_group} \
--with-init-script=redhat \
@@ -406,7 +515,7 @@ rm -f $RPM_BUILD_ROOT%{_libdir}/*.a
rm -f $RPM_BUILD_ROOT%{_libdir}/python*/site-packages/*.la
rm -f $RPM_BUILD_ROOT%{_libdir}/python*/site-packages/*.a
-%if %{with_qemu}
+%if %{with_network}
# 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.
@@ -420,6 +529,8 @@ 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
+%endif
+%if ! %{with_qemu}
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
@@ -429,6 +540,10 @@ rm -f
$RPM_BUILD_ROOT%{_datadir}/augeas/lenses/tests/test_libvirtd_qemu.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_qemu}
rm -rf $RPM_BUILD_ROOT%{_sysconfdir}/libvirt/qemu.conf
%endif
@@ -441,9 +556,9 @@ chmod 0644 $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/libvirtd
rm -fr %{buildroot}
%pre
-%if 0%{?fedora} >= 12
+%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. This
+# here for case of upgrades from earlier Fedora/RHEL. This
# UID/GID pair is reserved for qemu:qemu
getent group kvm >/dev/null || groupadd -g 36 -r kvm
getent group qemu >/dev/null || groupadd -g 107 -r qemu
@@ -455,7 +570,7 @@ getent passwd qemu >/dev/null || \
%post
%if %{with_libvirtd}
-%if %{with_qemu}
+%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
@@ -488,31 +603,31 @@ fi
%postun client -p /sbin/ldconfig
+%if %{with_libvirtd}
%files
%defattr(-, root, root)
%doc AUTHORS ChangeLog.gz NEWS README COPYING.LIB TODO
%dir %attr(0700, root, root) %{_sysconfdir}/libvirt/
-%if %{with_qemu}
+%if %{with_network}
%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_qemu}
%dir %{_datadir}/libvirt/
+
+%if %{with_network}
%dir %{_datadir}/libvirt/networks/
%{_datadir}/libvirt/networks/default.xml
%endif
@@ -550,13 +665,11 @@ fi
%{_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}
-%if 0%{?fedora} >= 12
+%if 0%{?fedora} >= 12 || 0%{?rhel} >= 6
%{_datadir}/polkit-1/actions/org.libvirt.unix.policy
%else
%{_datadir}/PolicyKit/policy/org.libvirt.unix.policy
@@ -576,12 +689,11 @@ fi
%attr(0755, root, root) %{_libexecdir}/libvirt_lxc
%endif
-%if %{with_libvirtd}
%attr(0755, root, root) %{_libexecdir}/libvirt_parthelper
%attr(0755, root, root) %{_sbindir}/libvirtd
-%endif
%doc docs/*.xml
+%endif
%files client -f %{name}.lang
%defattr(-, root, root)
diff --git a/qemud/Makefile.am b/qemud/Makefile.am
index 3d143da..7ebd3ca 100644
--- a/qemud/Makefile.am
+++ b/qemud/Makefile.am
@@ -180,7 +180,7 @@ install-data-local: install-init install-data-sasl install-data-polkit
\
mkdir -p $(DESTDIR)$(localstatedir)/run/libvirt
mkdir -p $(DESTDIR)$(localstatedir)/lib/libvirt
-uninstall-local:: uninstall-init uninstall-data-sasl install-data-polkit
+uninstall-local:: uninstall-init install-data-sasl install-data-polkit
rm -f $(DESTDIR)$(sysconfdir)/libvirt/qemu/networks/autostart/default.xml
rm -f $(DESTDIR)$(sysconfdir)/$(default_xml_dest)
rmdir $(DESTDIR)$(sysconfdir)/libvirt/qemu/networks/autostart || :
@@ -188,19 +188,6 @@ uninstall-local:: uninstall-init uninstall-data-sasl
install-data-polkit
rmdir $(DESTDIR)$(localstatedir)/run/libvirt || :
rmdir $(DESTDIR)$(localstatedir)/lib/libvirt || :
-if HAVE_SASL
-install-data-sasl:: install-init
- mkdir -p $(DESTDIR)$(sysconfdir)/sasl2/
- $(INSTALL_DATA) $(srcdir)/libvirtd.sasl $(DESTDIR)$(sysconfdir)/sasl2/libvirt.conf
-
-uninstall-data-sasl:: install-init
- rm -f $(DESTDIR)$(sysconfdir)/sasl2/libvirt.conf
- rmdir $(DESTDIR)$(sysconfdir)/sasl2/
-else
-install-data-sasl:
-uninstall-data-sasl:
-endif
-
if HAVE_POLKIT
install-data-polkit:: install-init
mkdir -p $(DESTDIR)$(policydir)
@@ -285,7 +272,23 @@ endif # DBUS_INIT_SCRIPTS_RED_HAT
# are used by nearly every other library.
libvirtd_LDADD += ../gnulib/lib/libgnu.la $(LIBSOCKET)
+else # WITH_LIBVIRTD
+install-data-local: install-data-sasl
+uninstall-local:: uninstall-data-sasl
endif # WITH_LIBVIRTD
+# This is needed for clients too, so can't wrap in
+# the WITH_LIBVIRTD conditional
+if HAVE_SASL
+install-data-sasl:
+ mkdir -p $(DESTDIR)$(sysconfdir)/sasl2/
+ $(INSTALL_DATA) $(srcdir)/libvirtd.sasl $(DESTDIR)$(sysconfdir)/sasl2/libvirt.conf
+
+uninstall-data-sasl:
+ rm -f $(DESTDIR)$(sysconfdir)/sasl2/libvirt.conf
+ rmdir $(DESTDIR)$(sysconfdir)/sasl2/
+endif
+
+
CLEANFILES = $(BUILT_SOURCES)
CLEANFILES += *.cov *.gcov .libs/*.gcda .libs/*.gcno *.gcno *.gcda
--
1.6.2.5