From 281b65efb11af8b3c789d23ec5d3264621379f34 Mon Sep 17 00:00:00 2001 From: Michael Adams Date: Tue, 21 Jan 2020 01:30:01 -0800 Subject: [PATCH 1/2] RPM packaging support --- packaging/README | 32 +++++ packaging/bcachefs-tools.spec | 73 +++++++++++ packaging/userspace-rcu.spec | 235 ++++++++++++++++++++++++++++++++++ 3 files changed, 340 insertions(+) create mode 100644 packaging/README create mode 100644 packaging/bcachefs-tools.spec create mode 100644 packaging/userspace-rcu.spec diff --git a/packaging/README b/packaging/README new file mode 100644 index 00000000..704c60d6 --- /dev/null +++ b/packaging/README @@ -0,0 +1,32 @@ +==== liburcu requirement ==== + +https://liburcu.org/ is needed for this software to work, but older RHEL/CentOS and other +distros might not have a reliable install. You might have to do the following... + +1. Make & install the latest liburcu tarball from their site. +2. In the Makefile for bcachefs-tools... + a. Remove liburcu from PKGCONFIG_LIBS + b. Add -lurcu to LDLIBS +3. Add LD_LIBRARY_PATH=/usr/local/lib to /etc/environment +4. Remove "BuildRequires: userspace-rcu-devel" and "Requires: userspace-rcu" from the + spec file here. + +==== RHEL-CentOS 7 ==== + +You need to use https://www.softwarecollections.org/ to install a newer GCC. + +As root: yum install devtoolset-8-gcc + +Before building: scl enable devtoolset-8 bash + +===== RHEL-CentOS (any) ==== + +1. As root, "yum install rpmdevtools help2man" +2. Make a non-root user to build RPMs with. +3. "su - (non-root user)" and use "rpmdev-setuptree" to create an RPM build structure. +4. Copy the SPEC file from this directory to the "~/rpmbuild/SPECS/" folder. +6. Move the parent directory here to bcachefs-tools-(VERSION), and "cd" to its parent. +7. "tar cjf bcachefs-tools-(VERSION).tar.bz2 (directory of bcachefs-tools-(VERSION))" +8. "rpmbuild -bs ~/rpmbuild/SPECS/bcachefs-tools.spec" +9. "rpmbuild -bb ~/rpmbuild/SPECS/bcachefs-tools.spec" +10. The RPMs will be in "~/rpmbuild/RPMS" and "~/rpmbuild/SRPMS". diff --git a/packaging/bcachefs-tools.spec b/packaging/bcachefs-tools.spec new file mode 100644 index 00000000..4946cef9 --- /dev/null +++ b/packaging/bcachefs-tools.spec @@ -0,0 +1,73 @@ +Name: bcachefs-tools +Version: 2020.01.21 +Release: 1%{?dist} +Summary: Userspace tools for bcachefs + +License: GPLv2 +URL: https://github.com/koverstreet/bcachefs-tools +Source0: %{name}-%{version}.tar.bz2 + +BuildRequires: epel-release +BuildRequires: bzip2 +BuildRequires: gcc +BuildRequires: make +BuildRequires: keyutils-libs-devel +BuildRequires: libaio-devel +BuildRequires: libattr-devel +BuildRequires: libblkid-devel +BuildRequires: libscrypt-devel +BuildRequires: libsodium-devel +BuildRequires: libtool-ltdl-devel +BuildRequires: libuuid-devel +BuildRequires: libvmmalloc-devel +BuildRequires: libzstd-devel +BuildRequires: lz4-devel +BuildRequires: userspace-rcu-devel +BuildRequires: valgrind-devel +BuildRequires: zlib-devel + +Requires: epel-release +Requires: bzip2 +Requires: keyutils-libs +Requires: libaio +Requires: libattr +Requires: libblkid +Requires: libscrypt +Requires: libsodium +Requires: libtool-ltdl +Requires: libuuid +Requires: libvmmalloc +Requires: libzstd +Requires: lz4 +Requires: userspace-rcu +Requires: zlib + +%description +The bcachefs tool, which has a number of subcommands for formatting and managing bcachefs filesystems. Run bcachefs --help for full list of commands. + +%prep +%setup -q + +%build +make + +%install +rm -rf $RPM_BUILD_ROOT +mkdir -p $RPM_BUILD_ROOT/usr/local/sbin +mkdir -p $RPM_BUILD_ROOT/usr/local/share/man/man8 +%make_install + +%files +/usr/local/sbin/bcachefs +/usr/local/sbin/fsck.bcachefs +/usr/local/sbin/mkfs.bcachefs +/usr/local/share/man/man8/bcachefs.8 +/etc/initramfs-tools/hooks/bcachefs +/etc/initramfs-tools/scripts/local-premount/bcachefs + +%changelog +* Tue Jan 21 2020 Michael Adams - 2020.01.21-1 +- Updated RPM package definition to reflect that changes in codebase have occurred. +* Tue Jan 07 2020 Michael Adams - 2020.01.07-1 +- Initial RPM package definition +- Makefile needs further work to accomodate RPM macros. diff --git a/packaging/userspace-rcu.spec b/packaging/userspace-rcu.spec new file mode 100644 index 00000000..9bea6db5 --- /dev/null +++ b/packaging/userspace-rcu.spec @@ -0,0 +1,235 @@ +# rpmbuild with QA_RPATHS=$[0x0001] + +Name: userspace-rcu +Version: 0.11.1 +Release: 1%{?dist} +Summary: liburcu is a LGPLv2.1 userspace RCU (read-copy-update) library. + +License: LGPLv2.1 +URL: https://liburcu.org/ +Source0: https://lttng.org/files/urcu/%{name}-%{version}.tar.bz2 +Source1: https://lttng.org/files/urcu/%{name}-%{version}.tar.bz2.asc + +# "devel" files are installed with this package, also. +Conflicts: userspace-rcu-devel < 0.11.1 +Provides: userspace-rcu-devel + +BuildRequires: bzip2 +BuildRequires: gcc +BuildRequires: make +BuildRequires: m4 + +%description +liburcu provides efficient data structures based on RCU and lock-free algorithms. Those structures include hash tables, queues, stacks, and doubly-linked lists. + +%prep +%setup -q + +%configure + +%build +make + +%install +rm -rf $RPM_BUILD_ROOT +%make_install + +%files +%{_datadir}/doc/userspace-rcu/cds-api.md +%{_datadir}/doc/userspace-rcu/examples/hlist/cds_hlist_add_head_rcu.c +%{_datadir}/doc/userspace-rcu/examples/hlist/cds_hlist_del_rcu.c +%{_datadir}/doc/userspace-rcu/examples/hlist/cds_hlist_for_each_entry_rcu.c +%{_datadir}/doc/userspace-rcu/examples/hlist/cds_hlist_for_each_rcu.c +%{_datadir}/doc/userspace-rcu/examples/hlist/Makefile +%{_datadir}/doc/userspace-rcu/examples/hlist/Makefile.cds_hlist_add_head_rcu +%{_datadir}/doc/userspace-rcu/examples/hlist/Makefile.cds_hlist_del_rcu +%{_datadir}/doc/userspace-rcu/examples/hlist/Makefile.cds_hlist_for_each_entry_rcu +%{_datadir}/doc/userspace-rcu/examples/hlist/Makefile.cds_hlist_for_each_rcu +%{_datadir}/doc/userspace-rcu/examples/lfstack/cds_lfs_pop_all_blocking.c +%{_datadir}/doc/userspace-rcu/examples/lfstack/cds_lfs_pop_blocking.c +%{_datadir}/doc/userspace-rcu/examples/lfstack/cds_lfs_push.c +%{_datadir}/doc/userspace-rcu/examples/lfstack/Makefile +%{_datadir}/doc/userspace-rcu/examples/lfstack/Makefile.cds_lfs_pop_all_blocking +%{_datadir}/doc/userspace-rcu/examples/lfstack/Makefile.cds_lfs_pop_blocking +%{_datadir}/doc/userspace-rcu/examples/lfstack/Makefile.cds_lfs_push +%{_datadir}/doc/userspace-rcu/examples/list/cds_list_add_rcu.c +%{_datadir}/doc/userspace-rcu/examples/list/cds_list_add_tail_rcu.c +%{_datadir}/doc/userspace-rcu/examples/list/cds_list_del_rcu.c +%{_datadir}/doc/userspace-rcu/examples/list/cds_list_for_each_entry_rcu.c +%{_datadir}/doc/userspace-rcu/examples/list/cds_list_for_each_rcu.c +%{_datadir}/doc/userspace-rcu/examples/list/cds_list_replace_rcu.c +%{_datadir}/doc/userspace-rcu/examples/list/Makefile +%{_datadir}/doc/userspace-rcu/examples/list/Makefile.cds_list_add_rcu +%{_datadir}/doc/userspace-rcu/examples/list/Makefile.cds_list_add_tail_rcu +%{_datadir}/doc/userspace-rcu/examples/list/Makefile.cds_list_del_rcu +%{_datadir}/doc/userspace-rcu/examples/list/Makefile.cds_list_for_each_entry_rcu +%{_datadir}/doc/userspace-rcu/examples/list/Makefile.cds_list_for_each_rcu +%{_datadir}/doc/userspace-rcu/examples/list/Makefile.cds_list_replace_rcu +%{_datadir}/doc/userspace-rcu/examples/Makefile +%{_datadir}/doc/userspace-rcu/examples/Makefile.examples.template +%{_datadir}/doc/userspace-rcu/examples/rculfhash/cds_lfht_add_replace.c +%{_datadir}/doc/userspace-rcu/examples/rculfhash/cds_lfht_add_unique.c +%{_datadir}/doc/userspace-rcu/examples/rculfhash/cds_lfht_add.c +%{_datadir}/doc/userspace-rcu/examples/rculfhash/cds_lfht_del.c +%{_datadir}/doc/userspace-rcu/examples/rculfhash/cds_lfht_destroy.c +%{_datadir}/doc/userspace-rcu/examples/rculfhash/cds_lfht_for_each_entry_duplicate.c +%{_datadir}/doc/userspace-rcu/examples/rculfhash/cds_lfht_lookup.c +%{_datadir}/doc/userspace-rcu/examples/rculfhash/jhash.h +%{_datadir}/doc/userspace-rcu/examples/rculfhash/Makefile +%{_datadir}/doc/userspace-rcu/examples/rculfhash/Makefile.cds_lfht_add +%{_datadir}/doc/userspace-rcu/examples/rculfhash/Makefile.cds_lfht_add_replace +%{_datadir}/doc/userspace-rcu/examples/rculfhash/Makefile.cds_lfht_add_unique +%{_datadir}/doc/userspace-rcu/examples/rculfhash/Makefile.cds_lfht_del +%{_datadir}/doc/userspace-rcu/examples/rculfhash/Makefile.cds_lfht_destroy +%{_datadir}/doc/userspace-rcu/examples/rculfhash/Makefile.cds_lfht_for_each_entry_duplicate +%{_datadir}/doc/userspace-rcu/examples/rculfhash/Makefile.cds_lfht_lookup +%{_datadir}/doc/userspace-rcu/examples/rculfqueue/cds_lfq_dequeue.c +%{_datadir}/doc/userspace-rcu/examples/rculfqueue/cds_lfq_enqueue.c +%{_datadir}/doc/userspace-rcu/examples/rculfqueue/Makefile +%{_datadir}/doc/userspace-rcu/examples/rculfqueue/Makefile.cds_lfq_dequeue +%{_datadir}/doc/userspace-rcu/examples/rculfqueue/Makefile.cds_lfq_enqueue +%{_datadir}/doc/userspace-rcu/examples/urcu-flavors/bp.c +%{_datadir}/doc/userspace-rcu/examples/urcu-flavors/Makefile +%{_datadir}/doc/userspace-rcu/examples/urcu-flavors/Makefile.bp +%{_datadir}/doc/userspace-rcu/examples/urcu-flavors/Makefile.mb +%{_datadir}/doc/userspace-rcu/examples/urcu-flavors/Makefile.membarrier +%{_datadir}/doc/userspace-rcu/examples/urcu-flavors/Makefile.qsbr +%{_datadir}/doc/userspace-rcu/examples/urcu-flavors/Makefile.signal +%{_datadir}/doc/userspace-rcu/examples/urcu-flavors/mb.c +%{_datadir}/doc/userspace-rcu/examples/urcu-flavors/membarrier.c +%{_datadir}/doc/userspace-rcu/examples/urcu-flavors/qsbr.c +%{_datadir}/doc/userspace-rcu/examples/urcu-flavors/signal.c +%{_datadir}/doc/userspace-rcu/examples/wfcqueue/cds_wfcq_dequeue.c +%{_datadir}/doc/userspace-rcu/examples/wfcqueue/cds_wfcq_enqueue.c +%{_datadir}/doc/userspace-rcu/examples/wfcqueue/cds_wfcq_splice.c +%{_datadir}/doc/userspace-rcu/examples/wfcqueue/Makefile +%{_datadir}/doc/userspace-rcu/examples/wfcqueue/Makefile.cds_wfcq_dequeue +%{_datadir}/doc/userspace-rcu/examples/wfcqueue/Makefile.cds_wfcq_enqueue +%{_datadir}/doc/userspace-rcu/examples/wfcqueue/Makefile.cds_wfcq_splice +%{_datadir}/doc/userspace-rcu/examples/wfstack/cds_wfs_pop_all_blocking.c +%{_datadir}/doc/userspace-rcu/examples/wfstack/cds_wfs_pop.c +%{_datadir}/doc/userspace-rcu/examples/wfstack/cds_wfs_push.c +%{_datadir}/doc/userspace-rcu/examples/wfstack/Makefile +%{_datadir}/doc/userspace-rcu/examples/wfstack/Makefile.cds_wfs_pop +%{_datadir}/doc/userspace-rcu/examples/wfstack/Makefile.cds_wfs_pop_all_blocking +%{_datadir}/doc/userspace-rcu/examples/wfstack/Makefile.cds_wfs_push +%{_datadir}/doc/userspace-rcu/LICENSE +%{_datadir}/doc/userspace-rcu/rcu-api.md +%{_datadir}/doc/userspace-rcu/README.md +%{_datadir}/doc/userspace-rcu/solaris-build.md +%{_datadir}/doc/userspace-rcu/uatomic-api.md +%{_includedir}/urcu-bp.h +%{_includedir}/urcu-call-rcu.h +%{_includedir}/urcu-defer.h +%{_includedir}/urcu-flavor.h +%{_includedir}/urcu-pointer.h +%{_includedir}/urcu-qsbr.h +%{_includedir}/urcu.h +%{_includedir}/urcu/arch.h +%{_includedir}/urcu/arch/generic.h +%{_includedir}/urcu/call-rcu.h +%{_includedir}/urcu/cds.h +%{_includedir}/urcu/compiler.h +%{_includedir}/urcu/config.h +%{_includedir}/urcu/debug.h +%{_includedir}/urcu/defer.h +%{_includedir}/urcu/flavor.h +%{_includedir}/urcu/futex.h +%{_includedir}/urcu/hlist.h +%{_includedir}/urcu/lfstack.h +%{_includedir}/urcu/list.h +%{_includedir}/urcu/map/clear.h +%{_includedir}/urcu/map/urcu-bp.h +%{_includedir}/urcu/map/urcu-mb.h +%{_includedir}/urcu/map/urcu-memb.h +%{_includedir}/urcu/map/urcu-qsbr.h +%{_includedir}/urcu/map/urcu-signal.h +%{_includedir}/urcu/map/urcu.h +%{_includedir}/urcu/pointer.h +%{_includedir}/urcu/rcuhlist.h +%{_includedir}/urcu/rculfhash.h +%{_includedir}/urcu/rculfqueue.h +%{_includedir}/urcu/rculfstack.h +%{_includedir}/urcu/rculist.h +%{_includedir}/urcu/ref.h +%{_includedir}/urcu/static/lfstack.h +%{_includedir}/urcu/static/pointer.h +%{_includedir}/urcu/static/rculfqueue.h +%{_includedir}/urcu/static/rculfstack.h +%{_includedir}/urcu/static/urcu-bp.h +%{_includedir}/urcu/static/urcu-common.h +%{_includedir}/urcu/static/urcu-mb.h +%{_includedir}/urcu/static/urcu-memb.h +%{_includedir}/urcu/static/urcu-qsbr.h +%{_includedir}/urcu/static/urcu-signal.h +%{_includedir}/urcu/static/urcu.h +%{_includedir}/urcu/static/wfcqueue.h +%{_includedir}/urcu/static/wfqueue.h +%{_includedir}/urcu/static/wfstack.h +%{_includedir}/urcu/syscall-compat.h +%{_includedir}/urcu/system.h +%{_includedir}/urcu/tls-compat.h +%{_includedir}/urcu/uatomic_arch.h +%{_includedir}/urcu/uatomic.h +%{_includedir}/urcu/uatomic/generic.h +%{_includedir}/urcu/urcu_ref.h +%{_includedir}/urcu/urcu-bp.h +%{_includedir}/urcu/urcu-futex.h +%{_includedir}/urcu/urcu-mb.h +%{_includedir}/urcu/urcu-memb.h +%{_includedir}/urcu/urcu-qsbr.h +%{_includedir}/urcu/urcu-signal.h +%{_includedir}/urcu/urcu.h +%{_includedir}/urcu/wfcqueue.h +%{_includedir}/urcu/wfqueue.h +%{_includedir}/urcu/wfstack.h +%{_libdir}/liburcu-bp.a +%{_libdir}/liburcu-bp.la +%{_libdir}/liburcu-bp.so +%{_libdir}/liburcu-bp.so.6 +%{_libdir}/liburcu-bp.so.6.1.0 +%{_libdir}/liburcu-cds.a +%{_libdir}/liburcu-cds.la +%{_libdir}/liburcu-cds.so +%{_libdir}/liburcu-cds.so.6 +%{_libdir}/liburcu-cds.so.6.1.0 +%{_libdir}/liburcu-common.a +%{_libdir}/liburcu-common.la +%{_libdir}/liburcu-common.so +%{_libdir}/liburcu-common.so.6 +%{_libdir}/liburcu-common.so.6.1.0 +%{_libdir}/liburcu-mb.a +%{_libdir}/liburcu-mb.la +%{_libdir}/liburcu-mb.so +%{_libdir}/liburcu-mb.so.6 +%{_libdir}/liburcu-mb.so.6.1.0 +%{_libdir}/liburcu-memb.a +%{_libdir}/liburcu-memb.la +%{_libdir}/liburcu-memb.so +%{_libdir}/liburcu-memb.so.6 +%{_libdir}/liburcu-memb.so.6.1.0 +%{_libdir}/liburcu-qsbr.a +%{_libdir}/liburcu-qsbr.la +%{_libdir}/liburcu-qsbr.so +%{_libdir}/liburcu-qsbr.so.6 +%{_libdir}/liburcu-qsbr.so.6.1.0 +%{_libdir}/liburcu-signal.a +%{_libdir}/liburcu-signal.la +%{_libdir}/liburcu-signal.so +%{_libdir}/liburcu-signal.so.6 +%{_libdir}/liburcu-signal.so.6.1.0 +%{_libdir}/liburcu.a +%{_libdir}/liburcu.la +%{_libdir}/liburcu.so +%{_libdir}/liburcu.so.6 +%{_libdir}/liburcu.so.6.1.0 +%{_libdir}/pkgconfig/liburcu-bp.pc +%{_libdir}/pkgconfig/liburcu-cds.pc +%{_libdir}/pkgconfig/liburcu-mb.pc +%{_libdir}/pkgconfig/liburcu-qsbr.pc +%{_libdir}/pkgconfig/liburcu-signal.pc +%{_libdir}/pkgconfig/liburcu.pc + +%changelog +* Tue Jan 07 2020 Michael Adams - 0.11-1 +- Initial RPM package From 434cb1229ad3a8a06338539e0cc904f721c48cc1 Mon Sep 17 00:00:00 2001 From: Michael Adams Date: Mon, 24 Feb 2020 00:23:48 -0800 Subject: [PATCH 2/2] Update userspace-rcu.spec --- packaging/userspace-rcu.spec | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packaging/userspace-rcu.spec b/packaging/userspace-rcu.spec index 9bea6db5..40516cc2 100644 --- a/packaging/userspace-rcu.spec +++ b/packaging/userspace-rcu.spec @@ -2,7 +2,7 @@ Name: userspace-rcu Version: 0.11.1 -Release: 1%{?dist} +Release: 2%{?dist} Summary: liburcu is a LGPLv2.1 userspace RCU (read-copy-update) library. License: LGPLv2.1 @@ -11,9 +11,10 @@ Source0: https://lttng.org/files/urcu/%{name}-%{version}.tar.bz2 Source1: https://lttng.org/files/urcu/%{name}-%{version}.tar.bz2.asc # "devel" files are installed with this package, also. -Conflicts: userspace-rcu-devel < 0.11.1 Provides: userspace-rcu-devel +# Recommend using https://www.softwarecollections.org/en/scls/rhscl/devtoolset-8/ for this + BuildRequires: bzip2 BuildRequires: gcc BuildRequires: make @@ -231,5 +232,7 @@ rm -rf $RPM_BUILD_ROOT %{_libdir}/pkgconfig/liburcu.pc %changelog +* Mon Feb 24 2020 Michael Adams - 0.11-2 +- Try to fix RPM package install warning * Tue Jan 07 2020 Michael Adams - 0.11-1 - Initial RPM package