O sistema Ubuntu está quebrado após desinstalar acidentalmente muitos pacotes

20

Eu removi acidentalmente todos os pacotes começando com o nome jpegcom:

sudo apt-get remove jpeg*

Isso estragou muitas coisas, removeu o Unity, Firefox, Flash player etc.

De alguma forma, consegui recuperar a área de trabalho e a unidade, mas muitas coisas ainda estão com erros. Por exemplo, .rpmarquivos e .tag.gzsimplesmente não serão abertos.

O que eu quero é uma maneira de consertar tudo o que está errado. Algo que é equivalente a uma 'instalação de reparo' com um disco do Windows.

Alguma dica, alguém?

Programming Noob
fonte
11
Eu realmente recomendo uma instalação nova. Apenas faça backup do seu / home / (incluindo arquivos invisíveis) e insira-o na nova instalação.
Paul Woitaschek

Respostas:

35

Você pode instalar a ubuntu-desktoptarefa:

sudo apt-get install ubuntu-desktop^

Isso instalará todos os pacotes do Ubuntu Desktop padrão que você removeu. Ele não restaurará os pacotes que você instalou que não fazem parte da área de trabalho padrão (ou seja, reinstalarão o Unity e o Firefox, mas não o Flash player).

Para instalar esses pacotes, você pode verificar /var/log/apt/history.loge ver exatamente o que removeu.

Nota: instalar a ubuntu-desktop^ tarefa não é o mesmo que instalar o ubuntu-desktop pacote . O primeiro fornecerá ao APT algumas dicas para resolver dependências que envolvem pacotes virtuais, o último dará ao APT a liberdade de escolher pacotes (e acabará instalando coisas inúteis como ubiquity).

Por que o problema aconteceu? apt-get remove jpeg*irá não remover todos os pacotes começando com jpeg. Em vez disso, removerá todos os pacotes que contenham jpeseus nomes. Isso ocorre porque o apt-get trabalha com expressão regular, de modo que jpeg * significa: tudo que contém jpe seguido por zero ou mais g .

Andrea Corbellini
fonte
11
Boa ideia, eu não tinha pensado nisso. Ficarei interessado em ver se funcionará aqui!
Elias Kagan
@EliahKagan: Eu testei em um chroot. Os pacotes jpeg * afetam apenas algumas aplicações gráficas, portanto os 'ingredientes' necessários (por exemplo, NetworkManager para conectividade com a Internet, APT, emuladores de terminal e assim por diante) ainda estão no sistema OP.
Andrea Corbellini
@EliahKagan: é claro, fiz a suposição (não óbvia) de que o OP não removeu mais nada.
Andrea Corbellini
2
Por favor, inclua um aviso para não usar taskselpara remover uma tarefa - veja desagradável tasksel-bug
guntbert
11
@ Attilio: Eu expliquei a diferença na resposta. Veja "Nota: instalar a tarefa ubuntu-desktop ^ não é o mesmo que instalar o pacote ubuntu-desktop ..."
Andrea Corbellini
8

A melhor maneira de corrigir esse problema pode ser reinstalar o Ubuntu. (Você deve fazer backup dos seus documentos primeiro, mesmo se planeja reinstalar sem reformatar.)

Se você deseja tentar consertar o sistema, verifique os arquivos de log do gerenciador de pacotes para ver quais pacotes foram removidos e reinstale-os:

  • /var/log/dpkg.log (informação completa, mas difícil de ler)
  • /var/log/apt/history.log (abreviado por dirá a você todos os pacotes removidos ou modificados - provavelmente sua melhor aposta)
  • /var/log/apt/term.log(se você tiver removido os pacotes com apt-getno terminal, isto deve exibir o que você viu, então, incluindo listas de quais pacotes foram vai ser removido - de modo que este pode ser o melhor caminho)

Reinstalar apenas pacotes cujos nomes começam jpegnão funcionará, porque muitos (quase certamente) dos pacotes removidos foram removidos porque dependiam desses pacotes.

No futuro , recomendo verificar cuidadosamente as consequências da desinstalação de um pacote. Se você estiver trabalhando na linha de comando, sempre será notificado. (A menos que você use a -yopção, nesse caso, geralmente não. Recomendo que não seja usada, a menos que você saiba o que está fazendo, principalmente para remoções.)

Uma maneira de verificar as consequências de uma operação de gerenciamento de pacotes realizada apt-getsem correr o risco de ocorrer, é executar em apt-get -svez de sudo apt-get. Isso simula apenas a ação especificada e relata quais pacotes serão afetados como resultado e como.

Eliah Kagan
fonte
1

Eu corro sudo apt-get purge wine*no Ubuntu 15.10, portanto, nenhuma interface gráfica na opção de login do terminal apenas de inicialização.

Como Eliah Kagan sugeriu, usei as informações do /var/log/apt/history.log I nano no history.log e criei um script simples que continha sudo apt-get installtodos os pacotes limpos que encontrei na linha:

Purge: evolution:amd64 (3.16.5-1ubuntu3.1), libtotem-plparser18:amd64 (3.10.5-1) ...... etc

Mas primeiro eu tive que remover manualmente o texto entre todos: e, incluindo o:,

nesta etapa, um novo script seria útil porque os pacotes eram centenas. depois disso, executei o script e removi alguns Unable to locate packages(que eu tinha instalado manualmente). execute o script novamente e pronto. Tudo está funcionando bem ... felizmente

kominato
fonte
0

Instale o pacote ubuntu-desktopInstale o ubuntu-desktop

sudo apt-get update && sudo apt-get install ubuntu-desktop

Ele instalará os pacotes necessários para o seu sistema.

Tachyons
fonte
isso falha para mim, pois as dependências do ubuntu-desktop não estão instaladas.
kevinkayaks
0

Eu removi acidentalmente libssl1.0.0e minha máquina estava danificada. Para restaurar, eu fiz:

  1. Faça backup dos logs do que foi removido cp /var/log/apt/term.log ~/libssl.term.log
  2. Exclua as linhas não relacionadas à ação libssl vi ~/libssl.term.log
  3. Se a rede estiver ausente (não puder ping google.com), reinicie no modo de recuperação e ative a rede
  4. Reinstalar pacotes removidos cat ~/libssl.term.log | grep ^Removing | sed -e 's/^Removing //g;s/ (.*$//g;/diversion of/d;/dangling symlinks/d' | xargs sudo apt-get -y install
Eric Landry
fonte
0

Aqui está um pequeno script python onde você pode escrever a sequência de pacotes (inutilizável) a partir da desinstalação em massa que está ativada /var/log/apt/history.log. Ele produzirá uma string que você pode copiar e colar no comando apt-get install para instalar facilmente todos os pacotes removidos.

import re

apt_str = u"INSERT YOUR PACKAGE STRING HERE, BETWEEN THE QUOTES"

match =  re.findall(r'([\w\d\.-]+).+? \(.+?\)', apt_str)
print " ".join(match)
joaoroque
fonte
Vírgulas? Você quer dizer citações?
Wjandrea
@wjandrea Sim eu quero dizer citações
joaoroque