The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Автоматизация обновления антивируса ClamAV
Возможно поможет кому-то. Разместив в кроне, можно забыть о ручном обновлении, 
скрипт проверит базы, при необходимости загрузит и соберет обновленную 
версию и обновит демоны.

#!/bin/bash
#
# ClamAV auto update routine
#
# Define system variables
#
DESTPATH="/usr/src"
TOREPORT="root"
OK="Ok"
NO="Failed"
echo >> /var/log/`basename $0`.log
#
# Functions library: logger stores all the events in a log file,
# reporter emails error events to admin
#
function logger () {
    if [ "$1" != "n" ]; then
	DATA="$1"
	CMD=""
    else
	DATA=`date +"%b %d %H:%M:%S $2"`
	CMD="-ne"
    fi
    echo $CMD "$DATA" >> /var/log/`basename $0`.log
}
function reporter () {
    echo "Error $1 in `basename $0`" | mail -s "`basename $0` reporting error" $TOREPORT
    quit
}
#
# Check for presence of a link to internet, need to prevent dns errors reporting by syslogd
#
logger n "Check for link to clamav.net: "
IPADDR=`host clamav.net | grep address | cut -d " " -f 4`
if [ "$IPADDR" != "" ]; then
    #
    # Check availability of the node
    #
    PINGER=`ping -c 1 $IPADDR | grep received | cut -d " " -f 4`
    if [ $PINGER == 1 ]; then
	logger "$OK"
    else
	logger "$NO"
	reporter 1
    fi
else
    logger "$NO"
    reporter 2
fi
#
# Run database updater:
#
VERSION=`freshclam | grep "WARNING: Local" | cut -d " " -f 7`
#
# If warning message present, check for presence of tarball
#
if [ "$VERSION" != "" ]; then
    logger n "Checking presence of tarball: "
    if [ ! -e $DESTPATH/clamav-$VERSION.tar.gz ]; then
	logger "$NO"
	logger n "Fetching mirrors list: "
	#
	# No tarball found, start fetching subroutine
	# First of all, get the mirrors list
	#
	MIRROR=( $(wget -q http://prdownloads.sourceforge.net/clamav/clamav-$VERSION.tar.gz?download \
   -O /dev/stdout | grep "use_mirror" | cut -d "=" -f 3 | sed -r "s/<[^>]*>//g" | cut -d "\"" -f 1))
	if [ $? != 0 ]; then
	    logger "$NO"
	    reporter 3
	else
	    logger "${#MIRROR[@]} nodes available"
	fi
	#
	# To prevent overloading of the first node in a mirrors list, select random from the list
	#
	NODE=$RANDOM
	let "NODE %= ${#MIRROR[@]}"
	logger n "Downloading v$VERSION from ${MIRROR[$NODE]} ($NODE): "
 wget -q -c -t 5
