En este artículo cuento mi experiencia migrando un "viejo" Debian 7 en producción a Devuan ASCII (basado en Debian 9) casi sin perder uptime.

La "víctima" de esta migración de dos versiones consecutivas (de 7 a 9) y cambio de distribución (Debian a Devuan) es un servidor Web en la nube (DigitalOcean) corriendo Debian Wheezy (Debian 7) con más de un año de uptime:

root@webserver:~# lsb_release -a
No LSB modules are available.
Distributor ID:	Debian
Description:	Debian GNU/Linux 7.11 (wheezy)
Release:	7.11
Codename:	wheezy
root@webserver:~# uptime
 12:33:40 up 462 days, 20:25,  1 user,  load average: 0.04, 0.03, 0.05

Antes de comenzar cabe aclarar que es posible migrar de versión y distribución en caliente dado que el proveedor utiliza QEMU (full virtualizatipon) como tecnología de virtualización. En los casos en los que se utilizan tecnologías de paravirtualización (se comparte el kernel con el host) como por ejemplo OpenVZ, o contenedores, generalmente no es posible hacerlo. Esta es una de las ventajas de optar por un proveedor de VPS que utilice virtualización completa (QEMU/KVM).

Teniendo en cuenta estas consideraciones, pongamos manos a la obra.

Paso -1: backup, backup, backup

Más allá de que se asume que se hacen copias de seguridad periódicamente, es necesario hacer un backup completo del servidor y descargar una copia local para recuperar rápidamente en caso de una catástrofe.

Paso 0: abrir la consola de la máquina virtual

Puede ocurrir que durante la actualización o luego de un reinicio se pierda conexión temporal o permanentemente con la máquina virtual (por ejemplo se puede desconfigurar o bajar la interfaz de red temporalmente). Por esta razón es necesario mantener abierta la consola de la máquina virtual y evitar correr la actualización desde una sesión SSH.

Paso 1: migrar a Debian Jessie

Habiendo creado una copia de seguridad fresca y tomado todos los recaudos necesarios (más allá de notificar a usuarios y clientes del servidor y escogido una fecha y hora convenientes), el primer paso consiste en migrar a Debian Jessie (8).

Deshabilitar todo repositorio configurado dentro del directorio /etc/apt/sources.list.d/, por ejemplo los backports:

root@webserver:~# cd /etc/apt/sources.list.d/
root@webserver:/etc/apt/sources.list.d# rm wheezy-backports.list 

Luego, editar el archivo sources.list:

root@webserver:/etc/apt/sources.list.d# cd ..
root@webserver:/etc/apt# nano sources.list

Dada la siguiente configuración actual:

deb http://mirrors.digitalocean.com/debian wheezy main
deb http://security.debian.org/ wheezy/updates main

Simplemente cambiar "wheezy" por "jessie":

deb http://mirrors.digitalocean.com/debian jessie main
deb http://security.debian.org/ jessie/updates main

Notar que se apunta a un mirror del proveedor de servicios en la nube. Esto es recomendable dado que la velocidad de descarga es notablemente superior (se trata de un mirror en la misma red local y de acceso rápido).

Actualizar por partes para minimizar conflictos de dependencias: primero "upgrade" y luego "dist-upgrade".

# apt-get update && apt-get upgrade && apt-get dist-upgrade

Resolver todos los conflictos con archivos de configuración. Lo recomendable es mantener todos los archivos de configuración actuales, y luego solucionar todas las posibles incompatibilidades que puedan surgir con servicios que no inicien.

Al finalizar la actualización y resolución de conflictos de archivos de configuración, cruzar los dedos y reiniciar el sistema:

# reboot

Luego de unos segundos, hemos pasado a Debian Jessie:

root@webserver:~# lsb_release -a
No LSB modules are available.
Distributor ID:	Debian
Description:	Debian GNU/Linux 8.11 (jessie)
Release:	8.11
Codename:	jessie

Continuar removiendo los paquetes obsoletos:

# apt-get autoremove

Paso 2: eliminar systemd

Al haber migrado a Debian Jessie en lugar de Devuan Jessie, el sistema ahora corre systemd. Eliminarlo simplemente instalando SystemV init:

# apt-get install sysvinit-core sysvinit-utils
# reboot

Este paso requiere otro reinicio. Cabe destacar que en el proveedor mencionado, un reinicio toma menos de 30 segundos. Con lo cual la pérdida de uptime es despreciable.

Paso 3: migrar a Devuan ASCII

Ahora se procede con la migración más gruesa: pasar a Devuan ASCII. Editar nuevamente el archivo sources.list:

root@webserver:~# nano /etc/apt/sources.list
deb http://mirrors.digitalocean.com/debian jessie main
deb http://security.debian.org/ jessie/updates main

Comentar o borrar el contenido actual y agregar las siguientes líneas:

#deb http://mirrors.digitalocean.com/debian jessie main
#deb http://security.debian.org/ jessie/updates main

deb http://auto.mirror.devuan.org/merged/ ascii main contrib non-free
deb http://auto.mirror.devuan.org/merged/ ascii-security main contrib non-free
deb http://auto.mirror.devuan.org/merged/ ascii-updates main contrib non-free

En este caso estamos apuntando directamente a los mirrors de Devuan, ya que el proveedor hasta el momento no cuenta con uno propio.

Verificar que el directorio sources.list.d/ se encuentre vacío:

root@webserver:~# ll /etc/apt/sources.list.d/
total 8
drwxr-xr-x 2 root root 4096 Jun  7 12:39 .
drwxr-xr-x 6 root root 4096 Jun  7 13:01 ..

Instalar las claves de los repositorios de Devuan:

root@webserver:~# apt-get install devuan-keyring

Nuevamente actualizar en dos pasos:

# apt-get update && apt-get upgrade && apt-get dist-upgrade

Reiniciar por última vez para levantar el nuevo kernel:

# reboot

Al iniciar nuevamente, tenemos listo y funcionando nuestro flamante Devuan ASCII:

root@webserver:~# lsb_release -a 2>/dev/null
Distributor ID:	Devuan
Description:	Devuan GNU/Linux 2.0 (ascii)
Release:	2.0
Codename:	ascii
root@webserver:~# uname -a
Linux webserver.com 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1+deb7u1 x86_64 GNU/Linux

Para concluir, ejecutar una limpieza final de paquetes:

# apt-get autoremove
# apt-get autoclean

A por más años de uptime.


Tal vez pueda interesarte


Compartí este artículo