¿Hay alguna manera en Ubuntu de deshacer o deshacer la última actualización después de hacer una apt-get upgrade
si no le gustan los resultados?
¿Hay alguna manera en Ubuntu de deshacer o deshacer la última actualización después de hacer una apt-get upgrade
si no le gustan los resultados?
Respuestas:
aptitude
le da acceso a todas las versiones de un paquete si está disponible según la gestión de paquetes de Debian .
Encontré el Blogstatic Blog de Hartman: Cómo deshacer una actualización en Ubuntu Lucid
El primer paso para deshacer la actualización ofensiva fue averiguar qué actualizaciones era exactamente. Después de buscar en algunos foros, encontré una forma de ver mi historial de actualizaciones: abrir el administrador de paquetes sinápticos ("sudo synaptic" en el terminal). Desde la barra de menú, haga clic en Archivo -> Historial y verá todas sus actualizaciones ordenadas por fecha.
Desafortunadamente, instalé unas 20 actualizaciones hoy y no sabía cuál había causado el problema. Al buscar en cada uno de los paquetes nombrados en la lista de Historial, pude degradar algunos a la vez hasta que se resolvió el problema e identifiqué la actualización ofensiva. Para hacer esto:
Use la barra de búsqueda para encontrar el paquete que desea degradar. Una vez que haya encontrado lo que está buscando, haga clic en el paquete para seleccionarlo. Desde la barra de menú, haga clic en Paquete -> Forzar versión y seleccione la versión anterior del paquete en el menú desplegable. Haga clic en el botón "Aplicar" para aplicar la degradación.
Tenía que hacer esto hoy en mi sistema Debian. Primero, identifiqué el rango de tiempo cuando ocurrió la actualización ofensiva, y recuperé las entradas de registro con los números de versión antiguos y nuevos de los paquetes actualizados:
$ awk '$1=="2016-03-20" && $3=="upgrade"' /var/log/dpkg.log
2016-03-20 16:58:22 upgrade libwebkitgtk-3.0-0:amd64 2.4.9-3 2.4.10-1
2016-03-20 16:58:24 upgrade libjavascriptcoregtk-3.0-0:amd64 2.4.9-3 2.4.10-1
2016-03-20 16:58:26 upgrade traceroute:amd64 1:2.0.22-1 1:2.1.0-1
2016-03-20 16:58:33 upgrade ethtool:amd64 1:4.2-1 1:4.5-1
2016-03-20 16:58:34 upgrade libsdl1.2debian:amd64 1.2.15+dfsg1-3 1.2.15+dfsg1-4
2016-03-20 16:58:34 upgrade subversion:amd64 1.9.3-2+b1 1.9.3-3
2016-03-20 16:58:36 upgrade libsvn1:amd64 1.9.3-2+b1 1.9.3-3
2016-03-20 16:58:56 upgrade linux-image-amd64:amd64 4.3+70 4.4+71
2016-03-20 16:58:56 upgrade linux-libc-dev:amd64 4.3.5-1 4.4.6-1
2016-03-20 16:59:03 upgrade amd64-microcode:amd64 2.20141028.1 2.20160316.1
Luego, traté de encontrar los archivos del paquete aún en caché en el disco (por suerte para mí no había ejecutado autoclean):
$ awk '$1=="2016-03-20" && $3=="upgrade" {gsub(/:/, "%3a", $5); split($4, f, ":"); print "/var/cache/apt/archives/" f[1] "_" $5 "_" f[2] ".deb"}' /var/log/dpkg.log | xargs -r ls -ld
ls: cannot access '/var/cache/apt/archives/ethtool_1%3a4.2-1_amd64.deb': No such file or directory
-rw-r--r-- 1 root root 28820 Dec 18 2014 /var/cache/apt/archives/amd64-microcode_2.20141028.1_amd64.deb
-rw-r--r-- 1 root root 1978874 Dec 10 18:22 /var/cache/apt/archives/libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb
-rw-r--r-- 1 root root 185006 Mar 12 00:41 /var/cache/apt/archives/libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb
-rw-r--r-- 1 root root 1317644 Mar 3 11:30 /var/cache/apt/archives/libsvn1_1.9.3-2+b1_amd64.deb
-rw-r--r-- 1 root root 7679400 Dec 10 18:22 /var/cache/apt/archives/libwebkitgtk-3.0-0_2.4.9-3_amd64.deb
-rw-r--r-- 1 root root 6108 Dec 14 06:59 /var/cache/apt/archives/linux-image-amd64_4.3+70_amd64.deb
-rw-r--r-- 1 root root 1075506 Feb 7 21:36 /var/cache/apt/archives/linux-libc-dev_4.3.5-1_amd64.deb
-rw-r--r-- 1 root root 983174 Mar 3 11:30 /var/cache/apt/archives/subversion_1.9.3-2+b1_amd64.deb
-rw-r--r-- 1 root root 53376 Feb 28 18:35 /var/cache/apt/archives/traceroute_1%3a2.0.22-1_amd64.deb
Parece que por alguna razón no tengo el paquete de ethtool más antiguo. Aún así, continuemos instalando a la fuerza los archivos de paquetes más antiguos:
$ sudo dpkg -i /var/cache/apt/archives/amd64-microcode_2.20141028.1_amd64.deb /var/cache/apt/archives/libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb /var/cache/apt/archives/libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb /var/cache/apt/archives/libsvn1_1.9.3-2+b1_amd64.deb /var/cache/apt/archives/libwebkitgtk-3.0-0_2.4.9-3_amd64.deb /var/cache/apt/archives/linux-image-amd64_4.3+70_amd64.deb /var/cache/apt/archives/linux-libc-dev_4.3.5-1_amd64.deb /var/cache/apt/archives/subversion_1.9.3-2+b1_amd64.deb /var/cache/apt/archives/traceroute_1%3a2.0.22-1_amd64.deb
dpkg: warning: downgrading amd64-microcode from 2.20160316.1 to 2.20141028.1
(Reading database ... 139632 files and directories currently installed.)
Preparing to unpack .../amd64-microcode_2.20141028.1_amd64.deb ...
Unpacking amd64-microcode (2.20141028.1) over (2.20160316.1) ...
dpkg: warning: downgrading libjavascriptcoregtk-3.0-0:amd64 from 2.4.10-1 to 2.4.9-3
Preparing to unpack .../libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb ...
Unpacking libjavascriptcoregtk-3.0-0:amd64 (2.4.9-3) over (2.4.10-1) ...
dpkg: warning: downgrading libsdl1.2debian:amd64 from 1.2.15+dfsg1-4 to 1.2.15+dfsg1-3
Preparing to unpack .../libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb ...
Unpacking libsdl1.2debian:amd64 (1.2.15+dfsg1-3) over (1.2.15+dfsg1-4) ...
dpkg: warning: downgrading libsvn1:amd64 from 1.9.3-3 to 1.9.3-2+b1
Preparing to unpack .../libsvn1_1.9.3-2+b1_amd64.deb ...
Unpacking libsvn1:amd64 (1.9.3-2+b1) over (1.9.3-3) ...
Preparing to unpack .../libwebkitgtk-3.0-0_2.4.9-3_amd64.deb ...
Unpacking libwebkitgtk-3.0-0:amd64 (2.4.9-3) over (2.4.9-3) ...
dpkg: warning: downgrading linux-image-amd64 from 4.4+71 to 4.3+70
Preparing to unpack .../linux-image-amd64_4.3+70_amd64.deb ...
Unpacking linux-image-amd64 (4.3+70) over (4.4+71) ...
dpkg: warning: downgrading linux-libc-dev:amd64 from 4.4.6-1 to 4.3.5-1
Preparing to unpack .../linux-libc-dev_4.3.5-1_amd64.deb ...
Unpacking linux-libc-dev:amd64 (4.3.5-1) over (4.4.6-1) ...
dpkg: warning: downgrading subversion from 1.9.3-3 to 1.9.3-2+b1
Preparing to unpack .../subversion_1.9.3-2+b1_amd64.deb ...
Unpacking subversion (1.9.3-2+b1) over (1.9.3-3) ...
dpkg: warning: downgrading traceroute from 1:2.1.0-1 to 1:2.0.22-1
Preparing to unpack .../traceroute_1%3a2.0.22-1_amd64.deb ...
Unpacking traceroute (1:2.0.22-1) over (1:2.1.0-1) ...
Setting up amd64-microcode (2.20141028.1) ...
update-initramfs: deferring update (trigger activated)
amd64-microcode: microcode will be updated at next boot
Setting up libjavascriptcoregtk-3.0-0:amd64 (2.4.9-3) ...
Setting up libsdl1.2debian:amd64 (1.2.15+dfsg1-3) ...
Setting up libsvn1:amd64 (1.9.3-2+b1) ...
dpkg: dependency problems prevent configuration of libwebkitgtk-3.0-0:amd64:
libwebkitgtk-3.0-0:amd64 depends on libwebkitgtk-3.0-common (>= 2.4.9); however:
Package libwebkitgtk-3.0-common is not installed.
dpkg: error processing package libwebkitgtk-3.0-0:amd64 (--install):
dependency problems - leaving unconfigured
Setting up linux-image-amd64 (4.3+70) ...
Setting up linux-libc-dev:amd64 (4.3.5-1) ...
Setting up subversion (1.9.3-2+b1) ...
Setting up traceroute (1:2.0.22-1) ...
update-alternatives: using /usr/bin/traceroute.db to provide /usr/bin/traceroute (traceroute) in auto mode
update-alternatives: using /usr/bin/lft.db to provide /usr/bin/lft (lft) in auto mode
update-alternatives: using /usr/bin/traceproto.db to provide /usr/bin/traceproto (traceproto) in auto mode
update-alternatives: using /usr/sbin/tcptraceroute.db to provide /usr/sbin/tcptraceroute (tcptraceroute) in auto mode
Processing triggers for libc-bin (2.22-3) ...
Processing triggers for man-db (2.7.5-1) ...
Processing triggers for initramfs-tools (0.123) ...
update-initramfs: Generating /boot/initrd.img-4.4.0-1-amd64
Errors were encountered while processing:
libwebkitgtk-3.0-0:amd64
Como decía el mensaje de error, uno de mis paquetes dependía de un paquete común justo antes de la actualización, pero la actualización lo eliminó (y apt-get ya no puede encontrarlo). Afortunadamente, su archivo de paquete todavía está en / var / cache / apt, así que puedo agregarlo a la lista e intentar nuevamente:
$ ls -ld /var/cache/apt/archives/libwebkitgtk-3.0-common*
-rw-r--r-- 1 root root 452278 Dec 10 18:22 /var/cache/apt/archives/libwebkitgtk-3.0-common_2.4.9-3_all.deb
$ sudo dpkg -i /var/cache/apt/archives/amd64-microcode_2.20141028.1_amd64.deb /var/cache/apt/archives/libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb /var/cache/apt/archives/libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb /var/cache/apt/archives/libsvn1_1.9.3-2+b1_amd64.deb /var/cache/apt/archives/libwebkitgtk-3.0-0_2.4.9-3_amd64.deb /var/cache/apt/archives/linux-image-amd64_4.3+70_amd64.deb /var/cache/apt/archives/linux-libc-dev_4.3.5-1_amd64.deb /var/cache/apt/archives/subversion_1.9.3-2+b1_amd64.deb /var/cache/apt/archives/traceroute_1%3a2.0.22-1_amd64.deb /var/cache/apt/archives/libwebkitgtk-3.0-common_2.4.9-3_all.deb
(Reading database ... 139632 files and directories currently installed.)
Preparing to unpack .../amd64-microcode_2.20141028.1_amd64.deb ...
Unpacking amd64-microcode (2.20141028.1) over (2.20141028.1) ...
Preparing to unpack .../libjavascriptcoregtk-3.0-0_2.4.9-3_amd64.deb ...
Unpacking libjavascriptcoregtk-3.0-0:amd64 (2.4.9-3) over (2.4.9-3) ...
Preparing to unpack .../libsdl1.2debian_1.2.15+dfsg1-3_amd64.deb ...
Unpacking libsdl1.2debian:amd64 (1.2.15+dfsg1-3) over (1.2.15+dfsg1-3) ...
Preparing to unpack .../libsvn1_1.9.3-2+b1_amd64.deb ...
Unpacking libsvn1:amd64 (1.9.3-2+b1) over (1.9.3-2+b1) ...
Preparing to unpack .../libwebkitgtk-3.0-0_2.4.9-3_amd64.deb ...
Unpacking libwebkitgtk-3.0-0:amd64 (2.4.9-3) over (2.4.9-3) ...
Preparing to unpack .../linux-image-amd64_4.3+70_amd64.deb ...
Unpacking linux-image-amd64 (4.3+70) over (4.3+70) ...
Preparing to unpack .../linux-libc-dev_4.3.5-1_amd64.deb ...
Unpacking linux-libc-dev:amd64 (4.3.5-1) over (4.3.5-1) ...
Preparing to unpack .../subversion_1.9.3-2+b1_amd64.deb ...
Unpacking subversion (1.9.3-2+b1) over (1.9.3-2+b1) ...
Preparing to unpack .../traceroute_1%3a2.0.22-1_amd64.deb ...
Unpacking traceroute (1:2.0.22-1) over (1:2.0.22-1) ...
Selecting previously unselected package libwebkitgtk-3.0-common.
Preparing to unpack .../libwebkitgtk-3.0-common_2.4.9-3_all.deb ...
Unpacking libwebkitgtk-3.0-common (2.4.9-3) ...
Setting up amd64-microcode (2.20141028.1) ...
update-initramfs: deferring update (trigger activated)
amd64-microcode: microcode will be updated at next boot
Setting up libjavascriptcoregtk-3.0-0:amd64 (2.4.9-3) ...
Setting up libsdl1.2debian:amd64 (1.2.15+dfsg1-3) ...
Setting up libsvn1:amd64 (1.9.3-2+b1) ...
Setting up linux-image-amd64 (4.3+70) ...
Setting up linux-libc-dev:amd64 (4.3.5-1) ...
Setting up subversion (1.9.3-2+b1) ...
Setting up traceroute (1:2.0.22-1) ...
update-alternatives: using /usr/bin/traceroute.db to provide /usr/bin/traceroute (traceroute) in auto mode
update-alternatives: using /usr/bin/lft.db to provide /usr/bin/lft (lft) in auto mode
update-alternatives: using /usr/bin/traceproto.db to provide /usr/bin/traceproto (traceproto) in auto mode
update-alternatives: using /usr/sbin/tcptraceroute.db to provide /usr/sbin/tcptraceroute (tcptraceroute) in auto mode
Setting up libwebkitgtk-3.0-common (2.4.9-3) ...
Setting up libwebkitgtk-3.0-0:amd64 (2.4.9-3) ...
Processing triggers for libc-bin (2.22-3) ...
Processing triggers for man-db (2.7.5-1) ...
Processing triggers for initramfs-tools (0.123) ...
update-initramfs: Generating /boot/initrd.img-4.4.0-1-amd64
¡Éxito! En realidad, esto no resolvió mi problema. Pero degradó con éxito los paquetes, QED.
También tuve que deshacer una actualización de paquete hoy en un par de servidores Debian. Revertí con éxito los paquetes a la última versión usando aptitute, mientras que el siguiente comando awk fue muy útil.
( En el siguiente comando, reemplace la cadena de fecha con la fecha del día a partir del cual desea revertir las actualizaciones )
awk 'BEGIN{ start="0" } { if($0 ~ /Log started: 2017-06-20/) { start="1"} if ( start == "1" && $0 ~ /Unpacking.*over/) {gsub(/[\s\t)( ]+/,"",$5); printf("%s=%s ", $2 , $5)}}' /var/log/apt/term.log
revise el resultado para verificar que estos son los paquetes y las versiones que se van a revertir. Luego use aptitute para hacer la degradación de los paquetes listados:
aptitute install [paste output here]
Espero que esto también sea un ahorro de tiempo útil para otros.
Yo creo que no, además de tomar una copia de seguridad completa de los sistemas de archivos relevantes (aquellos que contienen /
, /bin
, /lib
, /sbin
, /usr
, /var
, /etc
y /boot
(que todos pueden estar en el sistema de archivos) y el registro de arranque) para que pueda mover la máquina hacia atrás después.
/var
) y cualquier archivo de configuración relevante almacenado. Luego, puede intentar forzar una reversión diciéndole explícitamente dpkg
que instale esas versiones. Es posible que tenga que hacer algo después cuando desee que se realicen las actualizaciones normales, por lo que no es algo que recomiendo.
Ejecuto mis servidores Linux en un entorno virtualizado y ejecuto una captura de pantalla justo antes de una actualización de apt-get, o cualquier actualización / actualización importante de terceros para el caso.
Entonces, si algo sale mal, simplemente vuelvo y la vida continúa hasta que pueda encontrar más información.
Esto fue muy útil cuando actualicé mi caja de Ubuntu a 12.04, y de alguna manera MySQL no funcionó completamente después de la actualización. Retrocedí, encontré la respuesta más tarde, volví a realizar la actualización, arreglé MySQL y la vida fue buena.
Podrías probar checkinstall
Después de ti ./configure; haga su programa, CheckInstall ejecutará make install (o lo que le diga que se ejecute) y realizará un seguimiento de cada archivo modificado por esta instalación, utilizando el excelente installwatch ...
Entonces, tal vez podría decirle que ejecute aptitude safe-upgrade y mantendría un registro de cada modificación realizada por la actualización.
Hay un proyecto llamado Nexenta que combina el núcleo de OpenSolaris con el espacio de usuario de Ubuntu. Proporciona una herramienta para integrar el ZFS de Solaris y el apt de Debian para proporcionar un botón de deshacer para las actualizaciones. Ver aquí: http://www.nexenta.org/os/TransactionalZFSUpgrades
En términos más generales, lo que necesita es un sistema de archivos de versiones. Btrfs para Linux está en desarrollo.
Usar Apt-Undo es una opción posible, pero solo puede funcionar si lo está utilizando para instalar y desinstalar paquetes. No ayudará si ya ha desinstalado el software de la manera normal.
http://www.ubuntugeek.com/apt-undo-a-simple-way-of-undoing-apt-actions.html http://lkubuntu.wordpress.com/2011/07/27/apt-undo-a -simple-way-of-undoing-apt-actions /
Lo he hecho con éxito algunas veces, pero no lo recomendaré. Esto es lo que hice (si no recuerdo mal):
1) Elimine cualquier software no oficial que no esté incluido en los repositorios predeterminados de ubuntu (puede que no sea necesario, pero lo sugiero ya que pueden interponerse en su camino).
2) Cambie su /etc/apt/sources.list (y sources.list.d / *) a la versión anterior (comente todos los repositorios no oficiales).
3) apt-get update / aptitude update
4) Utilizando aptitude, rebaje los paquetes centrales (como X11, bibliotecas, etc.). Comenzará a disparar muchos paquetes rotos ... por lo que deberá resolver cada caso (debe saber cómo hacerlo en aptitude). La forma de degradarlo es yendo al panel de descripción e instalando la versión (presionando +) en la parte inferior.
5) Repita # 4 hasta que todo el software pertenezca a su versión de destino (verifique la columna de versión en aptitude)
Estas son las razones por las que no recomiendo este método:
Recomiendo encarecidamente realizar una instalación limpia y mover su configuración poco a poco. También lleva tiempo, pero al final tienes una versión estable.
La razón por la que lo hice fue principalmente como experimentación y como resultado de la desesperación.
Si instaló su sistema operativo en un sistema de archivos ZFS (por ejemplo, ZFS en Linux ), puede configurarlo apt-get
para que se ejecute zfs snapshot
antes de que instale o actualice algo, lo que hará una copia de seguridad de su sistema de archivos instantáneamente. Puede funcionar con mecanismos de respaldo que no sean instantáneas de ZFS, pero dejaré esa prueba a otros.
Crea un archivo como
/etc/apt/apt.conf.d/71backup
con contenidos
// Tell `apt-get' to take a ZFS snapshot before installing or upgrading a
// set of packages:
DPkg::Pre-Install-Pkgs {"/sbin/zfs snapshot rpool/ROOT/debian@apt-get_$(date '+%Y-%m-%d-%H%M')";};
donde rpool/ROOT/debian
debe reemplazarse por el nombre del sistema de archivos ZFS en el que está montado su sistema operativo. Le dio ese nombre cuando instaló su sistema operativo por primera vez, y se puede encontrar bajo el atributo NAME
con el comando
# zfs list -t filesystem
NAME ...
...
rpool/ROOT/debian ...
...
Será mejor que tome una instantánea antes de seguir los consejos de configuración de alguna persona aleatoria de Internet:
# zfs snapshot rpool/ROOT/debian@$(date '+%Y-%m-%d-%H%M%S')_test
# zfs list -t snapshot | grep rpool
...
rpool/ROOT/debian@2018-08-01-230001_test
Ahí está. En caso de que error: fn_borked
ocurra pronto, puede devolver su sistema a su maravilloso estado actual con
# zfs rollback rpool/ROOT/debian@2018-08-01-230001_test
Ahora pruébalo instalando dos pequeños juegos que probablemente estén disponibles en tu repositorio:
# apt-get install tanglet sudoku
...
# zfs list -t snapshot | grep apt\-get
rpool/ROOT/debian@apt-get_2018-08-02-033614
Esa instantánea contiene su sistema de archivos como era antes de que se instalaran los dos juegos.
# exit
$ sudoku
Momentos divertidos para la abuela, pero odias el sudoku.
$ sudo -i
# zfs rollback rpool/ROOT/debian@apt-get_2018-08-02-033614
# exit
$ sudoku
-bash: /usr/games/sudoku: No such file or directory
$ tanglet
-bash: tanglet: command not found
Después de tomar varias instantáneas, puede retroceder a cualquiera anterior agregando la -r
bandera. En nuestro caso, por ejemplo, intente
# zfs -r rollback rpool/ROOT/debian@2018-08-01-230001_test
Sin embargo, tenga en cuenta que esto no solo devolverá su sistema de archivos al estado en que se encontraba cuando rpool/ROOT/debian@2018-08-01-230001_test
se tomó, sino que también eliminará irremediablemente todas las instantáneas posteriores. Si seguías esta publicación, la instantánea rpool/ROOT/debian@apt-get_2018-08-02-033614
ya no estaría.
Probé apt-get upgrade
en un Debian GNU / Linux con
# apt-get -t=oldstable install tanglet sudoku
...
# apt-get upgrade
...
# zfs list -t snapshot | grep apt\-get
Funciona. Se creó una instantánea para el install
comando, otra para el upgrade
comando.
Advertencia : probé esto por primera vez hoy y sé muy poco sobre el funcionamiento interno de apt. Si esto rompe algo para usted o conlleva riesgos que mi mente benevolente no ha considerado, por favor comente al respecto a continuación.