#!/bin/bash # AVG updater script # Main idea & design by Yuri Pimenov 2003 (c) http://up.ftpsearch.lv # 2004 heavy patched by deniss at fuckoff.com for AVG SCRIPTHOME=/usr/local/avg CURUPDATES=${SCRIPTHOME}/update LOGFILE=/var/log/avgupdate.log LOCK=${SCRIPTHOME}/prevent_update MIRROR_LIST="http://www.grisoft.cz/softw/70/update" AVGINFO=avg7info.ctf # Additional wget options WGET_OPTS="-t1 -nv" # usefull commands RM=/bin/rm WGET=/usr/bin/wget GREP=/bin/grep GAWK=/bin/gawk TR=/usr/bin/tr CAT=/bin/cat PS=/bin/ps MV=/bin/mv CHMOD=/bin/chmod TOUCH=/bin/touch # # END OF CONFIGURATION. CODE GOES HERE # get_avg_set() { # Take a list of mirrors and choose the working one + get AVGINFO for SITE in ${MIRROR_LIST}; do ${WGET} -N -nv ${WGET_OPTS} ${SITE}/${AVGINFO} > /dev/null 2>&1 if [ $? -eq 0 ]; then return 0 fi echo `date` Url ${SITE}/${AVGINFO} unavailable. Trying another mirror... >> ${LOGFILE} done return 1 } get_files_from_set() { # After retreiving of avg7info - download all files listed there for file in `${GREP} -Eio "[a-z0-9]+\.bin" ${SCRIPTHOME}/${AVGINFO}`; do VARS=`((${WGET} -N -nv ${WGET_OPTS} ${SITE}/${file} 2>&1 ; echo $? >&3) | ${GREP} -e '.' >/dev/null ; echo $? >&3) 3>&1` set $VARS wget_rval=$1 grep_rval=$2 if [ $wget_rval -ne 0 ]; then echo "Download of ${SITE}/${file} failed" >> ${LOGFILE} else if [ $grep_rval -eq 0 ]; then echo "File ${file} updated" >> ${LOGFILE} fi fi done } rm_not_listed() { # Now delete all obsolete files for file in `ls *.bin 2>/dev/null`; do ${CAT} ${SCRIPTHOME}/${AVGINFO} | ${TR} -d "\r" | ${GREP} ${file} > /dev/null if [ $? != 0 ]; then echo `date` The file ${file} not listed in ${AVGINFO}... Removing. >> ${LOGFILE} ${RM} -f ${file} fi done } cd ${SCRIPTHOME} echo `date` Script started. >> ${LOGFILE} # check for another running copy if [ -f ${LOCK} ]; then psavg=`${PS} -aux | ${GREP} wget | ${GREP} grisoft` if [ "${psavg}" != "" ]; then echo File ${LOCK} exist, update aborted >> ${LOGFILE} exit 3 fi else ${TOUCH} ${LOCK} fi SITE="" get_avg_set if [ $? -ne 0 ]; then echo `date` It seems that all mirrors are dead... Nothing to do - exiting. >> ${LOGFILE} exit 1 fi echo `date` ${AVGINFO} retrieved. Proceed with $SITE >> ${LOGFILE} cd ${CURUPDATES} get_files_from_set echo `date` Download finished. >> ${LOGFILE} rm_not_listed ${MV} -f ${SCRIPTHOME}/${AVGINFO} ${CURUPDATES} ${CHMOD} 644 ${CURUPDATES}/* ${RM} -rf ${LOCK}