¿Hay alguna forma, antes de comenzar una aptitude upgrade
o apt-get upgrade
, de configurar algo para que pueda "fácilmente" revertir su sistema al estado "apto" que tenía antes de la actualización real, si algo sale mal?
Es decir, por ejemplo, reinstale la versión anterior de los paquetes que se actualizaron durante el proceso.
(EDITAR) Algunas sugerencias : Sé que, etckeeper
por ejemplo, usa algún enlace apt
para que se le notifique cada vez que apt
instala o desinstala un paquete. Supongo que podría haber algún tipo de script que podría guardar la lista de paquetes recién instalados y su número de versión anterior para poder reinstalarlos desde el apt
caché ( /var/cache/apt/archives
). También existe el checkinstall
que puede realizar un seguimiento de las modificaciones de archivos ...
¿Algún detalle sobre cómo lograr eso correctamente?
Respuestas:
Ahora tenía que encontrar una respuesta a esto, porque el último
apt-get upgrade
en un servidor Debian hacía imposible arrancar el kernel más reciente más allá de un busybox, al no poder montar la partición raíz zfs. Al menos un kernel anterior aún podía arrancar, pero era incompatible con otro software. De ahí la necesidad de una reversión.La respuesta corta: puede usar el siguiente comando:
si hace lo que desea, elimínelo
-s
y ejecútelo nuevamente. Estos son los pasos que tomé para que esto funcione correctamente:Me recorté temporalmente
/var/log/dpkg.log
para dejar solo la actualización de hoyHe instalado el pequeño script
apt-history
de aquí en~/.bashrc
y corrióEsto proporciona una lista bien formateada de paquetes versionados a los que retroceder introduciéndolos
apt-get install
. Recorte esta lista según sea necesario en un editor de texto y luego ejecútelo (-s
primero para ejecutar en seco):Apt advertirá sobre las rebajas que se esperan. Para evitar que la próxima actualización sobrescriba esta reversión, los paquetes deberán anclarse hasta que se resuelva el problema original. Por ejemplo con:
apt-mark hold zfsutils libzfs2 ...
fuente
apt-history rollback
comando se puede reemplazar con algo comoawk '$3 ~ /upgrade/ {print $4"="$5}' dpkg.log
.awk '$1 == "2018-09-07" && $3 == "upgrade" {print $4"="$5}' /var/log/dpkg.log
E: Version '5.24.1-3+deb9u3' for 'libperl5.24' was not found
. Estoy usando Debian Stretch para Raspian.Los archivos de registro
/var/log/apt/history.log
y/var/log/apt/term.log
son las cosas más cercanas disponibles para su descripción:history.log
da una lista resumida de cada acción que seapt
realiza en el siguiente formato:En particular, proporciona una lista de los paquetes recién instalados o de los paquetes eliminados. Además,
term.log
muestra lo que realmente apareció en el terminal durante la acción, por lo que mostraría las versiones antiguas y nuevas de los paquetes. Una muestra aleatoria de mihistory.log
:apt
No se recomienda intentar retroceder automáticamente, pero si usa los registros, entonces debería ser posible hacerlo manualmente a menos que la acción fallida haya roto algo que interfiera conapt
las acciones, por ejemplo, una base de datos dpkg inconsistente. En ese caso, deberá solucionar el problema antes de continuar.fuente
No, apt no lo hace tan fácil.
La mejor opción es algún tipo de instantánea. Instantáneas del sistema de archivos a través de lvm / zfs / btrfs o instantáneas de instancia si está utilizando una máquina virtual de algún tipo.
La única otra opción es hacer un inventario de los paquetes instalados (dpkg -l) antes y después. Si desea "retroceder", debe instalar explícitamente la versión anterior.
fuente
apt install openssl=1.0.2g-1ubuntu4.12
resultadosE: Version '1.0.2g-1ubuntu4.12' for 'openssl' was not found
. Acabo de actualizar1.0.2g-1ubuntu4.13
y me pregunto si eso está causando algunos problemas CORS / CSP ahora