¿Cómo puedo deshacer o revertir un comando "apt-get upgrade" en Ubuntu?


26

¿Hay alguna manera en Ubuntu de deshacer o deshacer la última actualización después de hacer una apt-get upgradesi no le gustan los resultados?


No sin mucho trabajo, eso no valdría la pena. ¿Puedes guardar tu / casa y empezar de nuevo? ¿Qué no te gustó?
user10547

Todavía no lo he hecho, pero este es un servidor de producción y necesito asegurarme de que no haya incompatibilidades con nuestra configuración personalizada de PHP / MySQL / Apache2, y volver rápidamente si lo hay. Me gustaría actualizar porque creo que solucionará otro problema que tengo.
jjclarkson

A menos que haya realizado dist-upgrade, no veo qué resultados no le gusten, ya que esas son las actualizaciones de seguridad más probables .
LiraNuna

Si tiene una instalación personalizada, es su responsabilidad guardar los parches y aplicarlos a la versión actual.
LiraNuna

2
Si se trata de un servidor, un servidor dev tratar antes de actualizar la producción
SolArc

Respuestas:



5

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.


1
Espero que todos aquí conozcan los conceptos básicos sobre cómo buscar la última actualización ofensiva:
Manav Brar

2
¿De qué se trataba esa edición? ¿Tienes alguna otra pregunta? ¿Quieres que juguemos un juego de adivinanzas?
slhck

5

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.


3

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.


2

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, /etcy /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.


Podría (y probablemente lo haré) hacer una copia de seguridad completa, pero quería una opción de software que me permitiera deshacer la actualización en un plazo más rápido. Restaurar desde la copia de seguridad de metal desnudo podría llevar varias horas.
jjclarkson

1
Puede asegurarse de tener copias de todos los paquetes que está a punto de actualizar en sus versiones anteriores (probablemente todavía estén almacenados en su caché apto en algún lugar /var) y cualquier archivo de configuración relevante almacenado. Luego, puede intentar forzar una reversión diciéndole explícitamente dpkgque 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.
David Spillett

Una copia de seguridad realizada con rsync (marca de tiempo habilitada) puede restaurarse con bastante rapidez, en comparación con una copia de seguridad realizada con tar.
joeytwiddle

2

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.


1

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.


1

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.



0

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:

  • Lleva mucho tiempo (es un proceso doloroso)
  • Es posible que algunas aplicaciones no funcionen correctamente (ya que aún pueden tener la configuración más reciente). En ese caso, deberá "purgar" y volver a instalar.
  • Hay actualizaciones relacionadas con el sistema que no funcionarán después de la degradación
  • Es muy riesgoso ya que puede terminar con un sistema inutilizable

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.


0

DPkg :: Pre-Install-Pkgs y ZFS en instantáneas de Linux

Si instaló su sistema operativo en un sistema de archivos ZFS (por ejemplo, ZFS en Linux ), puede configurarlo apt-getpara que se ejecute zfs snapshotantes 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.

La secuencia de comandos

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/debiandebe 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 NAMEcon el comando

# zfs list -t filesystem
NAME ...
...
rpool/ROOT/debian ...
...

¿Pero funciona?

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_borkedocurra 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 -rbandera. 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_testse 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-033614ya no estaría.

Probé apt-get upgradeen 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 installcomando, otra para el upgradecomando.

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.