Project

General

Profile

Bug #39039 » APKBUILD

Tony Davies, 04/20/2020 02:24 AM

 
# Contributor: Anthony Davies <anthony.t.davies@gmail.com>
# Contributor: John Coyle <dx9err@gmail.com>
# Maintainer: Iggy Jackson <iggy@kws1.com>

pkgname=ceph
pkgver=15.2.0
pkgrel=1
pkgdesc="Ceph is a distributed object store and file system"
pkgusers="ceph"
pkggroups="ceph"
url="https://ceph.com/"
arch="x86_64 aarch64 armv7"
# https://github.com/ceph/ceph/blob/master/COPYING
license="LGPL-2.1-only AND LGPL-2.0-or-later AND GPL-2.0-only AND GPL-3.0-only AND CC-BY-SA-1.0 AND BSL-1.0 AND GPL-2.0 WITH Autoconf-exception-2.0 AND BSD-3-Clause AND MIT AND custom"
depends="ceph-osd ceph-mds ceph-mon"
options="!checkroot"
_base_deps="
cryptsetup
e2fsprogs
logrotate
parted
util-linux
xfsprogs
"
_osd_daemon_deps="fuse snappy lz4-libs"
_osd_tools_deps="lz4-libs"
_ceph_volume_deps="lvm2"
_ceph_test_deps="xmlstarlet"
makedepends="
acl-dev
argp-standalone
bc
boost-dev
btrfs-progs
bzip2-dev
cmake
coreutils
cunit-dev
curl-dev
cython
diffutils
eudev-dev
expat-dev
fcgi-dev
flex
fuse
fuse-dev
git
grep
gperf
jq
keyutils-dev
leveldb-dev
libaio-dev
libatomic_ops-dev
libedit-dev
openssl-dev
libtirpc-dev
libtool
libxml2-dev
librdkafka-dev
linux-headers
lvm2-dev
lz4-dev
nodejs
nss-dev
oath-toolkit-dev
openldap-dev
procps
python3-dev
py3-pip
py3-nose
py3-setuptools
py3-sphinx
py3-virtualenv
rabbitmq-c-dev
readline-dev
rpcgen
snappy-dev
userspace-rcu-dev
xfsprogs-dev
xmlstarlet
yasm
libcap-ng-dev
libnl3-dev
$_base_deps
$_osd_daemon_deps
$_osd_tools_deps
$_ceph_volume_deps
$_ceph_test_deps
"

source="https://download.ceph.com/tarballs/ceph_$pkgver.orig.tar.gz
nodeenv-armv8l.patch
PurgeQueue.cc.patch
musl-fixes.patch
git_search_fix.patch
"

subpackages="
$pkgname-doc
$pkgname-base
$pkgname-common
$pkgname-mds
$pkgname-mgr
$pkgname-mon
$pkgname-mon-daemon:mon_daemon
$pkgname-mon-tools:mon_tools
$pkgname-fuse:ceph_fuse
$pkgname-openrc
$pkgname-osd
$pkgname-osd-daemon:osd_daemon
$pkgname-osd-tools:osd_tools
$pkgname-volume:ceph_volume:noarch
$pkgname-radosgw
$pkgname-bash-completion:bash_completion:noarch
$pkgname-dev
$pkgname-user
rbd-fuse:rbd_fuse
rbd-mirror:rbd_mirror
rbd-nbd:rbd_nbd
librbd
libcephfs
librados
py3-rados:_py3_rados
libradosstriper
py3-rbd:_py3_rbd
py3-cephfs:_py3_cephfs
"

# secfixes:
# 14.2.3-r0:
# - CVE-2019-10222

_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
_syssbindir=/sbin
_sysconfdir=/etc

_udevrulesdir=/etc/udev/rules.d

_py3_sitelib() {
python3 -c "import site; print(site.getsitepackages()[0])"
}

