¿Hay una distribución que admita la reversión de paquetes actualizados?

23

¿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.

Steffen Winkler
fuente
3
Una cosa a tener en cuenta: si el cambio de versión del paquete fue menor, se pueden aplicar las siguientes respuestas; Sin embargo, tenga en cuenta que los cambios de paquete más grandes pueden actualizar los datos en el disco que luego no funcionarán correctamente en la versión anterior. Por ejemplo, la actualización principal de mysql-server (o joomla) agregará y modificará campos y actualizará tablas SQL, la actualización inn2 podría cambiar el tipo de base de datos, o alguna actualización del kernel de distribución podría actualizar el sistema de archivos ext3 a ext4, o alguna actualización del paquete convertirá archivos de configuración, etc. La única protección contra esos cambios "no reversibles" son las instantáneas LVM / btrfs / etc. (o la copia de seguridad / restauración mucho más lenta).
Matija Nalis
@MatijaNalis +1 por mencionar eso!
Steffen Winkler

Respuestas:

21

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 apto aptitudeen 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).

Stephen Kitt
fuente
1
eso se ve interesante! La comunidad se ve activa y saludable. Definitivamente intentaré esto, ¡gracias! Si para el viernes por la noche no hay una respuesta mejor / diferente, marcaré su respuesta.
Steffen Winkler
Los retrocesos en NixOS son impresionantes, pero el poder real proviene del enfoque declarativo: la descripción de los paquetes (y del sistema) se puede tomar de un repositorio git, por lo que puede administrar su sistema de la misma manera que administraría un proyecto de software, incluidas las sucursales y fusiones, etc. (y debido a las actualizaciones atómicas y la pureza nunca rompes cosas)
Daniel Jour
El administrador de paquetes de Nix también se puede ejecutar en otras distribuciones de Linux, junto con su administrador de paquetes 'nativo'. También se ejecuta en OSX, y he visto afirmaciones de que podría funcionar en Windows. También puede decirle a Nix que use versiones 'nativas' de algunos paquetes, en lugar de instalar sus propios duplicados, aunque pierde algunas de sus garantías de esa manera (por ejemplo, puede que no note que ha cambiado alguna dependencia).
Warbo
solo para su información, logré instalar NixOS en mi computadora portátil (la imagen de KDE4 me dio un Kernel Panic, pero la imagen pequeña (~ 390 MB) arrancó bien. Para alguien que solo instaló distribuciones basadas en Debian esto fue bastante interesante / divertido. Sin embargo , Todavía no entiendo ciertas cosas sobre el administrador de paquetes, especialmente cuando se trata de entornos de escritorio. Instalé gdm / gnome-shell pero no funcionaría. Luego habilité gnome3 / gdm en el archivo configuration.nix y en la reconstrucción , ambos paquetes y sus dependencias se descargaron nuevamente. Funcionó después de un reinicio pero no entiendo por qué.
Steffen Winkler
@SteffenWinkler Cuando usas NixOS, normalmente no instalas cosas nix-env, sino que especificas cosas configuration.nixy luego las ejecutas nixos-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 del configuration.nixarchivo).
Pauan
15

En cualquier yumdistribución basada (por ejemplo, Red Hat EL , CentOS , etc.), puede:

  1. examinar el historial de cambios al sistema usando sudo yum history list

    Loaded plugins: fastestmirror
    ID     | Login user               | Date and time    | Action(s)      | Altered
    ------------------------------------------------------------------------------
        10 | Administrator <admin>    | 2016-03-08 09:08 | Install        |   11   
         9 | Administrator <admin>    | 2016-03-03 16:48 | Install        |    1   
         8 | Administrator <admin>    | 2016-03-03 16:09 | Install        |    5   
         7 | Administrator <admin>    | 2016-02-26 18:13 | Install        |    1   
         6 | Administrator <admin>    | 2016-02-26 15:12 | Install        |   27   
         5 | Administrator <admin>    | 2016-02-26 15:07 | Install        |    1   
         4 | Administrator <admin>    | 2016-02-26 15:05 | Install        |    3  <
         3 | Administrator <admin>    | 2016-02-26 15:03 | Install        |    1 > 
         2 | Administrator <admin>    | 2016-02-26 15:01 | I, U           |   49   
         1 | System <unset>           | 2016-02-26 14:38 | Install        |  296   
    history list
    
  2. verifique los detalles, utilizando sudo yum history info 10

  3. retroceder a un punto anterior en el historial, utilizando sudo yum history rollback 9

Advertencia

Hay algunas advertencias obvias:

  1. Si el paquete anterior ya no está disponible, estás tostado (para citar @vonbrand),
  2. Si instala algo fuera de yum, podría romper el historial.

En mi ejemplo, eso <en la fila con ID 4(en la última columna), significa que no puedo retroceder más allá de ese punto.

sudo yum history rollback 2
Loaded plugins: fastestmirror
Transaction history is incomplete, before 4.
 You can use 'history rollback force', to try anyway.
Error: Failed history rollback, incomplete
andcoz
fuente
3
característica interesante! Pero debido al 'brindis' no se ajusta a mi factura.
Steffen Winkler
AFAIK esto solo es posible en RHEL / CentOS 6 o superior. Si todavía usa RHEL / CentOS 5, es SOL.
Comodín
Y, por cierto, en un entorno corporativo con repositorios administrados, este enfoque es bastante viable ya que siempre tiene los paquetes antiguos, incluso si necesita usar un --enablerepoindicador para habilitar un repositorio antiguo que de otro modo estaría en desuso para la degradación.
Comodín
¿Cuál es el beneficio de retroceder en lugar de instalar nuevamente la versión anterior?
Bratchley
@Bratchley automatizació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 .
andcoz
7

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 yast2y zypper. 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.

