File ocfs2-test.spec of Package ocfs2-test

#
# Spec file for ocfs-test
#

# Macros
# This one is hardcoded because, well, it belongs there
%define _prefix /
# Because RPM is dumb
%define _unpackaged_files_terminate_build 0
%define uname ocfs2test
# legacy group name is 'users', we change it from bsc#1239810
%define gname %{uname}
%define _installdir /usr/local/ocfs2-test

Summary: Test suite for ocfs2 and ocfs2-tools
Name: ocfs2-test
Version: 1.0.5+git.14f04bbe9bf5
Release: 0
License: GPL-2.0+
Group: System Environment/Kernel
Source: ocfs2-test-%{version}.tar.bz2
Source2: system-user-%{name}.conf
URL: https://github.com/markfasheh/ocfs2-test
# upstream speical patch
# Patch001:  n/a
# suse speical patch
Patch101:  bsc1239810_01-make-autoconf-support-python3.patch
Patch102:  bsc1239810_02-autoconf-update-configure.in.patch
Patch103:  bsc1239810_03-autoconf-fix-warning-about-configure.in.patch
Patch104:  bsc1239810_04-configure-add-datarootdir-for-removing-a-build-warni.patch
Patch105:  bsc1239810_05-make-remove-redundant-definitions-from-Postamble.mak.patch
Patch106:  bsc1239810_06-configure-use-mpicc4-to-replace-mpicc1.patch

PreReq: permissions
Requires: shadow
Requires: coreutils
Requires: net-tools
Requires: glib2
Requires: util-linux
Requires: python3
Requires: bc
Requires: attr
Requires: wget
Requires: sudo
%if 0%{?sle_version} <= 150200 && ! 0%{?is_opensuse}
BuildRequires: openmpi-devel
Requires: openmpi
%define openmpi_path "/usr/lib64/mpi/gcc/openmpi/bin/"
%else
BuildRequires: openmpi4-devel
Requires: openmpi4
%define openmpi_path "/usr/lib64/mpi/gcc/openmpi4/bin/"
%endif
BuildRequires: e2fsprogs-devel
BuildRequires: glib2-devel
BuildRequires: python3-devel
BuildRequires: util-linux
BuildRequires: autoconf
BuildRequires: libaio-devel
BuildRequires: ocfs2-tools-devel
BuildRequires: ocfs2-tools-devel-static
BuildRequires: glibc-devel
BuildRequires: pkgconfig(corosync)
BuildRequires: libdlm-devel
%if 0%{?suse_version} >= 1600
BuildRequires: sysuser-tools
%endif
# current (2025.3) openmpi1 is not supported by SUSE, following
# version 1.0.4 just randomly generated to avoid rpmbuild warning:
# "unversioned Obsoletes"
Obsoletes: openmpi-compat < 1.0.4

%if 0%{?suse_version} >= 1600
Provides: user(%{uname})
Provides: group(%{uname})
%sysusers_requires
%endif

BuildRoot: %{_tmppath}/%{name}-%{version}-build

%description
OCFS2-TEST is package to test ocfs2 and ocfs2-tools.

%package devel-static
Summary:        Ocfs2-test static libraries
Group:          Development/Libraries/C and C++
Requires:       ocfs2-tests = %{version}

%description devel-static
OCFS2 is the Oracle Cluster File System.

This package contains the static libraries for developing low-level
test cases for OCFS2.

%prep
%autosetup -p1

%build
export PROJECT="ocfs2-test"
autoreconf -fi -I /usr/share/aclocal
PATH=%{openmpi_path}:$PATH ./configure \
    --bindir=%{_bindir} \
    --sbindir=%{_sbindir} \
    --prefix=%{_prefix} \
    --localstatedir=%{_localstatedir} \
    --mandir=%{_mandir} \
    --sysconfdir=%{_sysconfdir} \
    --datarootdir=%{_datadir} \
    --datadir=%{_datadir} \
    --libdir=%{_libdir} \
    --exec_prefix=%{_prefix} \
    --infodir=%{_infodir} \
    --program-prefix= \
    --libexecdir=%{_libexecdir} \
    --sharedstatedir=%{_sharedstatedir}
