Bug 16365 - Надо скорректировать init-скрипт.
: Надо скорректировать init-скрипт.
Status: CLOSED FIXED
: Sisyphus
(All bugs in Sisyphus/clamav)
: unstable
: all Linux
: P2 major
Assigned To:
:
:
:
:
:
  Show dependency tree
 
Reported: 2008-07-16 10:56 by
Modified: 2008-08-04 19:39 (History)


Attachments


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2008-07-16 10:56:20
Вот тут

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

надо, теперь, проверять на наличие main.cld, а не cvd. Переименовали... Почти
critical, если учесть, сколько оно висит в этом месте при проблемах с сетью...
------- Comment #1 From 2008-07-16 11:09:14 -------
А, может и на оба варианта... В 0.93 оно ещё cvd...
------- Comment #2 From 2008-07-16 11:30:18 -------
О, ещё вариант. Вообще ничего, зато есть каталоги 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 From 2008-07-23 19:24:54 -------
(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 From 2008-07-24 09:26:30 -------
> Проверку, очевидно, имеет смысл исправить и проверять на наличие .cld.

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

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

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

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

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

Когда мы грузимся в третий runlevel при отсутствующей сети это, во-первых,
нештатная ситуация. Если нам зачем-то нужен быстрый доступ к консоли системы,
то следует просто загрузиться в single user - у нас ведь проблемы с сетью, так
зачем нам в этой ситуации сразу сетевой уровень? Если речь о том, чтобы просто
поднять сервер как можно быстрее, тогда в самом условии внутреннее
противоречие: если с сетью проблемы, то мы всё равно не можем работать в
качестве сервера и максимально быстрая загрузка роли не играет.
------- Comment #6 From 2008-07-28 14:36:30 -------
(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 From 2008-07-28 16:43:33 -------
Вообще запуск freshclam при загрузке действительно мешает. У меня например в
конфиге прописана прокси, которая на localhost. А так как сам squid стартует
после clamav, получаем развал. И это никакая не проблема с сетью.
Я вижу решение запуск freshclam позже, как сейчас раз в сутке в кроне. Т. е.
убрать из стартовых скриптов.
------- Comment #8 From 2008-07-28 17:00:57 -------
(In reply to comment #6)
> (In reply to comment #5)
> 
> > у нас на диске рабочие антивирусные базы. Если есть, то мы МОЖЕМ обойтись без
> > запуска freshclam. Если нет - его запуск необходим. Проверка на объем не даст нам
> > ответа на вопрос есть ли у нас РАБОЧИЕ антивирусные базы,
> 
> Проверка на имя файла, как выясняется, тоже ни о чём не говорит.

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

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

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

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

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

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

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

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

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

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

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

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

> Я вижу решение запуск freshclam позже, как сейчас раз в сутке в кроне. Т. е. убрать из стартовых скриптов.

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

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

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

Comment #2 :-(

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

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

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

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

Смотря, какова цель работы ClamAV, кстати. Например, в случае ISP,  клиент сам
в ответе за то, что он получает и антивирус - это, целиком, проблема клиента.
Если провайдер сам использует антивирус, это, всего лишь, дополнительная
страховка. Основная цель почтового сервера провайдера - доставка почты.
Проверка на спам/вирусы - момент, безусловно, нужный, но не основной.
------- Comment #15 From 2008-07-29 15:59:23 -------
(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 From 2008-07-29 16:45:06 -------
(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 From 2008-07-29 16:54:20 -------
(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 From 2008-08-04 19:38:37 -------
(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. Багу закрываю.