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
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 strace
sortie . 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
Voici les étapes de débogage que j'ai prises.
Déterminé le code de retour du programme défaillant
Sudo do-release-upgrade
echo $?
Le code était 139
Recherche Google pour le code de retour pour savoir ce que cela voulait dire
Le code indique une erreur de segmentation
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.
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
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.