# TODO
# - vgscan --ignorelocking failure creates /var/lock/lvm (even if /var is not yet mounted)
-# - --with-replicators (=internal/shared/none, default is none)?
+# - spec default value for --with-replicators (=internal/shared/none, configure default is none)?
+# (also internal vs shared for lvm1,pool,cluster,snapshots,mirrors,raid,replicators,thin,cache;
+# note: dmeventd requires mirrors=internal)
#
# Conditional build:
+# - initrd stuff
%bcond_with initrd # build initrd version
%bcond_without uClibc # link initrd version with uClibc
%bcond_with dietlibc # link initrd version with dietlibc
%bcond_with glibc # link initrd version with static GLIBC
+# - functionality
%bcond_without cluster # disable all cluster support (clvmd&cmirrord)
-%bcond_without lvmetad # disable lvmetad (and lvmlockd)
-%bcond_without lvmpolld # disable lvmpolld (and lvmlockd)
-%bcond_without lvmlockd # disable lvmlockd
+%bcond_without lvmetad # lvmetad (and lvmlockd)
+%bcond_without lvmdbusd # lvmdbusd
+%bcond_without lvmpolld # lvmpolld (and lvmlockd)
+%bcond_without lvmlockd # lvmlockd
%bcond_with sanlock # sanlock support in lvmlockd
%bcond_with replicator # internal replicator support
+# - additional features
%bcond_without selinux # SELinux support
-%bcond_without python2 # Python 2.x binding
-%bcond_without python3 # Python 3.x binding
+# - bindings
+%bcond_without python # Python bindings
+%bcond_without python2 # Python 2 binding
+%bcond_without python3 # Python 3 binding and lvmdbusd
# lvmlockd requires lvmetad and lvmpolld
%if %{without lvmetad} || %{without lvmpolld}
%undefine with_lvmpolld
%endif
+# only glibc possible on SPARC
+%ifarch sparc sparcv9 sparc64
+%define with_glibc 1
+%endif
# if one of the *libc is enabled disable default dietlibc
%if %{with dietlibc} && %{with uClibc}
%undefine with_dietlibc
%endif
-
# with glibc disables default dietlibc
%if %{with glibc} && %{with dietlibc}
%undefine with_dietlibc
%endif
-
# fallback is glibc if neither alternatives are enabled
%if %{without dietlibc} && %{without uClibc}
%define with_glibc 1
%endif
+# for convenience
+%if %{without python}
+%undefine with_python2
+%undefine with_python3
+%endif
+%if %{without python3}
+%undefine with_lvmdbusd
+%endif
Summary: The new version of Logical Volume Manager for Linux
Summary(pl.UTF-8): Nowa wersja Logical Volume Managera dla Linuksa
Name: lvm2
-Version: 2.02.168
+Version: 2.02.177
Release: 1
License: GPL v2 and LGPL v2.1
Group: Applications/System
Source0: ftp://sources.redhat.com/pub/lvm2/LVM2.%{version}.tgz
-# Source0-md5: 00209bdd6befe9a7330f162909313ae8
-Source1: clvmd.sysconfig
+# Source0-md5: ee6cfbc5a0c5696ffae79dac04ee7a2b
+Source3: clvmd.sysconfig
Patch0: %{name}-selinux.patch
Patch1: %{name}-diet.patch
Patch2: device-mapper-dmsetup-export.patch
Patch3: %{name}-tld_init.patch
Patch4: dl-dlsym.patch
-Patch6: %{name}-lvm_path.patch
-Patch7: %{name}-clvmd_cmd_timeout.patch
-Patch8: device-mapper-dmsetup-deps-export.patch
-Patch9: %{name}-run-dir.patch
+Patch8: %{name}-clvmd_cmd_timeout.patch
+Patch9: device-mapper-dmsetup-deps-export.patch
+Patch11: %{name}-thin.patch
URL: http://www.sourceware.org/lvm2/
-BuildRequires: autoconf >= 2.61
+BuildRequires: autoconf >= 2.69
BuildRequires: automake
# for /run detection
-BuildRequires: autoconf-archive
BuildRequires: filesystem >= 3.0-43
BuildRequires: libblkid-devel >= 2.24
%{?with_selinux:BuildRequires: libselinux-devel >= 1.10}
%{?with_selinux:BuildRequires: libsepol-devel}
BuildRequires: ncurses-devel
BuildRequires: pkgconfig
-%{?with_python2:BuildRequires: python-devel >= 1:2.6}
-%if %{with python3}
-BuildRequires: python3-devel >= 1:3.2
-BuildRequires: python3-modules >= 1:3.2
+%{?with_python2:BuildRequires: python-devel >= 2}
+%{?with_python3:BuildRequires: python3-devel >= 1:3.2}
+%if %{with lvmdbusd}
+BuildRequires: python3-dbus
+BuildRequires: python3-pyudev
%endif
BuildRequires: readline-devel
BuildRequires: rpmbuild(macros) >= 1.647
-%{?with_sanlock:BuildRequires: sanlock-devel >= 3.2.4}
+%{?with_sanlock:BuildRequires: sanlock-devel >= 3.3.0}
BuildRequires: udev-devel >= 1:176
%if %{with initrd}
%if %{with dietlibc}
(Cluster MANager), który musi być skonfigurowany i działający, aby
działał cmirrord.
+%package dbusd
+Summary: LVM2 D-Bus daemon
+Summary(pl.UTF-8): Demon LVM2 D-Bus
+Group: Daemons
+Requires: %{name} = %{version}-%{release}
+Requires: python3-dbus
+Requires: python3-pygobject3 >= 3
+Requires: python3-pyudev
+
+%description dbusd
+Daemon for access to LVM2 functionality through a D-Bus interface.
+
+%description dbusd -l pl.UTF-8
+Demon umożliwiający dostęp do funkcjonalności LVM2 poprzez interfejs
+D-Bus.
+
+%package lockd
+Summary: LVM2 locking daemon
+Summary(pl.UTF-8): Demon blokad LVM2
+Group: Daemons
+Requires: %{name} = %{version}-%{release}
+%{?with_cluster:Requires: dlm-libs >= 3.99.5}
+%{?with_sanlock:Requires: sanlock-libs >= 3.3.0}
+
+%description lockd
+LVM commands use lvmlockd to coordinate access to shared storage.
+
+%description lockd -l pl.UTF-8
+Polecenia LVM wykorzystują lvmlockd do koordynowania dostępu do
+współdzielonej pamięci masowej.
+
%package resource-agents
Summary: OCF Resource Agents for LVM2 processes
Summary(pl.UTF-8): Agenci OCF do monitorowania procesów LVM2
Agenci OCF do monitorowania procesów LVM2.
%package -n python-lvm
-Summary: Python interface to LVM2
-Summary(pl.UTF-8): Interfejs Pythona do LVM2
+Summary: Python 2 interface to LVM2
+Summary(pl.UTF-8): Interfejs Pythona 2 do LVM2
Group: Libraries/Python
Requires: device-mapper-libs = %{version}-%{release}
%description -n python-lvm
-Python interface to LVM2.
+Python 2 interface to LVM2.
%description -n python-lvm -l pl.UTF-8
-Interfejs Pythona do LVM2.
+Interfejs Pythona 2 do LVM2.
%package -n python3-lvm
-Summary: Python interface to LVM2
-Summary(pl.UTF-8): Interfejs Pythona do LVM2
+Summary: Python 3 interface to LVM2
+Summary(pl.UTF-8): Interfejs Pythona 3 do LVM2
Group: Libraries/Python
Requires: device-mapper-libs = %{version}-%{release}
%description -n python3-lvm
-Python interface to LVM2.
+Python 3 interface to LVM2.
%description -n python3-lvm -l pl.UTF-8
-Interfejs Pythona do LVM2.
+Interfejs Pythona 3 do LVM2.
%package -n device-mapper
Summary: Userspace support for the device-mapper
Summary: Device-mapper shared libraries
Summary(pl.UTF-8): Biblioteki współdzielone device-mappera
Group: Libraries
-Conflicts: device-mapper < 2.02.119-1
Requires: libblkid >= 2.24
Requires: udev-libs >= 1:176
+Conflicts: device-mapper < 2.02.119-1
%description -n device-mapper-libs
Device-mapper shared libraries.
%patch2 -p1
%patch3 -p1
%patch4 -p1
-%patch6 -p1
-%patch7 -p1
%patch8 -p1
%patch9 -p1
+%patch11 -p1
# do not force --export-symbol linker option for e.g. statically linked executables
# -rdynamic compiler option drives linker in the right way.
%{__make} -j1 -C libdm LIB_SHARED= VERSIONED_SHLIB=
%{__make} -j1 -C libdaemon/client LIB_SHARED= VERSIONED_SHLIB=
%{__make} -j1 -C tools dmsetup.static lvm.static %{?with_dietlibc:DIETLIBC_LIBS="-lcompat"}
-mv -f tools/lvm.static initrd-lvm
-mv -f tools/dmsetup.static initrd-dmsetup
+%{__mv} tools/lvm.static initrd-lvm
+%{__mv} tools/dmsetup.static initrd-dmsetup
# check if tools works
for tool in initrd-lvm initrd-dmsetup; do
fi
done
-%{?with_dietlibc:mv -f libdm/ioctl/libdevmapper.a diet-libdevmapper.a}
+%{?with_dietlibc:%{__mv} libdm/ioctl/libdevmapper.a diet-libdevmapper.a}
%{__make} clean
unset CC
%configure \
--enable-applib \
+ --enable-cache_check_needs_check \
--enable-cmdlib \
+ %{?with_lvmdbusd:--enable-dbus-service} \
%{?debug:--enable-debug} \
--enable-dmeventd \
--enable-fsadm \
+ --with-default-locking-dir=/var/lock/lvm \
%if %{with lvmlockd}
- %{?with_cluster:--enable-lockd-dlm} \
- %{?with_sanlock:--enable-lockd-sanlock} \
+ %{?with_cluster:--enable-lvmlockd-dlm} \
+ %{?with_sanlock:--enable-lvmlockd-sanlock} \
%endif
%{?with_lvmetad:--enable-lvmetad} \
+ --enable-lvmpolld \
--enable-ocf \
- %{?with_python2:--enable-python2-bindings} \
- %{?with_python3:--enable-python3-bindings} \
+ %{?with_python2:--enable-python2_bindings} \
+ %{?with_python3:--enable-python3_bindings} \
--enable-readline \
%{!?with_selinux:--disable-selinux} \
--enable-pkgconfig \
+ --enable-thin_check_needs_check \
--enable-udev_sync \
--enable-udev_rules \
--with-cache=internal \
--with-udev-prefix=/ \
--with-usrlibdir=%{_libdir}
-%{__make} -j1
-%{__make} -j1 -C libdm LIB_STATIC=libdevmapper.a
+# use bash because of "set -o pipefail"
+%{__make} -j1 \
+ SHELL=/bin/bash
+%{__make} -j1 -C libdm \
+ LIB_STATIC=libdevmapper.a
%install
rm -rf $RPM_BUILD_ROOT
%{__make} install install_system_dirs install_initscripts \
DESTDIR=$RPM_BUILD_ROOT \
OWNER="" \
- GROUP=""
-
-%{__make} -C scripts \
- DESTDIR=$RPM_BUILD_ROOT \
+ GROUP="" \
+ python3dir=%{py3_sitescriptdir}
%if %{with cluster}
-cp -p %{SOURCE1} $RPM_BUILD_ROOT/etc/sysconfig/clvmd
+cp -p %{SOURCE3} $RPM_BUILD_ROOT/etc/sysconfig/clvmd
%endif
-mv $RPM_BUILD_ROOT%{_libdir}/lib*.so.* $RPM_BUILD_ROOT/%{_lib}
+%{__mv} $RPM_BUILD_ROOT%{_libdir}/lib*.so.* $RPM_BUILD_ROOT/%{_lib}
for lib in $RPM_BUILD_ROOT/%{_lib}/lib*.so.*; do
lib=$(echo $lib | sed -e "s#$RPM_BUILD_ROOT##g")
slib=$(basename $lib | sed -e 's#\.so\..*#.so#g')
rm -rf $RPM_BUILD_ROOT
%post
-/sbin/chkconfig --add lvm2-lvmetad
-%service lvm2-lvmetad restart
/sbin/chkconfig --add lvm2-monitor
%service lvm2-monitor restart
-/sbin/chkconfig --add lvm2-lvmpolld
-%service lvm2-lvmpolld restart
-# no service restart available
/sbin/chkconfig --add blk-availability
+# no service blk-availability restart
-%preun
+%postun
if [ "$1" = "0" ]; then
- %service lvm2-lvmetad stop
- /sbin/chkconfig --del lvm2-lvmetad
- %service lvm2-lvmpolld stop
- /sbin/chkconfig --del lvm2-lvmpolld
%service lvm2-monitor stop
/sbin/chkconfig --del lvm2-monitor
+ #no service blk-availability stop
/sbin/chkconfig --del blk-availability
fi
%doc README WHATS_NEW doc/*
%attr(755,root,root) %{_sbindir}/blkdeactivate
%attr(755,root,root) %{_sbindir}/fsadm
-%attr(755,root,root) %{_sbindir}/lv*
-%attr(755,root,root) %{_sbindir}/pv*
-%attr(755,root,root) %{_sbindir}/vg*
+%attr(755,root,root) %{_sbindir}/lvchange
+%attr(755,root,root) %{_sbindir}/lvconvert
+%attr(755,root,root) %{_sbindir}/lvcreate
+%attr(755,root,root) %{_sbindir}/lvdisplay
+%attr(755,root,root) %{_sbindir}/lvextend
+%attr(755,root,root) %{_sbindir}/lvm
+%attr(755,root,root) %{_sbindir}/lvmconf
+%attr(755,root,root) %{_sbindir}/lvmconfig
+%attr(755,root,root) %{_sbindir}/lvmdiskscan
+%attr(755,root,root) %{_sbindir}/lvmdump
+%attr(755,root,root) %{_sbindir}/lvmsadc
+%attr(755,root,root) %{_sbindir}/lvmsar
+%attr(755,root,root) %{_sbindir}/lvreduce
+%attr(755,root,root) %{_sbindir}/lvremove
+%attr(755,root,root) %{_sbindir}/lvrename
+%attr(755,root,root) %{_sbindir}/lvresize
+%attr(755,root,root) %{_sbindir}/lvs
+%attr(755,root,root) %{_sbindir}/lvscan
+%attr(755,root,root) %{_sbindir}/pvchange
+%attr(755,root,root) %{_sbindir}/pvck
+%attr(755,root,root) %{_sbindir}/pvcreate
+%attr(755,root,root) %{_sbindir}/pvdisplay
+%attr(755,root,root) %{_sbindir}/pvmove
+%attr(755,root,root) %{_sbindir}/pvremove
+%attr(755,root,root) %{_sbindir}/pvresize
+%attr(755,root,root) %{_sbindir}/pvs
+%attr(755,root,root) %{_sbindir}/pvscan
+%attr(755,root,root) %{_sbindir}/vgcfgbackup
+%attr(755,root,root) %{_sbindir}/vgcfgrestore
+%attr(755,root,root) %{_sbindir}/vgchange
+%attr(755,root,root) %{_sbindir}/vgck
+%attr(755,root,root) %{_sbindir}/vgconvert
+%attr(755,root,root) %{_sbindir}/vgcreate
+%attr(755,root,root) %{_sbindir}/vgdisplay
+%attr(755,root,root) %{_sbindir}/vgexport
+%attr(755,root,root) %{_sbindir}/vgextend
+%attr(755,root,root) %{_sbindir}/vgimport
+%attr(755,root,root) %{_sbindir}/vgimportclone
+%attr(755,root,root) %{_sbindir}/vgmerge
+%attr(755,root,root) %{_sbindir}/vgmknodes
+%attr(755,root,root) %{_sbindir}/vgreduce
+%attr(755,root,root) %{_sbindir}/vgremove
+%attr(755,root,root) %{_sbindir}/vgrename
+%attr(755,root,root) %{_sbindir}/vgs
+%attr(755,root,root) %{_sbindir}/vgscan
+%attr(755,root,root) %{_sbindir}/vgsplit
%{_mandir}/man5/lvm.conf.5*
%{_mandir}/man7/lvmcache.7*
%{_mandir}/man7/lvmraid.7*
%{_mandir}/man7/lvmthin.7*
%{_mandir}/man8/blkdeactivate.8*
%{_mandir}/man8/fsadm.8*
-%{_mandir}/man8/lv*.8*
-%{_mandir}/man8/pv*.8*
-%{_mandir}/man8/vg*.8*
+%{_mandir}/man8/lvchange.8*
+%{_mandir}/man8/lvconvert.8*
+%{_mandir}/man8/lvcreate.8*
+%{_mandir}/man8/lvdisplay.8*
+%{_mandir}/man8/lvextend.8*
+%{_mandir}/man8/lvm-config.8*
+%{_mandir}/man8/lvm-dumpconfig.8*
+%{_mandir}/man8/lvm-fullreport.8*
+%{_mandir}/man8/lvm-lvpoll.8*
+%{_mandir}/man8/lvm.8*
+%{_mandir}/man8/lvmconf.8*
+%{_mandir}/man8/lvmconfig.8*
+%{_mandir}/man8/lvmdiskscan.8*
+%{_mandir}/man8/lvmdump.8*
+%{_mandir}/man8/lvmsadc.8*
+%{_mandir}/man8/lvmsar.8*
+%{_mandir}/man8/lvreduce.8*
+%{_mandir}/man8/lvremove.8*
+%{_mandir}/man8/lvrename.8*
+%{_mandir}/man8/lvresize.8*
+%{_mandir}/man8/lvs.8*
+%{_mandir}/man8/lvscan.8*
+%{_mandir}/man8/pvchange.8*
+%{_mandir}/man8/pvck.8*
+%{_mandir}/man8/pvcreate.8*
+%{_mandir}/man8/pvdisplay.8*
+%{_mandir}/man8/pvmove.8*
+%{_mandir}/man8/pvremove.8*
+%{_mandir}/man8/pvresize.8*
+%{_mandir}/man8/pvs.8*
+%{_mandir}/man8/pvscan.8*
+%{_mandir}/man8/vgcfgbackup.8*
+%{_mandir}/man8/vgcfgrestore.8*
+%{_mandir}/man8/vgchange.8*
+%{_mandir}/man8/vgck.8*
+%{_mandir}/man8/vgconvert.8*
+%{_mandir}/man8/vgcreate.8*
+%{_mandir}/man8/vgdisplay.8*
+%{_mandir}/man8/vgexport.8*
+%{_mandir}/man8/vgextend.8*
+%{_mandir}/man8/vgimport.8*
+%{_mandir}/man8/vgimportclone.8*
+%{_mandir}/man8/vgmerge.8*
+%{_mandir}/man8/vgmknodes.8*
+%{_mandir}/man8/vgreduce.8*
+%{_mandir}/man8/vgremove.8*
+%{_mandir}/man8/vgrename.8*
+%{_mandir}/man8/vgs.8*
+%{_mandir}/man8/vgscan.8*
+%{_mandir}/man8/vgsplit.8*
%attr(750,root,root) %dir %{_sysconfdir}/lvm
%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/lvm/lvm.conf
%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/lvm/lvmlocal.conf
%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/lvm/profile/cache-mq.profile
%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/lvm/profile/cache-smq.profile
%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/lvm/profile/command_profile_template.profile
-%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/lvm/profile/lvmdbusd.profile
%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/lvm/profile/metadata_profile_template.profile
%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/lvm/profile/thin-generic.profile
%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/lvm/profile/thin-performance.profile
-%if %{with lvmetad}
-/lib/udev/rules.d/69-dm-lvm-metad.rules
-%endif
%dir %{_sysconfdir}/lvm/cache
%ghost %{_sysconfdir}/lvm/cache/.cache
%attr(754,root,root) /etc/rc.d/init.d/blk-availability
+%attr(754,root,root) /etc/rc.d/init.d/lvm2-monitor
+%attr(700,root,root) %dir /run/lvm
+%attr(700,root,root) %dir /var/lock/lvm
%if %{with lvmetad}
+%attr(755,root,root) %{_sbindir}/lvmetad
+/lib/udev/rules.d/69-dm-lvm-metad.rules
%attr(754,root,root) /etc/rc.d/init.d/lvm2-lvmetad
+%{_mandir}/man8/lvmetad.8*
+%endif
+%if %{with lvmlockd}
+%attr(755,root,root) %{_sbindir}/lvmlockctl
+%attr(755,root,root) %{_sbindir}/lvmlockd
+%{_mandir}/man8/lvmlockctl.8*
+%{_mandir}/man8/lvmlockd.8*
%endif
%if %{with lvmpolld}
+%attr(755,root,root) %{_sbindir}/lvmpolld
%attr(754,root,root) /etc/rc.d/init.d/lvm2-lvmpolld
+%{_mandir}/man8/lvmpolld.8*
%endif
-%attr(754,root,root) /etc/rc.d/init.d/lvm2-monitor
-%attr(700,root,root) %dir /var/lock/lvm
-%attr(700,root,root) %dir /var/run/lvm
%if %{with cluster}
%files clvmd
%{_mandir}/man8/cmirrord.8*
%endif
+%if %{with lvmdbusd}
+%files dbusd
+%defattr(644,root,root,755)
+%attr(755,root,root) %{_sbindir}/lvmdbusd
+%{py3_sitescriptdir}/lvmdbusd
+%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/lvm/profile/lvmdbusd.profile
+#%config(noreplace) %verify(not md5 mtime size) /etc/dbus-1/system.d/com.redhat.lvmdbus1.conf
+#%{_datadir}/dbus-1/system-services/com.redhat.lvmdbus1.service
+%{_mandir}/man8/lvmdbusd.8*
+%endif
+
%files resource-agents
%defattr(644,root,root,755)
%dir %{_prefix}/lib/ocf/resource.d/lvm2
%if %{with python3}
%files -n python3-lvm
%defattr(644,root,root,755)
-%attr(755,root,root) %{py3_sitedir}/lvm*.so
+%attr(755,root,root) %{py3_sitedir}/lvm.cpython-*.so
%{py3_sitedir}/lvm-%{version}_*-py*.egg-info
%endif
%attr(755,root,root) %{_sbindir}/dmeventd
%attr(755,root,root) %{_sbindir}/dmsetup
%attr(755,root,root) %{_sbindir}/dmstats
+%attr(755,root,root) %{_libdir}/libdevmapper-event-lvm2mirror.so
+%attr(755,root,root) %{_libdir}/libdevmapper-event-lvm2raid.so
+%attr(755,root,root) %{_libdir}/libdevmapper-event-lvm2snapshot.so
+%attr(755,root,root) %{_libdir}/libdevmapper-event-lvm2thin.so
%dir %{_libdir}/device-mapper
-%attr(755,root,root) %{_libdir}/device-mapper/*.so
-%attr(755,root,root) %{_libdir}/libdevmapper-event-*.so
+%attr(755,root,root) %{_libdir}/device-mapper/libdevmapper-event-lvm2mirror.so
+%attr(755,root,root) %{_libdir}/device-mapper/libdevmapper-event-lvm2raid.so
+%attr(755,root,root) %{_libdir}/device-mapper/libdevmapper-event-lvm2snapshot.so
+%attr(755,root,root) %{_libdir}/device-mapper/libdevmapper-event-lvm2thin.so
%{_mandir}/man8/dmsetup.8*
%{_mandir}/man8/dmstats.8*
%{_mandir}/man8/dmeventd.8*
%defattr(644,root,root,755)
%attr(755,root,root) %{_libdir}/libdevmapper.so
%attr(755,root,root) %{_libdir}/libdevmapper-event.so
+%attr(755,root,root) %{_libdir}/libdevmapper-event-lvm2.so
%attr(755,root,root) %{_libdir}/liblvm2app.so
%attr(755,root,root) %{_libdir}/liblvm2cmd.so
%{_includedir}/libdevmapper.h