¿Existe una herramienta o incluso una distribución completa que admita la reversión de paquetes modificados después de una actualización?
Como ejemplo: actualicé los paquetes A, B y C. Después de trabajar con esos paquetes durante varios días, me encuentro con un error en B que rompe el trato.
Si bien enviaría un informe de error, también necesitaría degradar B a la versión anterior para poder terminar lo que estaba a punto de hacer. Mientras tanto, A depende de B, por lo que también debería ser degradado, pero C es independiente de ambos, por lo que podría permanecer en su versión actual.
¿Existe alguna herramienta o distribución que lo respalde?
Sé que la mayoría de las distribuciones tienen una forma de degradar un paquete, pero eso suele ser un poco incompleto o incluso imposible porque el paquete anterior se eliminó de los repositorios y en algunos casos (por ejemplo, después de actualizar el servidor X y Mesa) se pone realmente ... . sucio.
fuente
Respuestas:
NixOS admite retrocesos de actualización, aunque, según tengo entendido, no llega tan lejos como quisiera: si actualiza A, B y C en una operación, puede revertir toda esa operación, pero no solo A y B. (Debería poder retroceder A, B y C, y luego actualizar C ...) Sin embargo, eso tiene sentido desde una perspectiva transaccional.
Debian (en combinación con el archivo de instantáneas si ya no tiene los paquetes antiguos) le permitirá degradar B, y las herramientas como
apt
oaptitude
en muchos casos descubrirán que A también debe degradarse (una vez que los haya convencido de que usted no quiero simplemente actualizar B). Pero como dices, eso tiende a ser un poco desordenado, y las degradaciones de paquetes no son compatibles con Debian de todos modos (lo que significa que la mayoría de las veces funcionan, pero si se rompen no es un error).fuente
nix-env
, sino que especificas cosasconfiguration.nix
y luego las ejecutasnixos-rebuild switch
. Esto tiene el beneficio de que toda la configuración de su sistema está en un solo lugar, y es fácil hacer una copia de seguridad de la configuración de todo su sistema (solo haga una copia de seguridad delconfiguration.nix
archivo).En cualquier
yum
distribución basada (por ejemplo, Red Hat EL , CentOS , etc.), puede:examinar el historial de cambios al sistema usando
sudo yum history list
verifique los detalles, utilizando
sudo yum history info 10
sudo yum history rollback 9
Advertencia
Hay algunas advertencias obvias:
En mi ejemplo, eso
<
en la fila con ID4
(en la última columna), significa que no puedo retroceder más allá de ese punto.fuente
--enablerepo
indicador para habilitar un repositorio antiguo que de otro modo estaría en desuso para la degradación.yum
simplemente se encarga de mantener la lista de paquetes y versiones instaladas y busca dependencias al reinstalar versiones antiguas. Obviamente puedes hacerlo a mano .En OpenSUSE puede usar fácilmente Snapper con el sistema de archivos Btrfs .
Si utiliza la configuración estándar del sistema de archivos durante la instalación, está habilitada de forma predeterminada .
Una vez que Snapper está habilitado, está completamente integrado con
yast2
yzypper
. Creará una instantánea del sistema de archivos cada vez que instale o actualice algo (o cree un usuario, etc.).Para revertir el sistema a una condición anterior, solo tiene que ejecutar
yast2 snapper
.fuente
/var
por lo que debe revertirse junto con ellos,/
incluso si es un fs o subvolumen separado. Es mucho mejor probar a fondo una actualización antes de aplicarla a los servidores de producción que confiar en características como la reversión de la actualización del sistema operativo (que es trivialmente fácil de hacer a medias pero es un problema extremadamente difícil de resolver correctamente )./home
esté en un sistema de archivos independiente que no sea de instantáneas .AIX es muy bueno para deshacer las actualizaciones. Bueno, estamos en el sitio Unix / Linux y nunca has especificado que quieres Linux :)
Cada actualización de AIX guarda todos los archivos modificados en un subdirectorio separado dentro del sistema de archivos / var. La actualización puede revertirse con un simple comando nativo, y la reversión no necesita que la red esté activa, no necesita ningún medio / paquete, no reinstala nada y no depende de ninguna Tecnología de instantánea: el efecto es simplemente que los archivos vuelven a aparecer como estaban antes de la actualización.
Como beneficio adicional, hay un comando nativo trivial
mksysb
para crear una copia de seguridad del sistema independiente de arranque. El archivo que se puede iniciar simplemente en un sistema completamente disfuncional que no se inicia debido a algún mal funcionamiento / corrupción.Y todo es tecnología probada con décadas de historia :)
fuente
En Fedora (y estoy seguro de otras distribuciones también) puede solicitar volver a una versión anterior:
le ofrece la penúltima versión de los paquetes, y puede solicitar una específica al:
Esto solo funciona si los paquetes aún están disponibles en los repositorios. La funcionalidad no es desconocida, de ninguna manera. Tiene sus inconvenientes, si parte de la actualización fue cambiar las configuraciones, la reversión no será necesariamente a la versión anterior exacta.
fuente
This only works if the package(s) are still available in the repositories.
Sí, ese es exactamente el problema. Estoy un poco sorprendido de que no parece haber una solución "más amplia" para esto, especialmente con la cantidad de distribuciones de lanzamiento continuo. A partir de ahora parece que NixOS es mi mejor opción, o necesitaría algún tipo de herramienta de imágenes del sistema que funcione solo en diferencias y pueda restaurar el sistema a un punto específico en el tiempo durante las últimas 20 (?) Actualizaciones.Arch Linux también admite la degradación de paquetes y el kernel. También puede instalar las herramientas
downgrader
ydowngrade
para automatizar el proceso. La solución btrfs también funciona, la he usado para hacer una reversión manual antes.Cómo deshago mi sistema:
Una ventaja de btrfs es que puede usar subvolúmenes y "particiones" dinámicas. Por ejemplo, tengo un subvolumen para / (llamado @), / tmp (@tmp) y / home (@home). Entonces es fácil hacer una copia de seguridad y hacer retroceder cualquiera de estos. Tengo / tmp en un subvolumen separado porque hacer una copia de seguridad con el resto del sistema parece inútil, ya que se borra en casi cada reinicio.
fuente
Utilizo Arch Linux y almacena todos los paquetes descargados para
/var/cache/pacman/pkg/
que pueda degradar cualquier paquete en cualquier momento (si no puede iniciar, use un usb en vivo). De Arch Wiki :Para evitar que el paquete se actualice, incluya el nombre del paquete en
/etc/pacman.conf
, como:Para ahorrar espacio, puede borrar la carpeta de caché con:
Lo cual eliminará todos los paquetes más antiguos y conservará el más nuevo, o lo usará
-Scc
para eliminar todos.fuente