# Contributor: John Coyle # Maintainer: John Coyle pkgname=ceph pkgver=@VERSION@ pkgrel=@RPM_RELEASE@ pkgdesc="Ceph is a distributed object store and file system" pkgusers="ceph" pkggroups="ceph" url="http://ceph.com" arch="x86_64" license="LGPL-2.1 and CC-BY-SA-1.0 and GPL-2.0 and BSL-1.0 and \ GPL-2.0-with-autoconf-exception and BSD-3-Clause and MIT" depends="ceph-osd ceph-mds ceph-mgr ceph-mon" # grep --quiet option required # diffutils -y option required by osd-scrub-snaps.sh # util-linux uuidgen required makedepends=" acl-dev argp-standalone bc boost-dev btrfs-progs bzip2-dev cmake coreutils cryptsetup curl-dev cython-dev diffutils eudev-dev expat-dev fcgi-dev flex fuse-dev git grep jq keyutils-dev leveldb-dev libaio-dev libedit-dev libressl-dev libtirpc-dev libtool libxml2-dev linux-headers lvm2-dev nss-dev openldap-dev parted procps python-dev py-pip py-nose py-sphinx py-virtualenv readline-dev rpcgen snappy-dev userspace-rcu-dev util-linux xfsprogs-dev xmlstarlet yasm " source="@TARBALL_BASENAME@.tar.bz2" subpackages=" $pkgname-base $pkgname-common $pkgname-mds $pkgname-mgr $pkgname-mon $pkgname-fuse:ceph_fuse $pkgname-radosgw $pkgname-osd $pkgname-doc $pkgname-bash-completion:bash_completion rbd-fuse:rbd_fuse rbd-mirror:rbd_mirror rbd-nbd:rbd_nbd librbd librbd-dev:librbd_dev libcephfs libcephfs-dev:libcephfs_dev librados librados-dev:librados_dev librgw librgw-dev:librgw_dev py-rados:py_rados py-rgw:py_rgw libradosstriper libradosstriper-dev:libradosstriper_dev py-rbd:py_rbd py-cephfs:py_cephfs " if [ -n "$CEPH_TEST_PKG" ]; then subpackages="$subpackages $pkgname-test:ceph_test" fi _ceph_uid=167 _ceph_gid=167 _prefix=/usr _bindir=$_prefix/bin _datadir=$_prefix/share _docdir=$_datadir/doc _includedir=$_prefix/include _libdir=$_prefix/lib _libexecdir=$_prefix/libexec _localstatedir=/var _mandir=$_datadir/man _sbindir=/usr/sbin _sysconfdir=/etc _udevrulesdir=/etc/udev/rules.d _python_sitelib=/usr/lib/python2.7/site-packages builddir=$srcdir/@TARBALL_BASENAME@ build() { export CEPH_BUILD_VIRTUALENV=$builddir mkdir -p $builddir/build cd $builddir/build if [ -n "$MAKE_CHECK" ] || [ -n "$CEPH_TEST_PKG" ]; then local _with_tests=ON fi cmake .. \ -DCMAKE_INSTALL_PREFIX=$_prefix \ -DCMAKE_INSTALL_LIBDIR=$_libdir \ -DCMAKE_INSTALL_LIBEXECDIR=$_libexecdir \ -DCMAKE_INSTALL_LOCALSTATEDIR=$_localstatedir \ -DCMAKE_INSTALL_SYSCONFDIR=$_sysconfdir \ -DCMAKE_INSTALL_DOCDIR=$_docdir/ceph \ -DCMAKE_INSTALL_MANDIR=$_mandir \ -DWITH_REENTRANT_STRSIGNAL=ON \ -DWITH_THREAD_SAFE_RES_QUERY=ON \ -DWITH_MANPAGE=ON \ -DWITH_PYTHON3=OFF \ -DWITH_LTTNG=OFF \ -DWITH_SYSTEM_BOOST=ON \ -DWITH_EMBEDDED=OFF \ -DWITH_TESTS=${_with_tests:-OFF} \ || return 1 make -j${JOBS:-2} || return 1 if [ -n "$MAKE_CHECK" ]; then ctest -j${JOBS:-2} fi } package() { cd $builddir/build make DESTDIR=$pkgdir install || return 1 cd .. rm -f $pkgdir$_sysconfdir/init.d/ceph install -m 0644 -D src/etc-rbdmap $pkgdir$_sysconfdir/ceph/rbdmap \ || return 1 install -m 0644 -D src/logrotate.conf $pkgdir$_sysconfdir/logrotate.d/ceph \ || return 1 chmod 0644 $pkgdir$_docdir/ceph/sample.ceph.conf || return 1 # udev rules install -m 0644 -D udev/50-rbd.rules $pkgdir$_udevrulesdir/50-rbd.rules || return 1 install -m 0644 -D udev/60-ceph-by-parttypeuuid.rules \ $pkgdir$_udevrulesdir/60-ceph-by-parttypeuuid.rules || return 1 install -m 0644 -D udev/95-ceph-osd.rules \ $pkgdir$_udevrulesdir/95-ceph-osd.rules } base() { pkgdesc="Base is the package that includes all the files shared amongst ceph servers" depends=" ceph-common cryptsetup librbd librados libcephfs librgw logrotate py-requests py-setuptools util-linux xfsprogs " _pkg $_bindir crushtool monmaptool osdmaptool ceph-run ceph-detect-init _pkg $_sbindir ceph-create-keys mount.ceph _pkg $_libexecdir/ceph ceph_common.sh _pkg $_libdir/rados-classes *.so* _pkg $_libdir/ceph/erasure-code libec_*.so* _pkg $_libdir/ceph/compressor libceph_*.so* _pkg $_sysconfdir/logrotate.d ceph _pkg $_python_sitelib ceph_detect_init* ceph_disk* for dir in tmp bootstrap-osd bootstrap-mds bootstrap-rgw; do install -m 750 -o $_ceph_uid -g $_ceph_gid -d \ $subpkgdir$_localstatedir/lib/ceph/$dir || return 1 done } common() { pkgdesc="Common utilities to mount and interact with a ceph storage cluster." depends="py-rados py-rbd py-cephfs" install="$pkgname-common.pre-install" _pkg $_bindir ceph \ ceph-authtool \ ceph-conf \ ceph-dencoder \ ceph-rbdnamer \ ceph-syn \ cephfs-data-scan \ cephfs-journal-tool \ cephfs-table-tool \ rados \ rbd \ rbd-replay \ rbd-replay-many \ rbdmap \ ceph-post-file \ ceph-brag _pkg $_datadir/ceph known_hosts_drop.ceph.com id_rsa_drop.ceph.com \ id_rsa_drop.ceph.com.pub _pkg $_sysconfdir/ceph rbdmap _pkg $_python_sitelib ceph_argparse.py* ceph_daemon.py* _pkg $_udevrulesdir 50-rbd.rules install -m 3770 -o $_ceph_uid -g $_ceph_gid -d \ $subpkgdir$_localstatedir/log/ceph || return 1 install -m 750 -o $_ceph_uid -g $_ceph_gid -d \ $subpkgdir$_localstatedir/lib/ceph } mds() { pkgdesc="Metadata server daemon for the Ceph distributed file system." depends="ceph-base" _pkg $_bindir ceph-mds install -m 750 -o $_ceph_uid -g $_ceph_gid -d \ $subpkgdir$_localstatedir/lib/ceph/mds } mon() { pkgdesc="Cluster monitor daemon for the Ceph distributed file system." depends="ceph-base" _pkg $_bindir ceph-mon ceph-rest-api _pkg $_python_sitelib ceph_rest_api.py* install -m 750 -o $_ceph_uid -g $_ceph_gid -d \ $subpkgdir$_localstatedir/lib/ceph/mon } ceph_fuse() { pkgdesc="FUSE based client for Ceph distributed network file system." _pkg $_bindir ceph-fuse _pkg $_sbindir mount.fuse.ceph } rbd_fuse() { pkgdesc="FUSE based client to map Ceph rbd images to files." depends="librados librbd" _pkg $_bindir rbd-fuse } rbd_mirror() { pkgdesc="Daemon for mirroring RBD images between Ceph clusters." depends="ceph-common librados" _pkg $_bindir rbd-mirror } rbd_nbd() { pkgdesc="NBD based client to map Ceph rbd images to local device." depends="librbd librados" _pkg $_bindir rbd-nbd } radosgw() { pkgdesc="Rados REST gateway which implements Amazon's S3 and OpenStack's Swift APIs." depends="ceph-common" _pkg $_bindir radosgw radosgw-admin radosgw-token radosgw-es radosgw-object-expirer mkdir -p $subpkgdir$_localstatedir/lib/ceph/radosgw } osd() { pkgdesc="Object storage daemon for the Ceph distributed file system." depends="ceph-base parted gptfdisk" _pkg $_bindir ceph-clsinfo ceph-bluefs-tool ceph-objectstore-tool ceph-osd _pkg $_sbindir ceph-disk _pkg $_libexecdir/ceph ceph-osd-prestart.sh _pkg $_udevrulesdir 60-ceph-by-parttypeuuid.rules 95-ceph-osd.rules install -m 750 -o $_ceph_uid -g $_ceph_gid -d \ $subpkgdir$_localstatedir/lib/ceph/osd } librados() { pkgdesc="RADOS distributed object store client library" _pkg $_libdir librados.so.* } librados_dev() { pkgdesc="RADOS distributed object store client library headers" depends="librados" _pkg $_includedir/rados librados.h \ librados.hpp \ buffer.h \ buffer_fwd.h \ inline_memory.h \ page.h \ crc32c.h \ rados_types.h \ rados_types.hpp \ memory.h _pkg $_libdir librados.so _pkg $_bindir librados-config } librgw() { pkgdesc="RADOS gateway client library" depends="librados" _pkg $_libdir librgw.so.* } librgw_dev() { pkgdesc="RADOS gateway client library headers" depends="librados" _pkg $_includedir/rados librgw.h rgw_file.h _pkg $_libdir librgw.so } py_rgw() { pkgdesc="Python 2 libraries for the RADOS gateway" depends="librgw py-rados" _pkg $_python_sitelib rgw.so rgw-*.egg-info } py_rados() { pkgdesc="Python libraries for the RADOS object store" depends="librados" _pkg $_python_sitelib rados.so rados-*.egg-info } libradosstriper() { pkgdesc="RADOS striping library" depends="librados" _pkg $_libdir libradosstriper.so.* } libradosstriper_dev() { pkgdesc="RADOS striping library headers" depends="libradosstriper librados-dev" _pkg $_includedir/radosstriper libradosstriper.h libradosstriper.hpp _pkg $_libdir libradosstriper.so } librbd() { pkgdesc="RADOS block device client library" depends="librados" _pkg $_libdir librbd.so.* } librbd_dev() { pkgdesc="RADOS block device client library headers" depends="librbd librados-dev" _pkg $_includedir/rbd features.h librbd.h librbd.hpp _pkg $_libdir librbd.so } py_rbd() { pkgdesc="Python libraries for the RADOS block device" depends="librbd py-rados" _pkg $_python_sitelib rbd.so rbd-*.egg-info } libcephfs() { pkgdesc="Ceph distributed file system client library" _pkg $_libdir libcephfs.so.* } libcephfs_dev() { pkgdesc="Ceph distributed file system client library headers" depends="libcephfs librados-devel" _pkg $_includedir/cephfs ceph_statx.h libcephfs.h _pkg $_libdir libcephfs.so } py_cephfs() { pkgdesc="Python libraries for Ceph distributed file system" depends="libcephfs py-rados" _pkg $_python_sitelib cephfs.so cephfs-*.egg-info ceph_volume_client.py* } ceph_test() { pkgdesc="Ceph benchmarks and test tools" depends="ceph-common xmlstarlet" _pkg $_bindir ceph-client-debug \ ceph_bench_log \ ceph_kvstorebench \ ceph_multi_stress_watch \ ceph_erasure_code \ ceph_erasure_code_benchmark \ ceph_omapbench \ ceph_objectstore_bench \ ceph_perf_objectstore \ ceph_perf_local \ ceph_perf_msgr_client \ ceph_perf_msgr_server \ ceph_psim \ ceph_radosacl \ ceph_rgw_jsonparser \ ceph_rgw_multiparser \ ceph_scratchtool \ ceph_scratchtoolpp \ ceph_test_* \ ceph-coverage \ ceph-monstore-tool \ ceph-osdomap-tool \ ceph-kvstore-tool \ ceph-debugpack _pkg $_libdir ceph/ceph-monstore-update-crush.sh } bash_completion() { depends="bash-completion" pkgdesc="Bash completions for Ceph" _pkg $_sysconfdir/bash_completion.d ceph rados radosgw-admin rbd } mgr() { pkgdesc="Ceph Manager Daemon" depends="ceph-base" _pkg $_bindir ceph-mgr _pkg $_libdir/ceph mgr install -m 750 -o $_ceph_uid -g $_ceph_gid -d \ $subpkgdir$_localstatedir/lib/ceph/mgr } _pkg() { local path=$1 shift local files=$@ mkdir -p $subpkgdir$path || exit 1 for _file in $files; do mv $pkgdir$path/$_file $subpkgdir$path || exit 1 done }