Anomalie #2010
Vérification des paquets installés peu efficace
Statut:
Fermé
Priorité:
Normal
Assigné à:
-
Catégorie:
-
Version cible:
Distribution:
EOLE 2.3
Description
J'ai supprimé un paquet dans un conteneur en espérant qu'il se réinstall ... ce n'a pas été le cas.
Les paquets avec le status RC sont considérés comme installés.
Il y a moins de status dans une "selection d'un paquet" que dans l'"état du paquet" d'après le man.
Je propose donc de connaitre l'état de la selection d'un paquet. D'après le man il y a 4 états :
- install
- hold
- deinstall
- purge
On peut considéré les 2 1er états comme installé et les 2 derniers comme désinstallé.
Voici donc la fonction is_installed corrigé :
def is_installed(package, container=config.VIRTMASTER, context=True): """ vérifie si un paquet est installé ou pas""" cmd = ["/usr/bin/dpkg", "--get-selections", package.strip()] code, stdout, stderr = system_out(cmd, container=container, context=context) if code != 0: # paquet non installé return False pkg_status = stdout.strip().split('\n')[-1].split()[1].lower() #pkg_status is install, desinstall, hold or purge if pkg_status not in ['install', 'deinstall', 'hold', 'purge']: raise Exception ('unknown status for package %s : %s'%(package, pkg_status)) if pkg_status in ['install', 'hold']: return True return False
Révisions associées
process.py : correction de la fonction is_installed (fixes #2010)
Historique
#1 Mis à jour par Emmanuel GARETTE (2) il y a plus de 12 ans
Si le conteneur n'existe pas lors du test, la fonction plante.
Correction :
def is_installed(package, container=config.VIRTMASTER, context=True): """ vérifie si un paquet est installé ou pas""" cmd = ["/usr/bin/dpkg", "--get-selections", package.strip()] code, stdout, stderr = system_out(cmd, container=container, context=context) if code != 0: # paquet non installé return False pkg_ret = stdout.strip().split('\n')[-1].split() if pkg_ret == [] or len(pkg_ret) != 2: return False pkg_status = pkg_ret[1].lower() #pkg_status is install, desinstall, hold or purge if pkg_status not in ['install', 'deinstall', 'hold', 'purge']: raise Exception ('unknown status for package %s : %s'%(package, pkg_status)) if pkg_status in ['install', 'hold']: return True return False
#2 Mis à jour par Joël Cuissinat il y a plus de 12 ans
- Version cible mis à Mises à jour 2.3 - 02 RC
#3 Mis à jour par Joël Cuissinat il y a plus de 12 ans
- Statut changé de Nouveau à Résolu
- % réalisé changé de 0 à 100
Appliqué par commit 7df975d548345b7a75c32787e42a200302fcc547.
#4 Mis à jour par Fabrice Barconnière il y a plus de 12 ans
- Statut changé de Résolu à Fermé
- Distribution mis à EOLE 2.3