beegfs/beegfs.spec
2025-08-10 01:34:16 +02:00

632 lines
18 KiB
RPMSpec

%define VER %(echo '%{BEEGFS_VERSION}' | cut -d - -f 1)
%define BEEGFS_MAJOR_VERSION %(echo '%{BEEGFS_VERSION}' | cut -d . -f 1)
%define CLIENT_DIR /opt/beegfs/src/client/client_module_%{BEEGFS_MAJOR_VERSION}
%define CLIENT_COMPAT_DIR /opt/beegfs/src/client/client_compat_module_%{BEEGFS_MAJOR_VERSION}
%define is_sles %(test -f /etc/os-release && grep -q "openSUSE" /etc/os-release || test -f /etc/SUSEConnect && echo 1 || echo 0)
%if %is_sles
%define distver %(release="`rpm -qf --queryformat='%%{VERSION}' /etc/os-release 2> /dev/null | tr . : | sed s/:.*$//g`" ; if test $? != 0 ; then release="" ; fi ; echo "$release")
%define RELEASE sles%{distver}
%else
%if %{defined ?dist}
%define RELEASE %(tr -d . <<< %{?dist})
%else
%define RELEASE generic
%endif
%endif
%define post_package() if [ "$1" = 1 ] \
then \
output=$(systemctl is-system-running 2> /dev/null) \
if [ "$?" == 127 ] \
then \
chkconfig %1 on \
elif [ "$?" == 0 ] || ( [ "$output" != "offline" ] && [ "$output" != "unknown" ] ) \
then \
systemctl enable %1.service \
else \
chkconfig %1 on \
fi \
fi
%define preun_package() if [ "$1" = 0 ] \
then \
output=$(systemctl is-system-running 2> /dev/null) \
if [ "$?" == 127 ] \
then \
chkconfig %1 off \
elif [ "$?" == 0 ] || ( [ "$output" != "offline" ] && [ "$output" != "unknown" ] ) \
then \
systemctl disable %1.service \
else \
chkconfig %1 off \
fi \
fi
Name: beegfs
Summary: BeeGFS parallel file system
License: BeeGFS EULA
Version: %{VER}
Release: %{RELEASE}
URL: http://www.beegfs.io
Source: beegfs-%{BEEGFS_VERSION}.tar
Vendor: ThinkParQ GmbH
BuildRoot: %{_tmppath}/beegfs-root
Epoch: %{EPOCH}
%description
Distribution of the BeeGFS parallel filesystem.
%clean
rm -rf %{buildroot}
%prep
%setup -c
%define make_j %{?MAKE_CONCURRENCY:-j %{MAKE_CONCURRENCY}}
%build
export BEEGFS_VERSION=%{BEEGFS_VERSION}
export WITHOUT_COMM_DEBUG=1
export BEEGFS_NVFS=1
make %make_j daemons utils
%install
export BEEGFS_VERSION=%{BEEGFS_VERSION}
export WITHOUT_COMM_DEBUG=1
# makefiles need some adjustments still
mkdir -p \
${RPM_BUILD_ROOT}/opt/beegfs/sbin \
${RPM_BUILD_ROOT}/opt/beegfs/lib \
${RPM_BUILD_ROOT}/usr/bin \
${RPM_BUILD_ROOT}/usr/include \
${RPM_BUILD_ROOT}/sbin \
${RPM_BUILD_ROOT}/usr/share/doc/beegfs-client-devel/examples/ \
${RPM_BUILD_ROOT}/usr/share/doc/beegfs-utils-devel/examples/beegfs-event-listener/build \
${RPM_BUILD_ROOT}/usr/share/doc/beegfs-utils-devel/examples/beegfs-event-listener/source \
${RPM_BUILD_ROOT}/etc/bash_completion.d
##########
########## libbeegfs-ib files
##########
install -D common/build/libbeegfs_ib.so \
${RPM_BUILD_ROOT}/opt/beegfs/lib/libbeegfs_ib.so
install -D debian/copyright ${RPM_BUILD_ROOT}/usr/share/doc/libbeegfs-ib/copyright
##########
########## daemons, utils
##########
make DESTDIR=${RPM_BUILD_ROOT} daemons-install utils-install
##########
########## common directories for extra files
##########
mkdir -p \
${RPM_BUILD_ROOT}/etc/beegfs \
${RPM_BUILD_ROOT}/etc/init.d \
${RPM_BUILD_ROOT}/opt/beegfs/scripts/grafana
##########
########## meta extra files
##########
cp -a meta/build/dist/etc/*.conf ${RPM_BUILD_ROOT}/etc/beegfs
#install systemd unit description
install -D -m644 meta/build/dist/usr/lib/systemd/system/beegfs-meta.service \
${RPM_BUILD_ROOT}/usr/lib/systemd/system/beegfs-meta.service
install -D -m644 meta/build/dist/usr/lib/systemd/system/beegfs-meta@.service \
${RPM_BUILD_ROOT}/usr/lib/systemd/system/beegfs-meta@.service
install -D meta/build/dist/sbin/beegfs-setup-meta \
${RPM_BUILD_ROOT}/opt/beegfs/sbin/beegfs-setup-meta
install -D meta/build/dist/etc/default/beegfs-meta ${RPM_BUILD_ROOT}/etc/default/beegfs-meta
install -D debian/copyright ${RPM_BUILD_ROOT}/usr/share/doc/beegfs-meta/copyright
##########
########## storage extra files
##########
cp -a storage/build/dist/etc/*.conf ${RPM_BUILD_ROOT}/etc/beegfs/
#install systemd unit description
install -D -m644 storage/build/dist/usr/lib/systemd/system/beegfs-storage.service \
${RPM_BUILD_ROOT}/usr/lib/systemd/system/beegfs-storage.service
install -D -m644 storage/build/dist/usr/lib/systemd/system/beegfs-storage@.service \
${RPM_BUILD_ROOT}/usr/lib/systemd/system/beegfs-storage@.service
install -D storage/build/dist/sbin/beegfs-setup-storage \
${RPM_BUILD_ROOT}/opt/beegfs/sbin/beegfs-setup-storage
install -D storage/build/dist/etc/default/beegfs-storage ${RPM_BUILD_ROOT}/etc/default/beegfs-storage
install -D debian/copyright ${RPM_BUILD_ROOT}/usr/share/doc/beegfs-storage/copyright
##########
########## mon extra files
##########
install -D -m644 mon/build/dist/etc/beegfs-mon.conf ${RPM_BUILD_ROOT}/etc/beegfs
install -D -m600 mon/build/dist/etc/beegfs-mon.auth ${RPM_BUILD_ROOT}/etc/beegfs
#install systemd unit description
install -D -m644 mon/build/dist/usr/lib/systemd/system/beegfs-mon.service \
${RPM_BUILD_ROOT}/usr/lib/systemd/system/beegfs-mon.service
install -D -m644 mon/build/dist/usr/lib/systemd/system/beegfs-mon@.service \
${RPM_BUILD_ROOT}/usr/lib/systemd/system/beegfs-mon@.service
install -D mon/build/dist/etc/default/beegfs-mon ${RPM_BUILD_ROOT}/etc/default/beegfs-mon
cp -a mon/scripts/grafana/* ${RPM_BUILD_ROOT}/opt/beegfs/scripts/grafana/
install -D debian/copyright ${RPM_BUILD_ROOT}/usr/share/doc/beegfs-mon/copyright
##########
########## mon-grafana
##########
install -D debian/copyright ${RPM_BUILD_ROOT}/usr/share/doc/beegfs-mon-grafana/copyright
##########
########## utils
##########
cp -a utils/scripts/fsck.beegfs ${RPM_BUILD_ROOT}/sbin/
ln -s /opt/beegfs/sbin/beegfs-fsck ${RPM_BUILD_ROOT}/usr/bin/beegfs-fsck
install -D debian/copyright ${RPM_BUILD_ROOT}/usr/share/doc/beegfs-utils/copyright
##########
########## utils-devel
##########
cp -a event_listener/include/* ${RPM_BUILD_ROOT}/usr/include/
cp -a event_listener/build/Makefile \
${RPM_BUILD_ROOT}/usr/share/doc/beegfs-utils-devel/examples/beegfs-event-listener/build/
cp -a event_listener/source/beegfs-event-listener.cpp \
event_listener/source/beegfs-file-event-log.cpp \
event_listener/source/seqpacket-reader-new-protocol.cpp \
${RPM_BUILD_ROOT}/usr/share/doc/beegfs-utils-devel/examples/beegfs-event-listener/source/
install -D debian/copyright ${RPM_BUILD_ROOT}/usr/share/doc/beegfs-utils-devel/copyright
##########
########## client
##########
make -C client_module/build %make_j \
RELEASE_PATH=${RPM_BUILD_ROOT}/opt/beegfs/src/client KDIR="%{KDIR}" V=1 \
prepare_release
cp client_module/build/dist/etc/*.conf ${RPM_BUILD_ROOT}/etc/beegfs/
cp client_module/build/dist/etc/beegfs-client-build.mk ${RPM_BUILD_ROOT}/etc/beegfs/beegfs-client-build.mk
# compat files
cp -a ${RPM_BUILD_ROOT}/%{CLIENT_DIR} ${RPM_BUILD_ROOT}/%{CLIENT_COMPAT_DIR}
echo beegfs-%{BEEGFS_MAJOR_VERSION} | tr -d . > ${RPM_BUILD_ROOT}/%{CLIENT_COMPAT_DIR}/build/beegfs.fstype
# we use the redhat script for all rpm distros, as we now provide our own
# daemon() and killproc() function library (derived from redhat)
install -D client_module/build/dist/sbin/beegfs-client.init ${RPM_BUILD_ROOT}/opt/beegfs/sbin/beegfs-client
%if !%is_sles
ln -s /opt/beegfs/sbin/beegfs-client ${RPM_BUILD_ROOT}/etc/init.d/beegfs-client
%endif
#install systemd unit description
install -D -m644 client_module/build/dist/usr/lib/systemd/system/beegfs-client.service \
${RPM_BUILD_ROOT}/usr/lib/systemd/system/beegfs-client.service
install -D -m644 client_module/build/dist/usr/lib/systemd/system/beegfs-client@.service \
${RPM_BUILD_ROOT}/usr/lib/systemd/system/beegfs-client@.service
install -D client_module/build/dist/etc/default/beegfs-client ${RPM_BUILD_ROOT}/etc/default/beegfs-client
install -D client_module/scripts/etc/beegfs/lib/init-multi-mode.beegfs-client \
${RPM_BUILD_ROOT}/etc/beegfs/lib/init-multi-mode.beegfs-client
install -D client_module/build/dist/sbin/beegfs-setup-client \
${RPM_BUILD_ROOT}/opt/beegfs/sbin/beegfs-setup-client
install -D client_module/build/dist/sbin/mount.beegfs \
${RPM_BUILD_ROOT}/sbin/mount.beegfs
install -D client_module/build/dist/etc/beegfs-client-mount-hook.example \
${RPM_BUILD_ROOT}/etc/beegfs/beegfs-client-mount-hook.example
install -D debian/copyright ${RPM_BUILD_ROOT}/usr/share/doc/beegfs-client/copyright
##########
########## client-dkms
##########
cp client_module/build/dist/etc/*.conf ${RPM_BUILD_ROOT}/etc/beegfs/
mkdir -p ${RPM_BUILD_ROOT}/usr/src/beegfs-%{VER}
cp -r client_module/build ${RPM_BUILD_ROOT}/usr/src/beegfs-%{VER}
cp -r client_module/source ${RPM_BUILD_ROOT}/usr/src/beegfs-%{VER}
cp -r client_module/include ${RPM_BUILD_ROOT}/usr/src/beegfs-%{VER}
rm -Rf ${RPM_BUILD_ROOT}/usr/src/beegfs-%{VER}/build/dist
install -D client_module/build/dist/sbin/beegfs-setup-client \
${RPM_BUILD_ROOT}/opt/beegfs/sbin/beegfs-setup-client
install -D client_module/build/dist/sbin/mount.beegfs \
${RPM_BUILD_ROOT}/sbin/mount.beegfs
sed -e 's/__VERSION__/%{VER}/g' -e 's/__NAME__/beegfs/g' -e 's/__MODNAME__/beegfs/g' \
< client_module/dkms.conf.in \
> ${RPM_BUILD_ROOT}/usr/src/beegfs-%{VER}/dkms.conf
install -D debian/copyright ${RPM_BUILD_ROOT}/usr/share/doc/beegfs-client-dkms/copyright
##########
########## client-compat
##########
install -D debian/copyright ${RPM_BUILD_ROOT}/usr/share/doc/beegfs-client-compat/copyright
##########
########## client-devel
##########
cp -a client_devel/include/beegfs \
${RPM_BUILD_ROOT}/usr/include/
cp -a client_module/include/uapi/* \
${RPM_BUILD_ROOT}/usr/include/beegfs/
sed -i '~s~uapi/beegfs_client~beegfs/beegfs_client~g' \
${RPM_BUILD_ROOT}/usr/include/beegfs/*.h
cp -a client_devel/build/dist/usr/share/doc/beegfs-client-devel/examples/* \
${RPM_BUILD_ROOT}/usr/share/doc/beegfs-client-devel/examples/
install -D debian/copyright ${RPM_BUILD_ROOT}/usr/share/doc/beegfs-client-devel/copyright
##########
########## beeond
##########
install -D beeond/source/beeond ${RPM_BUILD_ROOT}/opt/beegfs/sbin/beeond
install -D beeond/source/beeond-cp ${RPM_BUILD_ROOT}/opt/beegfs/sbin/beeond-cp
cp beeond/scripts/lib/* ${RPM_BUILD_ROOT}/opt/beegfs/lib/
ln -s /opt/beegfs/sbin/beeond ${RPM_BUILD_ROOT}/usr/bin/beeond
ln -s /opt/beegfs/sbin/beeond-cp ${RPM_BUILD_ROOT}/usr/bin/beeond-cp
install -D debian/copyright ${RPM_BUILD_ROOT}/usr/share/doc/beeond/copyright
%package -n libbeegfs-ib
Summary: BeeGFS InfiniBand support
Group: Software/Other
Buildrequires: librdmacm-devel, libibverbs-devel
BuildRequires: libnl3-devel
Provides: libbeegfs-ib = %{VER}
%description -n libbeegfs-ib
This package contains support libraries for InfiniBand.
%files -n libbeegfs-ib
%license /usr/share/doc/libbeegfs-ib/copyright
/opt/beegfs/lib/libbeegfs_ib.so
%package meta
Summary: BeeGFS meta server daemon
Group: Software/Other
BuildRequires: libnl3-devel
Provides: beegfs-meta = %{VER}
%description meta
This package contains the BeeGFS meta server binaries.
%post meta
%post_package beegfs-meta
%preun meta
%preun_package beegfs-meta
%files meta
%defattr(-,root,root)
%license /usr/share/doc/beegfs-meta/copyright
%config(noreplace) /etc/beegfs/beegfs-meta.conf
%config(noreplace) /etc/default/beegfs-meta
/opt/beegfs/sbin/beegfs-meta
/opt/beegfs/sbin/beegfs-setup-meta
/usr/lib/systemd/system/beegfs-meta.service
/usr/lib/systemd/system/beegfs-meta@.service
%package storage
Summary: BeeGFS storage server daemon
Group: Software/Other
BuildRequires: libnl3-devel
Provides: beegfs-storage = %{VER}
%description storage
This package contains the BeeGFS storage server binaries.
%post storage
%post_package beegfs-storage
%preun storage
%preun_package beegfs-storage
%files storage
%defattr(-,root,root)
%license /usr/share/doc/beegfs-storage/copyright
%config(noreplace) /etc/beegfs/beegfs-storage.conf
%config(noreplace) /etc/default/beegfs-storage
/opt/beegfs/sbin/beegfs-storage
/opt/beegfs/sbin/beegfs-setup-storage
/usr/lib/systemd/system/beegfs-storage.service
/usr/lib/systemd/system/beegfs-storage@.service
%package mon
Summary: BeeGFS mon server daemon
Group: Software/Other
BuildRequires: libnl3-devel
Provides: beegfs-mon = %{VER}
%description mon
This package contains the BeeGFS mon server binaries.
%post mon
%post_package beegfs-mon
%preun mon
%preun_package beegfs-mon
%files mon
%defattr(-,root,root)
%license /usr/share/doc/beegfs-mon/copyright
%config(noreplace) /etc/beegfs/beegfs-mon.conf
%config(noreplace) /etc/beegfs/beegfs-mon.auth
%config(noreplace) /etc/default/beegfs-mon
/opt/beegfs/sbin/beegfs-mon
/usr/lib/systemd/system/beegfs-mon.service
/usr/lib/systemd/system/beegfs-mon@.service
%package mon-grafana
Summary: BeeGFS mon dashboards for Grafana
Group: Software/Other
BuildArch: noarch
Provides: beegfs-mon-grafana = %{VER}
%description mon-grafana
This package contains the BeeGFS mon dashboards to display monitoring data in Grafana.
The default dashboard setup requires both Grafana, and InfluxDB.
%files mon-grafana
%license /usr/share/doc/beegfs-mon-grafana/copyright
%defattr(-,root,root)
/opt/beegfs/scripts/grafana/
%package utils
Summary: BeeGFS utilities
Group: Software/Other
BuildRequires: libnl3-devel
Provides: beegfs-utils = %{VER}
%description utils
This package contains BeeGFS utilities.
%files utils
%defattr(-,root,root)
%license /usr/share/doc/beegfs-utils/copyright
%attr(0755, root, root) /opt/beegfs/sbin/beegfs-fsck
/usr/bin/beegfs-fsck
/sbin/fsck.beegfs
/opt/beegfs/sbin/beegfs-event-listener
%package utils-devel
Summary: BeeGFS utils devel files
Group: Software/Other
BuildArch: noarch
Provides: beegfs-utils-devel = %{VER}
%description utils-devel
This package contains BeeGFS utils development files and examples.
%files utils-devel
%defattr(-,root,root)
%license /usr/share/doc/beegfs-utils-devel/copyright
/usr/include/beegfs/beegfs_file_event_log.hpp
/usr/include/beegfs/seqpacket-reader-new-protocol.hpp
/usr/share/doc/beegfs-utils-devel/examples/beegfs-event-listener/*
%package client
Summary: BeeGFS client kernel module
License: GPL v2
Group: Software/Other
BuildArch: noarch
%if %is_sles
Requires: make, gcc, kernel-default-devel, elfutils
%else
Requires: make, gcc
Recommends: kernel-devel, elfutils-libelf-devel
%endif
Conflicts: beegfs-client-dkms
Provides: beegfs-client = %{VER}
%description client
This package contains scripts, config and source files to build and
start beegfs-client.
%post client
%post_package beegfs-client
# make the script to run autobuild
mkdir -p /var/lib/beegfs/client
touch /var/lib/beegfs/client/force-auto-build
%preun client
%preun_package beegfs-client
%files client
%defattr(-,root,root)
%license /usr/share/doc/beegfs-client/copyright
%config(noreplace) /etc/beegfs/beegfs-client-autobuild.conf
%config(noreplace) /etc/beegfs/beegfs-client-mount-hook.example
%config(noreplace) /etc/beegfs/beegfs-client.conf
%config(noreplace) /etc/beegfs/beegfs-mounts.conf
%dir /etc/beegfs/lib/
%config(noreplace) /etc/beegfs/lib/init-multi-mode.beegfs-client
%config(noreplace) /etc/default/beegfs-client
/opt/beegfs/sbin/beegfs-client
%if !%is_sles
/etc/init.d/beegfs-client
%endif
/opt/beegfs/sbin/beegfs-setup-client
/sbin/mount.beegfs
/usr/lib/systemd/system/beegfs-client.service
/usr/lib/systemd/system/beegfs-client@.service
%{CLIENT_DIR}
%postun client
rm -rf /lib/modules/*/updates/fs/beegfs_autobuild
%package client-dkms
Summary: BeeGFS client kernel module (DKMS version)
License: GPL v2
Group: Software/Other
BuildArch: noarch
%if %is_sles
Requires: make, dkms, kernel-default-devel, elfutils
%else
Requires: make, dkms
Recommends: kernel-devel, elfutils-libelf-devel
%endif
Conflicts: beegfs-client
Provides: beegfs-client = %{VER}
%description client-dkms
This package contains scripts, config and source files to build and
start beegfs-client. It uses DKMS to build the kernel module.
%post client-dkms
dkms install beegfs/%{VER}
%preun client-dkms
dkms remove beegfs/%{VER} --all
%files client-dkms
%defattr(-,root,root)
%license /usr/share/doc/beegfs-client-dkms/copyright
%config(noreplace) /etc/beegfs/beegfs-client.conf
%config(noreplace) /etc/beegfs/beegfs-client-build.mk
/sbin/mount.beegfs
/usr/src/beegfs-%{VER}
%package client-compat
Summary: BeeGFS client compat module, allows to run two different client versions.
License: GPL v2
Group: Software/Other
%if %is_sles
Requires: make, gcc, kernel-default-devel, elfutils
%else
Requires: make, gcc
Recommends: kernel-devel, elfutils-libelf-devel
%endif
BuildArch: noarch
Provides: beegfs-client-compat = %{VER}
%description client-compat
This package allows to build and to run a compatbility beegfs-client kernel module
on a system that has a newer beegfs-client version installed.
%files client-compat
%license /usr/share/doc/beegfs-client-compat/copyright
%defattr(-,root,root)
%{CLIENT_COMPAT_DIR}
%package client-devel
Summary: BeeGFS client devel files
Group: Software/Other
BuildArch: noarch
Provides: beegfs-client-devel = %{VER}
%description client-devel
This package contains BeeGFS client development files.
%files client-devel
%defattr(-,root,root)
%license /usr/share/doc/beegfs-client-devel/copyright
%dir /usr/include/beegfs
/usr/include/beegfs/beegfs.h
/usr/include/beegfs/beegfs_client.h
/usr/include/beegfs/beegfs_ioctl.h
/usr/include/beegfs/beegfs_ioctl_functions.h
/usr/share/doc/beegfs-client-devel/examples/createFileWithStripePattern.cpp
/usr/share/doc/beegfs-client-devel/examples/getStripePatternOfFile.cpp
%package -n beeond
Summary: BeeOND
Group: Software/Other
# The dependecies used to be on FULL_VERSION=%{EPOCH}:%{VER}-%{RELEASE}, which
# doesn't work with BeeGFS 8, because the distribution independent packages
# can not append an OS RELEASE. We also don't need to depend on the EPOCH, the
# semantic version should be enough, so we just depend on %{VER} now.
Requires: beegfs-tools = %{VER}, beegfs-mgmtd = %{VER}, beegfs-meta = %{VER}, beegfs-storage = %{VER}, beegfs-client = %{VER}, libbeegfs-license = %{VER}, psmisc
BuildArch: noarch
Provides: beeond = %{VER}
%description -n beeond
This package contains BeeOND.
%files -n beeond
%defattr(-,root,root)
%license /usr/share/doc/beeond/copyright
/opt/beegfs/sbin/beeond
/usr/bin/beeond
/opt/beegfs/sbin/beeond-cp
/usr/bin/beeond-cp
/opt/beegfs/lib/beeond-lib
/opt/beegfs/lib/beegfs-ondemand-stoplocal