Project

General

Profile

Anomalie #2010

Vérification des paquets installés peu efficace

Added by Emmanuel GARETTE (2) about 11 years ago. Updated almost 11 years ago.

Status:
Fermé
Priority:
Normal
Assigned To:
-
Category:
-
Start date:
08/31/2011
Due date:
% Done:

100%

Spent time:
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

Associated revisions

Revision 7df975d5 (diff)
Added by Joël Cuissinat about 11 years ago

process.py : correction de la fonction is_installed (fixes #2010)

History

#1 Updated by Emmanuel GARETTE (2) about 11 years ago

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 Updated by Joël Cuissinat about 11 years ago

  • Target version set to Mises à jour 2.3 - 02 RC

#3 Updated by Joël Cuissinat about 11 years ago

  • Status changed from Nouveau to Résolu
  • % Done changed from 0 to 100

#4 Updated by Fabrice Barconnière almost 11 years ago

  • Status changed from Résolu to Fermé
  • Distribution set to EOLE 2.3

Also available in: Atom PDF