[yum-commits] 2 commits - yum-cron/Makefile yum-cron/yum-cron.sysvinit yum.spec
James Antill
james at osuosl.org
Thu Feb 21 21:38:27 UTC 2013
yum-cron/Makefile | 13 ++++-
yum-cron/yum-cron.sysvinit | 108 +++++++++++++++++++++++++++++++++++++++++++++
yum.spec | 100 ++++++++++++++++++++++++++++++++++-------
3 files changed, 202 insertions(+), 19 deletions(-)
New commits:
commit d2552945d84312e5ba90c091d05facbc38c93ee7
Author: James Antill <james at and.org>
Date: Tue Feb 19 19:28:17 2013 -0500
Fix comment for pyxattr requires.
diff --git a/yum.spec b/yum.spec
index d0b8f21..fa8682a 100644
--- a/yum.spec
+++ b/yum.spec
@@ -58,7 +58,7 @@ Requires: yum-metadata-parser >= 1.1.0
Requires: pygpgme
# rawhide is >= 0.5.3-7.fc18 ... as this is added.
Requires: pyliblzma
-# This is really a suggests, but we have none...
+# Not really a suggests anymore, due to metadata using it.
Requires: pyxattr
Conflicts: rpm >= 5-0
commit 86da0920eab2d095b5893ae53d4ec328156363ce
Author: James Antill <james at and.org>
Date: Tue Feb 19 17:25:45 2013 -0500
Kind of revert fd53c9c4c28a6f8eba5c7c13a55baf146ef99e9d, so we can
build cron on RHEL <= 6 and Fedora <= 18. Still defaults to systemd.
diff --git a/yum-cron/Makefile b/yum-cron/Makefile
index 27fcdfd..812bea2 100644
--- a/yum-cron/Makefile
+++ b/yum-cron/Makefile
@@ -1,17 +1,26 @@
UNITDIR=/lib/systemd/system
+INIT=systemd
+
all:
echo "Nothing to do"
clean:
rm -f *~
-install:
+install: install-$(INIT)
+
+install-systemd: install-common
+ install -D -m 644 yum-cron.service $(DESTDIR)/$(UNITDIR)/yum-cron.service
+
+install-sysv: install-common
+ install -D -m 755 yum-cron.sysvinit $(DESTDIR)/etc/rc.d/init.d/yum-cron
+
+install-common:
mkdir -p $(DESTDIR)/etc/cron.daily
mkdir -p $(DESTDIR)/etc/rc.d/init.d
mkdir -p $(DESTDIR)/usr/sbin
# Install yum-update.cron as 0yum-update.cron so it runs before items like
# manpage update, mlocate, and prelink
install -D -m 755 yum-update.cron.sh $(DESTDIR)/etc/cron.daily/0yum-update.cron
- install -D -m 644 yum-cron.service $(DESTDIR)/$(UNITDIR)/yum-cron.service
install -D -m 755 yum-cron.py $(DESTDIR)/usr/sbin/yum-cron
diff --git a/yum-cron/yum-cron.sysvinit b/yum-cron/yum-cron.sysvinit
new file mode 100644
index 0000000..ee531c6
--- /dev/null
+++ b/yum-cron/yum-cron.sysvinit
@@ -0,0 +1,108 @@
+#!/bin/bash
+#
+# yum-cron Enable or disable scheduled yum system updates.
+#
+# chkconfig: - 50 01
+#
+# description: This controls whether yum-cron runs. If this service is \
+# off, the yum-cron scripts in /etc/cron.daily exit \
+# immediately; otherwise, they download and/or apply package \
+# updates as configured in /etc/sysconfig/yum-cron.
+# processname: yum-cron
+# config: /etc/yum/yum-daily.yum
+#
+
+# source function library
+. /etc/rc.d/init.d/functions
+
+test -f /etc/sysconfig/yum-cron && . /etc/sysconfig/yum-cron
+
+lockfile=/var/lock/subsys/yum-cron
+
+# This is generated by /usr/sbin/yum-cron and will exist when that script
+# is running and not otherwise.
+pidfile=/var/lock/yum-cron.pid
+
+RETVAL=0
+
+start() {
+ echo -n $"Enabling scheduled yum updates: "
+ # The cron script exits silently if this file doesn't exist.
+ touch "$lockfile" && success || failure
+ RETVAL=$?
+ echo
+}
+
+stop() {
+ # Disabling this is just removing the so-called lock file. But we
+ # also have logic to delay shutdown if a transaction is in-progress.
+ # All that affects is the exit of _this_ script, which may be
+ # waited on by other things in the shutdown process.
+ echo -n $"Disabling scheduled yum updates: "
+ if [ "$SERVICE_WAITS" = "yes" ]; then
+ # if SERVICE_WAITS is yes, we check for an active pid
+ # file and recheck in 5 second increments up to
+ # SERVICE_WAIT_TIME before continuing.
+ if (set -o noclobber; ! echo "$$" > $pidfile ) 2>/dev/null; then
+ # yum-cron has the lock. Read the pid, and wait and then loop
+ # until it's done.
+ activepid="$(< $pidfile)" 2>/dev/null
+ if [ $? != 0 ]; then
+ echo; echo -n $"Stale yum-cron lock ignored. "
+ else
+ echo; echo -n $"Waiting for in-progress yum transaction"
+ end=$( expr $( date +%s ) + ${SERVICE_WAIT_TIME:-300} )
+ while checkpid $activepid 2>/dev/null ; do
+ echo -n "."
+ if [ $( date +%s ) -gt $end ]; then
+ echo -n " Timed out. "
+ break
+ fi
+ sleep 5
+ done
+ fi
+ else
+ # we got the lock. we don't really want it; remove and move on.
+ rm -f "$pidfile"
+ fi
+ fi
+ rm -f "$lockfile" && success || failure
+ RETVAL=$?
+ echo
+}
+
+restart() {
+ stop
+ start
+}
+
+case "$1" in
+ start)
+ start
+ ;;
+ stop)
+ stop
+ ;;
+ restart|force-reload)
+ restart
+ ;;
+ reload)
+ ;;
+ condrestart)
+ [ -f "$lockfile" ] && restart
+ ;;
+ status)
+ if [ -f $lockfile ]; then
+ echo $"Scheduled yum updates are enabled."
+ RETVAL=0
+ else
+ echo $"Scheduled yum updates are disabled."
+ RETVAL=3
+ fi
+ ;;
+ *)
+ echo $"Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart}"
+ exit 1
+esac
+
+exit $RETVAL
diff --git a/yum.spec b/yum.spec
index 734f0a7..d0b8f21 100644
--- a/yum.spec
+++ b/yum.spec
@@ -2,11 +2,16 @@
%define auto_sitelib 1
%define yum_updatesd 0
%define disable_check 0
-%define yum_cron 1
+%define yum_cron_systemd 1
-%if 0%{?rhel} == 6
-# rhel-6 doesn't have the systemd stuff, so won't build...
-%define yum_cron 0
+%if 0%{?rhel} <= 6
+# rhel-6 doesn't have the systemd stuff...
+%define yum_cron_systemd 0
+%endif
+
+%if 0%{?fedora} <= 18
+# yum in Fedora <= 18 doesn't use systemd unit files...
+%define yum_cron_systemd 0
%endif
%if %{auto_sitelib}
@@ -117,20 +122,26 @@ Requires(postun): /sbin/service
yum-updatesd provides a daemon which checks for available updates and
can notify you when they are available via email, syslog or dbus.
-%if %{yum_cron}
%package cron
Summary: Files needed to run yum updates as a cron job
Group: System Environment/Base
Requires: yum >= 3.0 cronie crontabs findutils
+%if %{yum_cron_systemd}
BuildRequires: systemd-units
Requires(post): systemd
Requires(preun): systemd
Requires(postun): systemd
+%else
+Requires(post): /sbin/chkconfig
+Requires(post): /sbin/service
+Requires(preun): /sbin/chkconfig
+Requires(preun): /sbin/service
+Requires(postun): /sbin/service
+%endif
%description cron
These are the files needed to run yum updates as a cron job.
Install this package if you want auto yum updates nightly via cron.
-%endif
%prep
@@ -147,7 +158,15 @@ make check
%install
[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
-make DESTDIR=$RPM_BUILD_ROOT UNITDIR=%{_unitdir} install
+
+%if %{yum_cron_systemd}
+INIT=systemd
+%else
+INIT=sysv
+%endif
+
+make DESTDIR=$RPM_BUILD_ROOT UNITDIR=%{_unitdir} INIT=$INIT install
+
install -m 644 %{SOURCE1} $RPM_BUILD_ROOT/%{_sysconfdir}/yum.conf
mkdir -p $RPM_BUILD_ROOT/%{_sysconfdir}/yum/pluginconf.d $RPM_BUILD_ROOT/%{yum_pluginslib}
mkdir -p $RPM_BUILD_ROOT/%{yum_pluginsshare}
@@ -185,13 +204,12 @@ chmod +x $RPM_BUILD_ROOT/%{python_sitelib}/rpmUtils/*.py
%find_lang %name
-%if ! %{yum_cron}
-# Remove the yum-cron stuff to make rpmbuild happy..
+%if %{yum_cron_systemd}
+# Remove the yum-cron sysV stuff to make rpmbuild happy..
+rm -f $RPM_BUILD_ROOT/%{_sysconfdir}/rc.d/init.d/yum-cron
+%else
+# Remove the yum-cron systemd stuff to make rpmbuild happy..
rm -f $RPM_BUILD_ROOT/%{_unitdir}/yum-cron.service
-rm -f $RPM_BUILD_ROOT/%{_sysconfdir}/cron.daily/0yum-update.cron
-rm -f $RPM_BUILD_ROOT/%{_sysconfdir}/yum/yum-cron.conf
-rm -f $RPM_BUILD_ROOT/%{_sbindir}/yum-cron
-rm -f $RPM_BUILD_ROOT/%{_mandir}/man*/yum-cron.*
%endif
%clean
@@ -212,9 +230,9 @@ fi
exit 0
%endif
-%if %{yum_cron}
%post cron
+%if %{yum_cron_systemd}
#systemd_post yum-cron.service
# Do this manually because it's a fake service for a cronjob, and cronjobs
# are default on atm. This may change in the future.
@@ -231,12 +249,58 @@ fi
# Also note:
# systemctl list-unit-files | fgrep yum-cron
+%else
+# SYSV init post cron
+# Make sure chkconfig knows about the service
+/sbin/chkconfig --add yum-cron
+# if an upgrade:
+if [ "$1" -ge "1" ]; then
+# if there's a /etc/rc.d/init.d/yum file left, assume that there was an
+# older instance of yum-cron which used this naming convention. Clean
+# it up, do a conditional restart
+ if [ -f /etc/init.d/yum ]; then
+# was it on?
+ /sbin/chkconfig yum
+ RETVAL=$?
+ if [ $RETVAL = 0 ]; then
+# if it was, stop it, then turn on new yum-cron
+ /sbin/service yum stop 1> /dev/null 2>&1
+ /sbin/service yum-cron start 1> /dev/null 2>&1
+ /sbin/chkconfig yum-cron on
+ fi
+# remove it from the service list
+ /sbin/chkconfig --del yum
+ fi
+fi
+exit 0
+%endif
%preun cron
+%if %{yum_cron_systemd}
%systemd_preun yum-cron.service
+%else
+# SYSV init preun cron
+# if this will be a complete removeal of yum-cron rather than an upgrade,
+# remove the service from chkconfig control
+if [ $1 = 0 ]; then
+ /sbin/chkconfig --del yum-cron
+ /sbin/service yum-cron stop 1> /dev/null 2>&1
+fi
+exit 0
+%endif
%postun cron
+%if %{yum_cron_systemd}
%systemd_postun_with_restart yum-cron.service
+%else
+# SYSV init postun cron
+
+# If there's a yum-cron package left after uninstalling one, do a
+# conditional restart of the service
+if [ "$1" -ge "1" ]; then
+ /sbin/service yum-cron condrestart 1> /dev/null 2>&1
+fi
+exit 0
%endif
@@ -278,16 +342,18 @@ fi
%dir %{yum_pluginslib}
%dir %{yum_pluginsshare}
-%if %{yum_cron}
%files cron
%defattr(-,root,root)
%doc COPYING
%{_sysconfdir}/cron.daily/0yum-update.cron
%config(noreplace) %{_sysconfdir}/yum/yum-cron.conf
+%if %{yum_cron_systemd}
%{_unitdir}/yum-cron.service
+%else
+%{_sysconfdir}/rc.d/init.d/yum-cron
+%endif
%{_sbindir}/yum-cron
%{_mandir}/man*/yum-cron.*
-%endif
%if %{yum_updatesd}
%files updatesd
More information about the Yum-commits
mailing list