Скрипт по обновлению антивирусных баз NOD32 под Linux (PHP)
Вот портировал скрипты по обновлению антивирусных баз NOD32 V2* и V3* в PHP.
Содержание
Версии скрипта
Буду тут выкладывать описание версий с датами для более удобного отслеживания за изменениями
- Версия 1.16 от 2.02.2010
- Добавил по просьбе Angpeu с форума в update.ver переменную all_in_one для случая, если для доступа к файлам обновлений нужен пароль, а файл update.ver и файлы обновлений находятся в одной директории.
- Версия 1.15 от 25.01.2010
- Убрал сравнение выкаченного файла и данных из update.ver по размеру.
- Данные о размера файла теперь берутся не из секции update.ver, а из реального размера файла.
- Версия 1.14b от 5.11.2009
- Добавлены новые секции для SELFDEFENSE64 и необязательные секции для компонентов для V3 и V4. Те если компоненты будут лежать в директории с обновлениями, а в update.ver нет на них ссылок, то они стираться не будут и будут добавлены в update.ver.
- Устранена ошибка при скачивании обновлений со свободных зеркал, где update.ver лежит вместе с файлами обновлений.
- Добавлена проверка на наличие модулей php-rar или unrar.
- Версия 1.13 от 25.10.2009
- Добавлены новая секция для закачки MAILSERVER.
- Версия 1.12d от 25.09.2009
- Попробовал исправить большинство ошибок при error_reporting = E_ALL в php.ini.
- Добавлены новые секции для закачки
- Версия 1.11 от 10.09.2009
- Исправлено несколько синтаксических ошибок.
- Исправлена ошибка по коду возврата GNU архиватора unrar.
- Не работал цикл по обновлению с другого сервера, если на первом прошла ошибка.
- Версия 1.10b от 13.07.2009
- Изменен архиватор rar на GNU версию unrar путь до архиватора вынесен в setup.php.
- При изменении версии или ошибке, письмо приходит только одно на обе версии базы.
- Версия 1.9b от 11.07.2009
- Закачка через wget изменена на php-cURL.
- Добавлен тихий режим, без отправки сообщений в консоль, если критических ошибок нет
- Если сервер указан, то пытается обновится только с него. Если не указан сервер (это касается только тех кто обновляется с официальных серверов), то список серверов берется из update.ver и скрипт пробует обновить базы с каждого сервера из этого списка, пока не получится. А то иногда бывает проблема с серверами (похоже из-за их перегрузки) - то их видно, то нет.
- Версия 1.8 от 1.07.2009
- Добавлена возможность закачивать файлы через прокси сервер с аутентификацией и без нее.
- Добавлена возможность отсылки дополнительного письма об обновлении баз на указанный п/я, в случае ошибки или удачного обновления с изменением версии.
- Версия 1.7 от 24.06.2009
- Имя пользователя, от которого работает WEB сервер вынесено в setup.php
- В начале скрипта umask меняется на 0022, а после выполнения возвращается на ту, что была до его выполнения.
- Версия 1.6 от 19.06.2009
- Если происходит ошибка при выкачивании файла, то обновление сразу завершается и восстанавливает базу данной версии Нода, которая была до этого. Раньше скрипт пытался выкачивать остальные файлы, а потом все равно происходило восстановление.
- Версия 1.5 от 16.03.2009 Теперь можно обновлять базы для NOD32 V4.
- Добавлены секции, которых не было в вервии V3 [SYSTEMSTATUS0], [SYSTEMSTATUS1],[SYSTEMSTATUS2],[SYSTEMSTATUS640],[SYSTEMSTATUS641],[SYSTEMSTATUS642],[SELFDEFENSE0],[SELFDEFENSE1],[SELFDEFENSE2],[SELFDEFENSE640],[SELFDEFENSE641],[SELFDEFENSE642]. Обновляется только файл секций section.php.
- Версия 1.4 от 21.01.2009
- Исправлена ошибка записи имени файла в создаваемой update.ver, если этого файла еще не было.
- Версия 1.3 от 16.01.2009
- Если при обновлении NOD32 V2 происходила ошибка, то она не сбрасывалась и для NOD32 V3
- Не правильно формировался блок [data0001] в файле update.ver в NOD32 V3, если в этой секции встречался знак =.
- Убрано отображение некоторых ненужных сообщений.
- Версия 1.2 от 2.12.2008
- Исправлено удаление файла, если он уже не нужен
- Версия 1.1 от 18.11.2008
- Первая версия.
Что умеет скрипт.
Умеет все тоже, что и скрипт на bash, только работает быстрее, один скрипт может обновлять обе версии и можно использовать на любой платформе (сам не пробовал) .
- Обновляет базы с официальных и бесплатных серверов NOD32 (для официальных серверов нужно задать имя и пароль для обновления). Причем, при обновлении с бесплатных серверов скрипт пробует обновится со всех серверов, указанных в update.ver и прекращает работу при первом удачном обновлении.
- Может работать через прокси сервер с аутентификацией и без нее.
- Может отправлять сообщение на указанный п/я с информацией об ошибке или при удачном обновлении с изменением версии базы.
- Обновляет сразу базы для V2 и V3, но может и отдельно.
- Если на сервере названия файлов не совпадают с локальными - не качает, а переименовывает файлы.
- Сам создает файл update.ver. Те при обновлении с зеркал обновляются только компоненты с более новыми версиями.
- Автоматически создает папки, нужные для работы программы, в том числе и для Web сервера.
- Создает папку на веб сервере с файлами обновления.
- При ошибке обновления восстанавливает базу в том виде, которая была до обновления.
Скрипт автоматически создает папки для временного хранения копий баз /var/lib/nod32/mirror_V2 и /var/lib/nod32/mirror_V3 и загружает туда файлы антивирусных баз. Если обновление прошло успешно, то переписывает базы в WEB директорию, а если произошла ошибка, то наоборот, восстанавливает базы, переписывая их из WEB директории в папку временного хранения.
Спасибо Kode - использовал его функции. Так как не очень большой спец в PHP, то прошу не пинать, а если можно то помочь доработать.
Из чего состоит
- update.php - Сам скрипт
- function.php - Файл функций
- section.php - Файл описания секций
- setup.php - Файл установок
Инсталяция
Установка UNRAR
Внимание: Эту программу нужно выполнять только при отсутствии расширения php-rar
1. Идем на сайт https://gna.org/projects/unrar/ далее в Download и выкачиваем архив unrar-0.0.1.tar.gz.
2. Распаковываем его и устанавливаем.
cp unrar-0.0.1.tar.gz /usr/local/src cd /usr/local/src tar -xzf unrar-0.0.1.tar.gz cd unrar-0.0.1 ./configure make make install
После этого архиватор unrar будет в каталоге /usr/local/bin
Установка php расширений
- Устанавливаем пакеты php-cli.*.rpm и php-rar*.rpm. Для версии 1.9в и выше нужен php-curl*.rpm.
Установка скрипта
- Выкачиваем архив nod_upd_php_v1.8с.tar.bz2 (nod_upd_php_v1.15.tar.bz2) и распаковываем в любой каталог, например, /etc/upd_prog/.
- Редактируем файл setup.php для каждого варианта антивируса - Устанавливаем:
- Измените, если нужно, путь до папки, где будут храниться временные файлы работы скрипта, например (define("DEFAULT_SAVE_PATH","/var/lib/nod32");).
- Отредактируйте, если нужно, имя пользователя от которого работает WEB сервер, например, define("HTTP_USER", "apache");.
- Если нужна, дополнительная отправка почты, то разкоментируйте строку с переменной $user_mail и укажите там нужный email. (Но при этом дб настроен и запущен почтовый сервер (postfix, sendmail или другой).)
- Если у Вас не установлено расширение php-rar - укажите путь до команды unrar.
- Если Вы хотите или должны использовать HTTP-Proxy, пожалуйста, разкоментируйте строку с переменной $proxy и укажите свои параметры Прокси сервера, например, $proxy = 'http://vasya:qwerty@www.rrr.ru:8080';.
- Если Вы используете Прокси сервер с аутентификацией (требуются имя и пароль для Прокси), то укажите путь до wget в переменной $wget (только для версии 1.8).
- Если Вы используете Прокси сервер с аутентификацией и Вам не нужен вывод подробной информации от wget, то разкоментируйте строку с переменной $quiet. Вместо значения -q, можно установить -nv (см man wget)(только для версии 1.8).
- Установите $quit=1 - не отображать сообщения на консоли, кроме сообщений об ошибках и $quit=0 - отображать сообщения на консоли (только для версии 1.9в).
- Адрес сервера, например ('host'=>'http://89.202.157.139/',). Если он не указан (только для v1.9в), то список серверов берется из update.ver (для официальных серверов), если указан, то закачка происходит только с него.
- Web каталог для каждой версии баз, например, 'www'=>'/var/www/nod32/',.
- Имя пользователя, например, 'user'=>'EAV-06545664', или 'user'=>"", - для бесплатных серверов
- Пароль, например, 'password'=>'k3fp7ksv8e', или 'password'=>"", - для бесплатных серверов
- Пробуем из под root запустить файл update.php.
- Теперь в crontab прописываем запуск скрипта
# Обновление баз NOD32* 00 09,15 * * * root /etc/upd_prog/php/update.php
и наслаждаемся автоматическим обновлением 2 раза в сутки