make

%if 0%{?suse_version} >= 1600
%sysusers_generate_pre %{SOURCE2} %{name} system-user-%{name}.conf
%endif


%install
make DESTDIR="$RPM_BUILD_ROOT%{_installdir}" install
%if 0%{?suse_version} >= 1600
install -D -m 0644 %{SOURCE2} %{buildroot}%{_sysusersdir}/system-user-%{name}.conf
%endif

# we don't release devel-static now
rm %{buildroot}/%{_installdir}/%{_libdir}/libocfs2test.a

%clean
rm -rf "$RPM_BUILD_ROOT"

%if 0%{?suse_version} >= 1600
%pre -f %{name}.pre
%else
%pre
  echo "Create %{uname} (id:2222) user, which is used to execute ocfs2 testing."
  # create group, if not existing
  if getent group %{gname} >/dev/null; then
      echo "  Group %{gname} already exists."
  else
      groupadd -g 2222 %{gname} 2>/dev/null
      if [ $? -ne 0 ]; then
          echo "  Error: Failed to create group %{gname}." >&2
      else
          echo "  Group %{gname} created successfully."
      fi
  fi
  
  # create user, if not existing
  if getent passwd %{uname} >/dev/null; then
      echo "  User %{uname} already exists."
  else
      useradd -g %{gname} -u 2222 -c "for ocfs2 testing" -m %{uname} 2>/dev/null
      if [ $? -ne 0 ]; then
          echo "  Error: Failed to create user %{uname}." >&2
      else
          echo "  User %{uname} created successfully."
      fi
  fi
%endif

%post
# systemd-sysusers only sets the home directory record in the user database. 
# We create the home directory here.
if [ ! -d /home/%{uname} ] ; then
    echo "Create /home/%{uname} directory"
    mkdir /home/%{uname}
    touch /home/%{uname}/.bash_profile
    chown %{uname}:%{gname} -R /home/%{uname}
fi

echo "Set environmental variables in \".bash_profile\" for ocfs2 testing."
if [ -d /usr/lib64/mpi/gcc/openmpi/bin ] ; then
    echo "PATH=$PATH:/usr/local/ocfs2-test/bin:/usr/lib64/mpi/gcc/openmpi/bin" > /home/%{uname}/.bash_profile
    echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64/mpi/gcc/openmpi/lib64" >> /home/%{uname}/.bash_profile
elif [ -d /usr/lib64/mpi/gcc/openmpi4/bin ] ; then
    echo "PATH=$PATH:/usr/local/ocfs2-test/bin:/usr/lib64/mpi/gcc/openmpi4/bin" > /home/%{uname}/.bash_profile
    echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64/mpi/gcc/openmpi4/lib64" >> /home/%{uname}/.bash_profile
else
    echo "Did not detect openmpi or openmpi4 installation path!"
fi
echo "export PATH" >> /home/%{uname}/.bash_profile
echo "export LD_LIBRARY_PATH" >> /home/%{uname}/.bash_profile

if [ -f /usr/etc/sudoers ]; then
    echo "Add %{uname} user to /usr/etc/sudoers."
    grep %{uname} /usr/etc/sudoers >/dev/null 2>&1 || echo "%{uname} ALL=(ALL) NOPASSWD:ALL" >> /usr/etc/sudoers
else
    # if /usr/etc/sudoers does not exist, we think we are using legacy sudo
    echo "Add %{uname} user to /etc/sudoers."
    grep %{uname} /etc/sudoers >/dev/null 2>&1 || echo "%{uname} ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
fi

if [ ! -f /etc/blkid.conf ]; then
    echo "create /etc/blkid.conf and write configuration value."
    echo "EVALUATE=udev,scan" > /etc/blkid.conf
else
    echo "Add scan evaluation method to /etc/blkid.conf."
    grep '^EVALUATE=.*scan$' /etc/blkid.conf >/dev/null 2>&1 || sed -i 's/^EVALUATE=.*/EVALUATE=udev,scan/' /etc/blkid.conf
fi

echo "Please note that you need to complete the following before execute ocfs2 testing"
echo "  1. Configure passwordless SSH in %{uname} user among cluster nodes."
echo "  2. Make sure %{uname} user has R/W rights on ocfs2 mount point."