http://${MIRROR[$NODE]}.dl.sourceforge.net/sourceforge/clamav/clamav-$VERSION.tar.gz \
-O $DESTPATH/clamav-$VERSION.tar.gz >/dev/null 2>&1
	if [ $? != 0 ]; then
	    logger "$NO"
	    reporter 4
	else
	    logger "$OK"
	fi
    else
	logger "$OK"
    fi
    #
    # Now tarball must be present, and we have to check it's condition
    #
    logger n "Checking tarball condition: "
    gzip -l $DESTPATH/clamav-$VERSION.tar.gz > /dev/null 2>&1
    if [ $? != 0 ]; then
	logger "$NO"
	#
	# If we got an error message in checking of a tarball,
	# erase it, and next time try to download fresh one
	#
	rm -f $DESTPATH/clamav-$VERSION.tar.gz
	reporter 5
    else
	logger "$OK"
	cd $DESTPATH/
	logger n "Unpacking: "
	#
	# Ok, gzip reported that's tarball is ok, now unpacking it
	#
	tar -xzf clamav-$VERSION.tar.gz >/dev/null 2>&1
	if [ $? != 0 ]; then
	    logger "$NO"
	    reporter 6
	else
	    logger "$OK"
	fi
	logger n "Configuring: "
	cd $DESTPATH/clamav-$VERSION
	#
	# Below are standard procedures of configuring, assembling and installing of the package
	#
	./configure > /dev/null 2>&1
	if [ $? != 0 ]; then
	    logger "$NO"
	    reporter 7
	else
	    logger "$OK"
	fi
	logger n "Compiling: "
	make > /dev/null
	if [ $? != 0 ]; then
	    logger "$NO"
	    reporter 8
	else
	    logger "$OK"
	fi
	logger n "Installing: "
	make install > /dev/null 2>&1
	if [ $? != 0 ]; then
	    logger "$NO"
	    reporter 9
	else
	    logger "$OK"
	fi
	logger n "Check old daemon: "
	#
	# Now we have to swap old smtpd daemon to new
	# If old daemon is preset - kill'em
	#
	PID=`ps -eo pid,comm | grep clamd | sed -r "s/^\ //" | cut -d " " -f 1`
	if [ "$PID" != "" ]; then
	    logger "$OK"
	    logger n "Killing old daemon ($PID): "
	    kill -9 $PID
	    if [ $? != 0 ]; then
		logger "$NO"
		reporter 10
	    else
		logger "$OK"
	    fi
	else
	    logger "$NO"
	fi
	logger n "Starting new daemon: "
	#
	# Now memory is clear from old daemon and we're running the new one
	#
	/usr/local/sbin/clamd & > /dev/null 2>&1
	if [ $? != 0 ]; then
	    logger "$NO"
	    reporter 11
	else
	    logger "$OK"
	fi
	#
	# Arter all of these, we have to run database updater again
	#
	logger n "Checking for newer database: "
	freshclam > /dev/null 2>&1
	if [ $? != 1 ]; then
	    logger "$NO"
	    reporter 12
	else
	    logger "$OK"
	fi
	#
	# At this stage, we have new antivirus installed, databases are up to date
	# and ready to protect our system
	#
    fi
else
    logger n "ClamAV is up to date"
    logger ""
fi
#
# I did not find any benefits to run freshclam in a daemon mode using switch -d.
# Running once for a 4, 6 or whatever hours, it takes system resources for 24 hours, 7 days
# I think better is to use this script and run it with cron daemon (crontab) as
a foreground process
# within the same time range
#
# Dima.
 
