web-dev-qa-db-fra.com

do-release-upgrade échoue en silence. Premières étapes à résoudre?

Lors de la tentative de mise à niveau de 14.10 à 15.04, j'exécute la commande suivante.

Sudo do-release-upgrade

La commande échoue en mode silencieux sans sortie sur l'invite de commande.

Quelles devraient être mes premières étapes pour résoudre ce problème? Y a-t-il des journaux quelque part que je peux vérifier? Je suis habitué à plus de retours de programmes en échec.

Edit 1: plus d'infos ...

La commande revient après environ une seconde et le code de sortie est 139, ce qui indique une erreur de segmentation.

Edit 2:

Après avoir exécuté la commande suivante

Sudo strace -o do-release-upgrade.strace do-release-upgrade

Vous pouvez trouver la sortie strace ici: http://Pastebin.com/hb5zthbb

3
David

Ok, j'ai une réponse un peu inhabituelle:

Puisque do-release-upgrade est écrit en Python et que dans votre profil, vous indiquez que vous connaissez Python, j'ai utilisé un débogueur Python et, pour moi, le programme fonctionne correctement.

Sudo apt-get install python3-pudb

Démarrer le débogueur avec:

pudb3 $(which do-release-upgrade)

et localiser le problème.

Puis j'ai regardé la stracesortie . C'est la partie intéressante:

stat("/usr/lib/python3/dist-packages/apt_pkg.cpython-34m-x86_64-linux-gnu.so", {st_mode=S_IFREG|0644, st_size=351400, ...}) = 0
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0x184e6} ---

Je fais une prévision:

Sudo apt-get install --reinstall python3-apt
2
A.B.

Voici les étapes de débogage que j'ai prises.

  1. Déterminé le code de retour du programme défaillant

    Sudo do-release-upgrade
    echo $?
    

    Le code était 139

  2. Recherche Google pour le code de retour pour savoir ce que cela voulait dire

    Le code indique une erreur de segmentation

  3. Utilisé strace pour avoir une idée de l'endroit où l'erreur s'est produite

    Sudo strace -o do-release-upgrade.strace do-release-upgrade
    

    Ceci a écrit le journal de trace dans un fichier nommé do-release-upgrade.strace, et le journal a montré, en bas, le fichier d'exécution dans lequel l'échec s'est produit.

  4. A exécuté le débogueur pudb3 pour déboguer do-release-upgrade

    Si pudb3 n'est pas encore installé.

    Sudo apt-get install python3-pudb
    

    Lancer le débogueur pudb3

    Sudo pudb3 /usr/bin/do-release-upgrade
    

    Pour ceux qui ne connaissent pas les débogueurs, cela m'a permis de passer en revue chaque point d'exécution du script.

    J'ai rapidement trouvé l'erreur suivante.

    Traceback (most recent call last):
      File "/usr/bin/do-release-upgrade", line 10, in <module>
        from UpdateManager.Core.MetaRelease import MetaReleaseCore
      File "/usr/lib/python3/dist-packages/UpdateManager/Core/MetaRelease.py", line 25, in <module>
        import apt
      File "/usr/lib/python3/dist-packages/apt/__init__.py", line 23, in <module>
        import apt_pkg
    ImportError:
    /usr/lib/python3/dist-packages/apt_pkg.cpython-34m-x86_64-linux-gnu.so:
    undefined symbol: _ZN13pkgSrcRecords4StepEv
    

    Ce qui m'amène au rapport de bogue ubuntu correspondant

  5. Tentative de suppression et de réinstallation du package indiqué dans le rapport de bogue

    Première méthode

    Sudo apt-get install --reinstall python3-apt
    

    Deuxièmement, une méthode plus radicale

    Sudo dpkg --purge --force-depends python3-apt
    Sudo apt-get install python3-apt
    

    Ni l'un ni l'autre n'a résolu le problème.

Conclusion:

Je trouve toujours étrange que l'erreur n'ait pas été imprimée sur stdout; normalement, je pense que ça devrait l'être. Cette solution n'aurait pas dû nécessiter un débogueur.

C'est un bogue dans le paquet binaire python3-apt. Sans corriger le bogue et reconstruire le paquet, cette erreur risque de rester.

2
David