Bug 16365 - Надо скорректировать init-скрипт.
Summary: Надо скорректировать init-скрипт.
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: clamav (show other bugs)
Version: unstable
Hardware: all Linux
: P2 major
Assignee: Sergey Y. Afonin
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2008-07-16 10:56 MSD by Sergey Y. Afonin
Modified: 2008-08-04 19:39 MSD (History)
4 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Sergey Y. Afonin 2008-07-16 10:56:20 MSD
Вот тут

    if [ ! -s /var/lib/clamav/main.cvd ]; then
                    /usr/bin/freshclam
    fi

надо, теперь, проверять на наличие main.cld, а не cvd. Переименовали... Почти critical, если учесть, сколько оно висит в этом месте при проблемах с сетью...
Comment 1 Sergey Y. Afonin 2008-07-16 11:09:14 MSD
А, может и на оба варианта... В 0.93 оно ещё cvd...
Comment 2 Sergey Y. Afonin 2008-07-16 11:30:18 MSD
О, ещё вариант. Вообще ничего, зато есть каталоги daily.inc и main.inc. Есть здоровенный /var/lib/clamav/main.inc/main.mdb. Это c 0.91.2. При этом, если всё это убить и запустить freshclam, появляются только
/var/lib/clamav/main.cvd
/var/lib/clamav/daily.cvd
/var/lib/clamav/mirrors.dat

