diff --git a/drbdlinks.spec b/drbdlinks.spec index a68dd5f..49fb153 100644 --- a/drbdlinks.spec +++ b/drbdlinks.spec @@ -1,24 +1,31 @@ Summary: Program for managing links into a DRBD shared partition Name: drbdlinks Version: 1.29 -Release: 14%{?dist} -License: GPL-2.0-only +Release: 3%{?dist} +License: GPLv2 URL: https://www.tummy.com/software/drbdlinks/ Source0: https://github.com/linsomniac/%{name}/archive/release-%{version}/%{name}-%{version}.tar.gz -Source1: drbdlinks.logrotate -Source2: drbdlinksclean.service -Source3: drbdlinksclean-wrapper -%if 0%{?fedora} || 0%{?rhel} >= 8 +Source1: drbdlinksclean +Source2: drbdlinks.logrotate +Source3: drbdlinksclean.service +Source4: drbdlinksclean-wrapper +%if 0%{?rhel} >= 8 || 0%{?fedora} Requires: python3 BuildRequires: python3-devel %else Requires: python2 BuildRequires: python2 %endif -BuildRequires: make -BuildRequires: systemd-rpm-macros +%if 0%{?rhel} > 6 || 0%{?fedora} +Requires(post): systemd +Requires(preun): systemd +Requires(postun): systemd +BuildRequires: systemd +%else +Requires(post): /sbin/chkconfig +Requires(preun): /sbin/chkconfig +%endif BuildArch: noarch -%{?systemd_requires} %description The drbdlinks program manages links into a DRBD partition which is shared @@ -33,6 +40,10 @@ existing files/directories and then make symbolic links into the DRBD partition, "stop" does the reverse. By default, rename appends ".drbdlinks" to the name, but this can be overridden. +An init script is included which runs "stop" before heartbeat starts, and +after heartbeat stops. This is done to try to ensure that when the shared +partition isn't mounted, the links are in their normal state. + %prep %setup -q -n %{name}-release-%{version} @@ -40,19 +51,24 @@ to the name, but this can be overridden. %install install -D -p -m 755 %{name} $RPM_BUILD_ROOT%{_sbindir}/%{name} -%if 0%{?fedora} || 0%{?rhel} >= 8 +%if 0%{?rhel} >= 8 || 0%{?fedora} sed -e '1 s|^#!.*python|#!%{__python3}|g' -i $RPM_BUILD_ROOT%{_sbindir}/%{name} %else sed -e '1 s|^#!.*python|#!%{__python}|g' -i $RPM_BUILD_ROOT%{_sbindir}/%{name} %endif touch -c -r %{name} $RPM_BUILD_ROOT%{_sbindir}/%{name} -mkdir -p $RPM_BUILD_ROOT{%{_sysconfdir}/%{name}.d,/usr/lib/ocf/resource.d/tummy}/ +mkdir -p $RPM_BUILD_ROOT{%{_sysconfdir}/{%{name}.d,ha.d/resource.d},/usr/lib/ocf/resource.d/tummy} +ln -s ../../..%{_sbindir}/%{name} $RPM_BUILD_ROOT%{_sysconfdir}/ha.d/resource.d/%{name} ln -s ../../../../..%{_sbindir}/%{name} $RPM_BUILD_ROOT/usr/lib/ocf/resource.d/tummy/%{name} install -D -p -m 644 %{name}.conf $RPM_BUILD_ROOT%{_sysconfdir}/%{name}.conf -install -D -p -m 644 %{SOURCE2} $RPM_BUILD_ROOT%{_unitdir}/drbdlinksclean.service -install -D -p -m 755 %{SOURCE3} $RPM_BUILD_ROOT%{_libexecdir}/drbdlinksclean +%if 0%{?rhel} > 6 || 0%{?fedora} +install -D -p -m 644 %{SOURCE3} $RPM_BUILD_ROOT%{_unitdir}/drbdlinksclean.service +install -D -p -m 755 %{SOURCE4} $RPM_BUILD_ROOT%{_libexecdir}/drbdlinksclean +%else +install -D -p -m 755 %{SOURCE1} $RPM_BUILD_ROOT%{_sysconfdir}/rc.d/init.d/drbdlinksclean +%endif install -D -p -m 644 %{name}.8 $RPM_BUILD_ROOT%{_mandir}/man8/%{name}.8 -install -D -p -m 644 %{SOURCE1} $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/%{name} +install -D -p -m 644 %{SOURCE2} $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/%{name} mkdir -p $RPM_BUILD_ROOT%{_localstatedir}/lib/%{name}/configs-to-clean mv -f README.markdown README @@ -61,61 +77,46 @@ mv -f README.markdown README make -C tests DRBDLINKS=$RPM_BUILD_ROOT%{_sbindir}/%{name} %post +%if 0%{?rhel} > 6 || 0%{?fedora} %systemd_post drbdlinksclean.service +%else +/sbin/chkconfig --add drbdlinksclean +%endif %preun +%if 0%{?rhel} > 6 || 0%{?fedora} %systemd_preun drbdlinksclean.service +%else +if [ $1 -eq 0 ]; then + /sbin/service drbdlinksclean stop > /dev/null 2>&1 || : + /sbin/chkconfig --del drbdlinksclean +fi +%endif +%if 0%{?rhel} > 6 || 0%{?fedora} %postun %systemd_postun drbdlinksclean.service +%endif %files %license LICENSE %doc README WHATSNEW +%if 0%{?rhel} > 6 || 0%{?fedora} %{_unitdir}/drbdlinksclean.service %{_libexecdir}/drbdlinksclean +%else +%{_sysconfdir}/rc.d/init.d/drbdlinksclean +%endif %config(noreplace) %{_sysconfdir}/%{name}.conf %dir %{_sysconfdir}/%{name}.d/ %config(noreplace) %{_sysconfdir}/logrotate.d/%{name} %{_sbindir}/%{name} +%{_sysconfdir}/ha.d/ /usr/lib/ocf/resource.d/tummy/ %{_mandir}/man8/%{name}.8* %{_localstatedir}/lib/%{name}/ %changelog -* Wed Jul 23 2025 Fedora Release Engineering - 1.29-14 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild - -* Thu Jan 16 2025 Fedora Release Engineering - 1.29-13 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild - -* Wed Jul 17 2024 Fedora Release Engineering - 1.29-12 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild - -* Wed Jan 24 2024 Fedora Release Engineering - 1.29-11 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Fri Jan 19 2024 Fedora Release Engineering - 1.29-10 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild - -* Wed Jul 19 2023 Fedora Release Engineering - 1.29-9 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild - -* Thu Jan 19 2023 Fedora Release Engineering - 1.29-8 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild - -* Thu Jul 21 2022 Fedora Release Engineering - 1.29-7 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild - -* Thu Jan 20 2022 Fedora Release Engineering - 1.29-6 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild - -* Wed Jul 21 2021 Fedora Release Engineering - 1.29-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild - -* Tue Jan 26 2021 Fedora Release Engineering - 1.29-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild - * Mon Jul 27 2020 Fedora Release Engineering - 1.29-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild diff --git a/drbdlinksclean b/drbdlinksclean new file mode 100644 index 0000000..981c066 --- /dev/null +++ b/drbdlinksclean @@ -0,0 +1,79 @@ +#!/bin/bash +# +# drbdlinksclean Clean up drbdlinks links on system boot or shutdown +# +# chkconfig: - 74 06 +# description: Calls drbdlinks on initial system boot and shutdown to make \ +# sure that any links set up by drbdlinks are cleaned up when \ +# drbd is not running. +# config: /etc/drbdlinks.conf + +### BEGIN INIT INFO +# Provides: drbdlinksclean +# Required-Start: $local_fs $remote_fs +# Required-Stop: $local_fs $remote_fs +# Short-Description: Clean up drbdlinks links on system boot or shutdown +# Description: Calls drbdlinks on initial system boot and shutdown to make +# sure that any links set up by drbdlinks are cleaned up when +# drbd is not running. +### END INIT INFO + +# Source function library. +. /etc/rc.d/init.d/functions + +RETVAL=0 +FOUNDFILE=0 +drbdlinks=/usr/sbin/drbdlinks + +[ -f /etc/drbdlinks.conf ] && FOUNDFILE=1 + +for FILE in /var/lib/drbdlinks/configs-to-clean/* /var/run/drbdlinks/configs-to-clean/*; do + if [ -f "$FILE" ]; then + FOUNDFILE=1 + break + fi +done + +if [ $FOUNDFILE -ne 1 ]; then + echo "No /etc/drbdlinks.conf file, aborting." + exit 1 +fi + +# See how we were called. +case "$1" in + start|stop|restart|force-reload) + echo -n "Cleaning up drbdlinks.conf links..." + + # Main drbdlinks.conf file + if [ -f /etc/drbdlinks.conf ]; then + if grep -q '^mountpoint(' /etc/drbdlinks.conf; then + $drbdlinks stop + RETVAL=$? + else + echo "No mountpoint found in /etc/drbdlinks.conf, skipping." + echo "No mountpoint found in /etc/drbdlinks.conf, skipping." | logger -t drbdlinksclean + fi + fi + + # clean up any supplemental config files + for FILE in /var/lib/drbdlinks/configs-to-clean/* /var/run/drbdlinks/configs-to-clean/*; do + if [ -f "$FILE" ]; then + echo -n "Cleaning up '${FILE##*/}' links..." + echo "Cleaning up '${FILE##*/}' links..." | logger -t drbdlinksclean + $drbdlinks --config-file "$FILE" stop || RETVAL=$? + fi + done + + [ $RETVAL -eq 0 ] && echo_success || echo_failure + echo + ;; + status) + $drbdlinks status + ;; + *) + echo $"Usage: drbdlinksclean {start|stop|status|restart|force-reload}" + RETVAL=1 + ;; +esac + +exit $RETVAL