Projet

Général

Profil

Anomalie #8469

Mauvaise gestion des doublons par groupe de conteneurs

Ajouté par Joël Cuissinat il y a presque 10 ans. Mis à jour il y a plus de 9 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
Catégorie:
-
Début:
26/06/2014
Echéance:
04/07/2014
% réalisé:

100%

Temps estimé:
1.50 h
Temps passé:
Distribution:
EOLE 2.4

Description

Avec l'anti-virus activé sur le proxy et désactivé sur le mail (cf. configuration jointe), le service est en erreur dans diagnose :

 .                  Anti-virus => Erreur

Le service affiche l'erreur suivante :

root@amon:~# service clamav-daemon start
 * Starting ClamAV daemon clamd 
ERROR: Can't open /var/log/clamav/clamav.log in append mode (check permissions!).
ERROR: Can't initialize the internal logger
[fail]

amon24.eol (1,63 ko) Joël Cuissinat, 26/06/2014 10:23


Demandes liées

Lié à python-pyeole - Anomalie #8403: startlevel et stoplevel ne fonctionne pas Fermé 30/06/2014 04/07/2014
Lié à creole - Evolution #5740: Permettre d’obtenir toutes les informations utiles à un conteneur ou groupe de conteneur Fermé 10/07/2013

Révisions associées

Révision a213d5bd (diff)
Ajouté par Daniel Dehennin il y a plus de 9 ans

Fusion des ressources par groupe de conteneurs

L’inventaires des ressources par groupe de conteneur ne prend en compte
que la première occurrence d’une ressource, identifié par l’attribut
« name ».

Si la première occurrence est désactivée et que la seconde est activé,
alors la ressource est considérée comme désactivée.

Au lieu de supprimer les doublons, il faut les fusionner.

  • creole/client.py (_merge_entries): Fusionne les dictionnaires de
    ressources en gérant les attributs par type.
    (_merge_duplicates_in_components): Nouveau nom de
    « _remove_duplicates_in_components() ».
    Stocke la première occurrence d’une ressource et merge toutes les
    occurrences suivantes si elles sont actives.
    (CreoleClient.get_containers_components): Utilise le nouveau nom
    « _merge_duplicates_in_components() ».

Fixes: #8469 @1h30m

Historique

#1 Mis à jour par Daniel Dehennin il y a presque 10 ans

Le fichier /etc/clamav/clamd.conf est conditionné de la façon suivante :

  • dans le proxy, si activer_clam est à oui, alors le fichier est templatisé
  • dans le mail, si exim_clamav est à oui, alors le fichier est templatisé

Le soucis c’est :

  • CreoleGet activer_clam => oui
  • CreoleGet exim_clamav => non
(Pdb) pp [ f for f in group['files'] if f['name'].endswith('clamd.conf') ]
[{u'container': u'mail',
  u'container_group': u'mail',
  u'filelist': u'clamav_mail',
  u'full_name': u'/etc/clamav/clamd.conf',
  u'level': u'module',
  u'mkdir': False,
  u'name': u'/etc/clamav/clamd.conf',
  u'real_container': u'root',
  u'rm': False,
  u'source': u'/var/lib/creole/clamd.conf'}]

Il manque la clef activate à True.

On voit que la gestion des doublons ne retient que la déclaration du conteneur mail.

#2 Mis à jour par Emmanuel GARETTE il y a presque 10 ans

Il faut remplacer les "hidden_if_in" par des "hidden_if_not_in".

#3 Mis à jour par Emmanuel GARETTE il y a presque 10 ans

  • Distribution changé de EOLE 2.3 à EOLE 2.4

#4 Mis à jour par Daniel Dehennin il y a presque 10 ans

Emmanuel GARETTE a écrit :

Il faut remplacer les "hidden_if_in" par des "hidden_if_not_in".

Ça n’a pas l’air de fonctionner :

root@amon:~# grep 'disable.*activer_clam' /usr/share/eole/creole/dicos/*
/usr/share/eole/creole/dicos/20_antivirus.xml:        <condition name='disabled_if_not_in' source='activer_clam'>
/usr/share/eole/creole/dicos/23_proxy.xml:        <condition name='disabled_if_not_in' source='activer_clam'>
/usr/share/eole/creole/dicos/26_mail.xml:        <condition name='disabled_if_not_in' source='activer_clam' fallback='True'>
>>> from creole.loader import creole_loader
>>> conf = creole_loader()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/creole/loader.py", line 286, in creole_loader
    loader.read_dir(dirs, namespace)
  File "/usr/lib/python2.7/dist-packages/creole/var_loader.py", line 947, in read_dir
    self._gen_descr(namespace)
  File "/usr/lib/python2.7/dist-packages/creole/var_loader.py", line 1370, in _gen_descr
    containers = self.gen_container(paths, namespace='containers')
  File "/usr/lib/python2.7/dist-packages/creole/var_loader.py", line 407, in gen_container
    ret.append(getattr(self, func_name)(paths))
  File "/usr/lib/python2.7/dist-packages/creole/loader.py", line 189, in gen_files
    requires_key='activate')
  File "/usr/lib/python2.7/dist-packages/creole/var_loader.py", line 386, in _gen_tiramisu_config
    requires=requires, properties=properties))
  File "/usr/lib/python2.7/dist-packages/tiramisu/option.py", line 297, in __init__
    super(Option, self).__init__(name, doc, requires, properties)
  File "/usr/lib/python2.7/dist-packages/tiramisu/option.py", line 71, in __init__
    requires, self._name)
  File "/usr/lib/python2.7/dist-packages/tiramisu/option.py", line 1500, in validate_requires_arg
    " action: {1}").format(name, action))
