[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