build() {
export CEPH_BUILD_VIRTUALENV="$builddir"

mkdir -p "$builddir"/build/src
cp "$builddir"/src/.git_version "$builddir"/build/src
cd "$builddir"/build

echo "Building for CARCH $CARCH"
case "$CARCH" in
armv7)
cmake .. \
-DALLOCATOR=libc \
-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_SYSTEM_BOOST=ON \
-DPYTHON_EXECUTABLE:FILEPATH=/usr/bin/python3 \
-DWITH_PYTHON2=OFF \
-DWITH_PYTHON3=ON \
-DMGR_PYTHON_VERSION=3 \
-DWITH_LTTNG=OFF \
-DWITH_RDMA=OFF \
-DWITH_SYSTEMD=OFF \
-DWITH_SPDK=OFF \
-DWITH_BABELTRACE=OFF \
-DWITH_RADOSGW_AMQP_ENDPOINT=OFF \
-DWITH_TESTS=OFF \
-DCMAKE_C_FLAGS=-march="armv7-a+neon-vfpv4 -latomic" \
-DCMAKE_SYSTEM_PROCESSOR=arm \
-DHAVE_ARMV8_CRC=OFF \
-DHAVE_ARMV8_SIMD=OFF \
-DHAVE_ARMV8_CRYPTO=OFF \
-DHAVE_ARMV8_CRC_CRYPTO_INTRINSICS=OFF
;;
*)
cmake .. \
-DALLOCATOR=libc \
-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_SYSTEM_BOOST=ON \
-DPYTHON_EXECUTABLE:FILEPATH=/usr/bin/python3 \
-DWITH_PYTHON2=OFF \
-DWITH_PYTHON3=ON \
-DMGR_PYTHON_VERSION=3 \
-DWITH_LTTNG=OFF \
-DWITH_RDMA=OFF \
-DWITH_SYSTEMD=OFF \
-DWITH_SPDK=OFF \
-DWITH_BABELTRACE=OFF \
-DWITH_RADOSGW_AMQP_ENDPOINT=OFF \
-DWITH_TESTS=OFF
;;
esac

make

}

package() {
cd "$builddir"/build
make DESTDIR="$pkgdir" install
cd ..

rm -f "$pkgdir"$_sysconfdir/init.d/ceph

# Move mount.* binaries to /sbin
mkdir -p "$pkgdir"$_syssbindir
mv "$pkgdir"$_sbindir/mount.* "$pkgdir"$_syssbindir

# We need to clean this out before packaging as it's freaking huge
rm -rf "$pkgdir"$_datadir/ceph/mgr/dashboard/frontend/node_modules

install -m 0644 -D src/etc-rbdmap "$pkgdir"$_sysconfdir/ceph/rbdmap
install -m 0644 -D src/logrotate.conf "$pkgdir"$_sysconfdir/logrotate.d/ceph
install -m 0644 -D etc/sysctl/90-ceph-osd.conf "$pkgdir"/$_sysconfdir/sysctl.d/90-ceph-osd.conf
chmod 0644 "$pkgdir"$_docdir/ceph/sample.ceph.conf

# udev rules
install -m 0644 -D udev/50-rbd.rules "$pkgdir"$_udevrulesdir/50-rbd.rules

# sudoers.d
install -m 0600 -D sudoers.d/ceph-osd-smartctl "$pkgdir"/$_sysconfdir/sudoers.d/ceph-osd-smartctl
}

check() {
cd "$builddir"/build
ctest
}

# This subpackage is a little weird and a side effect of trying to keep
# the daemon packages as small as possible. We might be able to roll this into
# the base/common package later if we can slim those down or break them up in a
# different way
user() {
pkgdesc="Minimal package to create a user for other ceph packages."
depends=""
install="$pkgname-user.pre-install"
mkdir -p "$subpkgdir"
}

base() {
pkgdesc="Base is the package that includes all the files shared amongst ceph servers"
depends="$_base_deps
$pkgname-user=$pkgver-r$pkgrel
$pkgname-common=$pkgver-r$pkgrel
librbd=$pkgver-r$pkgrel
librados=$pkgver-r$pkgrel
libcephfs=$pkgver-r$pkgrel
"

_pkg $_bindir \
ceph-crash \
crushtool \
monmaptool \
osdmaptool \
ceph-kvstore-tool \
ceph-run
_pkg $_sbindir ceph-create-keys
_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 $_libdir/ceph/crypto 'libceph_*.so*'
_pkg $_sysconfdir/logrotate.d ceph
for dir in crash crash/posted tmp bootstrap-osd bootstrap-mds \
bootstrap-rgw bootstrap-mgr bootstrap-rbd \
bootstrap-rbd-mirror; do

install -m 750 -o $_ceph_uid -g $_ceph_gid -d \
"$subpkgdir"$_localstatedir/lib/ceph/$dir
done
}

common() {
pkgdesc="Common utilities to mount and interact with a ceph storage cluster."
depends="py3-rados py3-rbd py3-cephfs"

_pkg $_bindir ceph \
ceph-authtool \
ceph-conf \
ceph-rbdnamer \
ceph-syn \
cephfs-data-scan \
cephfs-journal-tool \
cephfs-table-tool \
rados \
rbd \
rbd-replay \
rbd-replay-many \
rbdmap \
ceph-post-file
_pkg $_syssbindir mount.ceph
_pkg $_datadir/ceph known_hosts_drop.ceph.com \
id_rsa_drop.ceph.com \
id_rsa_drop.ceph.com.pub
_pkg $_sysconfdir/ceph rbdmap

_pkg "$(_py3_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
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 virtual package for the Ceph distributed file system."
depends="$pkgname-base
$pkgname-mon-daemon=$pkgver-r$pkgrel
$pkgname-mon-tools=$pkgver-r$pkgrel"

mkdir -p "$subpkgdir"
}

mon_daemon() {
pkgdesc="Cluster monitor daemon for the Ceph distributed file system."
depends="$pkgname-user=$pkgver-r$pkgrel"

_pkg $_bindir ceph-mon
install -m 750 -o $_ceph_uid -g $_ceph_gid -d \
"$subpkgdir"$_localstatedir/lib/ceph/mon
}

mon_tools() {
pkgdesc="Cluster monitor tools for the Ceph distributed file system."

_pkg $_bindir ceph-monstore-tool
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."
depends=
_pkg $_bindir ceph-fuse
_pkg $_syssbindir mount.fuse.ceph
}

rbd_fuse() {
pkgdesc="FUSE based client to map Ceph rbd images to files."
depends=
_pkg $_bindir rbd-fuse
}

rbd_mirror() {
pkgdesc="Daemon for mirroring RBD images between Ceph clusters."
depends="ceph-common=$pkgver-r$pkgrel"
_pkg $_bindir rbd-mirror
}

rbd_nbd() {
pkgdesc="NBD based client to map Ceph rbd images to local device."
depends=
_pkg $_bindir rbd-nbd
}

radosgw() {
pkgdesc="Rados REST gateway which implements Amazon's S3 and OpenStack's Swift APIs."
depends="ceph-common oath-toolkit-liboath"
_pkg $_bindir radosgw \
radosgw-admin \
radosgw-es \
radosgw-object-expirer \
radosgw-token
mkdir -p "$subpkgdir"$_localstatedir/lib/ceph/radosgw
}

osd() {
pkgdesc="Object storage daemon virtual package for the Ceph distributed file system."
depends="$pkgname-osd-daemon=$pkgver-r$pkgrel
$pkgname-osd-tools=$pkgver-r$pkgrel
$pkgname-volume=$pkgver-r$pkgrel"

mkdir -p "$subpkgdir"
}

osd_daemon() {
pkgdesc="Object storage daemon for the Ceph distributed file system."
depends="$_osd_daemon_deps $pkgname-user=$pkgver-r$pkgrel"

_pkg $_bindir ceph-osd
_pkg $_libexecdir/ceph ceph-osd-prestart.sh
_pkg $_sysconfdir/sudoers.d ceph-osd-smartctl
_pkg $_sysconfdir/sysctl.d 90-ceph-osd.conf
install -m 750 -o $_ceph_uid -g $_ceph_gid -d \
"$subpkgdir"$_localstatedir/lib/ceph/osd
}

osd_tools() {
pkgdesc="Object storage daemon tools for the Ceph distributed file system."
depends="$pkgname-base=$pkgver-r$pkgrel $_osd_tools_deps"

_pkg $_bindir ceph-clsinfo \
ceph-bluestore-tool \
ceph-objectstore-tool \
ceph-osdomap-tool
install -m 750 -o $_ceph_uid -g $_ceph_gid -d \
"$subpkgdir"$_localstatedir/lib/ceph/osd
}

