Projet

Général

Profil

Anomalie #2010

Vérification des paquets installés peu efficace

Ajouté par Emmanuel GARETTE (2) il y a plus de 12 ans. Mis à jour il y a plus de 12 ans.

Statut:
Fermé
Priorité:
Normal
Assigné à:
-
Catégorie:
-
Début:
31/08/2011
Echéance:
% réalisé:

100%

Temps passé:
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

Révision 7df975d5 (diff)
Ajouté par Joël Cuissinat il y a plus de 12 ans

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

#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

Formats disponibles : Atom PDF