%files
%defattr(-,%{uname},%{gname},-)
%if 0%{?suse_version} >= 1600
%{_sysusersdir}/system-user-%{name}.conf
%endif
%dir %{_installdir}
%dir %{_installdir}/bin
%dir %{_installdir}/%{_libdir}
%dir %{_installdir}/workfiles
%dir %{_installdir}/workfiles/fill_holes_data
%dir %{_installdir}/workfiles/fsck-test
%dir %{_installdir}/workfiles/fsck-test/medium-disk
%dir %{_installdir}/workfiles/fsck-test/small-disk
%{_installdir}/bin/acl_tests.sh
%{_installdir}/bin/aio-stress
%{_installdir}/bin/buildkernel.py
%{_installdir}/bin/burn-in.sh
%{_installdir}/bin/check_file_size_limits
%{_installdir}/bin/command.py
%{_installdir}/bin/concurrent_flock_test.pl
%{_installdir}/bin/config.py
%{_installdir}/bin/config.sh
%{_installdir}/bin/corrupt_remove_slot.sh
%{_installdir}/bin/crdel_del_files.py
%{_installdir}/bin/crdel_gen_files.py
%{_installdir}/bin/create_and_open
%{_installdir}/bin/create_racer
%{_installdir}/bin/cross_delete.py
%{_installdir}/bin/dir_create.sh
%{_installdir}/bin/dlmstress1.sh
%{_installdir}/bin/enospc.sh
%{_installdir}/bin/enospc_test
%{_installdir}/bin/extend_and_write
%{_installdir}/bin/extend_files.sh
%{_installdir}/bin/extendo
%{_installdir}/bin/file_concat.sh
%{_installdir}/bin/file_create.sh
%{_installdir}/bin/file_link.sh
%{_installdir}/bin/file_list.sh
%{_installdir}/bin/file_rename.sh
%{_installdir}/bin/file_rm.sh
%{_installdir}/bin/file_symlink.sh
%{_installdir}/bin/fill_holes
%{_installdir}/bin/fill_verify_holes.sh
%{_installdir}/bin/flock_unit_test
%{_installdir}/bin/forkwriter
%{_installdir}/bin/fsck-test.sh
%{_installdir}/bin/fsx
%{_installdir}/bin/fsx-run.sh
%{_installdir}/bin/inline-data
%{_installdir}/bin/inline-dirs
%{_installdir}/bin/inode_alloc_perf.sh
%{_installdir}/bin/lock_grab
%{_installdir}/bin/logwriter
%{_installdir}/bin/lvb_torture
%{_installdir}/bin/mkfs-test.sh
%{_installdir}/bin/mmap_test
%{_installdir}/bin/mmap_truncate
%{_installdir}/bin/mpi-run-parts
%{_installdir}/bin/multi-inline-data
%{_installdir}/bin/multi-inline-dirs
%{_installdir}/bin/multi-inline-run.sh
%{_installdir}/bin/multi_inode_alloc_perf_runner.sh
%{_installdir}/bin/multi_inode_alloc_perf.sh
%{_installdir}/bin/multi_mmap
%{_installdir}/bin/multi_reflink_test
%{_installdir}/bin/multi_reflink_test_run.sh
%{_installdir}/bin/o2tf.py
%{_installdir}/bin/o2tf.sh
%{_installdir}/bin/ocfs2_nicdown.py
%{_installdir}/bin/ocfs2_truncate.sh
%{_installdir}/bin/old_burn-in.sh
%{_installdir}/bin/open_delete
%{_installdir}/bin/open_delete.py
%{_installdir}/bin/partial_aio_direct
%{_installdir}/bin/punch_holes
%{_installdir}/bin/quota_multi_tests
%{_installdir}/bin/quota_tests.sh
%{_installdir}/bin/racer.sh
%{_installdir}/bin/recovery_load.py
%{_installdir}/bin/reflink_files.sh
%{_installdir}/bin/reflink_test
%{_installdir}/bin/reflink_test_run.sh
%{_installdir}/bin/remote_mount.py
%{_installdir}/bin/remote_umount.py
%{_installdir}/bin/remove_slot
%{_installdir}/bin/remove_slot.sh
%{_installdir}/bin/rename_write_race.sh
%{_installdir}/bin/reserve_space
%{_installdir}/bin/resize_test.sh
%{_installdir}/bin/run_buildkernel.py
%{_installdir}/bin/run_create_racer.py
%{_installdir}/bin/run_extend_and_write.py
%{_installdir}/bin/run_flock_unit_test.py
%{_installdir}/bin/run_forkwriter.py
%{_installdir}/bin/run_lvb_torture.py
%{_installdir}/bin/run_multi_mmap.py
%{_installdir}/bin/run_quota_multi_tests.py
%{_installdir}/bin/run_write_append_truncate.py
%{_installdir}/bin/run_write_torture.py
%{_installdir}/bin/sendfiletest
%{_installdir}/bin/single-inline-run.sh
%{_installdir}/bin/single_run.sh
%{_installdir}/bin/single_run-WIP.sh
%{_installdir}/bin/splice_read
%{_installdir}/bin/splice_test.py
%{_installdir}/bin/splice_write
%{_installdir}/bin/test_atime_quantum.py
%{_installdir}/bin/test_backup_super.sh
%{_installdir}/bin/test_netfail.py
%{_installdir}/bin/test_truncate
%{_installdir}/bin/truncate
%{_installdir}/bin/truncate_direct
%{_installdir}/bin/ttest
%{_installdir}/bin/tunefs-test.sh
%{_installdir}/bin/verify
%{_installdir}/bin/verify_holes
%{_installdir}/bin/verify_truncate
%{_installdir}/bin/write_append_truncate
%{_installdir}/bin/write_torture
%{_installdir}/bin/write_torture.py
%{_installdir}/bin/xattr-multi-run.sh
%{_installdir}/bin/xattr-multi-test
%{_installdir}/bin/xattr-single-run.sh
%{_installdir}/bin/xattr-test
%{_installdir}/bin/activate_discontig_bg.sh
%{_installdir}/bin/directio_test
%{_installdir}/bin/discontig_runner.sh
%{_installdir}/bin/fillup_contig_bg.sh
%{_installdir}/bin/gen_extents
%{_installdir}/bin/multi_directio_test
%{_installdir}/bin/multiple_run.sh
%{_installdir}/bin/punch_hole
%{_installdir}/bin/resv_unwritten
%{_installdir}/bin/spawn_inodes
%{_installdir}/bin/verify_readonly.sh
%{_installdir}/bin/filecheck_test_run.sh
%{_installdir}/bin/filecheck_utils.sh
%{_installdir}/bin/inode_block_test.sh
%{_installdir}/bin/nocluster-multi-run.sh
%{_installdir}/bin/multi_reflink_snap.sh
%dir %attr(755,-,-) %{_installdir}/log
%dir %attr(755,-,-) %{_installdir}/tmp
%{_installdir}/workfiles/fill_holes_data/nosparsebug.dat
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.00.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.01.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.02.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.03.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.04.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.05.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.06.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.07.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.08.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.09.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.10.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.11.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.12.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.13.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.14.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.15.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.16.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.17.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.18.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.19.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.20.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.21.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.22.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.23.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.24.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.25.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.26.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.27.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.28.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.29.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.30.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.31.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.32.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.33.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.34.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.35.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.36.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.37.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.38.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.39.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.40.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.41.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.42.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.43.stdout
%{_installdir}/workfiles/fsck-test/medium-disk/fsck.ocfs2.clean.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.00.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.01.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.02.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.03.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.04.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.05.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.06.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.07.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.08.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.09.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.10.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.11.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.12.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.13.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.14.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.15.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.16.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.17.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.18.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.19.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.20.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.21.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.22.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.23.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.24.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.25.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.26.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.27.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.28.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.29.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.30.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.31.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.32.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.33.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.34.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.35.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.36.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.37.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.38.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.39.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.40.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.41.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.42.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.43.stdout
%{_installdir}/workfiles/fsck-test/small-disk/fsck.ocfs2.clean.stdout
%doc README
openSUSE Build Service is sponsored by