Антивирус Avast: аварийное завершение работы приложения
Устранение проблемы. Пошаговое руководство.
(Изменено и дополнено. Окончательный вариант.)
Ошибка:Обрушение приложения после обновления антивирусной базы до актуальной при первом старте приложения с последующей невозможностью запуска приложения
Продукт:Все Линукс системы
Текущее состояние (ALT Linux 5.1 branch):
$ uname -r
2.6.35-un-def-alt8
# sysctl -a | grep shm
kernel.shmmax = 33554432
kernel.shmall = 2097152
kernel.shmmni = 4096
Текущая версия антивируса:
$ avast -V
avast: avast v1.3.0
VPS: 110610-0 (date: 10.06.2011)
Copyright(C) 2003-2008. ALWIL Software. All rights reserved.
Признаки:
После обновления антивирусной базы приложение останавливает свою работу и выводит сообщения в двух окнах:
Ошибка обновления
Движку avast! не удалось реинициализироваться
после обновления базы
Программа будет остановлена сейчас
Avast! Error
An error occured in avast! engine: ÐедопÑÑÑимÑй аÑгÑменÑ
После закрытия приложения и повторной попытки запуска выводится сообщение в окне:
An error occured in avast! engine: ÐедопÑÑÑимÑй аÑгÑменÑ
Причина:
This has nothing to do with avast versions. It's just a low default value, determining the resource usage on your system - and avast's database 400.vps has grown to the size where this limit is simply not sufficient anymore.
kernels have an artificial limitations which dictates the maximum size of one SHM block in bytes. And, one block of our database exceeded this limit. so just, relax them to more reasonable value.
Устранение проблемы:
Выполнить
$ rm -rf ~/.avast
Параметр SHMMAX задает максимальный размер сегмента совместно используемой памяти в системе Linux:
# sysctl -w kernel.shmmax=100000000
just issue those upon system startup in /etc/init.d/rcS or similar system-wide initscript on your distribution (see /etc/inittab, the si:: line).
For all Fedora users ... the most appropriate place to add sysctl -w kernel.shmmax=128000000 is in /etc/rc.d/rc.local.
Перезапустить антивирус.
Для того, чтобы ошибка не возникала после перезагрузки системы, до перезагрузки, выполните действия:Создать пустой файл:
# touch /etc/rc.d/rc.local
Сделать исполняемым:
# chmod a+x /etc/rc.d/rc.local
Открыть этот файл на редактирование:
# mcedit /etc/rc.d/rc.local
И в редакторе добавить в этот пустой файл следующее содержимое:
#!/bin/sh
#
# Command for Avast antivirus new versions
# Look current parameter
# sysctl -a | grep shm
sysctl -w kernel.shmmax=100000000
Или добавить:
# mcedit /etc/sysctl.conf
в файл:
# For boolean variables 0 is disabled, 1 is enabled.
<Skip>
#
# Command for Avast antivirus new versions
# Look current parameter
# sysctl -a | grep shm
kernel.shmmax=100000000
Если параметр kernel.shmmax передается в sysctl из файла /etc/sysctl.conf и необходимо, чтобы параметр был передан до перезагрузки системы, после редактирования файла выполните команду:
# sysctl -p
Подробнее см.:
$ man sysctl
При редактировании файла, в конце последней строки, не забудьте сделать перевод строки клавишей Enter, чтобы к концу строки добавился код 0Ah - код окончания строки.
Далее:
Выполнить действия по очистке профиля Avast. Перегрузиться. Обновить антивирусную базу.
После этих действий, после перезагрузки, ошибка повторяться больше не будет.Предупреждение!При задании больших значений параметра kernel.shmmax будьте осторожны и внимательны. Подробности см. по третьей ссылке с access.redhat.comОфициальная страница антивируса:http://www.avast.com/linux-home-editionhttp://www.avast.com/linux-unix-editionПолезные ссылки:Способ решения найден здесь:
http://forum.avast.com/index.php?&topic=57764.0Некоторые способы использования Linux версии avast! в shellОбщий формат:
avast [OPTIONS] areaname
где areaname путь к файлу или каталогу
Проверить файл *.tar.gz в текущей директории и сообщения о заражении отправить в файл report.txt
$ avast ./linux-rootkit-2-1_1_tar.gz -r ./report.txt
Если файл report.txt отсутствует, он будет создан. Путь и имя файла могут быть произвольными.
Проверить файлы в текущем каталоге и отправить сообщения о заражении в файл
$ avast ./ -r ./report.txt
Удалить зараженные файлы в текущем каталоге
$ avast -p 1 ./
Попытаться вылечить зараженные файлы в текущем каталоге
$ avast -p 3 ./
Проверить файлы в текущем каталоге и спросить о действии: (D/d)delete, (R/r)repair, (C/c)continue:
$ avast -p 4 ./ -r ./report.txt
Отсортировать и вывести на экран полный список названий вирусов в базе
$ avast --viruslist=* | sort
Обновить антивирусную базу
$ avast-update
Запустить графический интерфейс avast!
$ avastgui