ValueError: incohérence dans les types action pour l'option : activate action disabled

#5 Mis à jour par Daniel Dehennin il y a presque 10 ans

Peut importe le sens du test.

Même sans supprimer les doublons :

>>> from creole.client import CreoleClient; c = CreoleClient()
>>> import pprint; pp = pprint.PrettyPrinter(indent=4)
>>> files_dict = c.get('/containers/files')
>>> files = c.to_list_of_dict(files_dict, 'files')
>>> pp.pprint([ f for f in files if f['name'].endswith('clamd.conf') ])
[   {   u'container': u'proxy',
        u'container_group': u'internet',
        u'filelist': u'clamav_proxy',
        u'full_name': u'/etc/clamav/clamd.conf',
        u'level': u'module',
        u'mkdir': False,
        u'name': u'/etc/clamav/clamd.conf',
        u'real_container': u'root',
        u'rm': False,
        u'source': u'/var/lib/creole/clamd.conf'},
    {   u'container': u'mail',
        u'container_group': u'mail',
        u'filelist': u'clamav_mail',
        u'full_name': u'/etc/clamav/clamd.conf',
        u'level': u'module',
        u'mkdir': False,
        u'name': u'/etc/clamav/clamd.conf',
        u'real_container': u'root',
        u'rm': False,
        u'source': u'/var/lib/creole/clamd.conf'}]

Il doit y a un soucis avec les conditions car le fichier n’est actif pour le compte d’aucun des conteneurs.

#6 Mis à jour par Daniel Dehennin il y a presque 10 ans

Daniel Dehennin a écrit :

Peut importe le sens du test.

Même sans supprimer les doublons :

[...]

Il doit y a un soucis avec les conditions car le fichier n’est actif pour le compte d’aucun des conteneurs.

Sur un amon2.4 non trafiqué j’obtiens :

[   {   u'activate': True,
        u'container': u'proxy',
        u'container_group': u'internet',
        u'filelist': u'clamav_proxy',
        u'full_name': u'/etc/clamav/clamd.conf',
        u'level': u'module',
        u'mkdir': False,
        u'name': u'/etc/clamav/clamd.conf',
        u'real_container': u'root',
        u'rm': False,
        u'source': u'/var/lib/creole/clamd.conf'},
    {   u'container': u'mail',
        u'container_group': u'mail',
        u'filelist': u'clamav_mail',
        u'full_name': u'/etc/clamav/clamd.conf',
        u'level': u'module',
        u'mkdir': False,
        u'name': u'/etc/clamav/clamd.conf',
        u'real_container': u'root',
        u'rm': False,
        u'source': u'/var/lib/creole/clamd.conf'}]

En revanche:

>>> from creole.client import CreoleClient; c = CreoleClient()
>>> import pprint; pp = pprint.PrettyPrinter(indent=4)
>>> root_infos = c.get_group_infos('root')
>>> pp.pprint([ f for f in root_infos['files'] if f['name'].endswith('clamd.conf') ])
[   {   u'container': u'mail',
        u'container_group': u'mail',
        u'filelist': u'clamav_mail',
        u'full_name': u'/etc/clamav/clamd.conf',
        u'level': u'module',
        u'mkdir': False,
        u'name': u'/etc/clamav/clamd.conf',
        u'real_container': u'root',
        u'rm': False,
        u'source': u'/var/lib/creole/clamd.conf'}]

Il y a donc bien un soucis avec la gestion des doublons (creole:source:creole/client.py@64e4b21#L90)

Il faudrait renommer cette fonction en quelque chose comme _merge_entries() et gérer la fusion comme dans #8403.

#7 Mis à jour par Daniel Dehennin il y a presque 10 ans

  • Projet changé de eole-antivirus à creole
  • Début mis à 26/06/2014

C’est un problème creole.

#8 Mis à jour par Daniel Dehennin il y a plus de 9 ans

  • Sujet changé de clamav-daemon non fonctionnel sur Amon à Mauvaise gestion des doublons par groupe de conteneurs
  • Description mis à jour (diff)
  • Statut changé de A étudier à Accepté
  • Assigné à mis à Daniel Dehennin

#9 Mis à jour par Daniel Dehennin il y a plus de 9 ans

  • Statut changé de Accepté à Résolu
  • % réalisé changé de 0 à 100

#10 Mis à jour par Joël Cuissinat il y a plus de 9 ans

  • Statut changé de Résolu à Fermé

Service OK avec le fichier de configuration fourni.

Formats disponibles : Atom PDF