do-release-upgrade está falhando silenciosamente. Primeiros passos para solucionar problemas?

3

Ao tentar atualizar de 14.10 para 15.04, estou executando o seguinte comando.

sudo do-release-upgrade

O comando está falhando silenciosamente, sem saída no prompt de comando.

Quais devem ser meus primeiros passos para solucionar isso? Há registros em algum lugar que eu possa verificar? Estou acostumado a mais feedback de programas que falham.

Editar 1: mais informações ...

O comando retorna após cerca de um segundo e o código de saída é 139, o que indica uma falha de segmentação.

Editar 2:

Depois de executar o seguinte comando

sudo strace -o do-release-upgrade.strace do-release-upgrade

Você pode encontrar a saída strace aqui: link

    
por David 06.05.2015 / 17:33

2 respostas

2

Ok, eu tenho uma resposta um pouco incomum:

Como do-release-upgrade está escrito em Python e no seu perfil você menciona que sabe sobre o Python, usei um depurador do Python e, para mim, o programa é executado corretamente.

sudo apt-get install python3-pudb

Inicie o depurador com:

pudb3 $(which do-release-upgrade)

e localize o problema.

Então, olhei a saída strace . Essa é a parte interessante:

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} ---

Eu faço uma previsão:

sudo apt-get install --reinstall python3-apt
    
por A.B. 06.05.2015 / 20:05
2

Aqui estão os passos de depuração que eu tomei.

  1. Determinado o código de retorno do programa com falha

    sudo do-release-upgrade
    echo $?
    

    O código foi 139

  2. Pesquisou no google pelo código de retorno para descobrir o que significava

    O código indica uma falha de segmentação

  3. Usou strace para ter uma ideia de onde o erro estava acontecendo

    sudo strace -o do-release-upgrade.strace do-release-upgrade
    

    Isso gravou o log de rastreamento em um arquivo chamado do-release-upgrade.strace e o log mostrou, na parte inferior, o arquivo de tempo de execução no qual a falha ocorreu.

  4. Ran o depurador pudb3 para depurar do-release-upgrade

    Se pudb3 ainda não estiver instalado.

    sudo apt-get install python3-pudb
    

    Execute o depurador pudb3

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

    Para quem não conhece depuradores, isso me permitiu passar por cada ponto de execução do script.

    Eu encontrei rapidamente o seguinte erro.

    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
    

    O que me leva ao relatório de bug correspondente do ubuntu

  5. Tentativa de remover e reinstalar o pacote indicado no relatório de erros

    Primeiro método

    sudo apt-get install --reinstall python3-apt
    

    Segundo, método mais drástico

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

    Nenhum deles resolveu o problema.

Conclusão:

Ainda acho estranho que o erro não tenha sido impresso no stdout; normalmente, espero que seja. Esta solução não deveria ter exigido um depurador.

Este é um bug no pacote binário python3-apt . Sem corrigir o bug e reconstruir o pacote, esse erro provavelmente permanecerá.

    
por David 06.05.2015 / 22:24