ceph/ceph.spec.in
Nathan Cutler 6c803cdf42 ceph.spec.in: test %preun argument is zero for removal-only operations
The %preun section now contains logic for disabling and stopping all the
Ceph systemd units when the ceph package is removed. However, there is no
conditional around it, so the units are disabled and stopped on RPM upgrade
as well as removal.

http://tracker.ceph.com/issues/12685 Fixes: #12685

Signed-off-by: Nathan Cutler <ncutler@suse.com>
Signed-off-by: Tim Serong <tserong@suse.com>
2015-08-13 15:36:02 +02:00

1181 lines
37 KiB
RPMSpec

# vim: set noexpandtab ts=8 sw=8 :
%bcond_with ocf
%bcond_without cephfs_java
%bcond_with tests
%bcond_without tcmalloc
%bcond_without libs_compat
%bcond_without selinux
%if (0%{?el5} || (0%{?rhel_version} >= 500 && 0%{?rhel_version} <= 600))
%{!?python_sitelib: %global python_sitelib %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")}
%{!?python_sitearch: %global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")}
%endif
%if %{with selinux}
# get selinux policy version
%{!?_selinux_policy_version: %global _selinux_policy_version %(sed -e 's,.*selinux-policy-\\([^/]*\\)/.*,\\1,' /usr/share/selinux/devel/policyhelp 2>/dev/null || echo 0.0.0)}
%define relabel_files() \
restorecon -R /usr/bin/ceph-mon > /dev/null 2>&1; \
restorecon -R /usr/bin/ceph-osd > /dev/null 2>&1; \
restorecon -R /usr/bin/ceph-mds > /dev/null 2>&1; \
restorecon -R /etc/rc\.d/init\.d/ceph > /dev/null 2>&1; \
restorecon -R /var/run/ceph > /dev/null 2>&1; \
restorecon -R /var/lib/ceph > /dev/null 2>&1; \
restorecon -R /var/log/ceph > /dev/null 2>&1;
%endif
%{!?_udevrulesdir: %global _udevrulesdir /lib/udev/rules.d}
# Use systemd files on RHEL 7 and above and in SUSE/openSUSE.
# Note: We don't install unit files for the services yet. For now,
# the _with_systemd variable only implies that we'll install
# /etc/tmpfiles.d/ceph.conf in order to set up the socket directory in
# /var/run/ceph.
%if 0%{?fedora} || 0%{?rhel} >= 7 || 0%{?suse_version} > 1300
%global _with_systemd 1
%endif
Name: ceph
Version: @VERSION@
Release: @RPM_RELEASE@%{?dist}
Epoch: 1
Summary: User space components of the Ceph file system
License: GPL-2.0
Group: System Environment/Base
URL: http://ceph.com/
Source0: http://ceph.com/download/%{name}-%{version}.tar.bz2
%if 0%{?fedora} || 0%{?rhel}
Patch0: init-ceph.in-fedora.patch
%endif
#################################################################################
# dependencies that apply across all distro families
#################################################################################
Requires: librbd1 = %{epoch}:%{version}-%{release}
Requires: librados2 = %{epoch}:%{version}-%{release}
Requires: libcephfs1 = %{epoch}:%{version}-%{release}
Requires: ceph-common = %{epoch}:%{version}-%{release}
%if 0%{with selinux}
Requires: ceph-selinux = %{epoch}:%{version}-%{release}
%endif
Requires: python-rados = %{epoch}:%{version}-%{release}
Requires: python-rbd = %{epoch}:%{version}-%{release}
Requires: python-cephfs = %{epoch}:%{version}-%{release}
Requires: python
Requires: python-requests
Requires: grep
Requires: xfsprogs
Requires: logrotate
Requires: parted
Requires: util-linux
Requires: hdparm
Requires: cryptsetup
Requires: findutils
Requires: which
Requires(post): binutils
# We require this to be present for %%{_tmpfilesdir}
%if 0%{?_with_systemd}
Requires: systemd
%endif
%if 0%{with cephfs_java}
BuildRequires: sharutils
%endif
%if 0%{with selinux}
BuildRequires: checkpolicy
BuildRequires: selinux-policy-devel
BuildRequires: /usr/share/selinux/devel/policyhelp
%endif
BuildRequires: gcc-c++
BuildRequires: boost-devel
BuildRequires: cryptsetup
BuildRequires: gdbm
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
BuildRequires: make
BuildRequires: perl
BuildRequires: parted
BuildRequires: pkgconfig
BuildRequires: python
BuildRequires: python-nose
BuildRequires: python-requests
%if ( 0%{?rhel} > 0 && 0%{?rhel} < 7 ) || ( 0%{?centos} > 0 && 0%{?centos} < 7 )
BuildRequires: python-sphinx10
%endif
%if 0%{?fedora} || 0%{defined suse_version} || 0%{?rhel} >= 7 || 0%{?centos} >= 7
BuildRequires: python-sphinx
%endif
BuildRequires: python-virtualenv
BuildRequires: snappy-devel
BuildRequires: util-linux
BuildRequires: xfsprogs
BuildRequires: xfsprogs-devel
BuildRequires: xmlstarlet
BuildRequires: yasm
#################################################################################
# distro-conditional dependencies
#################################################################################
%if 0%{defined suse_version}
Requires: python-Flask
BuildRequires: net-tools
BuildRequires: libbz2-devel
%if 0%{?suse_version} > 1210
Requires: gptfdisk
%if 0%{with tcmalloc}
BuildRequires: gperftools-devel
%endif
%else
Requires: scsirastools
BuildRequires: google-perftools-devel
%endif
BuildRequires: %insserv_prereq
BuildRequires: mozilla-nss-devel
BuildRequires: keyutils-devel
BuildRequires: libatomic-ops-devel
%else
BuildRequires: bzip2-devel
BuildRequires: nss-devel
BuildRequires: keyutils-libs-devel
BuildRequires: libatomic_ops-devel
Requires: gdisk
Requires(post): chkconfig
Requires(preun): chkconfig
Requires(preun): initscripts
BuildRequires: gperftools-devel
Requires: python-flask
%endif
%description
Ceph is a massively scalable, open-source, distributed
storage system that runs on commodity hardware and delivers object,
block and file system storage.
#################################################################################
# packages
#################################################################################
%package -n ceph-common
Summary: Ceph Common
Group: System Environment/Base
Requires: librbd1 = %{epoch}:%{version}-%{release}
Requires: librados2 = %{epoch}:%{version}-%{release}
Requires: python-rados = %{epoch}:%{version}-%{release}
Requires: python-rbd = %{epoch}:%{version}-%{release}
Requires: python-cephfs = %{epoch}:%{version}-%{release}
Requires: python-requests
%if 0%{?rhel} || 0%{?fedora}
Requires: redhat-lsb-core
%endif
%if 0%{defined suse_version}
Requires: lsb-release
%endif
# python-argparse is only needed in distros with Python 2.6 or lower
%if (0%{?rhel} && 0%{?rhel} <= 6) || (0%{?suse_version} && 0%{?suse_version} <= 1110)
Requires: python-argparse
BuildRequires: python-argparse
%endif
%description -n ceph-common
Common utilities to mount and interact with a ceph storage cluster.
%package fuse
Summary: Ceph fuse-based client
Group: System Environment/Base
Requires: %{name}
BuildRequires: fuse-devel
%description fuse
FUSE based client for Ceph distributed network file system
%package -n rbd-fuse
Summary: Ceph fuse-based client
Group: System Environment/Base
Requires: %{name}
Requires: librados2 = %{epoch}:%{version}-%{release}
Requires: librbd1 = %{epoch}:%{version}-%{release}
BuildRequires: fuse-devel
%description -n rbd-fuse
FUSE based client to map Ceph rbd images to files
%package radosgw
Summary: Rados REST gateway
Group: Development/Libraries
Requires: ceph-common = %{epoch}:%{version}-%{release}
Requires: librados2 = %{epoch}:%{version}-%{release}
%if 0%{defined suse_version}
BuildRequires: libexpat-devel
BuildRequires: FastCGI-devel
%endif
%if 0%{?rhel} || 0%{?fedora}
BuildRequires: expat-devel
BuildRequires: fcgi-devel
Requires: mailcap
%endif
%description radosgw
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}
%package resource-agents
Summary: OCF-compliant resource agents for Ceph daemons
Group: System Environment/Base
License: LGPL-2.0
Requires: %{name} = %{epoch}:%{version}
Requires: resource-agents
%description resource-agents
Resource agents for monitoring and managing Ceph daemons
under Open Cluster Framework (OCF) compliant resource
managers such as Pacemaker.
%endif
%package -n librados2
Summary: RADOS distributed object store client library
Group: System Environment/Libraries
License: LGPL-2.0
%if 0%{?rhel} || 0%{?fedora}
Obsoletes: ceph-libs < %{epoch}:%{version}-%{release}
%endif
%description -n librados2
RADOS is a reliable, autonomic distributed object storage cluster
developed as part of the Ceph distributed storage system. This is a
shared library allowing applications to access the distributed object
store using a simple file-like interface.
%package -n librados2-devel
Summary: RADOS headers
Group: Development/Libraries
License: LGPL-2.0
Requires: librados2 = %{epoch}:%{version}-%{release}
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.
%package -n python-rados
Summary: Python libraries for the RADOS object store
Group: System Environment/Libraries
License: LGPL-2.0
Requires: librados2 = %{epoch}:%{version}-%{release}
Obsoletes: python-ceph < %{epoch}:%{version}-%{release}
%description -n python-rados
This package contains Python libraries for interacting with Cephs RADOS
object store.
%package -n libradosstriper1
Summary: RADOS striping interface
Group: System Environment/Libraries
License: LGPL-2.0
Requires: librados2 = %{epoch}:%{version}-%{release}
%description -n libradosstriper1
Striping interface built on top of the rados library, allowing
to stripe bigger objects onto several standard rados objects using
an interface very similar to the rados one.
%package -n libradosstriper1-devel
Summary: RADOS striping interface headers
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.
%package -n librbd1
Summary: RADOS block device client library
Group: System Environment/Libraries
License: LGPL-2.0
Requires: librados2 = %{epoch}:%{version}-%{release}
%if 0%{?rhel} || 0%{?fedora}
Obsoletes: ceph-libs < %{epoch}:%{version}-%{release}
%endif
%description -n librbd1
RBD is a block device striped across multiple distributed objects in
RADOS, a reliable, autonomic distributed object storage cluster
developed as part of the Ceph distributed storage system. This is a
shared library allowing applications to manage these block devices.
%package -n librbd1-devel
Summary: RADOS block device headers
Group: Development/Libraries
License: LGPL-2.0
Requires: librbd1 = %{epoch}:%{version}-%{release}
Requires: librados2-devel = %{epoch}:%{version}-%{release}
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.
%package -n python-rbd
Summary: Python libraries for the RADOS block device
Group: System Environment/Libraries
License: LGPL-2.0
Requires: librbd1 = %{epoch}:%{version}-%{release}
Requires: python-rados = %{epoch}:%{version}-%{release}
Obsoletes: python-ceph < %{epoch}:%{version}-%{release}
%description -n python-rbd
This package contains Python libraries for interacting with Cephs RADOS
block device.
%package -n libcephfs1
Summary: Ceph distributed file system client library
Group: System Environment/Libraries
License: LGPL-2.0
%if 0%{?rhel} || 0%{?fedora}
Obsoletes: ceph-libs < %{epoch}:%{version}-%{release}
Obsoletes: ceph-libcephfs
%endif
%description -n libcephfs1
Ceph is a distributed network file system designed to provide excellent
performance, reliability, and scalability. This is a shared library
allowing applications to access a Ceph distributed file system via a
POSIX-like interface.
%package -n libcephfs1-devel
Summary: Ceph distributed file system headers
Group: Development/Libraries
License: LGPL-2.0
Requires: libcephfs1 = %{epoch}:%{version}-%{release}
Requires: librados2-devel = %{epoch}:%{version}-%{release}
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.
%package -n python-cephfs
Summary: Python libraries for Ceph distributed file system
Group: System Environment/Libraries
License: LGPL-2.0
Requires: libcephfs1 = %{epoch}:%{version}-%{release}
Requires: python-rados = %{epoch}:%{version}-%{release}
Obsoletes: python-ceph < %{epoch}:%{version}-%{release}
%description -n python-cephfs
This package contains Python libraries for interacting with Cephs distributed
file system.
%package -n ceph-test
Summary: Ceph benchmarks and test tools
Group: System Environment/Libraries
License: LGPL-2.0
Requires: ceph-common
Requires: xmlstarlet
%if (0%{?fedora} || 0%{?rhel} == 6)
BuildRequires: lttng-ust-devel
BuildRequires: libbabeltrace-devel
%endif
%description -n ceph-test
This package contains Ceph benchmarks and test tools.
%if 0%{with cephfs_java}
%package -n libcephfs_jni1
Summary: Java Native Interface library for CephFS Java bindings
Group: System Environment/Libraries
License: LGPL-2.0
Requires: java
Requires: libcephfs1 = %{epoch}:%{version}-%{release}
BuildRequires: java-devel
%description -n libcephfs_jni1
This package contains the Java Native Interface library for CephFS Java
bindings.
%package -n libcephfs_jni1-devel
Summary: Development files for CephFS Java Native Interface library
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.
%package -n cephfs-java
Summary: Java libraries for the Ceph File System
Group: System Environment/Libraries
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.
%endif
%if 0%{with selinux}
%package selinux
Summary: SELinux support for Ceph MON, OSD and MDS
Group: System Environment/Base
Requires: %{name}
Requires: policycoreutils, libselinux-utils
Requires(post): selinux-policy >= %{_selinux_policy_version}, policycoreutils
Requires(postun): policycoreutils
%description selinux
This package contains SELinux support for Ceph MON, OSD and MDS. The package
also performs file-system relabelling which can take a long time on heavily
populated file-systems.
%endif
%if 0%{with libs_compat}
%package libs-compat
Summary: Meta package to include ceph libraries
Group: System Environment/Libraries
License: LGPL-2.0
Obsoletes: ceph-libs
Requires: librados2 = %{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 or libcephfs1 instead.
%endif
%package devel-compat
Summary: Compatibility package for Ceph headers
Group: Development/Libraries
License: LGPL-2.0
Obsoletes: ceph-devel
Requires: %{name} = %{epoch}:%{version}-%{release}
Requires: librados2-devel = %{epoch}:%{version}-%{release}
Requires: libradosstriper1-devel = %{epoch}:%{version}-%{release}
Requires: librbd1-devel = %{epoch}:%{version}-%{release}
Requires: libcephfs1-devel = %{epoch}:%{version}-%{release}
%if 0%{with cephfs_java}
Requires: libcephfs_jni1-devel = %{epoch}:%{version}-%{release}
%endif
Provides: ceph-devel
%description devel-compat
This is a compatibility package to accommodate ceph-devel split into
librados2-devel, librbd1-devel and libcephfs1-devel. Packages still depending
on ceph-devel should be fixed to depend on librados2-devel, librbd1-devel,
libcephfs1-devel or libradosstriper1-devel instead.
%package -n python-ceph-compat
Summary: Compatibility package for Cephs python libraries
Group: System Environment/Libraries
License: LGPL-2.0
Obsoletes: python-ceph
Requires: python-rados = %{epoch}:%{version}-%{release}
Requires: python-rbd = %{epoch}:%{version}-%{release}
Requires: python-cephfs = %{epoch}:%{version}-%{release}
Provides: python-ceph
%description -n python-ceph-compat
This is a compatibility package to accommodate python-ceph split into
python-rados, python-rbd and python-cephfs. Packages still depending on
python-ceph should be fixed to depend on python-rados, python-rbd or
python-cephfs instead.
%if 0%{?opensuse} || 0%{?suse_version}
%debug_package
%endif
#################################################################################
# common
#################################################################################
%prep
%setup -q
%if 0%{?fedora} || 0%{?rhel}
%patch0 -p1 -b .init
%endif
%build
%if 0%{with cephfs_java}
# Find jni.h
for i in /usr/{lib64,lib}/jvm/java/include{,/linux}; do
[ -d $i ] && java_inc="$java_inc -I$i"
done
%endif
./autogen.sh
MY_CONF_OPT=""
MY_CONF_OPT="$MY_CONF_OPT --with-radosgw"
export RPM_OPT_FLAGS=`echo $RPM_OPT_FLAGS | sed -e 's/i386/i486/'`
%{configure} CPPFLAGS="$java_inc" \
--prefix=/usr \
--localstatedir=/var \
--sysconfdir=/etc \
%if 0%{?_with_systemd}
--with-systemdsystemunitdir=%_unitdir \
%endif
--docdir=%{_docdir}/ceph \
--with-man-pages \
--mandir="%_mandir" \
--with-nss \
--without-cryptopp \
--with-debug \
%if 0%{with cephfs_java}
--enable-cephfs-java \
%endif
%if 0%{with selinux}
--with-selinux \
%endif
--with-librocksdb-static=check \
%if 0%{?rhel} || 0%{?fedora}
--with-systemd-libexec-dir=/usr/libexec/ceph \
--with-rgw-user=root \
--with-rgw-group=root \
%endif
%if 0%{?opensuse} || 0%{?suse_version}
--with-systemd-libexec-dir=/usr/lib/ceph/ \
--with-rgw-user=wwwrun \
--with-rgw-group=www \
%endif
$MY_CONF_OPT \
%{?_with_ocf} \
%{?_with_tcmalloc} \
CFLAGS="$RPM_OPT_FLAGS" CXXFLAGS="$RPM_OPT_FLAGS"
# fix bug in specific version of libedit-devel
%if 0%{defined suse_version}
sed -i -e "s/-lcurses/-lncurses/g" Makefile
sed -i -e "s/-lcurses/-lncurses/g" src/Makefile
sed -i -e "s/-lcurses/-lncurses/g" man/Makefile
sed -i -e "s/-lcurses/-lncurses/g" src/ocf/Makefile
sed -i -e "s/-lcurses/-lncurses/g" src/java/Makefile
%endif
make -j$(getconf _NPROCESSORS_ONLN)
%if 0%{with tests}
%check
# run in-tree unittests
make -j$(getconf _NPROCESSORS_ONLN) check-local
%endif
%install
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 {} ';'
install -D src/rbdmap $RPM_BUILD_ROOT%{_sysconfdir}/ceph/rbdmap
install -D src/init-rbdmap $RPM_BUILD_ROOT%{_initrddir}/rbdmap
%if 0%{?_with_systemd}
install -m 0644 -D systemd/ceph.tmpfiles.d $RPM_BUILD_ROOT%{_tmpfilesdir}/%{name}.conf
install -m 0644 -D systemd/ceph-rgw.tmpfiles.d $RPM_BUILD_ROOT%{_tmpfilesdir}/%{name}-rgw.conf
install -m 0644 -D systemd/ceph-osd@.service $RPM_BUILD_ROOT%{_unitdir}/ceph-osd@.service
install -m 0644 -D systemd/ceph-mon@.service $RPM_BUILD_ROOT%{_unitdir}/ceph-mon@.service
install -m 0644 -D systemd/ceph-create-keys@.service $RPM_BUILD_ROOT%{_unitdir}/ceph-create-keys@.service
install -m 0644 -D systemd/ceph-mds@.service $RPM_BUILD_ROOT%{_unitdir}/ceph-mds@.service
install -m 0644 -D systemd/ceph-radosgw@.service $RPM_BUILD_ROOT%{_unitdir}/ceph-radosgw@.service
install -m 0644 -D systemd/ceph.target $RPM_BUILD_ROOT%{_unitdir}/ceph.target
install -m 0644 -D systemd/ceph-disk-activate-journal@.service $RPM_BUILD_ROOT%{_unitdir}/ceph-disk-activate-journal@.service
install -m 0644 -D systemd/ceph-disk-activate@.service $RPM_BUILD_ROOT%{_unitdir}/ceph-disk-activate@.service
install -m 0644 -D systemd/ceph-disk-dmcrypt-activate@.service $RPM_BUILD_ROOT%{_unitdir}/ceph-disk-dmcrypt-activate@.service
install -m 0755 -D systemd/ceph $RPM_BUILD_ROOT%{_sbindir}/rcceph
%else
install -D src/init-ceph $RPM_BUILD_ROOT%{_initrddir}/ceph
install -D src/init-radosgw $RPM_BUILD_ROOT%{_initrddir}/ceph-radosgw
ln -sf ../../etc/init.d/ceph %{buildroot}/%{_sbindir}/rcceph
ln -sf ../../etc/init.d/ceph-radosgw %{buildroot}/%{_sbindir}/rcceph-radosgw
%endif
mkdir -p $RPM_BUILD_ROOT%{_sbindir}
install -m 0644 -D src/logrotate.conf $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/ceph
install -m 0644 -D src/rgw/logrotate.conf $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/radosgw
chmod 0644 $RPM_BUILD_ROOT%{_docdir}/ceph/sample.ceph.conf
chmod 0644 $RPM_BUILD_ROOT%{_docdir}/ceph/sample.fetch_config
# firewall templates
%if 0%{?suse_version}
install -m 0644 -D etc/sysconfig/SuSEfirewall2.d/services/ceph-mon %{buildroot}%{_sysconfdir}/sysconfig/SuSEfirewall2.d/services/ceph-mon
install -m 0644 -D etc/sysconfig/SuSEfirewall2.d/services/ceph-osd-mds %{buildroot}%{_sysconfdir}/sysconfig/SuSEfirewall2.d/services/ceph-osd-mds
%endif
# udev rules
install -m 0644 -D udev/50-rbd.rules $RPM_BUILD_ROOT%{_udevrulesdir}/50-rbd.rules
install -m 0644 -D udev/60-ceph-partuuid-workaround.rules $RPM_BUILD_ROOT%{_udevrulesdir}/60-ceph-partuuid-workaround.rules
%if (0%{?rhel} && 0%{?rhel} < 7)
install -m 0644 -D udev/95-ceph-osd-alt.rules $RPM_BUILD_ROOT/lib/udev/rules.d/95-ceph-osd.rules
%else
%if 0%{?_with_systemd}
install -m 0644 -D udev/95-ceph-osd.rules.systemd $RPM_BUILD_ROOT/lib/udev/rules.d/95-ceph-osd.rules
%else
install -m 0644 -D udev/95-ceph-osd.rules $RPM_BUILD_ROOT/lib/udev/rules.d/95-ceph-osd.rules
%endif
%endif
%if 0%{?rhel} >= 7 || 0%{?fedora} || 0%{?suse_version}
mv $RPM_BUILD_ROOT/lib/udev/rules.d/95-ceph-osd.rules $RPM_BUILD_ROOT/usr/lib/udev/rules.d/95-ceph-osd.rules
mv $RPM_BUILD_ROOT/sbin/mount.ceph $RPM_BUILD_ROOT/usr/sbin/mount.ceph
mv $RPM_BUILD_ROOT/sbin/mount.fuse.ceph $RPM_BUILD_ROOT/usr/sbin/mount.fuse.ceph
%endif
#set up placeholder directories
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/ceph
%if (! 0%{?suse_version}) || ( 0%{?suse_version} && (! 0%{?_with_systemd}) )
mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/run/ceph
%endif
mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/log/ceph
mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/tmp
mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/mon
mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/osd
mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/mds
mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/radosgw
mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/bootstrap-osd
mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/bootstrap-mds
mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/ceph/bootstrap-rgw
mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/log/radosgw
%clean
rm -rf $RPM_BUILD_ROOT
%pre
%if 0%{?_with_systemd}
%if 0%{?opensuse} || 0%{?suse_version}
# service_add_pre and friends don't work with parameterized systemd service
# instances, only with single services or targets, so we always pass
# ceph.target to these macros
%service_add_pre ceph.target
%endif
%endif
%post
/sbin/ldconfig
%if 0%{?_with_systemd}
%if 0%{?opensuse} || 0%{?suse_version}
%service_add_post ceph.target
%endif
%else
/sbin/chkconfig --add ceph
%endif
mkdir -p %{_localstatedir}/run/ceph/
%preun
%if 0%{?_with_systemd}
%if 0%{?opensuse} || 0%{?suse_version}
%service_del_preun ceph.target
%endif
# Need a special case here when removing the RPM to disable specific
# service instance, or stale symlinks will be left lying around in
# /etc/systemd/system. May as well stop them too for completeness
# (although strictly service_del_preun would do that anyway by dint
# of stopping ceph.target)
if [ $1 = 0 ] ; then
SERVICE_LIST=$(systemctl | grep -E '^ceph-mon@|^ceph-create-keys@|^ceph-osd@|^ceph-mds@|^ceph-disk-' | cut -d' ' -f1)
if [ -n "$SERVICE_LIST" ]; then
for SERVICE in $SERVICE_LIST; do
/usr/bin/systemctl --no-reload disable $SERVICE > /dev/null 2>&1 || :
/usr/bin/systemctl stop $SERVICE > /dev/null 2>&1 || :
done
fi
fi
%else
%if 0%{?opensuse} || 0%{?suse_version}
%stop_on_removal ceph
%endif
%if 0%{?rhel} || 0%{?fedora}
if [ $1 = 0 ] ; then
/sbin/service ceph stop >/dev/null 2>&1
/sbin/chkconfig --del ceph
fi
%endif
%endif
%postun
/sbin/ldconfig
%if %{defined suse_version}
%insserv_cleanup
%endif
#################################################################################
# files
#################################################################################
%files
%defattr(-,root,root,-)
%docdir %{_docdir}
%dir %{_docdir}/ceph
%{_docdir}/ceph/sample.ceph.conf
%{_docdir}/ceph/sample.fetch_config
%{_bindir}/cephfs
%{_bindir}/ceph-clsinfo
%{_bindir}/ceph-rest-api
%{python_sitelib}/ceph_rest_api.py*
%{_bindir}/crushtool
%{_bindir}/monmaptool
%{_bindir}/osdmaptool
%{_bindir}/ceph-run
%{_bindir}/ceph-mon
%{_bindir}/ceph-mds
%{_bindir}/ceph-objectstore-tool
%{_bindir}/ceph-osd
%{_bindir}/ceph-detect-init
%{_bindir}/librados-config
%{_bindir}/ceph-client-debug
%{_bindir}/cephfs-journal-tool
%{_bindir}/cephfs-table-tool
%{_bindir}/cephfs-data-scan
%{_bindir}/ceph-debugpack
%{_bindir}/ceph-coverage
%if 0%{?_with_systemd}
%{_tmpfilesdir}/%{name}.conf
%{_unitdir}/ceph-mds@.service
%{_unitdir}/ceph-mon@.service
%{_unitdir}/ceph-create-keys@.service
%{_unitdir}/ceph-osd@.service
%{_unitdir}/ceph-radosgw@.service
%{_unitdir}/ceph-disk-activate-journal@.service
%{_unitdir}/ceph-disk-activate@.service
%{_unitdir}/ceph-disk-dmcrypt-activate@.service
%{_unitdir}/ceph.target
%else
%{_initrddir}/ceph
%{_sbindir}/rcceph
%endif
%{_sbindir}/ceph-disk
%{_sbindir}/ceph-disk-udev
%{_sbindir}/ceph-create-keys
%{_sbindir}/rcceph
%if 0%{?rhel} >= 7 || 0%{?fedora} || 0%{?suse_version}
%{_sbindir}/mount.ceph
%else
/sbin/mount.ceph
%endif
%dir %{_libdir}/ceph
%{_libdir}/ceph/ceph_common.sh
%{_libexecdir}/ceph/ceph-osd-prestart.sh
%dir %{_libdir}/rados-classes
%{_libdir}/rados-classes/libcls_cephfs.so*
%{_libdir}/rados-classes/libcls_rbd.so*
%{_libdir}/rados-classes/libcls_hello.so*
%{_libdir}/rados-classes/libcls_rgw.so*
%{_libdir}/rados-classes/libcls_lock.so*
%{_libdir}/rados-classes/libcls_kvs.so*
%{_libdir}/rados-classes/libcls_refcount.so*
%{_libdir}/rados-classes/libcls_log.so*
%{_libdir}/rados-classes/libcls_replica_log.so*
%{_libdir}/rados-classes/libcls_statelog.so*
%{_libdir}/rados-classes/libcls_user.so*
%{_libdir}/rados-classes/libcls_version.so*
%dir %{_libdir}/ceph/erasure-code
%{_libdir}/ceph/erasure-code/libec_*.so*
%{_udevrulesdir}/60-ceph-partuuid-workaround.rules
%{_udevrulesdir}/95-ceph-osd.rules
%config %{_sysconfdir}/bash_completion.d/ceph
%config(noreplace) %{_sysconfdir}/logrotate.d/ceph
%if 0%{?suse_version}
%config %{_sysconfdir}/sysconfig/SuSEfirewall2.d/services/ceph-mon
%config %{_sysconfdir}/sysconfig/SuSEfirewall2.d/services/ceph-osd-mds
%endif
%{python_sitelib}/ceph_detect_init*
%{_mandir}/man8/ceph-deploy.8*
%{_mandir}/man8/ceph-detect-init.8*
%{_mandir}/man8/ceph-disk.8*
%{_mandir}/man8/ceph-create-keys.8*
%{_mandir}/man8/ceph-mon.8*
%{_mandir}/man8/ceph-mds.8*
%{_mandir}/man8/ceph-osd.8*
%{_mandir}/man8/ceph-run.8*
%{_mandir}/man8/ceph-rest-api.8*
%{_mandir}/man8/crushtool.8*
%{_mandir}/man8/osdmaptool.8*
%{_mandir}/man8/monmaptool.8*
%{_mandir}/man8/cephfs.8*
%{_mandir}/man8/mount.ceph.8*
%{_mandir}/man8/ceph-debugpack.8*
%{_mandir}/man8/ceph-clsinfo.8*
%{_mandir}/man8/librados-config.8*
#set up placeholder directories
%dir %{_localstatedir}/lib/ceph/
%dir %{_localstatedir}/lib/ceph/tmp
%dir %{_localstatedir}/lib/ceph/mon
%dir %{_localstatedir}/lib/ceph/osd
%dir %{_localstatedir}/lib/ceph/mds
%dir %{_localstatedir}/lib/ceph/bootstrap-osd
%dir %{_localstatedir}/lib/ceph/bootstrap-mds
%dir %{_localstatedir}/lib/ceph/bootstrap-rgw
%if (! 0%{?suse_version}) || ( 0%{?suse_version} && (! 0%{?_with_systemd}) )
%dir %{_localstatedir}/run/ceph/
%endif
#################################################################################
%files -n ceph-common
%defattr(-,root,root,-)
%{_bindir}/ceph
%{_bindir}/ceph-authtool
%{_bindir}/ceph-conf
%{_bindir}/ceph-dencoder
%{_bindir}/ceph-rbdnamer
%{_bindir}/ceph-syn
%{_bindir}/ceph-crush-location
%{_bindir}/rados
%{_bindir}/rbd
%{_bindir}/ceph-post-file
%{_bindir}/ceph-brag
%{_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*
%{_mandir}/man8/rados.8*
%{_mandir}/man8/rbd.8*
%{_datadir}/ceph/known_hosts_drop.ceph.com
%{_datadir}/ceph/id_dsa_drop.ceph.com
%{_datadir}/ceph/id_dsa_drop.ceph.com.pub
%dir %{_sysconfdir}/ceph/
%dir %{_localstatedir}/log/ceph/
%dir %{_datarootdir}/ceph/
%dir %{_libexecdir}/ceph/
%config %{_sysconfdir}/bash_completion.d/rados
%config %{_sysconfdir}/bash_completion.d/rbd
%config(noreplace) %{_sysconfdir}/ceph/rbdmap
%{_initrddir}/rbdmap
%{python_sitelib}/ceph_argparse.py*
%{python_sitelib}/ceph_daemon.py*
%{_udevrulesdir}/50-rbd.rules
%postun -n ceph-common
# Package removal cleanup
if [ "$1" -eq "0" ] ; then
rm -rf /var/log/ceph
rm -rf /etc/ceph
fi
#################################################################################
%files fuse
%defattr(-,root,root,-)
%{_bindir}/ceph-fuse
%{_mandir}/man8/ceph-fuse.8*
%if 0%{?rhel} >= 7 || 0%{?fedora} || 0%{?suse_version}
%{_sbindir}/mount.fuse.ceph
%else
/sbin/mount.fuse.ceph
%endif
#################################################################################
%files -n rbd-fuse
%defattr(-,root,root,-)
%{_bindir}/rbd-fuse
%{_mandir}/man8/rbd-fuse.8*
#################################################################################
%files radosgw
%defattr(-,root,root,-)
%{_bindir}/radosgw
%{_bindir}/radosgw-admin
%{_mandir}/man8/radosgw.8*
%{_mandir}/man8/radosgw-admin.8*
%config(noreplace) %{_sysconfdir}/logrotate.d/radosgw
%config %{_sysconfdir}/bash_completion.d/radosgw-admin
%dir %{_localstatedir}/log/radosgw/
%dir %{_localstatedir}/lib/ceph/radosgw
%if 0%{?_with_systemd}
%{_tmpfilesdir}/%{name}-rgw.conf
%else
%{_initrddir}/ceph-radosgw
%{_sbindir}/rcceph-radosgw
%endif
%post radosgw
/sbin/ldconfig
%if 0%{?opensuse} || 0%{?suse_version}
# TODO: find out what exactly this systemd-tmpfiles inovcation is for
systemd-tmpfiles --create /%{_tmpfilesdir}/ceph-rgw.conf
# explicit systemctl daemon-reload (that's the only relevant bit of
# service_add_post; the rest is all sysvinit --> systemd migration which
# isn't applicable in this context (see above comment).
/usr/bin/systemctl daemon-reload >/dev/null 2>&1 || :
%else
%if 0%{?suse_version} || 0%{?opensuse}
%fillup_and_insserv -f -y ceph-radosgw
%endif
%endif
%preun radosgw
%if 0%{?_with_systemd}
SERVICE_LIST=$(systemctl | grep -E '^ceph-radosgw@' | cut -d' ' -f1)
if [ -n "$SERVICE_LIST" ]; then
for SERVICE in $SERVICE_LIST; do
/usr/bin/systemctl --no-reload disable $SERVICE > /dev/null 2>&1 || :
/usr/bin/systemctl stop $SERVICE > /dev/null 2>&1 || :
done
fi
%else
%if 0%{?suse_version} || 0%{?opensuse}
%stop_on_removal ceph-radosgw
%endif
%endif
%postun radosgw
/sbin/ldconfig
%if 0%{?_with_systemd}
SERVICE_LIST=$(systemctl | grep -E '^ceph-radosgw@' | cut -d' ' -f1)
if [ -n "$SERVICE_LIST" ]; then
for SERVICE in $SERVICE_LIST; do
/usr/bin/systemctl --no-reload disable $SERVICE > /dev/null 2>&1 || :
/usr/bin/systemctl try-restart $SERVICE > /dev/null 2>&1 || :
done
fi
%else
%if 0%{?suse_version} || 0%{?opensuse}
%restart_on_update ceph-radosgw
%endif
%endif
# Package removal cleanup
if [ "$1" -eq "0" ] ; then
rm -rf /var/log/radosgw
fi
%if 0%{?suse_version} || 0%{?opensuse}
%insserv_cleanup
%endif
#################################################################################
%if %{with ocf}
%files resource-agents
%defattr(0755,root,root,-)
%dir /usr/lib/ocf
%dir /usr/lib/ocf/resource.d
%dir /usr/lib/ocf/resource.d/ceph
/usr/lib/ocf/resource.d/%{name}/*
%endif
#################################################################################
%files -n librados2
%defattr(-,root,root,-)
%{_libdir}/librados.so.*
%post -n librados2
/sbin/ldconfig
%postun -n librados2
/sbin/ldconfig
#################################################################################
%files -n librados2-devel
%defattr(-,root,root,-)
%dir %{_includedir}/rados
%{_includedir}/rados/librados.h
%{_includedir}/rados/librados.hpp
%{_includedir}/rados/buffer.h
%{_includedir}/rados/page.h
%{_includedir}/rados/crc32c.h
%{_includedir}/rados/rados_types.h
%{_includedir}/rados/rados_types.hpp
%{_includedir}/rados/memory.h
%{_libdir}/librados.so
#################################################################################
%files -n python-rados
%defattr(-,root,root,-)
%{python_sitelib}/rados.py*
#################################################################################
%files -n libradosstriper1
%defattr(-,root,root,-)
%{_libdir}/libradosstriper.so.*
%post -n libradosstriper1
/sbin/ldconfig
%postun -n libradosstriper1
/sbin/ldconfig
#################################################################################
%files -n libradosstriper1-devel
%defattr(-,root,root,-)
%dir %{_includedir}/radosstriper
%{_includedir}/radosstriper/libradosstriper.h
%{_includedir}/radosstriper/libradosstriper.hpp
%{_libdir}/libradosstriper.so
#################################################################################
%files -n librbd1
%defattr(-,root,root,-)
%{_libdir}/librbd.so.*
%post -n librbd1
/sbin/ldconfig
mkdir -p /usr/lib64/qemu/
ln -sf %{_libdir}/librbd.so.1 /usr/lib64/qemu/librbd.so.1
%postun -n librbd1
/sbin/ldconfig
#################################################################################
%files -n librbd1-devel
%defattr(-,root,root,-)
%dir %{_includedir}/rbd
%{_includedir}/rbd/librbd.h
%{_includedir}/rbd/librbd.hpp
%{_includedir}/rbd/features.h
%{_libdir}/librbd.so
#################################################################################
%files -n python-rbd
%defattr(-,root,root,-)
%{python_sitelib}/rbd.py*
#################################################################################
%files -n libcephfs1
%defattr(-,root,root,-)
%{_libdir}/libcephfs.so.*
%post -n libcephfs1
/sbin/ldconfig
%postun -n libcephfs1
/sbin/ldconfig
#################################################################################
%files -n libcephfs1-devel
%defattr(-,root,root,-)
%dir %{_includedir}/cephfs
%{_includedir}/cephfs/libcephfs.h
%{_libdir}/libcephfs.so
#################################################################################
%files -n python-cephfs
%defattr(-,root,root,-)
%{python_sitelib}/cephfs.py*
#################################################################################
%files -n ceph-test
%defattr(-,root,root,-)
%{_bindir}/ceph_bench_log
%{_bindir}/ceph_kvstorebench
%{_bindir}/ceph_multi_stress_watch
%{_bindir}/ceph_erasure_code
%{_bindir}/ceph_erasure_code_benchmark
%{_bindir}/ceph_omapbench
%{_bindir}/ceph_perf_objectstore
%{_bindir}/ceph_perf_local
%{_bindir}/ceph_perf_msgr_client
%{_bindir}/ceph_perf_msgr_server
%{_bindir}/ceph_psim
%{_bindir}/ceph_radosacl
%{_bindir}/ceph_rgw_jsonparser
%{_bindir}/ceph_rgw_multiparser
%{_bindir}/ceph_scratchtool
%{_bindir}/ceph_scratchtoolpp
%{_bindir}/ceph_smalliobench
%{_bindir}/ceph_smalliobenchdumb
%{_bindir}/ceph_smalliobenchfs
%{_bindir}/ceph_smalliobenchrbd
%{_bindir}/ceph_streamtest
%{_bindir}/ceph_test_*
%{_bindir}/ceph_tpbench
%{_bindir}/ceph_xattr_bench
%{_bindir}/ceph-monstore-tool
%{_bindir}/ceph-osdomap-tool
%{_bindir}/ceph-kvstore-tool
%{_mandir}/man8/rbd-replay.8*
%{_mandir}/man8/rbd-replay-many.8*
%{_mandir}/man8/rbd-replay-prep.8*
%{_bindir}/rbd-replay
%{_bindir}/rbd-replay-many
%if (0%{?fedora} || 0%{?rhel} == 6)
%{_bindir}/rbd-replay-prep
%endif
%dir %{_libdir}/ceph
%{_libdir}/ceph/ceph-monstore-update-crush.sh
#################################################################################
%if 0%{with cephfs_java}
%files -n libcephfs_jni1
%defattr(-,root,root,-)
%{_libdir}/libcephfs_jni.so.*
%post -n libcephfs_jni1
/sbin/ldconfig
%postun -n libcephfs_jni1
/sbin/ldconfig
#################################################################################
%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
%endif
#################################################################################
%if 0%{with selinux}
%files selinux
%defattr(-,root,root,-)
%attr(0600,root,root) %{_datadir}/selinux/packages/ceph.pp
%{_datadir}/selinux/devel/include/contrib/ceph.if
%{_mandir}/man8/ceph_selinux.8.*
%post selinux
/sbin/service ceph stop >/dev/null 2>&1
semodule -n -i %{_datadir}/selinux/packages/ceph.pp
if /usr/sbin/selinuxenabled ; then
/usr/sbin/load_policy
%relabel_files
fi
/sbin/service ceph start >/dev/null 2>&1
exit 0
%postun selinux
if [ $1 -eq 0 ]; then
/sbin/service ceph stop >/dev/null 2>&1
semodule -n -r ceph
if /usr/sbin/selinuxenabled ; then
/usr/sbin/load_policy
%relabel_files
fi;
/sbin/service ceph start >/dev/null 2>&1
fi;
exit 0
%endif
#################################################################################
%if 0%{with libs_compat}
%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.
%endif
#################################################################################
%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