10.07.2006 , Автор: Дима
Ключи: clamav, update / Лицензия: CC-BY
Раздел:    Корень / Программисту и web-разработчику / Shell / Готовые скрипты

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, imago (??), 15:37, 13/07/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    а вся эта красота под какую систему?
     
     
  • 2.7, Аноним (-), 10:35, 18/07/2006 [^] [^^] [^^^] [ответить]  
  • +/
    >а вся эта красота под какую систему?

    Работает на FC4, Slackware, SuSE 10.1

     

  • 1.2, Praporshik (?), 15:53, 13/07/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Исходя из #!/bin/bash - под линух.
     
  • 1.3, мунеймиз (?), 15:57, 13/07/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Все это конечно хорошо, но что делать со сторонними патчами молюска? Автоапдейт демона так просто не проведешь :((
     
     
  • 2.9, Аноним (-), 10:37, 18/07/2006 [^] [^^] [^^^] [ответить]  
  • +/
    >Все это конечно хорошо, но что делать со сторонними патчами молюска? Автоапдейт
    >демона так просто не проведешь :((


    у меня работает как есть, думаю что патчи при желании  не составит труда вписать в скрипт

     
     
  • 3.16, mynameis (?), 12:42, 25/07/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Patch'i mogut ne podoiti pod novuyu versiyu ;(
     

  • 1.4, Abigor (??), 06:30, 14/07/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    порты рулят!!! portupgrade -rcvf clamd
     
  • 1.5, SubGun (??), 10:21, 18/07/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Я может чего-то не понимаю, но зачем скрипт, если ecть freshclam?
     
     
  • 2.6, Аноним (-), 10:34, 18/07/2006 [^] [^^] [^^^] [ответить]  
  • +/
    freshclam тебе не выкачает и не соберет пакет сам, верно?
     
     
  • 3.8, SubGun (??), 10:35, 18/07/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Ясно. Я просто увидел "обновит базы", но не обратил внимание, что и саму версию обновит.
     

  • 1.10, Digger (??), 16:01, 19/07/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Согласен с SubGun, название не корректное
     
     
  • 2.11, Аноним (-), 04:17, 20/07/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Предложи корректное название.
     

  • 1.12, vovan (??), 22:18, 21/07/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Под BSD не работает.
    bash-2.05b# ./clamav_update.sh
    sed: illegal option -- r
    usage: sed script [-Ean] [-i extension] [file ...]
           sed [-an] [-i extension] [-e script] ... [-f script_file] ... [file ...]
    ./clamav_update.sh: line 78: let: NODE %= 0: division by 0 (error token is "0")
    ./clamav_update.sh: line 28: quit: command not found
    ./clamav_update.sh: line 28: quit: command not found

    Не подскажете как это будет выглядеть на BSD?

     
     
  • 2.13, Samm (?), 13:33, 22/07/2006 [^] [^^] [^^^] [ответить]  
  • +/
    portupgrade -R clamav :)

    в /usr/local/etc/pkgtools.conf вписать желаемые опции и команду рестарта после установки. Всё :)

     
     
  • 3.14, vovan (??), 11:32, 24/07/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Спасибо. Так работает. И никаких скриптов ;)
     

  • 1.15, Аноним (-), 03:05, 25/07/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Caveat: если чуваки случайно зарелизят кривой билд, вы автоматически поимеете те же проблемы что и юзеры от кривых патчей виндовсапдейта :)
     
     
  • 2.17, vovan (??), 07:00, 13/08/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Чуваки, в отлличии от windows update не делают кривых релизов.
    А от ошибок не застрахован никто.
     
     
  • 3.18, scream (ok), 11:34, 13/10/2006 [^] [^^] [^^^] [ответить]  
  • +/
    Таки прям не делают?! Ошибаются все. Просто не все ошибки замечают.
     

  • 1.19, valmont2k (?), 12:53, 14/02/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Скрипт замечательный, но не работает, полагаю дело в строчке
    " MIRROR=( $(wget -q http://prdownloads.sourceforge.net/clamav/clamav-$VERSION.tar.gz?download
    -O /dev/stdout | grep "use_mirror" | cut -d "=" -f 3 | sed -r "s/<[^>]*>//g" | cut -d """ -f 1))"
    поскольку линух у меня пишет в консоли русским и "grep "use_mirror"" бесполезен, а может все из-за версии wget
    suse 10.0
    clamav-autoupdate.log:
    Feb 13 13:59:02 Check for link to clamav.net: Ok
    Feb 13 13:59:14 Checking presence of tarball: Failed
    Feb 13 13:59:14 Fetching mirrors list: 0 nodes available
    Feb 13 13:59:30 Downloading v0.88.7 from (5767): Failed
    Feb 13 13:59:30 Checking tarball condition: Failed
     
  • 1.20, FoX (??), 14:58, 25/09/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Такая же петрушка
    ./clam: line 78: let: NODE %= 0: division by 0 (error token is "0")
    ./clam: line 28: quit: command not found
    ./clam: line 28: quit: command not found

    Сен 25 16:35:00 Check for link to clamav.net: Ok
    Сен 25 16:35:01 Checking presence of tarball: Failed
    Сен 25 16:35:01 Fetching mirrors list: 0 nodes available
    Сен 25 16:37:48 Downloading v0.91.2 from  (18562): Failed
    Сен 25 16:37:48 Checking tarball condition: Failed

    ALT LINUX

     
  • 1.21, Автор (?), 12:45, 08/04/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    С тех пор sourceforge изменил страничку загрузки, так что эта штука уже не актуальна.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру