Skip to content

Commit

Permalink
Kind of revert fd53c9c, so we can
Browse files Browse the repository at this point in the history
build cron on RHEL <= 6 and Fedora <= 18. Still defaults to systemd.
  • Loading branch information
james-antill committed Feb 19, 2013
1 parent 87fd258 commit 86da092
Show file tree
Hide file tree
Showing 3 changed files with 201 additions and 18 deletions.
13 changes: 11 additions & 2 deletions yum-cron/Makefile
Original file line number Diff line number Diff line change
@@ -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
108 changes: 108 additions & 0 deletions yum-cron/yum-cron.sysvinit
Original file line number Diff line number Diff line change
@@ -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
98 changes: 82 additions & 16 deletions yum.spec
Original file line number Diff line number Diff line change
Expand Up @@ -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}
Expand Down Expand Up @@ -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
Expand All @@ -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}
Expand Down Expand Up @@ -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
Expand All @@ -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.
Expand All @@ -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


Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 86da092

Please sign in to comment.