From 2a379f1396ef5196891259c3a3ec464ba5ff4e9e Mon Sep 17 00:00:00 2001 From: Boris Ranto Date: Tue, 14 Apr 2015 17:09:59 +0200 Subject: [PATCH] Rebase to latest upstream (0.94.1) and sync-up spec file --- ...ogle-includes-to-gperftools-includes.patch | 27 --- ...-do-not-unlock-rwlock-on-destruction.patch | 62 ------- ceph.spec | 158 ++++++++++-------- init-ceph.in-fedora.patch | 18 ++ sources | 1 + 5 files changed, 106 insertions(+), 160 deletions(-) delete mode 100644 0001-Switch-google-includes-to-gperftools-includes.patch delete mode 100644 0002-common-do-not-unlock-rwlock-on-destruction.patch create mode 100644 init-ceph.in-fedora.patch diff --git a/0001-Switch-google-includes-to-gperftools-includes.patch b/0001-Switch-google-includes-to-gperftools-includes.patch deleted file mode 100644 index 58c11a3..0000000 --- a/0001-Switch-google-includes-to-gperftools-includes.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 586893408fa1c274844941c74757c3364c0f701e Mon Sep 17 00:00:00 2001 -From: Boris Ranto -Date: Wed, 4 Mar 2015 15:23:53 +0100 -Subject: [PATCH 1/2] Switch google/* includes to gperftools/* includes - ---- - src/perfglue/heap_profiler.cc | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/perfglue/heap_profiler.cc b/src/perfglue/heap_profiler.cc -index 6b079b8..cdd5ccb 100644 ---- a/src/perfglue/heap_profiler.cc -+++ b/src/perfglue/heap_profiler.cc -@@ -12,8 +12,8 @@ - * - */ - --#include --#include -+#include -+#include - #include "heap_profiler.h" - #include "common/environment.h" - #include "common/LogClient.h" --- -1.9.3 - diff --git a/0002-common-do-not-unlock-rwlock-on-destruction.patch b/0002-common-do-not-unlock-rwlock-on-destruction.patch deleted file mode 100644 index 6649658..0000000 --- a/0002-common-do-not-unlock-rwlock-on-destruction.patch +++ /dev/null @@ -1,62 +0,0 @@ -From e77a5347aaeeb219512f77ae7a517906a51aca29 Mon Sep 17 00:00:00 2001 -From: Federico Simoncelli -Date: Sat, 15 Nov 2014 14:14:04 +0000 -Subject: [PATCH 2/2] common: do not unlock rwlock on destruction - -According to pthread_rwlock_unlock(3p): - - Results are undefined if the read-write lock rwlock is not held - by the calling thread. - -and: - - https://sourceware.org/bugzilla/show_bug.cgi?id=17561 - - Calling pthread_rwlock_unlock on an rwlock which is not locked - is undefined. - -calling pthread_rwlock_unlock on RWLock destruction could cause -an unknown behavior for two reasons: - -- the lock is acquired by another thread (undefined) -- the lock is not acquired (undefined) - -Moreover since glibc-2.20 calling pthread_rwlock_unlock on a -rwlock that is not locked results in a SIGILL that kills the -application. - -This patch removes the pthread_rwlock_unlock call on destruction -and replaces it with an assertion to check that the RWLock is -not in use. - -Any code that relied on the implicit release is now going to -break the assertion, e.g.: - - { - RWLock l; - l.get(for_write); - } // implicit release, wrong. - -Signed-off-by: Federico Simoncelli ---- - src/common/RWLock.h | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/src/common/RWLock.h b/src/common/RWLock.h -index e647e17..6f0ab8e 100644 ---- a/src/common/RWLock.h -+++ b/src/common/RWLock.h -@@ -46,7 +46,9 @@ public: - return (nwlock.read() > 0); - } - virtual ~RWLock() { -- pthread_rwlock_unlock(&L); -+ // The following check is racy but we are about to destroy -+ // the object and we assume that there are no other users. -+ assert(!is_locked()); - pthread_rwlock_destroy(&L); - } - --- -1.9.3 - diff --git a/ceph.spec b/ceph.spec index daabee3..eca6cd7 100644 --- a/ceph.spec +++ b/ceph.spec @@ -11,16 +11,17 @@ # common ################################################################################# Name: ceph -Version: 0.87.1 -Release: 3%{?dist} +Version: 0.94.1 +Release: 1%{?dist} Epoch: 1 Summary: User space components of the Ceph file system License: GPLv2 Group: System Environment/Base URL: http://ceph.com/ Source0: http://ceph.com/download/%{name}-%{version}.tar.bz2 -Patch1: 0001-Switch-google-includes-to-gperftools-includes.patch -Patch2: 0002-common-do-not-unlock-rwlock-on-destruction.patch +%if 0%{?fedora} || 0%{?centos} || 0%{?rhel} +Patch0: init-ceph.in-fedora.patch +%endif Requires: librbd1 = %{epoch}:%{version}-%{release} Requires: librados2 = %{epoch}:%{version}-%{release} Requires: libcephfs1 = %{epoch}:%{version}-%{release} @@ -31,42 +32,41 @@ Requires: python-cephfs = %{epoch}:%{version}-%{release} Requires: python Requires: python-argparse Requires: python-requests -# For ceph-rest-api Requires: python-flask -%if ! ( 0%{?rhel} && 0%{?rhel} <= 6 ) Requires: xfsprogs -%endif -Requires: cryptsetup Requires: parted Requires: util-linux -%ifnarch s390 s390x Requires: hdparm -%endif -# For initscript -Requires: redhat-lsb-core +Requires: cryptsetup Requires(post): binutils -BuildRequires: make BuildRequires: gcc-c++ -BuildRequires: libtool BuildRequires: boost-devel -BuildRequires: bzip2-devel -BuildRequires: libedit-devel -BuildRequires: perl +BuildRequires: bzip2-devel +BuildRequires: cryptsetup BuildRequires: gdbm -BuildRequires: pkgconfig -BuildRequires: python -BuildRequires: python-nose -BuildRequires: python-argparse +BuildRequires: hdparm BuildRequires: libaio-devel BuildRequires: libcurl-devel +BuildRequires: libedit-devel BuildRequires: libxml2-devel BuildRequires: libuuid-devel BuildRequires: libblkid-devel >= 2.17 BuildRequires: libudev-devel +BuildRequires: libtool BuildRequires: leveldb-devel > 1.2 -%if ! ( 0%{?rhel} && 0%{?rhel} <= 6 ) +BuildRequires: make +BuildRequires: perl +BuildRequires: parted +BuildRequires: pkgconfig +BuildRequires: python +BuildRequires: python-argparse +BuildRequires: python-nose +BuildRequires: python-requests +BuildRequires: python-virtualenv +BuildRequires: util-linux +BuildRequires: xfsprogs BuildRequires: xfsprogs-devel -%endif +BuildRequires: xmlstarlet BuildRequires: yasm %if 0%{?rhel} || 0%{?centos} || 0%{?fedora} BuildRequires: snappy-devel @@ -75,7 +75,7 @@ BuildRequires: snappy-devel ################################################################################# # specific ################################################################################# -%if ! 0%{?rhel} +%if ! 0%{?rhel} || 0%{?fedora} BuildRequires: sharutils %endif @@ -102,10 +102,8 @@ Requires: gdisk Requires(post): chkconfig Requires(preun):chkconfig Requires(preun):initscripts -%ifnarch ppc ppc64 s390 s390x BuildRequires: gperftools-devel %endif -%endif %description Ceph is a massively scalable, open-source, distributed @@ -127,7 +125,7 @@ Requires: python-cephfs = %{epoch}:%{version}-%{release} Requires: python-requests Requires: redhat-lsb-core %description -n ceph-common -common utilities to mount and interact with a ceph storage cluster +Common utilities to mount and interact with a ceph storage cluster. %package fuse Summary: Ceph fuse-based client @@ -161,8 +159,8 @@ BuildRequires: expat-devel BuildRequires: fcgi-devel %endif %description radosgw -radosgw is an S3 HTTP REST gateway for the RADOS object store. It is -implemented as a FastCGI module using libfcgi, and can be used in +This package is an S3 HTTP REST gateway for the RADOS object store. It +is implemented as a FastCGI module using libfcgi, and can be used in conjunction with any FastCGI capable web server. %if %{with ocf} @@ -196,7 +194,7 @@ Summary: RADOS headers Group: Development/Libraries License: LGPL-2.0 Requires: librados2 = %{epoch}:%{version}-%{release} -Obsoletes: ceph-devel < 1:0.80.6-1 +Obsoletes: ceph-devel < %{epoch}:%{version}-%{release} %description -n librados2-devel This package contains libraries and headers needed to develop programs that use RADOS object store. @@ -206,7 +204,7 @@ Summary: Python libraries for the RADOS object store Group: System Environment/Libraries License: LGPL-2.0 Requires: librados2 = %{epoch}:%{version}-%{release} -Obsoletes: python-ceph < 1:0.80.6-1 +Obsoletes: python-ceph < %{epoch}:%{version}-%{release} %if 0%{defined suse_version} %py_requires %endif @@ -230,6 +228,7 @@ Group: Development/Libraries License: LGPL-2.0 Requires: libradosstriper1 = %{epoch}:%{version}-%{release} Requires: librados2-devel = %{epoch}:%{version}-%{release} +Obsoletes: ceph-devel < %{epoch}:%{version}-%{release} %description -n libradosstriper1-devel This package contains libraries and headers needed to develop programs that use RADOS striping interface. @@ -254,7 +253,7 @@ Group: Development/Libraries License: LGPL-2.0 Requires: librbd1 = %{epoch}:%{version}-%{release} Requires: librados2-devel = %{epoch}:%{version}-%{release} -Obsoletes: ceph-devel < 1:0.80.6-1 +Obsoletes: ceph-devel < %{epoch}:%{version}-%{release} %description -n librbd1-devel This package contains libraries and headers needed to develop programs that use RADOS block device. @@ -265,7 +264,7 @@ Group: System Environment/Libraries License: LGPL-2.0 Requires: librbd1 = %{epoch}:%{version}-%{release} Requires: python-rados = %{epoch}:%{version}-%{release} -Obsoletes: python-ceph < 1:0.80.6-1 +Obsoletes: python-ceph < %{epoch}:%{version}-%{release} %description -n python-rbd This package contains Python libraries for interacting with Cephs RADOS block device. @@ -290,7 +289,7 @@ Group: Development/Libraries License: LGPL-2.0 Requires: libcephfs1 = %{epoch}:%{version}-%{release} Requires: librados2-devel = %{epoch}:%{version}-%{release} -Obsoletes: ceph-devel < 1:0.80.6-1 +Obsoletes: ceph-devel < %{epoch}:%{version}-%{release} %description -n libcephfs1-devel This package contains libraries and headers needed to develop programs that use Cephs distributed file system. @@ -301,7 +300,7 @@ Group: System Environment/Libraries License: LGPL-2.0 Requires: libcephfs1 = %{epoch}:%{version}-%{release} Requires: python-rados = %{epoch}:%{version}-%{release} -Obsoletes: python-ceph < 1:0.80.6-1 +Obsoletes: python-ceph < %{epoch}:%{version}-%{release} %description -n python-cephfs This package contains Python libraries for interacting with Cephs distributed file system. @@ -318,9 +317,11 @@ RESTful bencher that can be used to benchmark radosgw performance. Summary: Ceph benchmarks and test tools Group: System Environment/Libraries License: LGPL-2.0 -Requires: librados2 = %{epoch}:%{version}-%{release} -Requires: librbd1 = %{epoch}:%{version}-%{release} -Requires: libcephfs1 = %{epoch}:%{version}-%{release} +Requires: ceph-common = %{epoch}:%{version}-%{release} +%if (0%{?fedora} >= 20 || 0%{?rhel} == 6) +BuildRequires: lttng-ust-devel +BuildRequires: libbabeltrace-devel +%endif %description -n ceph-test This package contains Ceph benchmarks and test tools. @@ -341,6 +342,7 @@ Group: System Environment/Libraries License: LGPL-2.0 Requires: java Requires: libcephfs_jni1 = %{epoch}:%{version}-%{release} +Obsoletes: ceph-devel < %{epoch}:%{version}-%{release} %description -n libcephfs_jni1-devel This package contains the development files for CephFS Java Native Interface library. @@ -352,6 +354,13 @@ License: LGPL-2.0 Requires: java Requires: libcephfs_jni1 = %{epoch}:%{version}-%{release} BuildRequires: java-devel +%if 0%{?el6} +Requires: junit4 +BuildRequires: junit4 +%else +Requires: junit +BuildRequires: junit +%endif %description -n cephfs-java This package contains the Java libraries for the Ceph File System. @@ -361,16 +370,16 @@ Group: System Environment/Libraries License: LGPL-2.0 Obsoletes: ceph-libs Requires: librados2 = %{epoch}:%{version}-%{release} -Requires: libradosstriper1 = %{epoch}:%{version}-%{release} Requires: librbd1 = %{epoch}:%{version}-%{release} Requires: libcephfs1 = %{epoch}:%{version}-%{release} Provides: ceph-libs + %description libs-compat This is a meta package, that pulls in librados2, librbd1 and libcephfs1. It is included for backwards compatibility with distributions that depend on the former ceph-libs package, which is now split up into these three subpackages. Packages still depending on ceph-libs should be fixed to depend on librados2, -librbd1, libcephfs1 or libradosstriper1 instead. +librbd1 or libcephfs1 instead. %package devel-compat Summary: Compatibility package for Ceph headers @@ -414,8 +423,9 @@ python-cephfs instead. ################################################################################# %prep %setup -q -%patch1 -p1 -%patch2 -p1 +%if 0%{?fedora} || 0%{?rhel} || 0%{?centos} +%patch0 -p1 -b .init +%endif %build # Find jni.h @@ -424,26 +434,12 @@ for i in /usr/{lib64,lib}/jvm/java/include{,/linux}; do done ./autogen.sh - -%if ( 0%{?rhel} && 0%{?rhel} <= 6) -MY_CONF_OPT="--without-libxfs" -%else MY_CONF_OPT="" -%endif MY_CONF_OPT="$MY_CONF_OPT --with-radosgw" -# No gperftools on these architectures -%ifarch ppc ppc64 s390 s390x -MY_CONF_OPT="$MY_CONF_OPT --without-tcmalloc" -%endif - export RPM_OPT_FLAGS=`echo $RPM_OPT_FLAGS | sed -e 's/i386/i486/'` -%ifarch armv5tel -# libatomic_ops does not have correct asm for ARMv5tel -EXTRA_CFLAGS="-DAO_USE_PTHREAD_DEFS" -%endif %ifarch %{arm} # libatomic_ops seems to fallback on some pthread implementation on ARM EXTRA_LDFLAGS="-lpthread" @@ -459,6 +455,7 @@ EXTRA_LDFLAGS="-lpthread" --with-rest-bench \ --with-debug \ --enable-cephfs-java \ + --with-librocksdb-static=check \ $MY_CONF_OPT \ %{?_with_ocf} \ CFLAGS="$RPM_OPT_FLAGS $EXTRA_CFLAGS" \ @@ -480,8 +477,10 @@ make %{_smp_mflags} make DESTDIR=$RPM_BUILD_ROOT install find $RPM_BUILD_ROOT -type f -name "*.la" -exec rm -f {} ';' find $RPM_BUILD_ROOT -type f -name "*.a" -exec rm -f {} ';' +%if ! (0%{?fedora} == 20 || 0%{?rhel} == 6) # do not package man page for binary that is not built rm -f $RPM_BUILD_ROOT%{_mandir}/man8/rbd-replay-prep.8* +%endif install -D src/init-ceph $RPM_BUILD_ROOT%{_initrddir}/ceph install -D src/init-radosgw.sysv $RPM_BUILD_ROOT%{_initrddir}/ceph-radosgw install -D src/init-rbdmap $RPM_BUILD_ROOT%{_initrddir}/rbdmap @@ -577,13 +576,12 @@ fi %{_bindir}/ceph-mon %{_bindir}/ceph-mds %{_bindir}/ceph-osd -%{_bindir}/ceph-rbdnamer %{_bindir}/librados-config %{_bindir}/ceph-client-debug %{_bindir}/cephfs-journal-tool +%{_bindir}/cephfs-table-tool %{_bindir}/ceph-debugpack %{_bindir}/ceph-coverage -%{_bindir}/ceph_mon_store_converter %{_initrddir}/ceph %{_sbindir}/ceph-disk %{_sbindir}/ceph-disk-activate @@ -622,7 +620,8 @@ fi %endif %config %{_sysconfdir}/bash_completion.d/ceph %config(noreplace) %{_sysconfdir}/logrotate.d/ceph -%config(noreplace) %{_sysconfdir}/logrotate.d/radosgw +%{_mandir}/man8/ceph-deploy.8* +%{_mandir}/man8/ceph-disk.8* %{_mandir}/man8/ceph-mon.8* %{_mandir}/man8/ceph-mds.8* %{_mandir}/man8/ceph-osd.8* @@ -633,10 +632,9 @@ fi %{_mandir}/man8/monmaptool.8* %{_mandir}/man8/cephfs.8* %{_mandir}/man8/mount.ceph.8* -%{_mandir}/man8/ceph-rbdnamer.8* %{_mandir}/man8/ceph-debugpack.8* -%{_mandir}/man8/ceph-clsinfo.8.gz -%{_mandir}/man8/librados-config.8.gz +%{_mandir}/man8/ceph-clsinfo.8* +%{_mandir}/man8/librados-config.8* #set up placeholder directories %dir %{_localstatedir}/lib/ceph/ %dir %{_localstatedir}/lib/ceph/tmp @@ -654,6 +652,7 @@ fi %{_bindir}/ceph-authtool %{_bindir}/ceph-conf %{_bindir}/ceph-dencoder +%{_bindir}/ceph-rbdnamer %{_bindir}/ceph-syn %{_bindir}/ceph-crush-location %{_bindir}/rados @@ -663,6 +662,7 @@ fi %{_mandir}/man8/ceph-authtool.8* %{_mandir}/man8/ceph-conf.8* %{_mandir}/man8/ceph-dencoder.8* +%{_mandir}/man8/ceph-rbdnamer.8* %{_mandir}/man8/ceph-syn.8* %{_mandir}/man8/ceph-post-file.8* %{_mandir}/man8/ceph.8* @@ -678,6 +678,11 @@ fi %config(noreplace) %{_sysconfdir}/ceph/rbdmap %{_initrddir}/rbdmap %{python_sitelib}/ceph_argparse.py* +%if 0%{?rhel} >= 7 || 0%{?fedora} +/usr/lib/udev/rules.d/50-rbd.rules +%else +/lib/udev/rules.d/50-rbd.rules +%endif %postun -n ceph-common # Package removal cleanup @@ -711,6 +716,7 @@ fi %{_mandir}/man8/radosgw.8* %{_mandir}/man8/radosgw-admin.8* %{_sbindir}/rcceph-radosgw +%config(noreplace) %{_sysconfdir}/logrotate.d/radosgw %config %{_sysconfdir}/bash_completion.d/radosgw-admin %dir %{_localstatedir}/log/radosgw/ @@ -800,11 +806,6 @@ fi %files -n librbd1 %defattr(-,root,root,-) %{_libdir}/librbd.so.* -%if 0%{?rhel} >= 7 || 0%{?fedora} -/usr/lib/udev/rules.d/50-rbd.rules -%else -/lib/udev/rules.d/50-rbd.rules -%endif %post -n librbd1 /sbin/ldconfig @@ -865,7 +866,6 @@ ln -sf %{_libdir}/librbd.so.1 /usr/lib64/qemu/librbd.so.1 %files -n ceph-test %defattr(-,root,root,-) %{_bindir}/ceph_bench_log -%{_bindir}/ceph_dupstore %{_bindir}/ceph_kvstorebench %{_bindir}/ceph_multi_stress_watch %{_bindir}/ceph_erasure_code @@ -881,7 +881,7 @@ ln -sf %{_libdir}/librbd.so.1 /usr/lib64/qemu/librbd.so.1 %{_bindir}/ceph_smalliobenchdumb %{_bindir}/ceph_smalliobenchfs %{_bindir}/ceph_smalliobenchrbd -%{_bindir}/ceph_objectstore_tool +%{_bindir}/ceph-objectstore-tool %{_bindir}/ceph_streamtest %{_bindir}/ceph_test_* %{_bindir}/ceph_tpbench @@ -890,33 +890,49 @@ ln -sf %{_libdir}/librbd.so.1 /usr/lib64/qemu/librbd.so.1 %{_bindir}/ceph-osdomap-tool %{_bindir}/ceph-kvstore-tool %{_mandir}/man8/rbd-replay.8* +%{_mandir}/man8/rbd-replay-many.8* %{_bindir}/rbd-replay +%{_bindir}/rbd-replay-many %if (0%{?fedora} == 20 || 0%{?rhel} == 6) %{_mandir}/man8/rbd-replay-prep.8* %{_bindir}/rbd-replay-prep %endif +################################################################################# %files -n libcephfs_jni1 %defattr(-,root,root,-) %{_libdir}/libcephfs_jni.so.* +################################################################################# %files -n libcephfs_jni1-devel %defattr(-,root,root,-) %{_libdir}/libcephfs_jni.so +################################################################################# %files -n cephfs-java %defattr(-,root,root,-) %{_javadir}/libcephfs.jar +%{_javadir}/libcephfs-test.jar -# We need an empty %files list for ceph-libs-compat, ceph-devel-compat and -# python-ceph-compat to tell rpmbuild to actually build these meta packages. +################################################################################# %files libs-compat +# We need an empty %%files list for ceph-libs-compat, to tell rpmbuild to actually +# build this meta package. +################################################################################# %files devel-compat +# We need an empty %%files list for ceph-devel-compat, to tell rpmbuild to +# actually build this meta package. +################################################################################# %files -n python-ceph-compat +# We need an empty %%files list for python-ceph-compat, to tell rpmbuild to +# actually build this meta package. %changelog +* Tue Apr 14 2015 Boris Ranto - 1:0.94.1-1 +- Rebase to latest upstream version and sync-up the spec file + * Wed Apr 01 2015 Ken Dreyer - 1:0.87.1-3 - add version numbers to Obsoletes (RHBZ #1193182) diff --git a/init-ceph.in-fedora.patch b/init-ceph.in-fedora.patch new file mode 100644 index 0000000..ff741f3 --- /dev/null +++ b/init-ceph.in-fedora.patch @@ -0,0 +1,18 @@ +diff -up ceph-0.46/src/init-ceph.in.orig ceph-0.46/src/init-ceph.in +--- ceph-0.46/src/init-ceph.in.orig 2012-04-24 16:06:39.000000000 -0400 ++++ ceph-0.46/src/init-ceph.in 2012-05-09 16:41:36.500004052 -0400 +@@ -1,11 +1,11 @@ + #!/bin/sh + # Start/stop ceph daemons +-# chkconfig: 2345 60 80 ++# chkconfig: - 60 80 + + ### BEGIN INIT INFO + # Provides: ceph +-# Default-Start: 2 3 4 5 +-# Default-Stop: 0 1 6 ++# Default-Start: ++# Default-Stop: + # Required-Start: $remote_fs $named $network $time + # Required-Stop: $remote_fs $named $network $time + # Short-Description: Start Ceph distributed file system daemons at boot time diff --git a/sources b/sources index 48ce6ff..96aeb43 100644 --- a/sources +++ b/sources @@ -1 +1,2 @@ 00d910ac57529be846e31a04bc4ab84e ceph-0.87.1.tar.bz2 +e4a625aa2c91fe5d3f0c62faa4716ca2 ceph-0.94.1.tar.bz2