#!/bin/bash # Alternative AVP updater script # 2003 (c) Yuri Pimenov # http://up.ftpsearch.lv # 2004 heavy patched by deniss at fuckoff.com for Win32 clients support SCRIPTHOME=/usr/local/avp CURUPDATES=${SCRIPTHOME}/bases BAKUPDATES=${SCRIPTHOME}/bases.bak LOGFILE=/var/log/avpupdate.log # In case if AVP will die after reload - try to restart it. Must be 0 if Ok. AVPRESTART="/etc/rc.d/rc.avp restart" # AVP mirrors list / path to avp.set. Order means priority. MIRROR_LIST="http://downloads2.kaspersky-labs.com/updates http://ftp.antivirus.lv/updates http://ftp.kaspersky. ru" # Additional wget options WGET_OPTS="-t1 --passive-ftp --non-verbose" # # END OF CONFIGURATION. CODE GOES HERE # get_avp_set() { # Take a list of mirrors and choose the working one + get avp.set for SITE in $MIRROR_LIST; do /usr/bin/wget -N -nv ${WGET_OPTS} ${SITE}/avp.set > /dev/null 2>&1 if [ $? -eq 0 ]; then return 0 fi echo `date` Url ${SITE}/avp.set unavailable. Trying another mirror... >> ${LOGFILE} done return 1 } get_files_from_set() { # Download all files from site wget --timestamping --recursive -l 1 --no-parent --no-directories -R html,gif ${WGET_OPTS} ${SITE}/ 2>> ${L OGFILE} 1>> ${LOGFILE} if [ $? -ne 0 ]; then echo `date` Download failed >> ${LOGFILE} fi } rm_not_listed() { # Now delete all obsolete files for file in `ls *.avc 2>/dev/null`; do cat ${SCRIPTHOME}/avp.set | tr -d "\r" | grep -Fx $file > /dev/null if [ $? != 0 ]; then echo `date` The file $file not listed in avp.set... Removing. >> ${LOGFILE} rm -f $file fi done # Delete html files too rm -f index.html* } echo `date` Script started. >> ${LOGFILE} SITE="" IS_UPDATED=0 cd ${SCRIPTHOME} get_avp_set if [ $? -ne 0 ]; then echo `date` It seems that all mirrors are dead... Nothing to do - exiting. >> ${LOGFILE} exit 1 fi echo `date` avp.set retrieved. Proceed with $SITE >> ${LOGFILE} rm -rf ${BAKUPDATES} cp -rf ${CURUPDATES} ${BAKUPDATES} cd ${CURUPDATES} /usr/bin/find ./ -mtime +60 -exec /bin/rm -f {} \; get_files_from_set echo `date` Download finished. >> ${LOGFILE} /usr/bin/diff avp.set ${BAKUPDATES}/avp.set >/dev/null 2>> ${LOGFILE} if [ $? -ne 0 ]; then echo `date` Updates found >> ${LOGFILE} IS_UPDATED=1 fi rm -f avp.set rm_not_listed # Start the AvpUpdater then restart AVP daemon mv -f ${SCRIPTHOME}/avp.set ${CURUPDATES} chmod 644 ${CURUPDATES}/* if [ $IS_UPDATED -eq 1 ]; then echo -n `date` "Updates detected. Reloading AVP... " >> ${LOGFILE} ${AVPRESTART} >> ${LOGFILE} if [ $? -eq 0 ]; then echo "Success!" >> ${LOGFILE} else echo "Somithing goes wrong !" echo "Failed!" >> ${LOGFILE} echo -n `date` "Try to rollback backed up definitions... " >> ${LOGFILE} rm -rf ${CURUPDATES} mv ${BAKUPDATES} ${CURUPDATES} ${AVPRESTART} 2>&1 >> ${LOGFILE} if [ $? -eq 0 ]; then echo "Success!" >> ${LOGFILE} else echo "Failed! I'm giving up :(" >> ${LOGFILE} echo "Things are bad ! avp failed to start" fi fi else echo `date` No reason to reload AVP. Exiting... >> ${LOGFILE} fi rm -rf ${BAKUPDATES}