Scénario #35033
Mis à jour par Joël Cuissinat il y a plus d'un an
h1. constat
Dans ma variante seth j'avais ajouté les paquets eole-fichier-quota et eole-ad-dc-pso (ils étaient marqué comme installé mais non déclaré).
Suite à l'inclusion de ces paquets dans le module (#34762), j'ai une série d'erreurs qu'il est difficile a interprété.
L'erreur primaire est la présence dans les logs :
* @nov. - nov. 19 19:48:36 zephir zephir_backend[461261]: [-] Erreur de lecture de la configuration du serveur 23 ('int' object has no attribute '__cmp__')@ '__cmp__')
* - il est impossible de lancer gen_config sur le serveur en s'identifiant sur Zéphir
Les problèmes :
1/ dans gen_config lancé sur le serveur distant on a une erreur incompéhensible :
dans /usr/lib/python3/dist-packages/eolegenconfig/lib.py
il y a : @code, code, res = proxy.serveurs.get_dico(zephir['server_id'], 'modif_config')@ 'modif_config')
Il n'y a pas de vérification du code. S'il y a une erreur "res" est alors une string.
L'eval sur la string renvoi une erreur.
2/ problème de comparaison dans /usr/lib/python3/dist-packages/zephir/utils/creolewrap.py
__cmp__ n'existe plus en python3 :
<pre>
def sort_dicts(dict1, dict2):
name1 = os.path.basename(dict1[0])
name2 = os.path.basename(dict2[0])
if name1 == name2:
# noms identiques: ordre des répertoires conservé
return dict1[1].__cmp__(dict2[1])
elif name1 > name2:
return 1
else:
return -1
</pre>
3/ problème identique dans /usr/lib/python3/dist-packages/creole/xmlreflector.py
<pre>
def sort_group(file1, file2):
if file1[0] == file2[0]:
# sort by initial xmlfolder order if same name
return file1[1].__cmp__(file2[1])
# sort by filename
elif file1[0] > file2[0]:
return 1
else:
return -1
</pre>
4/ une fois tout cela corrigé, l'erreur n'est toujours pas compréhensible :
<pre>
zephir_backend[467913]: #011creole.error.CreoleDictConsistencyError: b'D\xc3\xa9j\xc3\xa0 d\xc3\xa9fini dans un autre fichier XML, /etc/warnquota.conf ne peut \xc3\xaatre cr\xc3\xa9\xc3\xa9 de nouveau'
</pre>
h1. Proposition
- gen_config devrait interpréter correctement le code retour Zéphir
- logiquement il ne devrait pas y avoir 2 fois le même nom de fichier en dehors du cadre de Zéphir. En effet, sur un serveur tous les fichiers sont chargés depuis un répertoire unique. Il ne peut pas y avoir 2 fois un même fichier avec le même nom.
Sur Zéphir on pourrait détecter que les liens symboliques pointes vers le même fichier et faire une erreur explicite.
Dans ma variante seth j'avais ajouté les paquets eole-fichier-quota et eole-ad-dc-pso (ils étaient marqué comme installé mais non déclaré).
Suite à l'inclusion de ces paquets dans le module (#34762), j'ai une série d'erreurs qu'il est difficile a interprété.
L'erreur primaire est la présence dans les logs :
* @nov. - nov. 19 19:48:36 zephir zephir_backend[461261]: [-] Erreur de lecture de la configuration du serveur 23 ('int' object has no attribute '__cmp__')@ '__cmp__')
* - il est impossible de lancer gen_config sur le serveur en s'identifiant sur Zéphir
Les problèmes :
1/ dans gen_config lancé sur le serveur distant on a une erreur incompéhensible :
dans /usr/lib/python3/dist-packages/eolegenconfig/lib.py
il y a : @code, code, res = proxy.serveurs.get_dico(zephir['server_id'], 'modif_config')@ 'modif_config')
Il n'y a pas de vérification du code. S'il y a une erreur "res" est alors une string.
L'eval sur la string renvoi une erreur.
2/ problème de comparaison dans /usr/lib/python3/dist-packages/zephir/utils/creolewrap.py
__cmp__ n'existe plus en python3 :
<pre>
def sort_dicts(dict1, dict2):
name1 = os.path.basename(dict1[0])
name2 = os.path.basename(dict2[0])
if name1 == name2:
# noms identiques: ordre des répertoires conservé
return dict1[1].__cmp__(dict2[1])
elif name1 > name2:
return 1
else:
return -1
</pre>
3/ problème identique dans /usr/lib/python3/dist-packages/creole/xmlreflector.py
<pre>
def sort_group(file1, file2):
if file1[0] == file2[0]:
# sort by initial xmlfolder order if same name
return file1[1].__cmp__(file2[1])
# sort by filename
elif file1[0] > file2[0]:
return 1
else:
return -1
</pre>
4/ une fois tout cela corrigé, l'erreur n'est toujours pas compréhensible :
<pre>
zephir_backend[467913]: #011creole.error.CreoleDictConsistencyError: b'D\xc3\xa9j\xc3\xa0 d\xc3\xa9fini dans un autre fichier XML, /etc/warnquota.conf ne peut \xc3\xaatre cr\xc3\xa9\xc3\xa9 de nouveau'
</pre>
h1. Proposition
- gen_config devrait interpréter correctement le code retour Zéphir
- logiquement il ne devrait pas y avoir 2 fois le même nom de fichier en dehors du cadre de Zéphir. En effet, sur un serveur tous les fichiers sont chargés depuis un répertoire unique. Il ne peut pas y avoir 2 fois un même fichier avec le même nom.
Sur Zéphir on pourrait détecter que les liens symboliques pointes vers le même fichier et faire une erreur explicite.