¿Hay alguna forma de revertir la actualización más reciente?

55

Esto me ha sucedido muchas veces en los últimos 5 años: una actualización rompió mi sistema. Cada vez que termino con esta situación, tengo que reinstalar todo el sistema, lo cual es realmente molesto.

¿Hay alguna forma de revertir la actualización más reciente para poder tener un sistema funcional sin reinstalar? Si no, ¿cuál es la mejor manera de sugerir esto como una idea de máxima prioridad?

Leí que esta idea se describió en brainstorm.ubuntu.com, pero parece que está muerta ... y los foros están llenos de ejemplos de actualizaciones que rompen cosas, es por eso que siento que hay que hacer algo al respecto. ¡Gracias!

Marcelo Ruiz
fuente
17
Estoy iniciando sesión solo para votar esta pregunta. La falta de una herramienta de reversión coherente en un sistema operativo de escritorio 2011 es patética. Windows tenía Restaurar sistema hace más de 5 años , eso está muy por detrás de la curva. Los usuarios han sido ( correctamente ) entrenados para instalar actualizaciones de seguridad, pero constantemente estamos castigados por hacerlo al fallar los controladores.
Vicepresidente de Gates el
@GatesVP Este punto que hizo hace más de 8 años todavía está afectando a Ubuntu (no puedo hablar por otras distribuciones, pero probablemente no sean mejores). Esto me parece totalmente frustrante. Alguien debería tener sus palabras impresas en una fuente de 64 pt y colgarlas delante de cada novato a punto de sumergirse en el mundo de Linux.
horaceT
Tengo que aceptar que una imagen de respaldo es el camino a seguir. No se indica si este es un sistema de 'producción'. Si es y es factible tener un sistema de prueba de clonación, entonces con copia de seguridad de imagen es el camino a seguir. Si solo se trata de una actualización de la aplicación, la solución más rápida es degradar con o sin una opción de 'forzar'.
JHPArizona

Respuestas:

14

En synaptics, al menos puedes controlar cuáles han sido las actualizaciones recientes: menú Archivo, historial.

(si synaptic es iniciable, con el sistema roto). Entonces, con un comando apt -...-, para revertir su actualización, no debería ser demasiado difícil.

Supongo que también hay un comando de historial para la línea de comando.

Quizás tenga que eliminar todo el paquete e instalar una versión específica. Afaik, es posible instalar una versión específica, pero nunca tuve la necesidad de hacerlo.

actualización: Busqué cómo hacer con apt:

Encuentra paquetes instalados en las últimas 3x24h:

find /var/lib/dpkg/info/ -name \*.list -mtime -3 | sed 's#.list$##;s#.*/##' 

Con la política apt-cache, verá las versiones disponibles de un programa:

sudo apt-cache policy PROGRAM:
 *** 3.6.7+build3+nobinonly-0ubuntu0.10.04.1 0
        500 http://de.archive.ubuntu.com/ubuntu/ lucid-updates/main Packages
        500 http://security.ubuntu.com/ubuntu/ lucid-security/main Packages
        100 /var/lib/dpkg/status
     3.6.3+nobinonly-0ubuntu4 0

aquí 3.6.7 y 3.6.3. Ahora ya sabe qué versión anterior podría instalarse (a menudo no el predecesor inmediato):

sudo apt-get install PROGRAM=3.6.3

Luego, debe hacer una fijación adecuada para evitar futuras actualizaciones:

Cree un nuevo archivo en /etc/apt/preferences.d/ (si> = 10.4) con el nombre de su programa,

Package: program
Pin: version 3.6.3*
Pin-Priority: 1000
usuario desconocido
fuente
Gracias a todos por la información. ¡No puedo esperar a que Ubuntu administre zfs fuera de la caja!
Marcelo Ruiz
Lo siento, ¿qué tiene que ver con zfs? ¿ZFS gestiona las reversiones? ¿O las actualizaciones rompen su instalación zfs? ¿O la actualización zfs rompe algo?
usuario desconocido
¿Qué pasa si la versión es de 1.0.2g-1ubuntu4.12acuerdo con apt? Sin embargo, se niega a aceptar eso como un número de versión. Quiero rebajar la forma 1.0.2g-1ubuntu4.13a1.0.2g-1ubuntu4.12
Csaba Toth
gracias, suuuuuuuuuuuu un dolor sin embargo. mi última actualización, que destruyó por completo la entrada del controlador, tiene exactamente 80 paquetes enumerados find /var/lib/dpkg/info/ -name \*.list -mtime -3 | sed 's#.list$##;s#.*/##' en este punto, es menos complicado reinstalar todo mi sistema
tatsu
7

En su mayoría, puede consultar los /var/log/apt/history.logcambios realizados por apt / synaptic. Es solo un poco forense y mucho cortar / pegar.

Regrese a la fecha en que su sistema todavía funcionaba bien.

Primero tome todos los paquetes que se instalaron desde entonces y póngalos juntos en un script de desinstalación. Cuando finalice el script, comience a volver a agregar todos los paquetes eliminados nuevamente.

Un ejemplo de caso:
logfile:

