#!/bin/sh
#
#  Yum cron file
#	Designed to work with Fermilab's workgroups
#	Designed to only send mail when something has been updated or installed
#
#  Written by Troy Dawson <dawson@fnal.gov>
#
#Change DEBUG to 0 to turn on debugging
DEBUG=1
MAXWAITTIME=180
MAILLIST="farm-yum@fnal.gov"
#MAILLIST="root,me@mydomain.com,you@yourdomain.org"

#*******************************************
# Function to ping a server
#  Return 0 - alive and able to access
#  Return 1 - failed
#*******************************************	
ping_server() {
	TESTSERVER=$1
	/usr/bin/ncftpls -t 5 -r 1 ftp://$TESTSERVER.fnal.gov/ > /dev/null 2>&1
	if [ $? -eq 0 ] ; then
		if [ $DEBUG -eq 0 ] ; then
			echo "   Server $TESTSERVER alive and ftpable"
		fi
		return 0
	fi
	if [ $DEBUG -eq 0 ] ; then
		echo "   Server $TESTSERVER not responding"
	fi
	return 1
}

if [ -f /var/lock/subsys/yum ]; then
	if [ $DEBUG -eq 0 ] ; then
		echo "Yum crontab starting"
	fi
	#****************************
	#VARIABLES
	#****************************
	TEMPFILE="/tmp/yum.temp"
	TEMPCONFIGFILE="/tmp/yum.temp.config"
	TEMPMAILFILE="/tmp/yum.temp.mail"
	WORKGROUP="$(cat /etc/workgroup)"
	TODAY="$(date +%D)"
	CHANGE=0
	if [ -s /etc/fermi-release ] ; then
		RELEASE="$(cat /etc/fermi-release | cut -d' ' -f4 | tr -d .)"
	else
		RELEASE="731"
	fi
	
	
	#****************************
	#Figure out which server to use
	#****************************	
	if [ $DEBUG -eq 0 ] ; then
		echo "  Finding a random, alive server"
	fi
	#pick the server randomly
	let SERVERNUM=$RANDOM%2	
	if [ $SERVERNUM -eq 0 ] ; then
		SERVER="linux"
	else
		SERVER="linux1"
	fi
	#check to see if we can access that server
	ping_server $SERVER
	#if we can't access the server, change servers
	if [ $? -eq 1 ] ; then
		if [ $SERVERNUM -eq 0 ] ; then
			SERVER="linux1"
		else
			SERVER="linux"
		fi
		#check to see how these servers work
		ping_server $SERVER
		#we couldn't access any servers, so fail this
		if [ $? -eq 1 ] ; then
			echo "Could not access any distribution servers"
			exit 2
		fi
	fi
	if [ $DEBUG -eq 0 ] ; then
		echo "    Using $SERVER as ftp server"
	fi
	
	#****************************
	#Setup
	#****************************
	rm -f $TEMPMAILFILE
	rm -f $TEMPCONFIGFILE
	rm -f $TEMPFILE

	#****************************
	#Updates Addons
	#****************************
	if [ $DEBUG -eq 0 ] ; then
		echo "  Starting Yum for Addons"
		echo "   Creating Config File"
	fi
	rm -f $TEMPCONFIGFILE
	echo "[main]" > $TEMPCONFIGFILE
	echo "" >> $TEMPCONFIGFILE
	echo "[${RELEASE}addons]" >> $TEMPCONFIGFILE
	echo "name=Fermi Linux $RELEASE addons" >> $TEMPCONFIGFILE
	echo "baseurl=ftp://$SERVER.fnal.gov/linux/$RELEASE/i386/updates/RedHat/addons/RPMS/" >> $TEMPCONFIGFILE
	if [ $DEBUG -eq 0 ] ; then
		echo "vvvvvvvvvvvvvvvvv"
		cat $TEMPCONFIGFILE
		echo "^^^^^^^^^^^^^^^^^"
		echo "    Starting Yum with command"
		echo "     /usr/sbin/yum -c $TEMPCONFIGFILE -R $MAXWAITTIME -e 0 -d 1 -y install '*'"		
	fi
	/usr/sbin/yum -c $TEMPCONFIGFILE -R $MAXWAITTIME -e 0 -d 1 -y install '*' > $TEMPFILE 2>&1
	if [ -s $TEMPFILE ] ; then
		if [ $DEBUG -eq 0 ] ; then
			echo "    We had changes"
			echo "vvvvvvvvvvvvvvvvv"
			cat $TEMPFILE
			echo "^^^^^^^^^^^^^^^^^"
		fi
		CHANGE=1
		echo " --------------------" >> $TEMPMAILFILE
		echo " YUM - Errata Addons" >> $TEMPMAILFILE
		echo " --------------------" >> $TEMPMAILFILE
		cat $TEMPFILE >> $TEMPMAILFILE
	fi
	#****************************
	#Cleanup Addons
	#****************************
	if [ $DEBUG -eq 0 ] ; then
		echo " Cleaning Up Addons"
	fi
	yum -e 0 -d 0 -c $TEMPCONFIGFILE clean all
	mv -f $TEMPCONFIGFILE /tmp/yum.conf.addons
	

	#****************************
	#Updates Update
	#****************************
	if [ $DEBUG -eq 0 ] ; then
		echo "  Starting Yum for Updates"
		echo "   Creating Config File"
	fi
	rm -f $TEMPCONFIGFILE
	echo "[main]" > $TEMPCONFIGFILE
	cat /etc/yum.d/yum.cron.excludes >> $TEMPCONFIGFILE
	echo "" >> $TEMPCONFIGFILE
	echo "[${RELEASE}updates]" >> $TEMPCONFIGFILE
	echo "name=Fermi Linux $RELEASE updates" >> $TEMPCONFIGFILE
	echo "baseurl=ftp://$SERVER.fnal.gov/linux/$RELEASE/i386/updates/RedHat/RPMS/" >> $TEMPCONFIGFILE
	if [ $DEBUG -eq 0 ] ; then
		echo "vvvvvvvvvvvvvvvvv"
		cat $TEMPCONFIGFILE
		echo "^^^^^^^^^^^^^^^^^"
		echo "    Starting Yum with command"
		echo "     /usr/sbin/yum -c $TEMPCONFIGFILE -e 0 -d 1 -y update"		
	fi
	/usr/sbin/yum -c $TEMPCONFIGFILE -e 0 -d 1 -y update > $TEMPFILE 2>&1
	if [ -s $TEMPFILE ] ; then
		if [ $DEBUG -eq 0 ] ; then
			echo "    We had changes"
			echo "vvvvvvvvvvvvvvvvv"
			cat $TEMPFILE
			echo "^^^^^^^^^^^^^^^^^"
		fi
		CHANGE=1
		echo " --------------------" >> $TEMPMAILFILE
		echo " YUM - Errata Updates" >> $TEMPMAILFILE
		echo " --------------------" >> $TEMPMAILFILE
		cat $TEMPFILE >> $TEMPMAILFILE
	fi
	#****************************
	#Cleanup Updates
	#****************************
	if [ $DEBUG -eq 0 ] ; then
		echo " Cleaning Up Updates"
	fi
	yum -e 0 -d 0 -c $TEMPCONFIGFILE clean all
	mv -f $TEMPCONFIGFILE /tmp/yum.conf.updates
	
	#****************************
	#Workgroup Update
	#****************************
	if [ $DEBUG -eq 0 ] ; then
		echo "  Starting Yum for Workgroup"
		echo "   Creating Config File"
	fi
	rm -f $TEMPCONFIGFILE
	echo "[main]" > $TEMPCONFIGFILE
	echo "" >> $TEMPCONFIGFILE
	echo "[${RELEASE}workgroup]" >> $TEMPCONFIGFILE
	echo "name=Fermi Linux $RELEASE $WORKGROUP workgroup" >> $TEMPCONFIGFILE
	echo "baseurl=ftp://$SERVER.fnal.gov/linux/$RELEASE/i386/Fermi/workgroups/$WORKGROUP/RPMS/" >> $TEMPCONFIGFILE
	if [ $DEBUG -eq 0 ] ; then
		echo "vvvvvvvvvvvvvvvvv"
		cat $TEMPCONFIGFILE
		echo "^^^^^^^^^^^^^^^^^"
		echo "    Starting Yum with command"
		echo "     /usr/sbin/yum -c $TEMPCONFIGFILE -e 0 -d 1 -y install \'*\'"		
	fi
	/usr/sbin/yum -c $TEMPCONFIGFILE -e 0 -d 1 -y install '*' > $TEMPFILE 2>&1
	if [ -s $TEMPFILE ] ; then
		if [ $DEBUG -eq 0 ] ; then
			echo "    We had changes"
			echo "vvvvvvvvvvvvvvvvv"
			cat $TEMPFILE
			echo "^^^^^^^^^^^^^^^^^"
		fi
		CHANGE=1
		echo " -----------------------" >> $TEMPMAILFILE
		echo " YUM - Workgroup Updates" >> $TEMPMAILFILE
		echo " -----------------------" >> $TEMPMAILFILE
		cat $TEMPFILE >> $TEMPMAILFILE
	fi
	#****************************
	#Cleanup Workgroups
	#****************************
	if [ $DEBUG -eq 0 ] ; then
		echo " Cleaning Up Workgoups"
	fi
	yum -e 0 -d 0 -c $TEMPCONFIGFILE clean all
	mv -f $TEMPCONFIGFILE /tmp/yum.conf.workgroups
	
		
	#****************************
	#Send Mail If Needed
	#****************************
	if [ $CHANGE -eq 1 ] ; then
		if [ $DEBUG -eq 0 ] ; then
			echo " Mail Needs To Be Sent"
			echo "  /bin/mail -s \"YUM:$HOSTNAME:$TODAY\" $MAILLIST "
		fi
		/bin/mail -s "YUM:$HOSTNAME:$TODAY" $MAILLIST < $TEMPMAILFILE
	fi

	#****************************
	#Cleanup
	#****************************
	if [ $DEBUG -eq 0 ] ; then
		echo " Cleaning Up Interactive Yum"
	fi
	yum -e 0 -d 0 list yum > /dev/null 2>&1
	yum -e 0 -d 0 clean all
	rm -f $TEMPMAILFILE
	rm -f $TEMPCONFIGFILE
	rm -f $TEMPFILE
	if [ $DEBUG -eq 0 ] ; then
		echo "Yum Cron Exiting succesfully"
	fi
else
	if [ $DEBUG -eq 0 ] ; then
		echo "Yum cron not turned on.  Exiting"
	fi
	exit 1
fi
exit 0
