Atualização quebrada e bagunça de pacotes: como removo pacotes antigos manualmente?

Atualização quebrada e bagunça de pacotes: como removo pacotes antigos manualmente?

Depois de do-release-upgrademudar de 16.04 para 18.04, algo falhou e a máquina ficou em um estado "intermediário", com muitos problemas de dependências quebradas. Minha árvore de pacotes está uma bagunça, estou desesperado... ;-)

Eu tentei muitas coisas (incluindo dpkg --configure -aremover pacotes aleatoriamente com dpkg --force depends -P <pkg-name>, além de outras coisas), mas estou meio preso no momento.

Então, quando eu tento:

$ sudo apt --fix-broken install
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Correcting dependencies... Done
The following packages were automatically installed and are no longer required:
   (here 20 lines)
The following additional packages will be installed:
... (here 5 lines)
 Suggested packages:
 ... more
Recommended packages:
 ... more
The following packages will be REMOVED:
 ... more
The following NEW packages will be installed:
 ... more (10 lines)
28 upgraded, 6 newly installed, 1 to remove and 327 not upgraded.
228 not fully installed or removed.
Need to get 0 B/13,3 MB of archives.
After this operation, 2 771 kB of additional disk space will be used.
Do you want to continue? [Y/n] 

Até aqui não tenho medo de nada. Mas agora, entrando Y:

Extracting templates from packages: 100%
(Reading database ... 977800 files and directories currently installed.)
Removing ubuntu-advantage-tools (27.0.2~18.04.1) ...
Traceback (most recent call last):
  File "<string>", line 2, in <module>
  File "/usr/lib/python3/dist-packages/uaclient/apt.py", line 9, in <module>
    from uaclient import gpg
  File "/usr/lib/python3/dist-packages/uaclient/gpg.py", line 3, in <module>
    import shutil
ModuleNotFoundError: No module named 'shutil'
dpkg: error processing package ubuntu-advantage-tools (--remove):
 installed ubuntu-advantage-tools package pre-removal script subprocess returned error exit status 1
Errors were encountered while processing:
 ubuntu-advantage-tools
E: Sub-process /usr/bin/dpkg returned an error code (1)

Então isso soa como um erro do Python, pelo que entendi, não é possível encontrar shutil. Então baixei manualmente o que achei que era o seguinte: https://packages.ubuntu.com/bionic/python-backports-shutil-get-terminal-size e instalado manualmente com:

sudo dpkg -i python-backports-shutil-get-terminal-size_1.0.0-5_all.deb

Mas fazer apt --fix-broken installde novo acaba no mesmo ponto.

Tenho conhecimento limitado com Python, então não posso ter certeza de que esse seja o verdadeiro problema, mas qualquer ajuda é bem-vinda. Caso contrário, o próximo passo provavelmente será reinstalar do zero, mas eu realmente prefiro evitar isso.

No momento, sou capaz de instalar pacotes manualmente (baixe emhttps://packages.ubuntu.com/then dpkg -i) mas é só isso, todo o resto falha.

Por exemplo, se eu tentar instalar libpython3.6-stdlib:

$ sudo apt-get install libpython3.6-stdlib

Eu recebo:

libpython3.6-stdlib : Depends: libpython3.6-minimal (= 3.6.9-1~18.04ubuntu1.4) but 3.6.13-1+xenial2 is to be installed

o que significa que euaindatenho pacotes a partir de 16.04 (Xenial).

Como posso manualmenteremovertodos os pacotes 16.04?

Informações adicionais (a máquina agora inicializa apenas com um console):

  • $ python --version=> Python 3.6.13
  • $ lsb_release -anão está disponível
  • $ uname -ame diz que é um kernel 4.15 (que parece consistente com 18.04)

Responder1

FWIW: O ponto chave estava de fato aqui:

dpkg: error processing package ubuntu-advantage-tools (--remove):
 installed ubuntu-advantage-tools package pre-removal script subprocess returned error exit status 1

Todo o processo falhou devido à falha do script de "pré-remoção" do pacote ubuntu-advantage-tools(não tenho ideia do que é isso!).

Então eu fiz:

$ sudo mv /var/lib/dpkg/info/ubuntu-advantage-tools.prerm /var/lib/dpkg/info/ubuntu-advantage-tools.prerm_OLD

e consegui completar o sudo apt --fix-broken installcomando.

Reinicie e depois outro problema (teclado não reconhecido) que foi resolvido usandooutra pergunta, após inicializar no modo de recuperação:

$ sudo apt-get install xserver-xorg-input-all

Finalmente consegui inicializar graficamente, mas ... ainda existem alguns problemas com o gerenciador de pacotes que ainda faz referência ao xenial (16.04). Vou postar outra pergunta.

Responder2

Isto parece um sistema muito doente; você pode querer tirá-lo de seu sofrimento, ou seja, reinstalá-lo. Se você ainda não possui um /homesistema de arquivos separado, copie seu diretório inicial e tudo o que você colocou de lado e recomece para obter um sistema limpo novamente.

Eu também copiaria /etccaso valesse a pena resgatar algum arquivo de configuração não trivial (mas evitaria copiá-lo para o novo sistema, a menos que fosse absolutamente necessário).

Pense desta forma: esse sistema serviu bem para você por longos anos (algum tempo logo depois de 2016, já que é 16.04); deixe descansar em paz. ;-) Agora é hora de algo novo e limpo.

Certa vez, fiz uma lista de verificação para mim mesmo do que faço em um Ubuntu recém-instalado para colocá-lo em um formato que considero mais utilizável; talvez você possa se inspirar nisso:https://github.com/shundhammer/huha-linux-tips/blob/master/doc/ubuntu-tips.md(algumas partes podem estar um pouco desatualizadas; deixa pra lá)

informação relacionada