Start-Date: 2014-05-28  21:28:11
Commandline: synaptic
Install: libfglrx-amdxvba1:amd64 (13.12-3kali1, automatic), libgl1-fglrx-glx:amd64 (13.12-3kali1), glx-alternative-fglrx:amd64 (0.4.1kali1, automatic), libfglrx:amd64 (13.12-3kali1, au$
Remove: fglrx-glx-ia32:amd64 (12-6+point-3)
End-Date: 2014-05-28  21:28:27

puedes ver,

libfglrx-amdxvba1:amd64 libgl1-fglrx-glx:amd64 glx-alternative-fglrx:amd64 & libfglrx:amd64 

fue instalado por Synaptic. como si libfglrx:amd64fuera eliminado por Synaptic.

Seguimos el orden inverso, por lo que primero eliminamos los paquetes recién instalados y volvemos a agregar los paquetes que se eliminaron.

Un comando de trabajo para este caso podría verse así:

sudo apt-get remove -y libfglrx-amdxvba1:amd64 libgl1-fglrx-glx:amd64 glx-alternative-fglrx:amd64 libfglrx:amd64 && sudo apt-get install -y libfglrx:amd64

Tal vez no sería la mejor idea ir sin el -yinterruptor: tener más control sobre el proceso (para evitar dependencias interrumpidas). La mayoría de ustedes no se romperían el dedo mientras hacen algunas verificaciones "y"

En la mayoría de los casos, es posible una reversión de esta manera, pero si las dependencias ya están rotas, puede encontrarse con un problema aún mayor.

Mate
fuente
6

La mayoría de las veces si su sistema está roto, es un problema del núcleo .

Simplemente inicie un núcleo antiguo y reinstale los paquetes más recientes (especialmente los paquetes del núcleo) que probablemente no se actualizaron correctamente. Pocas notas:

/var/log/dpkg.log

es su amigo para verificar cuál es la lista de los paquetes recientemente actualizados / instalados

sudo apt-get -f install

puede la mayoría de las veces arreglar paquetes a medio instalar

Giordano Battilana
fuente
4

Lamentablemente, todavía no hay forma de hacerlo. La instantánea / reversión a nivel del sistema de archivos es una de las características de los próximos btrfs, pero aún tiene formas de convertirse en una característica completa y lo suficientemente estable como para usarla como el sistema de archivos predeterminado.

psusi
fuente
1
Para las instantáneas del sistema de archivos, puede usar LVM en su lugar, con ext3 o ext4.
Flimm
@Flimm, ahora puede hacerlo, aunque no funciona muy bien y requiere que configure LVM cuando instale en primer lugar.
psusi
3

Al hacer una actualización importante, clono el disco usando Clonezilla . Grabe en un CD, tenga disponible un disco duro (externo) de repuesto y siga las instrucciones en el LiveCD de Clonezilla. Elija el partition-imagemodo, esto usa menos espacio.

Si cree que ha dañado su sistema (o desea revertir cualquier cambio), simplemente inicie el Clonezilla LiveCD, seleccione la imagen en su HDD (externo) y restaure. Como estas imágenes son una copia literal de cada bit en su disco, esto puede tomar algunas horas dependiendo de la velocidad de su disco y la velocidad de conexión (la conexión entre los datos, generalmente un HDD USB externo y la computadora).

Por cierto, esto se llama un método de respaldo.

Lekensteyn
fuente
3

Puede instalar una versión anterior de un paquete dado (downgrade) con apt o dpkg fácilmente . El problema es encontrar una versión anterior del paquete, ya que a menudo desaparecen del grupo y se reflejan a medida que se introducen las actualizaciones.

Si instala el paquete desde un CD de instalación o un espejo anticuado o un caché, también deberá mantenerlo anclado a la versión anterior para que no se actualice hasta que lo permita. Lo que significa que debe buscar actualizaciones y probarlas hasta que se solucione el problema. Por supuesto, esto es un problema, ya que mientras tanto (tal vez para siempre) se quedará con el paquete no fijado, posiblemente inseguro. Eso significa que cada usuario con algún tipo de problema del sistema quedará en un estado aleatorio hasta que pueda resolverlo.

Todo el software tampoco es compatible con versiones anteriores, por lo que es posible que una versión anterior de algo no se comporte correctamente cuando se alimenta con una configuración más reciente o archivos de datos. Obviamente, esto es imposible de resolver a menos que también revierta todos los datos del usuario a un estado anterior a la actualización.

Sería genial si hubiera una manera de hacer esto, pero es enormemente problemático. Cualquiera que piense que hay una solución coherente debe escribir una propuesta e invitar comentarios o, mejor aún, hacer una solución de prueba de concepto (código, script, documento). Trolling y quejarse no es constructivo.

Debido a que no existe una solución técnica limpia, la mayoría del software está desarrollado (e integrado) con la mentalidad de "la única forma es avanzar". Intentar gestionar versiones desactualizadas es una pérdida de tiempo para todos. Los problemas encontrados se corrigen en las versiones más recientes lo antes posible. Como una solución menor, me gustaría ver un archivo de versiones anteriores de paquetes guardados en algún lugar para la solución temporal ocasional.

Mientras tanto, puede informar errores y no esperar que el software de última generación nunca falle. Una solución, una vez encontrada, debería estar en la próxima actualización. Los desarrolladores son humanos (en su mayoría) y, por lo tanto, falibles. Las computadoras son complicadas y están llenas de variedad y detalles insanos. Los sistemas de mantenimiento defensivo que utilizan componentes bien soportados y una distribución de software integrada estable pueden ser muy estables sin volverse inseguros o no actualizables a pesar de esto.

XTL
fuente