ingrese la descripción de la imagen aquí

andcoz
fuente
herramienta interesante de hecho. Aunque soy bastante aficionado a ext4. Investigará esto! ¿Estoy en lo cierto al suponer que Snapper no está "vinculado" a OpenSUSE sino a btrfs?
Steffen Winkler
Snapper es desarrollado por SUSE. Es una colección de herramientas que automatizan la creación de las instantáneas de Brtfs en "eventos". Supongo que puede usarlo en otras distribuciones, pero no estoy seguro. En cualquier caso, puede crear instantáneas Brtfs manualmente en cualquier distribución.
andcoz
3
Solo tenga en cuenta que si su volumen contiene algún dato, no solo binarios y secuencias de comandos, al deshacer una instantánea, también se revertirán sus propios datos. Esta opción suena arriesgada, más adecuada para aquellos que realmente conocen el diseño de su sistema de archivos. Para mí, las instantáneas siempre han sido para copias de seguridad consistentes, replicación y situaciones de recuperación total.
jimp
1
Tenga en cuenta también que muchos paquetes tienen archivos y / o directorios, /varpor 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 ).
cas
1
@Jimp Un buen consejo. En cualquier caso, OpenSuSE no habilita el complemento a menos que /homeesté en un sistema de archivos independiente que no sea de instantáneas .
andcoz
6

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 mksysbpara 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 :)

kubanczyk
fuente
¿A menudo tiene problemas con los programas restaurados de esa manera estando en un estado inconsistente y retrocediendo (es decir, una base de datos cuyo motor de almacenamiento ha cambiado o un servicio que cambió a un nuevo formato de archivo de configuración), o hay buenas maneras de trabajar? ¿ese?
Josh Rumbut
1
Este es el modelo que utilicé cuando construí un sistema de administración de paquetes rudimentario para el software que tradicionalmente se había distribuido en tarballs comprimidos / comprimidos. Cada vez que instalaba actualizaciones, primero creaba un "paquete de reversión" de todo lo que debía modificarse. Este paquete de reversión podría usarse para revertir, siempre que no se hayan aplicado otros paquetes de actualización en el ínterin. A menudo me he preguntado si los administradores de paquetes adecuados podrían hacer esto, pero dadas las limitaciones de retroceder solo en orden inverso ... tal vez deberíamos usar git en su lugar.
Monty Harder
maldición. Debería haber especificado que me refería a distribuciones GNU / Linux. Pero curiosamente, AIX parece ser capaz de ejecutar 'programas' de GNU / Linux hoy en día, supongo que echaré un vistazo más de cerca.
Steffen Winkler
5

En Fedora (y estoy seguro de otras distribuciones también) puede solicitar volver a una versión anterior:

dnf downgrade <packages>

le ofrece la penúltima versión de los paquetes, y puede solicitar una específica al:

dnf downgrade <package>.<version>

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.

vonbrand
fuente
También puedes usar dnf history undo #thing para deshacer
Más claro
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.
Steffen Winkler
@SteffenWinkler, si el paquete anterior ya no está disponible, estás tostado Obviamente. A menos que tenga algún tipo de respaldo local.
vonbrand
2
@MTilsted, porque ya es demasiado viejo? Los repositorios no contienen todas las versiones desde el principio de los tiempos.
vonbrand
1
En dnf.conf (igual que yum.conf) tiene paquetes keepcache = true Old disponibles, ya que el caché de londres no se borra manualmente. Pero fue a la caché del paquete "hinchado".
mmv-ru
2

Arch Linux también admite la degradación de paquetes y el kernel. También puede instalar las herramientas downgradery downgradepara 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:

sudo -i
mount /dev/sda3 /mnt/hd #mount the top btrfs subvolume
ls #find the version you want
mv @ @-old #move the '/' subvolume (I named mine '@')
btrfs sub snap @-<date> @ #replace @ with the backup from <date>
sync
reboot #the changes will take effect once the system restarts

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.

Caleb Reister
fuente
Seguí un enlace en la wiki y llegué aquí . ¡Eso se ve muy bien y al revisar el repositorio, hay archivos que se remontan a 2013! ¿Por qué usar la forma btrfs cuando existe? ¿Por los archivos que se 'actualizan'? ¿O hay alguna otra razón?
Steffen Winkler
Ahora cambié permanentemente a Arch Linux después de hacer una breve visita a NixOS. (Arch Linux) no es tan inestable como siempre pensé que sería y tiene una comunidad saludable.
Steffen Winkler, el
@SteffenWinkler Eso es correcto. Además, las opciones de degradación de Arch no son compatibles "oficialmente" y la degradación probablemente ignorará las dependencias (lo que puede ser bastante complicado si algo sale mal).
Caleb Reister el
2

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 :

pacman -U <file_name_of_the_package>

Para evitar que el paquete se actualice, incluya el nombre del paquete en /etc/pacman.conf, como:

IgnorePkg=linux

Para ahorrar espacio, puede borrar la carpeta de caché con:

pacman -Sc

Lo cual eliminará todos los paquetes más antiguos y conservará el más nuevo, o lo usará -Sccpara eliminar todos.

Alko
fuente
Tenga en cuenta que esto (ignorar los paquetes) equivale a una actualización parcial, que no es compatible ...
jasonwryan
Seguí un enlace en la wiki y llegué aquí . ¡Eso se ve muy bien y al revisar el repositorio, hay archivos que se remontan a 2013! ¿Por qué usar la forma btrfs cuando existe? ¿Por los archivos que se 'actualizan'? ¿O hay alguna otra razón?
Steffen Winkler