#!/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 # #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