diff --git a/.gitignore b/.gitignore index a812f1f..742d868 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +*.rpm /sheepdog-0.2.3.tar.gz /sheepdog-0.2.4.tar.gz /collie-sheepdog-v0.3.0-0-gbb41896.tar.gz +/v1.0.1.tar.gz diff --git a/sha1-extern.patch b/sha1-extern.patch new file mode 100644 index 0000000..388793c --- /dev/null +++ b/sha1-extern.patch @@ -0,0 +1,17 @@ +diff --git a/include/sha1.h b/include/sha1.h +index e026998..bd45181 100644 +--- a/include/sha1.h ++++ b/include/sha1.h +@@ -27,9 +27,9 @@ typedef void (*sha1_init_func_t)(void *); + typedef void (*sha1_update_func_t)(void *, const uint8_t *, unsigned int); + typedef void (*sha1_final_func_t)(void *, uint8_t *); + +-sha1_init_func_t sha1_init; +-sha1_update_func_t sha1_update; +-sha1_final_func_t sha1_final; ++extern sha1_init_func_t sha1_init; ++extern sha1_update_func_t sha1_update; ++extern sha1_final_func_t sha1_final; + + const char *sha1_to_hex(const unsigned char *sha1); + void get_buffer_sha1(unsigned char *buf, unsigned len, unsigned char *sha1); diff --git a/sheepdog b/sheepdog new file mode 100644 index 0000000..ddd3bac --- /dev/null +++ b/sheepdog @@ -0,0 +1,11 @@ +# use stdout for journal; other possibilities include "default" and "syslog" +SHEEPDOG_LOGDEST=stdout +SHEEPDOG_LOGLEVEL=info +SHEEPDOG_LOGFMT=default + +SHEEPDOG_PORT=7000 + +# --no-sync, --directio, --gateway, --journal, --wq-threads, ... +SHEEPDOG_EXTRA_OPTS= + +SHEEPDOG_PATH=/var/lib/sheepdog diff --git a/sheepdog.service b/sheepdog.service index c8fd01e..6e55331 100644 --- a/sheepdog.service +++ b/sheepdog.service @@ -1,10 +1,18 @@ [Unit] Description=Sheepdog QEMU/KVM Block Storage -After=syslog.target +After=network.target +Requires=corosync.service [Service] -ExecStart=/usr/sbin/sheep -Type=forking +EnvironmentFile=/etc/sysconfig/sheepdog +ExecStart=/usr/sbin/sheep -f --log level=${SHEEPDOG_LOGLEVEL},dst=${SHEEPDOG_LOGDEST},format=${SHEEPDOG_LOGFMT} $SHEEPDOG_EXTRA_OPTS ${SHEEPDOG_PATH} +Restart=on-failure +RestartSec=2s +LimitNOFILE=32768 -[Install] -WantedBy=multi-user.target +# Use sheepdog.timer instead. Because corosync does not provide +# notification via sd_notify, we introduce an arbitrary delay between +# starting corosync.service and starting sheepdog. + +#[Install] +#WantedBy=multi-user.target diff --git a/sheepdog.spec b/sheepdog.spec index edad9bb..bec8630 100644 --- a/sheepdog.spec +++ b/sheepdog.spec @@ -1,104 +1,252 @@ Name: sheepdog -Summary: The Sheepdog Distributed Storage System for KVM/QEMU -Version: 0.3.0 -Release: 2%{?dist} -License: GPLv2 and GPLv2+ -Group: System Environment/Base -URL: http://www.osrg.net/sheepdog -Source0: collie-sheepdog-v0.3.0-0-gbb41896.tar.gz -#get source from github here https://github.com/collie/sheepdog/tarball/v0.3.0 +Summary: The Sheepdog distributed storage system for KVM/QEMU +Version: 1.0.1 +Release: 27%{?dist} +# Automatically converted from old format: GPLv2 and GPLv2+ - review is highly recommended. +License: GPL-2.0-only AND GPL-2.0-or-later +URL: http://sheepdog.github.io/sheepdog +Source0: https://github.com/sheepdog/sheepdog/archive/v1.0.1.tar.gz Source1: sheepdog.service -Patch0: update_cpg_to_cs_defines.patch +Source2: sheepdog.timer +Source3: sheepdog -# Runtime bits -Requires: corosync -Requires(post): chkconfig -Requires(preun): chkconfig -Requires(preun): initscripts -Requires(post): systemd-units -Requires(preun): systemd-units -Requires(postun): systemd-units -Requires(post): systemd-sysv +Patch0: sha1-extern.patch + +%{?systemd_requires} # Build bits -BuildRequires: autoconf automake systemd-units +BuildRequires: make +BuildRequires: autoconf automake libtool systemd BuildRequires: corosync corosynclib corosynclib-devel +BuildRequires: userspace-rcu-devel -BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX) +# For sheepfs +BuildRequires: fuse-devel -%if 0%{?rhel} >= 6 -Excludearch: ppc -Excludearch: ppc64 +%ifarch x86_64 +BuildRequires: yasm %endif - +# corosync not available on these architectures +%if 0%{?rhel} >= 6 +Excludearch: aarch64 +Excludearch: ppc +Excludearch: ppc64 +Excludearch: ppc64le +%endif %description -This package contains the Sheepdog server, and command line tool which offer -a distributed object storage system for KVM. +This package contains the Sheepdog server and the "dog" command line tool, +which offer a distributed object storage system for KVM. + +%package devel +Summary: Header files for the Sheepdog distributed storage system +# Automatically converted from old format: GPLv2 and GPLv2+ - review is highly recommended. +License: GPL-2.0-only AND GPL-2.0-or-later +Requires: %{name}-libs%{?_isa} = %{version}-%{release} + +%description devel +This package contains the header files for libsheepdog. + +%package libs +Summary: Libraries for the Sheepdog distributed storage system +# Automatically converted from old format: GPLv2 and GPLv2+ - review is highly recommended. +License: GPL-2.0-only AND GPL-2.0-or-later + +%description libs +This package contains the libsheepdog shared library. %prep -%setup -qn collie-sheepdog-bb41896 -%patch0 -p1 +%setup -q +%patch -P0 -p1 + +# urcu/compiler.h from userspace-rcu-devel requires __STDC_VERSION__ 201112L +sed -r -i 's/-std=gnu99/-std=gnu23/' configure.ac %build ./autogen.sh -%{configure} --with-initddir=%{_initrddir} -make %{_smp_mflags} +# TODO: add LTTng-ust support +%{configure} \ + --without-initddir \ + --without-systemdsystemunitdir \ + --disable-static + +make %{_smp_mflags} V=1 + %install rm -rf %{buildroot} make install DESTDIR=%{buildroot} +rm -f %{buildroot}/%{_libdir}/libsheepdog.la +rm -f %{buildroot}/%{_libdir}/libsheepdog.a + mkdir -p %{buildroot}/%{_unitdir} cp -a %{SOURCE1} %{buildroot}/%{_unitdir}/ -## tree fixup -# drop static libs -rm -f %{buildroot}%{_libdir}/*.a -rm -f %{buildroot}%{_initddir}/sheepdog -%clean -rm -rf %{buildroot} +cp -a %{SOURCE2} %{buildroot}/%{_unitdir}/ + +mkdir -p %{buildroot}/%{_sysconfdir}/sysconfig +cp -a %{SOURCE3} %{buildroot}/%{_sysconfdir}/sysconfig %post -if [ $1 -eq 1 ] ; then - # Initial installation - /bin/systemctl daemon-reload >/dev/null 2>&1 || : -fi +%systemd_post sheepdog.timer %preun -if [ $1 -eq 0 ] ; then - # Package removal, not upgrade - /bin/systemctl --no-reload disable sheepdog.service > /dev/null 2>&1 || : - /bin/systemctl stop sheepdog.service > /dev/null 2>&1 || : -fi +%systemd_preun sheepdog.timer %postun -%triggerun -- sheepdog < 0.2.4-2 -/usr/bin/systemd-sysv-convert --save httpd >/dev/null 2>&1 ||: -/sbin/chkconfig --del httpd >/dev/null 2>&1 || : -/bin/systemctl try-restart sheepdog.service >/dev/null 2>&1 || : -/bin/systemctl daemon-reload >/dev/null 2>&1 || : -if [ $1 -ge 1 ] ; then - # Package upgrade, not uninstall - /bin/systemctl try-restart sheepdog.service >/dev/null 2>&1 || : -fi +%systemd_postun_with_restart sheepdog.timer %files -%defattr(-,root,root,-) -%doc COPYING README INSTALL +%doc COPYING README +%{_bindir}/dog %{_sbindir}/sheep -%{_sbindir}/collie -#%attr(755,-,-)%config %{_initddir}/sheepdog +%{_sbindir}/sheepfs +%{_sbindir}/shepherd +%{_sysconfdir}/bash_completion.d/dog + %{_unitdir}/sheepdog.service +%{_unitdir}/sheepdog.timer +%config %{_sysconfdir}/sysconfig/sheepdog + %dir %{_localstatedir}/lib/sheepdog %{_mandir}/man8/sheep.8* +%{_mandir}/man8/dog.8* +%{_mandir}/man8/sheepfs.8* + +%files devel +%dir %{_includedir}/sheepdog +%{_includedir}/sheepdog/internal.h +%{_includedir}/sheepdog/list.h +%{_includedir}/sheepdog/sheepdog.h +%{_includedir}/sheepdog/sheepdog_proto.h +%{_includedir}/sheepdog/util.h + +%files libs +%{_libdir}/libsheepdog.so %changelog +* Fri Jul 17 2026 Fedora Release Engineering - 1.0.1-27 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild + +* Sat Jan 17 2026 Fedora Release Engineering - 1.0.1-26 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild + +* Fri Jul 25 2025 Fedora Release Engineering - 1.0.1-25 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + +* Sun Jan 19 2025 Fedora Release Engineering - 1.0.1-24 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + +* Wed Aug 07 2024 Miroslav Suchý - 1.0.1-23 +- convert license to SPDX + +* Sat Jul 20 2024 Fedora Release Engineering - 1.0.1-22 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Sat Jan 27 2024 Fedora Release Engineering - 1.0.1-21 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Sat Jul 22 2023 Fedora Release Engineering - 1.0.1-20 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Sat Jan 21 2023 Fedora Release Engineering - 1.0.1-19 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Sat Jul 23 2022 Fedora Release Engineering - 1.0.1-18 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Sat Jan 22 2022 Fedora Release Engineering - 1.0.1-17 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Fri Jul 23 2021 Fedora Release Engineering - 1.0.1-16 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Tue Mar 02 2021 Zbigniew Jędrzejewski-Szmek - 1.0.1-15 +- Rebuilt for updated systemd-rpm-macros + See https://pagure.io/fesco/issue/2583. + +* Wed Jan 27 2021 Fedora Release Engineering - 1.0.1-14 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Wed Jul 29 2020 Fedora Release Engineering - 1.0.1-13 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Mon Mar 30 2020 Paolo Bonzini - 1.0.1-12 +- New patch sha1-extern.patch to fix FTBFS +- Delete obsolete patches + +* Thu Jan 30 2020 Fedora Release Engineering - 1.0.1-11 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Fri Jul 26 2019 Fedora Release Engineering - 1.0.1-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Sat Feb 02 2019 Fedora Release Engineering - 1.0.1-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Sat Jul 14 2018 Fedora Release Engineering - 1.0.1-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Thu Mar 22 2018 Kevin Fenzi - 1.0.1-7 +- Rebuild for new corosync. Fixes bug #1559672 + +* Fri Feb 09 2018 Fedora Release Engineering - 1.0.1-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Thu Aug 03 2017 Fedora Release Engineering - 1.0.1-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Thu Jul 27 2017 Fedora Release Engineering - 1.0.1-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Sat Feb 11 2017 Fedora Release Engineering - 1.0.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Mon Jan 09 2017 Paolo Bonzini - 1.0.1-2 +- Introduce sheepdog.timer +- For EPEL7, disable on aarch64 + +* Mon Jan 09 2017 Paolo Bonzini - 1.0.1-1 +- Update to 1.0.1 (Resolves: #1396430) +- /usr/bin/collie is now /usr/bin/dog +- Added /usr/sbin/sheepfs and /usr/sbin/shepherd +- Revamped systemd spec file, added /etc/sysconfig/sheepdog + +* Thu Feb 04 2016 Fedora Release Engineering - 0.3.0-11 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Fri Jun 19 2015 Fedora Release Engineering - 0.3.0-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Thu Aug 21 2014 Kevin Fenzi - 0.3.0-9 +- Rebuild for rpm bug 1131960 + +* Mon Aug 18 2014 Fedora Release Engineering - 0.3.0-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Sun Jun 08 2014 Fedora Release Engineering - 0.3.0-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Sat Dec 21 2013 Ville Skyttä - 0.3.0-6 +- Drop empty %%postun script. +- Drop INSTALL from docs. +- Fix bogus date in %%changelog. + +* Sun Aug 04 2013 Fedora Release Engineering - 0.3.0-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Thu Feb 14 2013 Fedora Release Engineering - 0.3.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild + +* Sat Jul 21 2012 Fedora Release Engineering - 0.3.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + * Fri Mar 16 2012 Fabio M. Di Nitto - 0.3.0-2 - Rebuild against new corosync (soname change). - Add patch to fix build against new corosync headers. -* Wed Jan 15 2012 David Nalley - 0.3.0-1 +* Thu Jan 12 2012 David Nalley - 0.3.0-1 - updating to 0.3.0 * Thu Nov 24 2011 David Nalley - 0.2.4-2 diff --git a/sheepdog.timer b/sheepdog.timer new file mode 100644 index 0000000..7ee0cc2 --- /dev/null +++ b/sheepdog.timer @@ -0,0 +1,12 @@ +[Unit] +Description=Sheepdog QEMU/KVM Block Storage +After=network.target +Requires=corosync.service + +[Timer] +OnActiveSec=2s +AccuracySec=100ms +Unit=sheepdog.service + +[Install] +WantedBy=multi-user.target diff --git a/sources b/sources index e6f62d0..14ded64 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -9b28dad11926ee52cda15a961d9b54fe collie-sheepdog-v0.3.0-0-gbb41896.tar.gz +SHA512 (v1.0.1.tar.gz) = fc8c90f9631a12032e380f7ad559e18859211df65c7b53a1cf4a64fcf5c85fb4e2f08a9fbb9330f0eb6e67e9848a885af10013bba5f8665f0e2864ea8770bcf8 diff --git a/update_cpg_to_cs_defines.patch b/update_cpg_to_cs_defines.patch deleted file mode 100644 index d610f46..0000000 --- a/update_cpg_to_cs_defines.patch +++ /dev/null @@ -1,61 +0,0 @@ -diff -Naurd collie-sheepdog-bb41896.orig/sheep/cluster/corosync.c collie-sheepdog-bb41896/sheep/cluster/corosync.c ---- collie-sheepdog-bb41896.orig/sheep/cluster/corosync.c 2011-12-28 18:03:36.000000000 +0100 -+++ collie-sheepdog-bb41896/sheep/cluster/corosync.c 2012-03-16 10:47:39.378340300 +0100 -@@ -196,9 +196,9 @@ - retry: - ret = cpg_mcast_joined(cpg_handle, CPG_TYPE_AGREED, iov, iov_cnt); - switch (ret) { -- case CPG_OK: -+ case CS_OK: - break; -- case CPG_ERR_TRY_AGAIN: -+ case CS_ERR_TRY_AGAIN: - dprintf("failed to send message: retrying\n"); - sleep(1); - goto retry; -@@ -632,7 +632,7 @@ - corosync_handlers = *handlers; - - ret = cpg_initialize(&cpg_handle, &cb); -- if (ret != CPG_OK) { -+ if (ret != CS_OK) { - eprintf("failed to initialize cpg (%d) - is corosync running?\n", ret); - return -1; - } -@@ -659,7 +659,7 @@ - this_node.pid = getpid(); - - ret = cpg_fd_get(cpg_handle, &fd); -- if (ret != CPG_OK) { -+ if (ret != CS_OK) { - eprintf("failed to get cpg file descriptor (%d)\n", ret); - return -1; - } -@@ -681,13 +681,13 @@ - retry: - ret = cpg_join(cpg_handle, &cpg_group); - switch (ret) { -- case CPG_OK: -+ case CS_OK: - break; -- case CPG_ERR_TRY_AGAIN: -+ case CS_ERR_TRY_AGAIN: - dprintf("failed to join the sheepdog group: retrying\n"); - sleep(1); - goto retry; -- case CPG_ERR_SECURITY: -+ case CS_ERR_SECURITY: - eprintf("permission denied to join the sheepdog group\n"); - return -1; - default: -@@ -740,8 +740,8 @@ - { - int ret; - -- ret = cpg_dispatch(cpg_handle, CPG_DISPATCH_ALL); -- if (ret != CPG_OK) -+ ret = cpg_dispatch(cpg_handle, CS_DISPATCH_ALL); -+ if (ret != CS_OK) - return -1; - - return 0;