#!/bin/sh
# Script to run daily update of Scientific Linux Linux system using apt-get
# version: 0.2
#
# 08.06.2004 Jaroslaw.Polok@cern.ch
#

# ---------- DO NOT MODIFY THIS FILE --------------------------------
# ---------- change settings in /etc/sysconfig/apt-autoupdate -------
# ---------- enable/disable with /sbin/service apt-autoupdate .. ----
# -------------------------------------------------------------------

DATE="$(date +%c)"
HOUR="$(date +%H)"

TEMPFILE=`/bin/mktemp /tmp/$$.XXXXXXXX` || exit 1
TEMPMAIL=`/bin/mktemp /tmp/$$.XXXXXXXX` || exit 1
APT="/usr/bin/apt-get"
APTARGS="--quiet --quiet --assume-yes --verbose-versions"

mail_and_bailout() {

SUBJ=$1
TO=$2
FILE=$3
ERROR=$4

/bin/mail -s "[UPDATE] - $SUBJ on $HOSTNAME: $DATE" $TO < $FILE

if [ $ERROR -eq 1 ]; then
  /bin/rm -f $TEMPFILE
  /bin/rm -f $TEMPMAIL
  exit 1
fi

}

if [ -f /var/lock/subsys/apt-autoupdate ]; then
 echo "Started update at: $DATE" > $TEMPFILE 
else
 /bin/rm -f $TEMPFILE
 /bin/rm -f $TEMPMAIL
 exit 0
fi   

if [ -r /etc/sysconfig/apt-autoupdate ]; then
 . /etc/sysconfig/apt-autoupdate
fi

#[ -z "$APTENABLED" ] && APTENABLED=1 THIS GOES via /var/lock/subsys/apt-cern now
[ -z "$APTAPPLET" ] && APTAPPLET=4
[ -z "$APTHOUR" ] && APTHOUR=4
[ -z "$APTMAILTO" ] && APTMAILTO="root"
[ -z "$APTUPDATE" ] && APTUPDATE=1
[ -z "$APTRANDOMWAIT" ] && APTRANDOMWAIT=30
[ -z "$APTCLEAN" ] && APTCLEAN=1
[ -z "$APTCHECKKERNEL" ] && APTCHECKKERNEL=1
#[ -z "$APTUSERARGS" ] && APTUSERARGS=""


if [ $(( ($APTHOUR +1) %24 )) -eq 0 ]; then
HOUR2=25
else
HOUR2=$(( ($APTHOUR +1) %24 ))
fi

#HOUR3=$(($APTAPPLET%24))


if [ $HOUR -ge $(( $APTHOUR %24 )) ] && [ $HOUR -lt $HOUR2 ]; then
 echo "" >> $TEMPFILE #go ahead
else
 # Here we hookup lookup for cern-applet ...
  /bin/rm -f $TEMPFILE
  /bin/rm -f $TEMPMAIL
 exit 0
fi 


# Sleep for random interval .. not to kill our servers ;-))

if [ $APTRANDOMWAIT -ne 0 ]; then

 SLEEPTIME=$(( ( $RANDOM % $APTRANDOMWAIT ) * 60 ))
 echo "Sleeping for $SLEEPTIME seconds ..." > $TEMPFILE
 sleep $SLEEPTIME
 echo "." >> $TEMPFILE
fi

# First resynchronize index files

$APT $APTARGS update > $TEMPFILE 2>&1

if [ $? -eq 100 ]; then
 echo "**************** Problem(s) during UPDATE" >> $TEMPFILE
 echo "**************** command: $APT $APTARGS update" >> $TEMPFILE
 mail_and_bailout "FAILURE" $APTMAILTO $TEMPFILE 1
fi
# Only check updates

if [ $APTUPDATE -eq 0 ]; then

 $APT $APTARGS --dry-run upgrade >> $TEMPFILE 2>&1

 if [ $APTCHECKKERNEL -ne 0 ]; then
  $APT $APTARGS --dry-run upgrade-kernel  >> $TEMPFILE 2>&1
 fi

 if [ $? -eq 100 ]; then
  echo "**************** Problem(s) during UPGRADE" >> $TEMPFILE
  echo "**************** command: $APT $APTARGS --dry-run upgrade (upgrade-kernel)" >> $TEMPFILE
  mail_and_bailout "FAILURE" $APTMAILTO $TEMPFILE 1
 fi

# check TEMPFILE here: anything to do ?
# 
# grep "^Inst" $TEMPFILE | wc -l will do
# if [ yes something to do  ]; then
#  echo "" >> $TEMPFILE
#    echo "-----------------------------------------------------" >> $TEMPFILE
#    echo "" >> $TEMPFILE
#    echo "Packages listed above are available for manual update" >>  $TEMPFILE
#    echo "To update your system please run: ">> $TEMPFILE
# fi



# Update packages

else # if [ $APTUPDATE -eq 0 ]

 $APT $APTARGS upgrade >> $TEMPFILE 2>&1

 if [ $? -eq 100 ]; then
  echo "**************** Problem(s) during UPGRADE" >> $TEMPFILE
  echo "**************** command: $APT $APTARGS upgrade" >> $TEMPFILE
  mail_and_bailout "FAILURE" $APTMAILTO $TEMPFILE 1
 fi

# check TEMPFILE here: anything reported ?
# Just send the stuff as is ..
# if [ yes something to do  ]; then
# echo "" >> $TEMPFILE
#    echo "-----------------------------------------------------" >> $TEMPFILE
#    echo "" >> $TEMPFILE
#    echo "Packages listed above have been updated/installed on your" >> $TEMPFI
#LE
#    echo "system." >> $TEMPFILE
# fi


# We do not update kernels automagically but we will check anyway:
 if [ $APTCHECKKERNEL -ne 0 ]; then
  $APT $APTARGS --dry-run upgrade-kernel >> $TEMPFILE 2>&1
  if [ $? -eq 100 ]; then
  echo "**************** Problem(s) during UPGRADE-KERNEL" >> $TEMPFILE
  echo "**************** command: $APT $APTARGS --dry-run upgrade-kernel" >> $TEMPFILE
  mail_and_bailout "FAILURE" $APTMAILTO $TEMPFILE 1
  fi

  # if [ yes something to do  ]; then
#  echo "" >> $TEMPFILE
#    echo "-----------------------------------------------------" >> $TEMPFILE
#    echo "" >> $TEMPFILE
#    echo "Packages listed above are available for manual update" >>  $TEMPFILE
#    echo "To update your system please run: ">> $TEMPFILE
# fi

 fi

fi # if [ $APTUPDATE -eq 0 ]

if [ $APTCLEAN -eq 1 ]; then
  $APT $APTARGS clean > /dev/null 2>&1
fi

if [ -s $TEMPFILE ] ; then
   echo "" > $TEMPMAIL
   echo "System update on $HOSTNAME run at $DATE result:" >> $TEMPMAIL
   echo "" >> $TEMPMAIL
   /bin/cat $TEMPFILE >> $TEMPMAIL
   echo "" >> $TEMPMAIL
   echo "--" >> $TEMPMAIL
   echo "Your Scientific Linux apt autoupdte system " >> $TEMPMAIL

   mail_and_bailout "SUCCESS" $APTMAILTO $TEMPMAIL 0
fi

  /bin/rm -f $TEMPFILE
  /bin/rm -f $TEMPMAIL


