среда, 20 апреля 2011 г.

Скрипт обновления Comodo опять обновился

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

7zip теперь не требуется. Сервер просто не распаковывает скачанные обновления, т.к. в моей сети не осталось антивирусов старых версий.
Как правильно подсказали, в скрипте имеются bash-зависимые выражения. Нужно иметь в виду при использовании других оболочек. Обязательно нужно проверить, не является ли /bin/bash символьной ссылкой на что-нибудь.
В процессе работы создает lock-файл в каталоге /tmp. Поэтому при неожиданном прерывании работы нужно не забыть вычистить lock-файл.
#!/bin/bash

COMODO=/var/www/html
CPATH=/av/updates53

[ ! -f /tmp/comodo.lock ] && (
 touch /tmp/comodo.lock
 [ -f $COMODO$CPATH/versioninfo.ini ] && cp -f $COMODO$CPATH/versioninfo.ini{,.prev}

 cd $COMODO$CPATH
 wget --timeout=5 -N http://downloads.comodo.com/$CPATH/versioninfo.ini && (
  BASE=$(grep MaxBase $COMODO$CPATH/versioninfo.ini| grep -oE '[0-9]+')
  [ ! -f $COMODO/av/updates53/sigs/bases/BASE_END_USER_v$BASE.cav.z ] && (
   cd $COMODO$CPATH/sigs/bases
   wget --timeout=5 -nc http://downloads.comodo.com/$CPATH/sigs/bases/BASE_END_USER_v$BASE.cav.z && echo "$(date +'%Y.%m.%d %H:%M') Получена база N$BASE">>$COMODO/report
  )

 let OLD_UPDATE=$(grep MaxAvail $COMODO$CPATH/versioninfo.ini.prev| grep -oE '[0-9]+')+1
 [ $BASE -gt $OLD_UPDATE ] && let OLD_UPDATE=$BASE+1

 NEW_UPDATE=$(grep MaxAvail $COMODO$CPATH/versioninfo.ini| grep -oE '[0-9]+')
 cd $COMODO$CPATH/sigs/updates

 for i in $(seq $OLD_UPDATE $NEW_UPDATE); do
  wget --timeout=5 -nc http://downloads.comodo.com/$CPATH/sigs/updates/BASE_UPD_END_USER_v$i.cav.z && echo "$(date +'%Y.%m.%d %H:%M') Полученно обновление N$i">>$COMODO/report
 done

 ) || ( echo "Скачать versioninfo.ini не удалось">>$COMODO/report ; exit 1 )
 rm -f /tmp/comodo.lock )

10 комментариев:

  1. Анонимный7 июня 2011 г., 18:36

    Где-то ошибочка строка 30.
    ) || ( echo "Скачать versioninfo.ini не удалось">>$COMODO/report ; exit 1 )

    ОтветитьУдалить
  2. Возможно shell другой. Уже писали, что скрипт слишком завязан на bash. Буду в той конторе, где скрипт работает, погляжу.

    А какая ошибка? Что пишет?

    ОтветитьУдалить
  3. Когда копипастил скрипт, пропустил скобку на последней строке, потому и ругался.

    ОтветитьУдалить
  4. Анонимный14 июля 2011 г., 9:55

    Спасибо, все работает.
    Есть одно НО: Я переносил базы на новый linux-сервер, сделал ему тот же адрес, что был на старом, то есть на клиентских машинах теоретически ничего менять не пришлось. Так вот: клиентские машины не могут теперь с него обновиться, антивирус ругается, что не может обновиться и просит проверить мое интернет соединение.
    ПЕРЕУСТАНОВКА антивируса решает проблему, но клиентских машин много, и переустановка означает большие потери времени.
    Может приходилось сталкиваться? Возможно уже есть решение?

    ОтветитьУдалить
  5. Анонимный20 июля 2011 г., 16:09

    Если интересно скачивать обновления для самого антивируса можно попробовать такой скрипт.
    inis - версия обновления, поискать можно в логах вебсервера
    prefix - корень папки с обновлениями


    #!/usr/bin/python
    from xml.dom.minidom import parse
    import os

    inis = "/inis_1500/"
    prefix = "/var/www/comodo/"

    os.system("wget -nc -x -nH -P " + prefix + " http://download.comodo.com/cis/download/updates/release" + inis + "cis_update_x32.xml")
    os.system("wget -nc -x -nH -P " + prefix + " http://download.comodo.com/cis/download/updates/release" + inis + "cis_update_x64.xml")

    dom32 = parse(prefix + "cis/download/updates/release" + inis + "cis_update_x32.xml")
    for node32 in dom32.getElementsByTagName('file'):
    os.system("wget -nc -x -nH -P " + prefix + " http://download.comodo.com/cis/download/updates/release" + inis + node32.attributes.item(1).value)

    dom64 = parse(prefix + "cis/download/updates/release" + inis + "cis_update_x64.xml")
    for node64 in dom64.getElementsByTagName('file'):
    os.system("wget -nc -x -nH -P " + prefix + " http://download.comodo.com/cis/download/updates/release" + inis + node64.attributes.item(1).value)

    ОтветитьУдалить
  6. Анонимный21 июля 2011 г., 17:38

    Иногда на некоторых машинах антивирь перестает обновляться, пишет "не удалось обновить базы, проверьте подключение к интернету", хотя у него в настройках указан мой локальный сервер обновлений (рабочий). Переустановка решает проблему, но можно ли как-то обойтись без нее?

    ОтветитьУдалить
  7. Надо смотреть в логах web-сервера. Антивирус запрашивает какой-то файл, которого нет на сервере. Ну и посмотреть, что это за файл. Иногда появляются новые версии и они ищут обновления уже в новых папках. Т.е. updates53, updates54 и т.д., нужно создавать симлинки.

    ОтветитьУдалить
  8. Анонимный26 июля 2011 г., 17:56

    Да, это верно, у меня есть симлинк на папку updates55 и CIS версии 5.5 (текущий) с нее обновляется, но опять же через пару дней возникает та же проблема. Он перестает обновляться, ругается на соединение. Переустанавливаю с нуля либо даю ему один раз слазить в инет за обновлениями баз, после чего он спокойно продолжает обновляться с локалки какое-то время.
    Кстати, свежеустановленный CIS так же способен обновляться с локалки какое-то время (то есть для первого обновления он лезет в локалку и радостно скачивает огромный файл базы и много мелких). Но вот почему это не работает ПОСТОЯННО?

    ОтветитьУдалить
  9. вот тут http://forums.comodo.com/empty-t47164.0.html пишут, что для версии 6.0 обновления качать нужно с директории http://download.Comodo.com/av/updates58/sigs/bases.

    Или вы пользуетесь пятой?

    ОтветитьУдалить
  10. К сожалению (или к счастью) сейчас совершенно не пересекаюсь с виндовыми машинами, поэтому очень давно не занимался антивирусами. И связь с предприятием, где работала такая штука, была утеряна после увольнения человека, который заменил меня при увольнении. Поэтому не знаю, работает ли это хоть где-нибудь сейчас вообще.

    ОтветитьУдалить