packages/ceph/PKGBUILD
2023-12-20 12:28:07 +01:00

1129 lines
33 KiB
Bash

# POWER Maintainer: Alexander Baldeck <alex.bldck@gmail.com>
# Maintainer: Paul Stemmet <aur@luxolus.com>
# Contributor: Thore Bödecker <foxxx0@archlinux.org>
# Contributor: Sébastien "Seblu" Luttringer <seblu@archlinux.org>
pkgbase='ceph'
pkgdesc='Distributed, fault-tolerant storage platform delivering object, block, and file system'
pkgver=18.2.0
pkgrel=2.1
url='https://ceph.com/'
arch=(x86_64 powerpc64le)
license=('GPL')
pkgname=(
ceph-{common,compressor,crypto,erasure,tools,test,volume,cephadm}
ceph-{rados,base,mon,mgr,osd,mds,rbd,cephfs,rgw}
lib{rados,cephfs,rbd,rgw,cephsqlite}
python-{ceph-common,rados,rbd,cephfs,rgw}
cephfs-{top,shell}
java-cephfs
ceph
ceph-libs
ceph-cluster
ceph-cli
)
makedepends=(
'bash' 'boost' 'boost-libs' 'cmake' 'coreutils'
'cryptsetup' 'curl' 'cython' 'expat' 'fmt'
'fuse3' 'gawk' 'gcc-libs' 'git' 'glibc'
'gperf' 'gperftools' 'java-runtime' 'jq' 'jre11-openjdk-headless'
'junit' 'keyutils' 'libaio' 'libatomic_ops' 'libcap'
'libcap-ng' 'libcurl-compat' 'libedit' 'libgudev' 'libnl'
'librabbitmq-c' 'librdkafka' 'libutil-linux' 'libuv' 'libxcrypt'
'lua' 'lz4' 'nss' 'oath-toolkit' 'openssl'
'pkgconf' 'python' 'snappy' 'sqlite' 'systemd-libs'
'thrift' 'util-linux' 'xfsprogs' 'zlib' 'zstd'
'python-bcrypt' 'python-cherrypy' 'python-coverage' 'python-dateutil' 'python-jinja'
'python-pecan' 'python-prettytable' 'python-pyjwt' 'python-pyopenssl' 'python-requests'
'python-scipy' 'python-setuptools' 'python-sphinx' 'python-typing_extensions' 'python-werkzeug'
'python-yaml'
)
checkdepends=(
'inetutils' 'xmlstarlet'
'python-mock' 'python-nose' 'python-pycodestyle' 'python-pylint' 'python-pytest'
'python-pytest-cov'
)
# Despite the upstream suggesting that LTO is now possible, I still am unable
# to set this. I get SEGVs in tests, and repeated mentions of C++ One Definition Rule
# violations in builds -- probably causing the segfaults. Need to look into this some
# more before I enable it.
# See: https://github.com/ceph/ceph/pull/42602
options=('emptydirs' '!lto')
source=(
"https://download.ceph.com/tarballs/${pkgbase}-${pkgver}.tar.gz"
'ceph.sysusers'
'ceph.sudoers'
'ceph-13.2.2-dont-install-sysvinit-script.patch'
'disable-empty-readable.sh-test.patch'
# Avoid spurious failures in logrotate when duplicate rule files exist,
# typically around cephadm auto-generated rotate rules
'ceph-17.2.5-logrotate-ignore-dups.patch'
# Test wants to use `git ls-files`, and is sad when it finds itself not running in a
# git repo
'ceph-17.2.4-tox-flake8-git-ls-files.patch'
# A problem with mypy versions <= 0.981 causes a false postive around numpy imports.
# See: https://github.com/python/mypy/issues/13627
'ceph-17.2.4-tox-mypy-false-postive.patch'
# Split up a very IO heavy test suite, as otherwise test is liable to timeout
# NOTE: this is a very large patchset and will guarrented break if/when the upstream
# touches anything in src/test/objectstore
'ceph-17.2.4-test-bluefs-split.patch'
# pybind cython modules seem to have a longstanding issue with incorrectly mocking
# cythonize calls in setup.py when 'egg_info' is a provided directive
'ceph-17.2.4-pybind-unmock-cythonize.patch'
# fixes the few usages of std::iterator which has been deprecated in c++17, quieting
# a lot of _GLIBCXX17_DEPRECATED line noise during builds
'ceph-17.2.5-fix-iterator-depreciations.patch'
# Fixes API changes to boost::beast string_view type def in 1.81
# https://github.com/boostorg/beast/issues/2594
'ceph-17.2.5-rgw-client-boost-string-view.patch'
# Fixes node-gyp errors due to py3.11 incompatibilities
'ceph-17.2.6-mgr-dashboard-node-version.patch'
# Fixes inspect.getargspec errors due to removal in py3.11
'ceph-17.2.6-mgr-dashboard-cherrypy-18.patch'
# Fixes inspect.formatargspec errors in pylint2.6->wrapt due to removal in py3.11
'ceph-17.2.6-mgr-dashboard-pylint-217.patch'
# Fixes a couple breaking changes from cython v3.0.0
'ceph-17.2.6-cython-fixes.patch'
# Fixes fmtlib v10 issues found in v18.2.x
'ceph-18.2.0-fmt10-fixes.patch'
# Fix undefined behavior in unit test for erasure coding (SHEC)
'ceph-18.2.0-fix-ecode-shec-test.patch'
# Backport https://github.com/ceph/ceph/pull/50216 to fix an assertion failure in
# test_concurrent_dir_link_and_compact_log_56210 due to the strange mount/umount/mount
# pattern
'ceph-18.2.0-backport-log-runway-expansion.patch'
)
sha512sums=('fe6a3ca4227cc05b5effc33a02670c466583ec9e4c7c025241248223992254e6e6551d7db486d5ead36bf0ba922d54e0aabc2aaf456d4593679376ec88bd971a'
'4354001c1abd9a0c385ba7bd529e3638fb6660b6a88d4e49706d4ac21c81b8e829303a20fb5445730bdac18c4865efb10bc809c1cd56d743c12aa9a52e160049'
'41dbc1c395cdf9b3edf5c5d91bbc90f416b4338ad964fa3471f26a4312d3ec2a5dcebbc351a1640dc4b047b4f71aa134ac7486747e5f62980092b0176e7567f5'
'ea069b75b786c22166c609b127b512802cc5c6e9512d792d7b7b34d276f5b86d57c8c35cfc7b5c855a59c0ba87ba1aabe2ca26da72b26bff46b6ba8410ddb27e'
'2234d005df71b3b6013e6b76ad07a5791e3af7efec5f41c78eb1a9c92a22a67f0be9560be59b52534e90bfe251bcf32c33d5d40163f3f8f7e7420691f0f4a222'
'b12cabda7184721c494edd22250fd05019694d2bc445722d100cdefab5385bd25c2267a029d2f6053932fa6717e38c4314385afd986969ee2744d745b53c8b58'
'31e578b240ceaaf1216b56cdce654661eed6529ef642ecad164a02669e850100a49a85dc70f3d744671e2c5dad10aee64be7d091fa33007cb8fc6788a4336799'
'f1f549c5da829db787ee6ee3cf47912d5b48efb2533de05fd9735736e9218a78cf79c5958e1409a2c8adcca51460eb3ae7e73b5c1ec6cf73d4f07670c9934c3b'
'5b43ba48dde8b7371d4b3976aa3a27ab3ad3a10e110479a101b8f222590bbd6aca318f3ac117f851596fc23daafb53aaa566e055dc9694ab16ab1170e8f77763'
'781a01e622a70d56bf1948bdc0b427ffa95a86cec7dd9d26c6007a9ec024a942a8ca55f2acc3d37344862f1d6bf11cae998d8071754cd841a66bfba4ec9c58bf'
'612faebfb5eec3651832f349ea3c23b50d2386889ff77592b0acff653049efdc5c2254f63c30d88b9a730813bf1f1945dda0d0beab0db7db3e0708ba8d057a40'
'02ca1a9bf15f9cd6f474f264ba2bf66ae725bac990a7cac315dabe377c66935a7afd8117f18a1f82c78bdf9ab2c3e5a2a227f2ffc166974dd7bb99b290f1f233'
'd9729c33f2b8c03ab918919e3b62cbc0825314ad09596dc12984ac5964f8b421db3376b84fa26e0952e0781deb218f8aff6ba32f9c8e5a22bd27afac8dcaf6d3'
'79be1630ae4a599509e5d789d4aefe412ce47e67ad482f853664fa4b01e063c20593e3da668e6a776ad038fb07606ae948eea41bab20776c33c87f9ab49505e0'
'c767a8e6fd02ea2ab88e99b50b206d0f825acdf177136ded38d93594fc7663b7c9612af7195b85e0b2b501d8ee482af5e088e9abb5ebee7b8a69e0153ce89782'
'0c5124693bd317a73707dfd34b17664cc05233aec08e07739fe08fc9a73be7a1f4446052b1addde832cba141a382c35f45e60c89a00bb7dab81cee7ed6be07e1'
'4613232e5a0003c08d233e40fe3ac1cd00e1195d29bdd9892188587b4a782d6979004232927c0a1bff554eabf2fb9b18eb751682b7ad90762292b63891f3b301'
'9a1183c08f8799b14235c9271519203cbf93e48ca3a8607d3a0500910efca5379c8a08421c377227f93d8436a850f5ca99784f28aaa920e55f0457c657511f17'
'e238b326609636bc7dd10cec59290e22898948ef105c49643c38d2621abf16c2efcf9581b0b6bad65066607510c9827d00a7abdb14f2054701cc33b7101ea054')
__version="${pkgver}-${pkgrel}"
# -fno-plt causes linker errors (undefined reference to internal methods)
# similar issue: https://bugs.archlinux.org/task/54845
# https://github.com/intel/media-driver/commit/d95d8f7ab7ac94a2e0f4ee6a4b4794898dc2d3b7
# as of today (2019-07-12) the upstream maintainers do not consider this a bug in their code
# (IMHO rightfully so) and thus we strip the option here
export CFLAGS="${CFLAGS/-fno-plt/}"
export CXXFLAGS="${CXXFLAGS/-fno-plt/}"
prepare() {
cd "${srcdir}/${pkgbase}-${pkgver}"
# apply patches from the source array
local filename
for filename in "${source[@]%%::*}"; do
if [[ "${filename}" =~ \.patch$ ]]; then
echo "Applying patch ${filename##*/}"
patch -p1 -N -i "${srcdir}/${filename##*/}"
fi
done
# fix boost stuff for system-boost
find . -name '*.cmake' -or -name 'CMakeLists.txt' -print0 | xargs --null \
sed -r \
-e 's|Boost::|boost_|g' \
-e 's|Boost_|boost_|g' \
-e 's|[Bb]oost_boost|boost_system|g' -i || exit 1
# remove tests that require root privileges
rm src/test/cli/ceph-authtool/cap*.t
sed -i '/add_ceph_test(mgr-dashboard-smoke.sh/d' src/test/mgr/CMakeLists.txt
# disable/remove broken tests
sed -i '/add_ceph_test(smoke.sh/d' src/test/CMakeLists.txt
sed -i '/add_ceph_test(safe-to-destroy.sh/d' src/test/osd/CMakeLists.txt
}
build() {
cd "${srcdir}/${pkgbase}-${pkgver}"
export CFLAGS+=" ${CPPFLAGS}"
export CXXFLAGS+=" ${CPPFLAGS}"
export CMAKE_BUILD_TYPE='RelWithDebInfo'
export CMAKE_WARN_UNUSED_CLI=no
cmake \
-B build \
-DCMAKE_INSTALL_PREFIX=/usr \
-DCMAKE_INSTALL_SYSCONFDIR=/etc \
-DCMAKE_INSTALL_SBINDIR=/usr/bin \
-DCMAKE_INSTALL_LIBDIR=/usr/lib \
-DCEPH_SYSTEMD_ENV_DIR=/etc/default \
-DCMAKE_INSTALL_LIBEXECDIR=/usr/lib \
-DENABLE_GIT_VERSION=ON \
-DWITH_BABELTRACE=OFF \
-DWITH_LTTNG=OFF \
-DWITH_BLKIN=OFF \
-DWITH_JAEGER=OFF \
-DWITH_FIO=OFF \
-DWITH_OPENLDAP=OFF \
-DWITH_RDMA=OFF \
-DWITH_OCF=OFF \
-DWITH_DPDK=OFF \
-DWITH_SPDK=OFF \
-DWITH_QAT=OFF \
-DWITH_QATZIP=OFF \
-DWITH_RBD=ON \
-DWITH_RBD_RWL=ON \
-DWITH_RBD_SSD_CACHE=ON \
-DWITH_RBD_MIRROR=ON \
-DWITH_CEPHFS=ON \
-DWITH_CEPHFS_JAVA=ON \
-DWITH_CEPHFS_SHELL=ON \
-DWITH_FUSE=ON \
-DWITH_LZ4=ON \
-DWITH_XFS=ON \
-DWITH_MGR=ON \
-DWITH_MGR_DASHBOARD_FRONTEND=ON \
-DDASHBOARD_FRONTEND_LANGS="en-US" \
-DWITH_RADOSGW=ON \
-DWITH_RADOSGW_BEAST_OPENSSL=ON \
-DWITH_RADOSGW_AMQP_ENDPOINT=ON \
-DWITH_RADOSGW_KAFKA_ENDPOINT=ON \
-DWITH_RADOSGW_LUA_PACKAGES=ON \
-DWITH_RADOSGW_DBSTORE=OFF \
-DWITH_RADOSGW_SELECT_PARQUET=OFF \
-DWITH_RADOSGW_MOTR=OFF \
-DWITH_RADOSGW_DAOS=OFF \
-DWITH_SYSTEMD=ON \
-DWITH_SYSTEM_BOOST=ON \
-DWITH_SYSTEM_ZSTD=ON \
-DWITH_SYSTEM_UTF8PROC=ON \
-DWITH_SYSTEM_GTEST=OFF \
-DWITH_SYSTEM_NPM=OFF \
-DENABLE_SHARED=ON \
-DWITH_TESTS=ON \
-Wno-dev
make -C build legacy-option-headers
make -C build all
}
check() {
cd "${srcdir}/${pkgbase}-${pkgver}"
export CTEST_PARALLEL_LEVEL=7
export CTEST_OUTPUT_ON_FAILURE=1
VERBOSE=1 make -C build check || true
}
_package() {
local p="$1" f d; shift
for f in "$@"; do
d="$srcdir/__pkg__/$p/${f#${_staging}/}"
mkdir -p "$(dirname "$d")"
mv -v "$f" "$d"
rmdir -p --ignore-fail-on-non-empty "$(dirname "$f")"
done
}
_print() {
(
cd "$pkgdir" && \
find . -type f,l -print0 \
| xargs --null -I@ echo ' > @'
)
}
# Real packaging function, make sure to call this in the *first*
# package_() function makepkg calls
#
# Keep in mind that adding _package lines here does nothing unless
# that package is:
# 1. Referenced in pkgname=()
# 2. Has a package_<name>() function defined for it
_make_ceph_packages() {
# Main install
local install="${pkgdir}/staging" ; mkdir "${install}"
make DESTDIR="${install}" -C "${srcdir}/${pkgbase}-${pkgver}/build" install
# Clear _package cache
rm -rf "${srcdir}/__pkg__" || :
(
cd "${install}"
pyv=$(python -c 'import sys ; v = sys.version_info ; print("%d.%d" %(v[0], v[1]))')
lib=usr/lib
inc=usr/include
bin=usr/bin
sbin=usr/sbin
share=usr/share
etc=etc
python=$lib/python${pyv}/site-packages
systemd=$lib/systemd/system
man=$share/man
###############################################
# Print install files #
###############################################
printf '##### CEPH INSTALL ' ; printf '%0.s#' {1..29} ; printf '\n'
find . | sed -e 's|^\./||'
printf '##### CEPH INSTALL ' ; printf '%0.s#' {1..29} ; printf '\n'
###############################################
# Install pruning #
###############################################
# Remove 'tests' directories
find . -depth -type d -name 'tests' -exec rm -vr '{}' \+
# Remove most common test bins/scripts
find . -depth -type f,l -name '*test*' -exec rm -v '{}' \+
# $share/ceph/mgr/test_orchestrator
find . -depth -type d -name 'test_orchestrator' -exec rm -vr '{}' \+
# Live test tools
rm -v $bin/ceph_scratchtool{,pp}
rm -rv $bin/ceph_psim
rm -rv $bin/ceph-run $man/man8/ceph-run.8
rm -rv $bin/ceph_multi_stress_watch
rm -rv $bin/ceph-coverage
# Old ssh key stuff
rm -vf $share/ceph/*drop.ceph*
# TODO: Move this into a patch
# Fix EnvironmentFile location in systemd service files
sed -i -e 's|/etc/sysconfig/|/etc/conf.d/|g' $systemd/*.service
# Fix bash completions path
install -d -m 755 "$share/bash-completion"
mv -v $etc/bash_completion.d $share/bash-completion/completions
# TODO: Move this into a patch
# Fix sbin dir (cmake opt seems to have no effect)
mv -v $sbin/* $bin/
rm -vrf $sbin
###############################################
# Ceph core libraries #
###############################################
_package ceph-compressor \
$lib/ceph/compressor/*
_package ceph-crypto \
$lib/ceph/crypto/*
_package ceph-erasure \
$lib/ceph/erasure-code/*
_package ceph-common \
$bin/crushtool \
$bin/ceph-authtool \
$bin/ceph-conf \
$lib/ceph/ceph_common.sh \
$lib/ceph/libceph-common.so.2 \
$lib/ceph/extblkdev/libceph_ebd_vdo.so \
$lib/ceph/denc/* \
$share/doc/ceph/sample.ceph.conf \
$man/man8/crushtool.8 \
$man/man8/ceph-{conf,authtool}.8
_package librados \
$inc/rados/* \
$inc/radosstriper/* \
$lib/librados.so{,.2,.2.0.0} \
$lib/libradosstriper.so{,.1,.1.0.0} \
$lib/rados-classes/* \
$bin/librados-config \
$bin/ceph-clsinfo \
$man/man8/librados-config.8 \
$man/man8/ceph-clsinfo.8
_package ceph-rados \
$bin/rados \
$bin/ceph_radosacl \
$share/bash-completion/completions/rados \
$man/man8/rados.8
_package libcephsqlite \
$inc/libcephsqlite.h \
$lib/libcephsqlite.so
###############################################
# Ceph cluster components #
###############################################
_package ceph-base \
$bin/ceph \
$bin/ceph-crash \
$share/bash-completion/completions/ceph \
$systemd/ceph-crash.service \
$systemd/ceph.target \
$man/man8/ceph.8
_package ceph-mon \
$bin/ceph-mon \
$bin/ceph-monstore-tool \
$bin/monmaptool \
$bin/ceph-create-keys \
$lib/ceph/ceph-monstore-update-crush.sh \
$systemd/ceph-mon{.target,@.service} \
$man/man8/{ceph-mon,monmaptool}.8 \
$man/man8/ceph-create-keys.8
_package ceph-mgr \
$bin/ceph-mgr \
$bin/ceph-exporter \
$systemd/ceph-mgr{.target,@.service} \
$share/ceph/mgr/*
_package ceph-osd \
$bin/ceph-osd \
$bin/ceph-{osdomap,bluestore}-tool \
$bin/osdmaptool \
$bin/crushdiff \
$bin/ceph-objectstore-tool \
$lib/ceph/ceph-osd-prestart.sh \
$systemd/ceph-osd{.target,@.service} \
$systemd/ceph-volume@.service \
$man/man8/{ceph-{osd,bluestore-tool},osdmaptool,crushdiff}.8
_package ceph-mds \
$bin/ceph-mds \
$systemd/ceph-mds{.target,@.service} \
$man/man8/ceph-mds.8
_package ceph-rgw \
$bin/ceph_rgw_{jsonparser,multiparser} \
$bin/rgw-* \
$bin/radosgw* \
$bin/ceph-diff-sorted \
$systemd/ceph-radosgw{.target,@.service} \
$share/bash-completion/completions/radosgw-admin \
$man/man8/radosgw{,-admin}.8 \
$man/man8/rgw-orphan-list.8 \
$man/man8/ceph-diff-sorted.8 \
$man/man8/rgw-policy-check.8
###############################################
# Ceph clients / applications #
###############################################
_package librbd \
$inc/rbd/* \
$lib/librbd.so{,.1,.1.18.0} \
$lib/ceph/librbd/*
_package ceph-rbd \
$bin/ceph-rbdnamer \
$bin/rbd{,map,-{fuse,mirror,nbd,replay,replay-many}} \
$bin/ceph-immutable-object-cache \
$systemd/ceph-rbd-mirror{.target,@.service} \
$systemd/ceph-immutable-object-cache{.target,@.service} \
$systemd/rbdmap.service \
$share/bash-completion/completions/rbd \
$man/man8/ceph-rbdnamer.8 \
$man/man8/ceph-immutable-object-cache.8 \
$man/man8/rbd*
_package libcephfs \
$inc/cephfs/* \
$lib/libcephfs.so{,.2,.2.0.0}
_package ceph-cephfs \
$bin/cephfs-{data-scan,{journal,table}-tool,mirror} \
$bin/ceph-fuse \
$bin/mount.{ceph,fuse.ceph} \
$bin/ceph-client-debug \
$systemd/cephfs-mirror{.target,@.service} \
$systemd/ceph-fuse{.target,@.service} \
$man/man8/ceph-fuse.8 \
$man/man8/mount.{ceph,fuse.ceph}.8 \
$man/man8/cephfs-*
_package librgw \
$lib/librgw.so{,.2,.2.0.0}
_package ceph-cephadm \
$bin/cephadm \
$man/man8/cephadm.8
_package ceph-volume \
$bin/ceph-volume{,-systemd} \
$python/ceph_volume \
$python/ceph_volume-*egg-info* \
$man/man8/ceph-volume{,-systemd}.8
_package cephfs-shell \
$bin/cephfs-shell \
$python/cephfs_shell-*
_package cephfs-top \
$bin/cephfs-top \
$python/cephfs_top-*
###############################################
# Ceph misc. utils #
###############################################
_package ceph-tools \
$bin/ceph-post-file \
$bin/ceph-dedup-tool \
$bin/ceph-erasure-code-tool \
$bin/ceph-kvstore-tool \
$bin/ceph-debugpack \
$bin/ceph-dencoder \
$man/man8/ceph-{post-file,dencoder}.8 \
$man/man8/ceph-{debugpack,kvstore-tool}.8
_package ceph-test \
$bin/ceph_perf_local \
$bin/ceph_perf_msgr_client \
$bin/ceph_perf_msgr_server \
$bin/ceph_erasure_code_benchmark \
$bin/ceph_objectstore_bench \
$bin/ceph_bench_log \
$bin/ceph_perf_objectstore \
$bin/ceph_omapbench \
$bin/ceph-syn \
$man/man8/ceph-syn.8
_package java-cephfs \
$lib/libcephfs_jni.so{,.1,.1.0.0} \
$share/java/libcephfs.jar
###############################################
# Ceph python packages #
###############################################
_package python-ceph-common \
$python/ceph \
$python/ceph-*egg-info* \
$python/ceph_argparse.py \
$python/ceph_daemon.py
_package python-rados \
$python/rados-* \
$python/rados.cpython-*
_package python-rbd \
$python/rbd-* \
$python/rbd.cpython-*
_package python-cephfs \
$python/cephfs-* \
$python/cephfs.cpython-*
_package python-rgw \
$python/rgw-* \
$python/rgw.cpython-*
)
local -i _ret=$(find "${install}" -type f,l | wc -l)
if (( _ret > 0 )) ; then
echo "[ERROR] Files were found after packaging! Bailing out!"
echo " Please ensure all files are either moved or"
echo " deleted before package_ceph-common() completes."
( cd "${install}" && find . -type f,l | sed -e 's|^\./||' )
return 1
else
rm -rf "${install}"
fi
return 0
}
###############################################
# Ceph core libraries #
###############################################
package_ceph-common() {
pkgdesc='Ceph Storage common libraries and dependencies'
depends=(
"ceph-compressor=${__version}" "ceph-crypto=${__version}" "ceph-erasure=${__version}"
'boost-libs' 'curl' 'glibc' 'keyutils' 'libutil-linux'
'nss' 'systemd-libs' 'bash' 'fmt' 'cryptsetup'
'libxcrypt' 'libaio' 'libcap' 'gperftools'
)
provides=(
'libceph-common.so' 'libceph_ebd_vdo.so'
)
#============================================#
# This section needs to be run in the first #
# package function makepkg calls to populate #
# the contents of each package function. #
_make_ceph_packages
#============================================#
mv __pkg__/$pkgname/* "$pkgdir"
# sysusers
install -Dm644 "${srcdir}/ceph.sysusers" \
"${pkgdir}/usr/lib/sysusers.d/${pkgbase}.conf"
# Prepare conf dir
install -D -d -m755 -o 0 -g 340 "${pkgdir}/etc/ceph"
_print
}
package_ceph-compressor() {
pkgdesc='Ceph Storage compressor libs'
depends=(
'gcc-libs' 'lz4' 'snappy' 'zlib' 'zstd'
)
mv __pkg__/$pkgname/* "$pkgdir"
_print
}
package_ceph-crypto() {
pkgdesc='Ceph Storage crypto libs'
depends=(
'gcc-libs' 'openssl'
)
mv __pkg__/$pkgname/* "$pkgdir"
_print
}
package_ceph-erasure() {
pkgdesc='Ceph Storage erasure coding libs'
depends=(
'gcc-libs'
)
mv __pkg__/$pkgname/* "$pkgdir"
_print
}
package_librados() {
pkgdesc='Ceph Storage client library to the RADOS distributed object store'
depends=(
"ceph-common=${__version}"
'bash' 'boost-libs' 'fmt' 'lua' 'oath-toolkit'
)
provides=(
'libradosstriper.so' 'librados.so'
)
mv __pkg__/$pkgname/* "$pkgdir"
_print
}
package_ceph-rados() {
pkgdesc='Ceph Storage utilities and tools for librados'
depends=(
"librados=${__version}"
'gcc-libs'
)
mv __pkg__/$pkgname/* "$pkgdir"
_print
}
package_libcephsqlite() {
pkgdesc='Ceph Storage client library for a RADOS backed sqlite3 VFS extension'
depends=(
"librados=${__version}"
'fmt'
)
provides=(
'libcephsqlite.so'
)
mv __pkg__/$pkgname/* "$pkgdir"
_print
}
###############################################
# Ceph cluster components #
###############################################
package_ceph-base() {
pkgdesc='Ceph Storage cluster base utilities and configuration'
depends=(
"ceph-common=${__version}" "librados=${__version}" "python-ceph-common=${__version}" "python-rados=${__version}"
'python'
)
backup=(
'etc/logrotate.d/ceph'
'etc/sudoers.d/90-ceph'
)
mv __pkg__/$pkgname/* "$pkgdir"
# tmpfiles
install -Dm644 "${srcdir}/${pkgbase}-${pkgver}/systemd/ceph.tmpfiles.d" \
"${pkgdir}/usr/lib/tmpfiles.d/${pkgbase}.conf"
# logrotate
install -Dm644 "${srcdir}/${pkgbase}-${pkgver}/src/logrotate.conf" \
"${pkgdir}/etc/logrotate.d/ceph"
# sudoers (for disk monitoring)
install -Dm640 "${srcdir}/ceph.sudoers" \
"${pkgdir}/etc/sudoers.d/90-ceph"
chmod 750 "${pkgdir}/etc/sudoers.d"
# Prepare log, state dirs
install -D -d -m755 -o 340 -g 340 "${pkgdir}/var/log/ceph"
install -D -d -m755 -o 340 -g 340 "${pkgdir}/var/lib/ceph"
_print
}
package_ceph-mon() {
pkgdesc='Ceph Storage cluster monitor daemon, for distributed state storage via PAXOS'
depends=(
"ceph-base=${__version}"
'bash' 'boost-libs' 'fmt' 'gperftools' 'snappy'
)
mv __pkg__/$pkgname/* "$pkgdir"
# Prepare state dir
install -D -d -m755 -o 340 -g 340 "${pkgdir}/var/lib/ceph"
install -D -d -m750 -o 340 -g 340 "${pkgdir}/var/lib/ceph/mon"
_print
}
package_ceph-mgr() {
pkgdesc='Ceph Storage cluster manager daemon, the API gateway for cluster management'
depends=(
"ceph-base=${__version}" "python-cephfs=${__version}" "python-rbd=${__version}" "libcephsqlite=${__version}"
'sqlite' 'python' 'boost-libs' 'fmt' 'gperftools'
'python-requests' 'python-typing_extensions' 'python-pyjwt' 'python-coverage' 'python-jinja'
'python-pyopenssl' 'python-cherrypy' 'python-werkzeug' 'python-prettytable' 'python-pecan'
'python-scipy' 'python-yaml' 'python-setuptools' 'python-bcrypt' 'python-dateutil'
'python-cheroot' 'python-urllib3' 'python-jsonpatch' 'python-cryptography'
)
optdepends=(
'cephadm: Required if cluster is managed via cephadm'
'python-kubernetes: For mgr/module:rook,k8sevents'
'python-numpy: For mgr/module:diskprediction_local'
'python-influxdb: For mgr/module:influx'
)
# Prepare state dir
install -D -d -m755 -o 340 -g 340 "${pkgdir}/var/lib/ceph"
install -D -d -m750 -o 340 -g 340 "${pkgdir}/var/lib/ceph/mgr"
mv __pkg__/$pkgname/* "$pkgdir"
_print
}
package_ceph-osd() {
pkgdesc='Ceph Storage cluster object storage daemon, for managing block devices'
depends=(
"ceph-base=${__version}"
'fuse3' 'bash' 'boost-libs' 'fmt' 'gperftools'
'libaio' 'snappy' 'systemd-libs' 'python'
)
optdepends=(
'ceph-volume: For preparing block devices for OSD daemons'
'smartmontools: disk monitoring via S.M.A.R.T'
'nvme-cli: disk monitoring for NVMe drives'
)
backup=(
'etc/sysctl.d/90-ceph-osd.conf'
)
mv __pkg__/$pkgname/* "$pkgdir"
# Prepare state dirs
install -D -d -m755 -o 340 -g 340 "${pkgdir}/var/lib/ceph"
install -D -d -m750 -o 340 -g 340 "${pkgdir}/var/lib/ceph/bootstrap-osd"
install -D -d -m750 -o 340 -g 340 "${pkgdir}/var/lib/ceph/osd"
# sysctls
sed -i -e '/kernel.pid_max/d' \
"${srcdir}/${pkgbase}-${pkgver}/etc/sysctl/90-ceph-osd.conf"
install -Dm644 "${srcdir}/${pkgbase}-${pkgver}/etc/sysctl/90-ceph-osd.conf" \
"${pkgdir}/etc/sysctl.d/90-ceph-osd.conf"
_print
}
package_ceph-mds() {
pkgdesc='Ceph Storage cluster metadata server, the API gateway for CephFS'
depends=(
"ceph-base=${__version}"
'lua' 'fmt' 'gperftools'
)
mv __pkg__/$pkgname/* "$pkgdir"
# Prepare state dirs
install -D -d -m755 -o 340 -g 340 "${pkgdir}/var/lib/ceph"
install -D -d -m750 -o 340 -g 340 "${pkgdir}/var/lib/ceph/bootstrap-mds"
install -D -d -m750 -o 340 -g 340 "${pkgdir}/var/lib/ceph/mds"
_print
}
package_ceph-rgw() {
pkgdesc='Ceph Storage cluster RADOS Object Gateway daemon, for serving RESTful traffic'
depends=(
"librgw=${__version}"
'gawk' 'oath-toolkit' 'boost-libs' 'expat' 'gperftools'
'librabbitmq-c' 'librdkafka' 'lua'
)
# Prepare state dirs
install -D -d -m755 -o 340 -g 340 "${pkgdir}/var/lib/ceph"
install -D -d -m750 -o 340 -g 340 "${pkgdir}/var/lib/ceph/bootstrap-rgw"
install -D -d -m750 -o 340 -g 340 "${pkgdir}/var/lib/ceph/rgw"
mv __pkg__/$pkgname/* "$pkgdir"
_print
}
###############################################
# Ceph clients / applications #
###############################################
package_librbd() {
pkgdesc='Ceph Storage client library for RADOS block devices'
depends=(
"librados=${__version}"
'cryptsetup' 'fmt'
)
provides=(
'librbd.so' 'libceph_librbd_parent_cache.so'
)
mv __pkg__/$pkgname/* "$pkgdir"
_print
}
package_ceph-rbd() {
pkgdesc='Ceph Storage utilities and tooling for librbd'
depends=(
"librbd=${__version}"
'libnl' 'fmt' 'fuse3' 'gperftools' 'boost-libs'
'bash' 'cryptsetup'
)
backup=(
'etc/udev/rules.d/50-ceph-rbd.rules'
)
# rbd udev rules
install -Dm644 "${srcdir}/${pkgbase}-${pkgver}/udev/50-rbd.rules" \
"${pkgdir}/etc/udev/rules.d/50-ceph-rbd.rules"
mv __pkg__/$pkgname/* "$pkgdir"
_print
}
package_libcephfs() {
pkgdesc='Ceph Storage client library for CephFS, a distributed POSIX filesystem'
depends=(
"librados=${__version}"
'fmt'
)
provides=(
'libcephfs.so'
)
mv __pkg__/$pkgname/* "$pkgdir"
_print
}
package_ceph-cephfs() {
pkgdesc='Ceph Storage utilities and tooling for libcephfs'
depends=(
"libcephfs=${__version}"
'fuse3' 'fmt' 'gperftools' 'libcap-ng' 'lua' 'python'
)
optdepends=(
"cephfs-shell: Shell access to a CephFS filesystem"
"cephfs-top: Usage and metrics for CephFS, inspired by top(1)"
)
mv __pkg__/$pkgname/* "$pkgdir"
_print
}
package_librgw() {
pkgdesc='Ceph Storage client library to RADOS Object Gateway, a S3 and Swift compatible REST API'
depends=(
"librados=${__version}"
'librabbitmq-c' 'lua' 'librdkafka' 'expat' 'boost-libs' 'gperftools'
)
provides=(
'librgw.so'
)
mv __pkg__/$pkgname/* "$pkgdir"
_print
}
package_ceph-volume() {
pkgdesc='Ceph Storage utility for preparing block devices for use as OSDs'
depends=(
"python-ceph-common=${__version}" "ceph-osd=${__version}"
'python' 'lvm2'
'python-setuptools' 'python-importlib-metadata'
)
mv __pkg__/$pkgname/* "$pkgdir"
_print
}
package_cephfs-shell() {
pkgdesc='Ceph Storage utility for accessing a CephFS filesystem shell'
depends=(
"python-ceph-common=${__version}" "python-cephfs=${__version}"
'python' 'python-cmd2' 'python-colorama'
)
mv __pkg__/$pkgname/* "$pkgdir"
_print
}
package_cephfs-top() {
pkgdesc='Ceph Storage utility for a top(1) inspired curses TUI for CephFS metrics'
depends=(
"python-ceph-common=${__version}" "python-cephfs=${__version}"
'python'
)
mv __pkg__/$pkgname/* "$pkgdir"
_print
}
package_ceph-cephadm() {
pkgdesc='Ceph Storage adminstration and configuration utility'
provides=('cephadm')
conflicts=('cephadm')
depends=(
'python' 'podman'
)
mv __pkg__/$pkgname/* "$pkgdir"
_print
}
###############################################
# Ceph misc. utils #
###############################################
package_ceph-tools() {
pkgdesc='Ceph Storage miscellaneous tooling and utilities'
depends=(
"ceph-base=${__version}"
'bash' 'boost-libs' 'gperftools' 'libaio' 'libcap'
'snappy'
)
mv __pkg__/$pkgname/* "$pkgdir"
_print
}
package_ceph-test() {
pkgdesc='Ceph Storage tools for benchmarking and testing live clusters'
depends=(
"ceph-base=${__version}"
'libcap' 'libaio' 'boost-libs' 'fmt' 'gperftools'
'snappy'
)
mv __pkg__/$pkgname/* "$pkgdir"
_print
}
package_java-cephfs() {
pkgdesc='Ceph Storage JNI bindings for CephFS'
depends=(
"libcephfs=${__version}"
'java-runtime'
)
mv __pkg__/$pkgname/* "$pkgdir"
_print
}
###############################################
# Ceph python packages #
###############################################
package_python-ceph-common() {
pkgdesc='Ceph Storage python module for common classes, objects and types'
depends=(
"ceph-common=${__version}"
'python'
'python-setuptools' 'python-prettytable' 'python-yaml'
)
mv __pkg__/$pkgname/* "$pkgdir"
_print
}
package_python-rados() {
pkgdesc='Ceph Storage python library for librados'
depends=(
"python-ceph-common=${__version}" "librados=${__version}"
'libxcrypt'
)
mv __pkg__/$pkgname/* "$pkgdir"
_print
}
package_python-rbd() {
pkgdesc='Ceph Storage python library for librbd'
depends=(
"python-ceph-common=${__version}" "python-rados=${__version}" "librbd=${__version}"
'libxcrypt'
)
mv __pkg__/$pkgname/* "$pkgdir"
_print
}
package_python-cephfs() {
pkgdesc='Ceph Storage python library for libcephfs'
depends=(
"python-ceph-common=${__version}" "python-rados=${__version}" "libcephfs=${__version}"
'libxcrypt'
)
mv __pkg__/$pkgname/* "$pkgdir"
_print
}
package_python-rgw() {
pkgdesc='Ceph Storage python library for librgw'
depends=(
"python-ceph-common=${__version}" "python-rados=${__version}" "librgw=${__version}"
'libxcrypt'
)
mv __pkg__/$pkgname/* "$pkgdir"
_print
}
###############################################
# Ceph virtual targets #
###############################################
# No package (excluding other virtual targets) should depend on any of these;
# these are convenience targets for other packagers
package_ceph-libs() {
pkgdesc='Ceph Storage client libraries [VIRTUAL]'
depends=(
"librados=${__version}"
"librbd=${__version}"
"libcephfs=${__version}"
"librgw=${__version}"
"libcephsqlite=${__version}"
)
}
package_ceph-cluster() {
pkgdesc='Ceph Storage cluster daemons and components [VIRTUAL]'
depends=(
"ceph-mon=${__version}"
"ceph-mgr=${__version}"
"ceph-osd=${__version}"
"ceph-mds=${__version}"
"ceph-rgw=${__version}"
"ceph-volume=${__version}"
)
}
package_ceph-cli() {
pkgdesc='Ceph Storage CLI utility [VIRTUAL]'
depends=("ceph-base=${__version}")
}
package_ceph() {
pkgdesc='Ceph Storage full install [VIRTUAL]'
depends=(
"ceph-libs=${__version}"
"ceph-cluster=${__version}"
"ceph-rados=${__version}"
"ceph-rbd=${__version}"
"ceph-cephfs=${__version}"
"ceph-tools=${__version}"
"ceph-test=${__version}"
"python-rados=${__version}"
"python-rbd=${__version}"
"python-cephfs=${__version}"
"python-rgw=${__version}"
)
}
#======================================================================================#
#======================================================================================#
# vim:set ts=2 sw=2 et: