From fd5c9bb9abc8dadd6368e7cfc9b657b2cfa1e828 Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Wed, 16 Sep 2009 16:02:38 +0100 Subject: [PATCH] Refactor libvirt.spec to allow client-only builds 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. Make RHEL-6 do a client only build for all non-x86_64 archs. 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 | 217 +++++++++++++++++++++++++++++++++++----------- qemud/Makefile.am | 31 ++++--- 2 files changed, 183 insertions(+), 65 deletions(-) diff --git a/libvirt.spec.in b/libvirt.spec.in index f4cfbf1c7a..33a7277ae9 100644 --- a/libvirt.spec.in +++ b/libvirt.spec.in @@ -1,60 +1,136 @@ # -*- 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-6 builds are client-only except for x86_64 +%if 0%{?rhel} >= 6 +%ifnarch x86_64 +%define client_only 1 +%endif +%endif + +# 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 stopped including Xen on all archs +%if 0%{?rhel} >= 6 +%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 +138,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 +162,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 +235,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 +283,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 +400,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 +464,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 +485,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 +496,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 +518,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 +532,8 @@ sed -i -e "//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 +543,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 +559,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 +573,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 +606,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 +668,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 +692,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 3d143da5d4..7ebd3caa09 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 -- GitLab