El sistema Ubuntu se rompe después de desinstalar accidentalmente muchos paquetes

20

Accidentalmente eliminé todos los paquetes que comienzan con el nombre jpegcon:

sudo apt-get remove jpeg*

Esto arruinó muchas cosas, eliminó Unity, Firefox, Flash player, etc.

De alguna manera logré recuperar el escritorio y la unidad, pero muchas cosas todavía tienen errores. Por ejemplo, .rpmarchivos y .tag.gzsimplemente no se abrirán en absoluto.

Lo que quiero es una forma de arreglar todo lo que está mal. Algo que equivale a una 'instalación de reparación' con un disco de Windows.

¿Algún consejo, alguien?

Programación de novatos
fuente
1
Realmente recomendaría una instalación nueva. Simplemente haga una copia de seguridad de su / home / (incluidos los archivos invisibles) e insértelo en la nueva instalación.
Paul Woitaschek

Respuestas:

35

Puedes instalar la ubuntu-desktoptarea:

sudo apt-get install ubuntu-desktop^

Esto instalará todos los paquetes del escritorio Ubuntu estándar que haya eliminado. No restaurará los paquetes que haya instalado que no forman parte del escritorio estándar (es decir, reinstalará Unity y Firefox, pero no el reproductor Flash).

Para instalar esos paquetes, puede mirar /var/log/apt/history.logy ver exactamente lo que había eliminado.

Nota: instalar la ubuntu-desktop^ tarea no es lo mismo que instalar el ubuntu-desktop paquete . El primero le dará a APT algunos consejos para resolver las dependencias que involucran paquetes virtuales, el último le dará a APT la libertad de elegir paquetes (y terminará instalando cosas inútiles como ubiquity).

¿Por qué ha sucedido el problema? apt-get remove jpeg*será no eliminar todos los paquetes a partir de jpeg. En su lugar, eliminará todos los paquetes que contengan jpeen su nombre. Esto se debe a que apt-get funciona con expresión regular, por lo que jpeg * significa: todo lo que contiene jpe seguido de cero o más g .

Andrea Corbellini
fuente
1
Buena idea, no había pensado en eso. ¡Me interesará ver si funciona aquí!
Eliah Kagan
@EliahKagan: Lo he probado en un chroot. Los paquetes jpeg * solo afectan a algunas aplicaciones gráficas, por lo que los 'ingredientes' necesarios (es decir, NetworkManager para conectividad a Internet, APT, emuladores de terminal, etc.) todavía están en el sistema OP.
Andrea Corbellini
@EliahKagan: por supuesto, hice la suposición (no obvia) de que el OP no ha eliminado nada más.
Andrea Corbellini
2
Incluya una advertencia para no usar nuncatasksel para eliminar una tarea - vea el desagradable error de
tareas
1
@Attilio: he explicado la diferencia en la respuesta. Consulte "Nota: instalar la tarea ubuntu-desktop ^ no es lo mismo que instalar el paquete ubuntu-desktop ..."
Andrea Corbellini
8

La mejor manera de solucionar este problema podría ser reinstalar Ubuntu. (Debe hacer una copia de seguridad de sus documentos primero, incluso si planea reinstalar sin reformatear)

Si desea intentar arreglar el sistema en su lugar, mire los archivos de registro del administrador de paquetes para ver qué paquetes se eliminaron y vuelva a instalarlos:

  • /var/log/dpkg.log (información completa, pero difícil de leer)
  • /var/log/apt/history.log (abreviado por le indicará cada paquete eliminado o modificado de otro modo, probablemente su mejor opción)
  • /var/log/apt/term.log(si eliminó los paquetes apt-geten la terminal, esto debería mostrar lo que vio en ese momento, incluidas las listas de los paquetes que se eliminarán, por lo que esta podría ser la mejor manera)

Reinstalar solo los paquetes cuyos nombres comienzan con jpegno funcionará, porque muchos (casi seguramente la mayoría) de los paquetes que se eliminaron se eliminaron porque dependían de esos paquetes.

En el futuro , recomiendo verificar cuidadosamente las consecuencias de desinstalar un paquete. Si está trabajando desde la línea de comandos, siempre se le notificará. (A menos que use la -yopción, en cuyo caso, generalmente no. Recomiendo no usar esa opción a menos que sepa lo que está haciendo, especialmente para las eliminaciones).

Una forma de verificar las consecuencias de una operación de gestión de paquetes llevada a cabo apt-get, sin arriesgarse a que ocurra, es ejecutarla en apt-get -slugar de hacerlo sudo apt-get. Esto simplemente simula la acción especificada e informa qué paquetes se verían afectados como resultado y cómo.

Eliah Kagan
fuente
1

Ejecuto sudo apt-get purge wine*en Ubuntu 15.10, por lo que no hay una interfaz gráfica en la opción de inicio de sesión de terminal solo de arranque.

Como sugirió Eliah Kagan, utilicé información de /var/log/apt/history.log Nano en history.log e hice un script simple que contenía sudo apt-get installtodos los paquetes purgados que encontré en la línea:

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

Pero primero tuve que eliminar manualmente el texto entre todos: y, incluido el:,

en este paso, un nuevo script sería útil porque los paquetes eran cientos. después de eso ejecuté el script y eliminé algunos Unable to locate packages(que había instalado manualmente). ejecuta el script nuevamente y eso es todo. Todo funciona bien ... por suerte

kominato
fuente
0

Instale el paquete ubuntu-desktopInstalar ubuntu-desktop

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

Instalará los paquetes necesarios para su sistema.

Taquiones
fuente
esto falla para mí ya que las dependencias de ubuntu-desktop no están instaladas.
kevinkayaks
0

Me quité accidentalmente libssl1.0.0y mi máquina quedó paralizada. Para restaurar, hice:

  1. Copia de seguridad de los registros de lo que se eliminó cp /var/log/apt/term.log ~/libssl.term.log
  2. Eliminar las líneas no relacionadas con la acción libssl vi ~/libssl.term.log
  3. Si falta una red (no se puede ping google.com), reinicie en modo de recuperación y habilite la red
  4. Reinstalar paquetes eliminados 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
fuente
0

Aquí hay una pequeña secuencia de comandos de Python donde puede escribir la cadena de paquete (inutilizable) de su desinstalación masiva que está activada /var/log/apt/history.log. Producirá una cadena que puede copiar y pegar en el comando apt-get install para instalar fácilmente todos los paquetes eliminados.

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
fuente
Comas ¿Te refieres a citas?
wjandrea
@wjandrea Sí, quiero decir citas
joaoroque