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 14 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 14 ans
- Version cible mis à Mises à jour 2.3 - 02 RC
#3 Mis à jour par Joël Cuissinat il y a plus de 14 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 14 ans
- Statut changé de Résolu à Fermé
- Distribution mis à EOLE 2.3