Может, проверять объём /var/lib/clamav/ ? 
Скажем, чтобы было не меньше 10M.
Comment 3 Victor Forsyuk 2008-07-23 19:24:54 MSD
(In reply to comment #0)
> Вот тут
> 
>     if [ ! -s /var/lib/clamav/main.cvd ]; then
>                     /usr/bin/freshclam
>     fi
> 
> надо, теперь, проверять на наличие main.cld, а не cvd. Переименовали... Почти critical,
> если учесть, сколько оно висит в этом месте при проблемах с сетью...
> 

Этот код был в свое время добавлен как предохранитель от того, чтобы clamd запустился с отсутствующей антивирусной базой. Проверку, очевидно, имеет смысл исправить и проверять на наличие .cld.

Но не соглашусь с тем, что это critical или даже серьезная ошибка. Даже если при запуске clamd будет лишний раз (помимо планового по крону) запущен freshclam от этого никакого вреда кроме пользы нету.

Comment 4 Sergey Y. Afonin 2008-07-24 09:26:30 MSD
> Проверку, очевидно, имеет смысл исправить и проверять на наличие .cld.

Лучше, всё-таки, на объём. Вариант с подкаталогами тогда тоже ловиться будет.

> Но не соглашусь с тем, что это critical или даже серьезная ошибка. Даже если при
> запуске clamd будет лишний раз (помимо планового по крону) запущен freshclam от
> этого никакого вреда кроме пользы нету.

Проблема возникает тогда, когда важнее быстрый запуск системы, нежели проверка. Так тоже бывает.
Comment 5 Victor Forsyuk 2008-07-28 13:44:23 MSD
(In reply to comment #4)
> > Проверку, очевидно, имеет смысл исправить и проверять на наличие .cld.
> 
> Лучше, всё-таки, на объём. Вариант с подкаталогами тогда тоже ловиться будет.

Проверка условия для запуска freshclam должна дать нам ответ на вопрос - есть ли у нас на диске рабочие антивирусные базы. Если есть, то мы МОЖЕМ обойтись без запуска freshclam. Если нет - его запуск необходим. Проверка на объем не даст нам ответа на вопрос есть ли у нас РАБОЧИЕ антивирусные базы, поскольку не различает базы в поддерживаемых форматах и мусор, оставшийся от предыдущих версий баз.
 
> > Но не соглашусь с тем, что это critical или даже серьезная ошибка. Даже если при
> > запуске clamd будет лишний раз (помимо планового по крону) запущен freshclam от
> > этого никакого вреда кроме пользы нету.
> 
> Проблема возникает тогда, когда важнее быстрый запуск системы, нежели
> проверка. Так тоже бывает.
> 

Когда мы грузимся в третий runlevel при отсутствующей сети это, во-первых, нештатная ситуация. Если нам зачем-то нужен быстрый доступ к консоли системы, то следует просто загрузиться в single user - у нас ведь проблемы с сетью, так зачем нам в этой ситуации сразу сетевой уровень? Если речь о том, чтобы просто поднять сервер как можно быстрее, тогда в самом условии внутреннее противоречие: если с сетью проблемы, то мы всё равно не можем работать в качестве сервера и максимально быстрая загрузка роли не играет.
Comment 6 Sergey Y. Afonin 2008-07-28 14:36:30 MSD
(In reply to comment #5)

> у нас на диске рабочие антивирусные базы. Если есть, то мы МОЖЕМ обойтись без
> запуска freshclam. Если нет - его запуск необходим. Проверка на объем не даст нам
> ответа на вопрос есть ли у нас РАБОЧИЕ антивирусные базы,

Проверка на имя файла, как выясняется, тоже ни о чём не говорит. А мусора там быть не должно из-за... Хм, а это, получается, тоже неправильно:

%post
# virus db format changed with 0.65, so delete old databases
rm -f /var/lib/clamav/viruses.db*

Значит, надо удалять там всё, что не сокеты.

> Когда мы грузимся в третий runlevel при отсутствующей сети это, во-первых,
> нештатная ситуация. Если нам зачем-то нужен быстрый доступ к консоли
> системы, то следует просто загрузиться в single user - у нас ведь проблемы с сетью,
> так зачем нам в этой ситуации сразу сетевой уровень?

Например, это не проблемы с сетью, а проблемы с доступом к апдейту баз, а перед компьютером сидит человек, который умеет нажать reset и сделать ряд привычных и задокументированных операций. single mode ему недоступен, так как он не знает пароль рута. Или это проблемы с маршрутизацией (попадали все внешние каналы/грохнулась quagga, пропал маршрут по-умолчанию). Мало ли.
Comment 7 Vadim Gusev 2008-07-28 16:43:33 MSD
Вообще запуск freshclam при загрузке действительно мешает. У меня например в конфиге прописана прокси, которая на localhost. А так как сам squid стартует после clamav, получаем развал. И это никакая не проблема с сетью.
Я вижу решение запуск freshclam позже, как сейчас раз в сутке в кроне. Т. е. убрать из стартовых скриптов.
Comment 8 Victor Forsyuk 2008-07-28 17:00:57 MSD
(In reply to comment #6)
> (In reply to comment #5)
> 
> > у нас на диске рабочие антивирусные базы. Если есть, то мы МОЖЕМ обойтись без
> > запуска freshclam. Если нет - его запуск необходим. Проверка на объем не даст нам
> > ответа на вопрос есть ли у нас РАБОЧИЕ антивирусные базы,
> 
> Проверка на имя файла, как выясняется, тоже ни о чём не говорит.

Почему? Если инитскрипт не видит файла с главной для данной версии антивируса базой, то он запустит freshclam. Если там есть еще что-то (неиспользуемые и неудаленные базы от предыдущих версий clamav), это не проблемы инитскрипта, его единственная задача не допустить старта clamd с пустой базой.

> 
> > Когда мы грузимся в третий runlevel при отсутствующей сети это, во-первых,
> > нештатная ситуация. Если нам зачем-то нужен быстрый доступ к консоли
> > системы, то следует просто загрузиться в single user - у нас ведь проблемы с сетью,
> > так зачем нам в этой ситуации сразу сетевой уровень?
> 
> Например, это не проблемы с сетью, а проблемы с доступом к апдейту баз, а

Сорри, но это уже похоже на придумывание теоретической ситуации под такое пожелание - сеть есть, но при этом глобальные проблемы с системой апдейтов баз кламава. На моей памяти проблемы с их доступностью были не чаще, чем с Гуглом.

И, собственно, я пока недопонял, чем проверки на main.cld недостаточно. Это основная база для данной версии. Если она отсутствует freshclam необходим. После этого проверка на нее позволит отказаться от запуска freshclam при старте сервиса. Я где-то торможу?
Comment 9 Sergey Y. Afonin 2008-07-28 17:15:54 MSD
> Сорри, но это уже похоже на придумывание теоретической ситуации под такое
> пожелание - сеть есть, но при этом глобальные проблемы с системой апдейтов
> баз кламава. На моей памяти проблемы с их доступностью были не чаще, чем с
> Гуглом.

А вот у меня встречалось. :-( Вот, с прокси пример, опять же...

> И, собственно, я пока недопонял, чем проверки на main.cld недостаточно. Это
> основная база для данной версии. Если она отсутствует freshclam необходим. После
> этого проверка на нее позволит отказаться от запуска freshclam при старте
> сервиса. Я где-то торможу?

Да. :-) Текущая версия работает с любым из трёх вариантов баз и freshclam, похоже, обновляет базы в имеющемся стиле. Или, вообще, как захочет. Вот, только что, снёс всё что было, включая main.cld, он мне притащил daily.cvd и main.cvd.
Comment 10 Sergey Y. Afonin 2008-07-28 17:22:14 MSD
(In reply to comment #7)

> Вообще запуск freshclam при загрузке действительно мешает.

Если он будет правильно наличие рабочей базы определять, мешать не будет.
Comment 11 Victor Forsyuk 2008-07-28 17:53:08 MSD
(In reply to comment #7)
> Вообще запуск freshclam при загрузке действительно мешает.

При загрузке, в скрипте запуска сервиса clamd запуск freshclam происходит только в том случае, если это действительно НЕОБХОДИМО. Суть багрепорта Сергея как раз и состояла в том, что это свойство из-за изменения имени файла базы в новой версии было утеряно.

> У меня например в
> конфиге прописана прокси, которая на localhost. А так как сам squid стартует после clamav, получаем развал. И это никакая не проблема с сетью.

Да, это не проблема с сетью. Но мне трудно понять в чём состоит необходимость пускать freshclam через локальный прокси, а не напрямую. Если же у Вас действительно настолько экзотическая конфигурация, в конце концов это решается ручной правкой приоритета запуска сервисов.

> Я вижу решение запуск freshclam позже, как сейчас раз в сутке в кроне. Т. е. убрать из стартовых скриптов.
 
РАЗ В СУТКИ???? Обновлять базы антивируса раз в сутки? Нет, сейчас "из коробки" запуск freshclam выпоняется раз в час и я категорически не советую делать это реже! И запускать с пустой базой даже на час (не говоря уже о сутках!!!) тоже.
Comment 12 Victor Forsyuk 2008-07-28 18:12:14 MSD
(In reply to comment #9)
> > И, собственно, я пока недопонял, чем проверки на main.cld недостаточно. Это
> > основная база для данной версии. Если она отсутствует freshclam необходим. После
> > этого проверка на нее позволит отказаться от запуска freshclam при старте
> > сервиса. Я где-то торможу?
> 
> Да. :-) Текущая версия работает с любым из трёх вариантов баз и freshclam, похоже, обновляет базы в имеющемся стиле. Или, вообще, как захочет. Вот, только что, снёс всё что было, включая main.cld, он мне притащил daily.cvd и main.cvd.

Ах вот оно что. Ну тогда запускать freshclam нужно только если нет файла main.cvd И файла main.cld.
Comment 13 Sergey Y. Afonin 2008-07-29 09:03:56 MSD
(In reply to comment #12)

> Ну тогда запускать freshclam нужно только если нет файла main.cvd И
> файла main.cld.

Comment #2 :-(

Хорошо, если вариант с отсутствием main.* в /var/lib/clamav/ и расположением всех баз в каталогах main.inc и daily.inc явление случайное...
Comment 14 Sergey Y. Afonin 2008-07-29 13:02:16 MSD
(In reply to comment #11)

> Но мне трудно понять в чём состоит необходимость пускать freshclam через локальный прокси,

У меня вот десятка два машин через один прокси ходит... Не локальный, но свой. А ещё бы к самому прокси прикрутить ClamAV не плохо. Руки только не доходят... Тоже вариант.

> Обновлять базы антивируса раз в сутки?

Смотря, какова цель работы ClamAV, кстати. Например, в случае ISP,  клиент сам в ответе за то, что он получает и антивирус - это, целиком, проблема клиента. Если провайдер сам использует антивирус, это, всего лишь, дополнительная страховка. Основная цель почтового сервера провайдера - доставка почты. Проверка на спам/вирусы - момент, безусловно, нужный, но не основной.
Comment 15 Victor Forsyuk 2008-07-29 15:59:23 MSD
(In reply to comment #13)
> > Ну тогда запускать freshclam нужно только если нет файла main.cvd И
> > файла main.cld.
> 
> Comment #2 :-(
> 
> Хорошо, если вариант с отсутствием main.* в /var/lib/clamav/ и расположением всех баз в каталогах main.inc и daily.inc явление случайное...
 
OK, вроде прояснилось. Я сначала прочитал фразу из анонса 0.93 "Support for .cld containers (which replace .inc directories)" как указание на то, что с апгрейдом clamav до версии 0.09 каталогов .inc больше не будет. Но по видимому авторы этого сказать не хотели. :) Потому как в ЧАВО явно указано, что возможны оба варианта:

http://wiki.clamav.net/Main/FAQ#FreshClam_and_signatures_updates

"This is under control of the engine code, and depends on the bandwith of the Internet link (and has nothing to do with the ClamAV version)."

Так что самое правильное будет проверять всё:

if [ ! -s /var/lib/clamav/main.cvd -a ! -s /var/lib/clamav/main.cld -a ! -d /var/lib/clamav/main.inc -a ! -d /var/lib/clamav/daily.inc ]; then
        /usr/bin/freshclam
fi
Comment 16 Sergey Y. Afonin 2008-07-29 16:45:06 MSD
(In reply to comment #15)

> if [ ! -s /var/lib/clamav/main.cvd -a ! -s /var/lib/clamav/main.cld -a ! -d /var/lib/clamav/main.inc -a ! -d /var/lib/clamav/daily.inc ];
> then
>         /usr/bin/freshclam
> fi

Может быть да. Но не забудь ещё в спеке про

%post
# virus db format changed with 0.65, so delete old databases
rm -f /var/lib/clamav/viruses.db*

Может, заменить на

find /var/lib/clamav -type f -exec rm -f {} \;
Comment 17 Sergey Y. Afonin 2008-07-29 16:54:20 MSD
(In reply to comment #16)

Только тогда проверка на -d /var/lib/clamav/main.inc становится неправильной...
значит, надо ещё 

rmdir /var/lib/clamav/main.inc ||:
rmdir /var/lib/clamav/daily.inc ||:

добавить и, кстати, на daily.inc не проверять.
Comment 18 Victor Forsyuk 2008-08-04 19:38:37 MSD
(In reply to comment #16)
> Может быть да. Но не забудь ещё в спеке про
> 
> %post
> # virus db format changed with 0.65, so delete old databases
> rm -f /var/lib/clamav/viruses.db*
> 
> Может, заменить на
> 
> find /var/lib/clamav -type f -exec rm -f {} \;
 
Эта команда удалит все базы. Даже если они были поддерживаемого формата. Лишний траффик это гарантированно прибавит - придется загружать заново всё, основную базу в том числе... Не вижу смысла. Лучше пусть автоматически не будет убрана устаревшая база, чем гарантированно вызвана лишняя закачка полной базы. Мегабайт дискового пространства дешев у всех, интернет-траффик - не у всех...

Фикс с проверкой на существование баз во всех поддерживаемых форматах включен в сборку clamav-0.93.3-alt1. Багу закрываю.