# TODO
# - vgscan --ignorelocking failure creates /var/lock/lvm (even if /var is not yet mounted)
-# - Installed (but unpackaged) file(s) found:
-# /etc/rc.d/init.d/clvmd
# - --with-replicators (=internal/shared/none, default is none)?
-# - OCF agents?
#
# Conditional build:
-%bcond_without initrd # don't build initrd version
+%bcond_with initrd # don't 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
-%bcond_without clvmd # don't build clvmd
-%bcond_with clvmd3 # build clvmd for 3rd generation of cluster
-%bcond_with openais # enable corosync&openais managers and cmirrord
-%bcond_with lvmetad # enable lvmetad
+%bcond_without cluster # disable all cluster support (clvmd&cmirrord)
+%bcond_without lvmetad # disable lvmetad
%bcond_without selinux # disable SELinux
%ifarch sparc64 sparc
%define with_glibc 1
%endif
-%if %{with clvmd3}
-%undefine with_clvmd
-%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.95
-Release: 9
-License: GPL v2
+Version: 2.02.104
+Release: 2
+License: GPL v2 and LGPL v2.1
Group: Applications/System
Source0: ftp://sources.redhat.com/pub/lvm2/LVM2.%{version}.tgz
-# Source0-md5: bd470a802046c807603618a443732ea7
+# Source0-md5: 3d82cdb63259b4386c0cc308b4e1f221
Source1: %{name}-tmpfiles.conf
+Source2: clvmd.service
+Source3: clvmd.sysconfig
Patch0: %{name}-selinux.patch
Patch1: %{name}-diet.patch
Patch2: device-mapper-dmsetup-export.patch
-Patch3: %{name}-clvmd_init.patch
+Patch3: %{name}-pld_init.patch
Patch4: dl-dlsym.patch
-Patch5: pldize_lvm2_monitor.patch
-Patch6: %{name}-wrapper.patch
-Patch7: udev-deprecated.patch
+Patch5: %{name}-wrapper.patch
+Patch6: %{name}-lvm_path.patch
+Patch7: %{name}-sd_notify.patch
+Patch8: %{name}-clvmd_cmd_timeout.patch
+Patch9: device-mapper-dmsetup-deps-export.patch
URL: http://sources.redhat.com/lvm2/
BuildRequires: autoconf >= 2.61
BuildRequires: automake
BuildRequires: pkgconfig
BuildRequires: readline-devel
BuildRequires: rpmbuild(macros) >= 1.647
-BuildRequires: udev-devel >= 143
+BuildRequires: udev-devel >= 1:143
%if %{with initrd}
%if %{with dietlibc}
BuildRequires: dietlibc-static >= 2:0.32-7
%{?with_glibc:BuildRequires: glibc-static}
%{?with_uClibc:BuildRequires: uClibc-static >= 2:0.9.29}
%endif
-%if %{with clvmd}
-BuildRequires: cman-devel >= 1.0
-BuildRequires: dlm-devel >= 1.0-0.pre21.2
-%endif
-%if %{with clvmd3}
-BuildRequires: cluster-cman-devel
-BuildRequires: cluster-dlm-devel
-%endif
-%if %{with openais}
+%if %{with cluster}
BuildRequires: corosync-devel
-BuildRequires: openais-devel >= 1.0
+BuildRequires: dlm-devel >= 3.99.5
+BuildRequires: systemd-devel
%endif
Requires(post,preun,postun): systemd-units >= 38
+Requires(post,postun): /sbin/chkconfig
Requires: device-mapper >= %{version}-%{release}
-%if %{with clvmd}
-Requires: cman-libs >= 1.0
-Requires: dlm >= 1.0-0.pre21.2
-%endif
-%if %{with clvmd3}
-Requires: cluster-cman-libs
-Requires: cluster-dlm
-%endif
%{?with_selinux:Requires: libselinux >= 1.10}
Requires: systemd-units >= 38
# doesn't work with 2.4 kernels
# borken on AC
%define filterout_ld -Wl,--as-needed
+# causes: undefined reference to `__stack_chk_fail_local'
+%define filterout_c -fstack-protector
+
# for some reason known only to rpm there must be "\\|" not "\|" here
%define dietarch %(echo %{_target_cpu} | sed -e 's/i.86\\|pentium.\\|athlon/i386/;s/amd64/x86_64/;s/armv.*/arm/')
%define dietlibdir %{_prefix}/lib/dietlibc/lib-%{dietarch}
logicznych wolumenów dyskowych (LVM2) - statycznie skonsolidowane na
potrzeby initrd.
+%package clvmd
+Summary: Cluster LVM daemon
+Summary(pl.UTF-8): Demon clustra LVM
+Group: Applications/System
+Requires: %{name} = %{version}-%{release}
+
+%description clvmd
+clvmd is the daemon that distributes LVM metadata updates around a
+cluster. It must be running on all nodes in the cluster and will give
+an error if a node in the cluster does not have this daemon running.
+
+%description clvmd -l pl.UTF-8
+clvmd to demon który rozprowadza zmiany meta-danych LVM po klastrze.
+Mysi działać na wszystkich węzłach klastra i zgłosi błąd gdy jakiś
+węzeł w klastrze nie ma tego demona uruchomionego.
+
+%package cmirrord
+Summary: Cluster mirror log daemon
+Group: Applications/System
+Requires: %{name} = %{version}-%{release}
+
+%description cmirrord
+cmirrord is the daemon that tracks mirror log information in a
+cluster. It is specific to device-mapper based mirrors (and by
+extension, LVM cluster mirrors). Cluster mirrors are not possible
+without this daemon running.
+
+This daemon relies on the cluster infrastructure provided by the
+Cluster MANager (CMAN), which must be set up and running in order for
+cmirrord to function.
+
+%package resource-agents
+Summary: OCF Resource Agents for LVM2 processes
+Summary(pl.UTF-8): Agenci OCF do monitorowania procesów LVM2
+Group: Applications/System
+Requires: %{name} = %{version}-%{release}
+Requires: resource-agents
+
+%description resource-agents
+OCF Resource Agents for LVM2 processes.
+
+%description resource-agents -l pl.UTF-8
+Agenci OCF do monitorowania procesów LVM2.
+
%package -n device-mapper
Summary: Userspace support for the device-mapper
Summary(pl.UTF-8): Wsparcie dla mapowania urządzeń w przestrzeni użytkownika
Group: Base
-Requires(post,preun,postun): systemd-units >= 38
+Requires(post,postun): /sbin/ldconfig
Requires: systemd-units >= 38
%description -n device-mapper
%patch5 -p1
%patch6 -p1
%patch7 -p1
+%patch8 -p1
+%patch9 -p1
# do not force --export-symbol linker option for e.g. statically linked executables
# -rdynamic compiler option drives linker in the right way.
ac_cv_lib_dl_dlopen=no \
%{?with_uClibc:ac_cv_func_siginterrupt=no} \
%{?debug:--enable-debug} \
- --with-optimisation="%{rpmcflags} -Os" \
+ --disable-nls \
+ --disable-readline \
+ --enable-selinux%{!?with_glibc:=no} \
--enable-static_link \
--with-lvm1=internal \
- --disable-selinux \
- --%{?with_glibc:en}%{!?with_glibc:dis}able-selinux \
- --disable-readline \
- --disable-nls
+ --with-optimisation="%{rpmcflags} -Os"
# glibc version links with normal static libdevicemapper which has selinux enabled
# and we need to keep these in sync between device-mapper and lvm2
%{__make} -j1 -C include
%{__make} -j1 -C lib LIB_SHARED= VERSIONED_SHLIB=
%{__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
%endif
%configure \
- --with-usrlibdir=%{_libdir} \
- %{?debug:--enable-debug} \
- --with-optimisation="%{rpmcflags}" \
- --enable-readline \
- --enable-fsadm \
--enable-applib \
--enable-cmdlib \
- %{?with_lvmetad:--enable-lvmetad} \
- %{?with_openais:--enable-cmirrord} \
+ %{?debug:--enable-debug} \
--enable-dmeventd \
- --with-dmeventd-path=%{_sbindir}/dmeventd \
+ --enable-fsadm \
+ %{?with_lvmetad:--enable-lvmetad} \
+ --enable-ocf \
+ --enable-readline \
+ %{!?with_selinux:--disable-selinux} \
--enable-pkgconfig \
--enable-udev_sync \
--enable-udev_rules \
- %{?with_clvmd:--with-clvmd=cman%{?with_openais:,corosync,openais}} \
+ --with-cluster=internal \
+%if %{with cluster}
+ --with-clvmd=corosync \
+ --enable-cmirrord \
+%endif
+ --with-dmeventd-path=%{_sbindir}/dmeventd \
+ --with-interface=ioctl \
--with-lvm1=internal \
+ --with-mirrors=internal \
+ --with-optimisation="%{rpmcflags}" \
--with-pool=internal \
- --with-cluster=internal \
--with-snapshots=internal \
- --with-mirrors=internal \
+ --with-systemdsystemunitdir=%{systemdunitdir} \
--with-thin=internal \
- --with-interface=ioctl \
+ --with-thin-check=%{_sbindir}/thin_check \
+ --with-thin-dump=%{_sbindir}/thin_dump \
+ --with-thin-repair=%{_sbindir}/thin_repair \
--with-udev-prefix=/ \
- --with-systemd_dir=%{systemdunitdir} \
- %{!?with_selinux:--disable-selinux}
+ --with-usrlibdir=%{_libdir}
%{__make} -j1
%{__make} -j1 -C libdm LIB_STATIC=libdevmapper.a
%install
rm -rf $RPM_BUILD_ROOT
-install -d $RPM_BUILD_ROOT{/%{_lib},%{_sysconfdir}/lvm}
+install -d $RPM_BUILD_ROOT{/%{_lib},%{_sysconfdir}/lvm,/etc/sysconfig}
%{?with_dietlibc:install -d $RPM_BUILD_ROOT%{dietlibdir}}
%{__make} install install_system_dirs install_systemd_units install_initscripts \
OWNER="" \
GROUP=""
-mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/tmpfiles.d
-install -m 0644 %{SOURCE1} $RPM_BUILD_ROOT%{_sysconfdir}/tmpfiles.d/%{name}.conf
+install -d $RPM_BUILD_ROOT%{_sysconfdir}/tmpfiles.d
+install %{SOURCE1} $RPM_BUILD_ROOT%{_sysconfdir}/tmpfiles.d/%{name}.conf
+
+%if %{with cluster}
+install %{SOURCE2} $RPM_BUILD_ROOT%{systemdunitdir}/clvmd.service
+install %{SOURCE3} $RPM_BUILD_ROOT/etc/sysconfig/clvmd
+%endif
mv $RPM_BUILD_ROOT%{_libdir}/lib*.so.* $RPM_BUILD_ROOT/%{_lib}
for lib in $RPM_BUILD_ROOT/%{_lib}/lib*.so.*; do
/sbin/chkconfig --add lvm2-monitor
%service lvm2-monitor restart
%systemd_post lvm2-monitor.service
+/sbin/chkconfig --add blk-availability
+# no service blk-availability restart
+%systemd_post blk-availability.service
%preun
%systemd_preun lvm2-monitor.service
+%systemd_preun blk-availability.service
%postun
if [ "$1" = "0" ]; then
%service lvm2-monitor stop
/sbin/chkconfig --del lvm2-monitor
+ #no service blk-availability stop
+ /sbin/chkconfig --del blk-availability
fi
%systemd_reload
%triggerpostun -n device-mapper -- device-mapper < 2.02.94-1
%systemd_trigger dm-event.socket
+%post clvmd
+/sbin/chkconfig --add clvmd
+# no service restart - it breaks current locks!
+export NORESTART=1
+%systemd_post clvmd.service
+# re-exec instead
+/usr/sbin/clvmd -S 2>/dev/null || :
+
+%preun clvmd
+%systemd_preun clvmd.service
+
+%postun clvmd
+if [ "$1" = "0" ]; then
+ %service clvmd stop
+ /sbin/chkconfig --del clvmd
+fi
+%systemd_reload
+
%files
%defattr(644,root,root,755)
%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*
-%{?with_clvmd:%attr(755,root,root) %{_usrsbindir}/clvmd}
%{_mandir}/man5/lvm.conf.5*
-%{?with_clvmd:%{_mandir}/man8/clvmd.8*}
+%{_mandir}/man8/blkdeactivate.8*
%{_mandir}/man8/fsadm.8*
%{_mandir}/man8/lv*.8*
%{_mandir}/man8/pv*.8*
%{_mandir}/man8/vg*.8*
%attr(750,root,root) %dir %{_sysconfdir}/lvm
%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/lvm/lvm.conf
+%attr(750,root,root) %dir %{_sysconfdir}/lvm/profile
+%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/lvm/profile/default.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
%{_sysconfdir}/tmpfiles.d/lvm2.conf
+%{systemdunitdir}/blk-availability.service
+%if %{with lvmetad}
+%{systemdunitdir}/lvm2-lvmetad.service
+%{systemdunitdir}/lvm2-lvmetad.socket
+%endif
%{systemdunitdir}/lvm2-monitor.service
+%{systemdunitdir}/lvm2-pvscan@.service
%dir %{_sysconfdir}/lvm/cache
%ghost %{_sysconfdir}/lvm/cache/.cache
+%attr(754,root,root) /etc/rc.d/init.d/blk-availability
+%if %{with lvmetad}
+%attr(754,root,root) /etc/rc.d/init.d/lvm2-lvmetad
+%endif
%attr(754,root,root) /etc/rc.d/init.d/lvm2-monitor
-%{?with_clvmd:%attr(754,root,root) /etc/rc.d/init.d/clvmd}
+%dir %attr(700,root,root) /var/run/lvm
+
+%if %{with cluster}
+%files clvmd
+%defattr(644,root,root,755)
+%attr(755,root,root) %{_usrsbindir}/clvmd
+%attr(754,root,root) /etc/rc.d/init.d/clvmd
+%config(noreplace) %verify(not md5 mtime size) /etc/sysconfig/clvmd
+%{systemdunitdir}/clvmd.service
+%{_mandir}/man8/clvmd.8*
+
+%files cmirrord
+%defattr(644,root,root,755)
+%attr(755,root,root) %{_usrsbindir}/cmirrord
+%{_mandir}/man8/cmirrord.8*
+%attr(754,root,root) /etc/rc.d/init.d/cmirrord
+%endif
+
+%files resource-agents
+%defattr(644,root,root,755)
+%dir %{_prefix}/lib/ocf/resource.d/lvm2
+%attr(755,root,root) %{_prefix}/lib/ocf/resource.d/lvm2/VolumeGroup
%files -n device-mapper
%defattr(644,root,root,755)