ceph_volume() {
pkgdesc="ceph-volume tool for the Ceph distributed file system."
depends="$_ceph_volume_deps"

_pkg $_sbindir ceph-volume
_pkg "$(_py3_sitelib)" ceph_volume 'ceph_volume-*'
}

librados() {
pkgdesc="RADOS distributed object store client library"
depends=
_pkg $_libdir librados.so.*
_pkg $_libdir/ceph libceph-common.so.*
}

_py3_rados() {
pkgdesc="Python libraries for the RADOS object store"
depends=

_pkg "$(_py3_sitelib)" rados*.so rados-*.egg-info
}

libradosstriper() {
pkgdesc="RADOS striping library"
depends=

_pkg $_libdir libradosstriper.so.*
}

librbd() {
pkgdesc="RADOS block device client library"
depends=
_pkg $_libdir librbd.so.*
}

_py3_rbd() {
pkgdesc="Python libraries for the RADOS block device"
depends="py3-rados"

_pkg "$(_py3_sitelib)" rbd*.so rbd-*.egg-info
}

libcephfs() {
pkgdesc="Ceph distributed file system client library"
depends=
_pkg $_libdir libcephfs.so.*
}

_py3_cephfs() {
pkgdesc="Python libraries for Ceph distributed file system"
depends="py3-rados"

_pkg "$(_py3_sitelib)" cephfs*.so cephfs-*.egg-info ceph_volume_client.py*
}

ceph_test() {
pkgdesc="Ceph benchmarks and test tools"
depends="ceph-common=$pkgver-r$pkgrel $_ceph_test_deps"

_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_smalliobench \
ceph_smalliobenchdumb \
ceph_smalliobenchfs \
ceph_smalliobenchrbd \
ceph_test_* \
ceph_tpbench \
ceph_xattr_bench \
ceph-coverage \
ceph-monstore-tool \
ceph-osdomap-tool \
ceph-kvstore-tool \
ceph-debugpack

_pkg $_libdir ceph/ceph-monstore-update-crush.sh
}

bash_completion() {
pkgdesc="Bash completions for Ceph"
depends=
install_if="ceph=$pkgver-r$pkgrel bash-completion"
_pkg $_sysconfdir/bash_completion.d '*'
}

mgr() {
pkgdesc="Ceph Manager Daemon"
depends="ceph-base=$pkgver-r$pkgrel"

_pkg $_bindir ceph-mgr
_pkg $_datadir/ceph mgr

install -m 750 -o $_ceph_uid -g $_ceph_gid -d \
"$subpkgdir"$_localstatedir/lib/ceph/mgr
}

_pkg() {
local path=$1
shift
if ! [ -d "$pkgdir"/$path ]; then
error "$pkgdir/$path is not a directory"
return 1
fi
mkdir -p "$subpkgdir"$path
for _file in "$@"; do
mv "$pkgdir"$path/$_file "$subpkgdir"$path
done
}

sha512sums="07a3ff2ccf1a3abac652ff8c5f1611e7c628fcedcb280adc6cd49792b46fa50c7c29437dc57c2c4a6af708a6833abf8c1a386ef2142d30bd5e1f214ba7aec4f2 ceph_15.2.0.orig.tar.gz
e2858157df0b9814b32273e0ededb176342032bf873a6e03b4c354713917a98682aad00c4afd2e338e3e5b1e08abcf0bc259f684c2d9c9931176b5665252b0bf nodeenv-armv8l.patch
5692c7f3774d927417e5ddac4ef427ed6d20f92d827a71962bac9775667c7f33b0203d8d1f85e985eb0ba32b3271445e92c3acace27fcb1742e92ed129e762e8 PurgeQueue.cc.patch
aabb73e224635055c7ee52ebc6107e792430d71852e3c06a3f8af761caa8fbf2cc72ff58eee993818dffd20fbe41cbc7cc2d440f24d0f583ce91093649a77874 musl-fixes.patch
c175baa508690f0951e758033bb846ddeddd2efdfe020016a6356f40b7e6442f2e4de7975c69f05c798493e4cbc2b8ef0a631c17d7a6ae8b919c553933ccf1ad git_search_fix.patch"
(2-2/7)