Recientemente el grupo de desarrollo de Debian ha decidido extender el soporte para Debian 6 hasta febrero de 2016, aunque será únicamente para actualizaciones de seguridad, y estará soportado por un grupo de voluntarios y empresas interesadas, no por el equipo de seguridad de Debian. Esta es la primera vez que Debian ofrece una versión LTS (long term support). Por lo tanto, al tratarse de una versión experimental soportada no-oficialmente por terceros, para no correr riesgos innecesarios se recomienda migrar a la versión estable actual: Debian 7.

Por ello en este artículo voy a explicar detalladamente cómo ejecutar una migración desde Debian 6 (codename "squeeze") a Debian 7 (codename "wheezy") sobre un servidor Web LAMP (Linux+Apache+MySQL+PHP) en producción, incluyendo los requisitos necesarios y una planificación estimada.



Requisitos

Existe una serie de requisitos previos antes de efectuar una migración de este tipo sobre un sistema en producción, los cuales se detallan a continuación.

Compatibilidad

Antes de pensar siquiera en la posibilidad de migrar, se deberá determinar si las versiones de software que incluye Debian 7 son compatibles con las aplicaciones y servicios instalados en el servidor, especialmente para el caso del software desarrollado a medida.

En el apartado 4.5.7. Special care for specific packages se detallan algunos paquetes que requieren intervención durante la migración, y en 4.8. Obsolete packages se listan los paquetes de Debian 6 que son obsoletos y han sido reemplazados en Debian 7 por versiones posteriores o paquetes alternativos. Notablemente hay nuevas versiones para mysql-5.1 (cuyo sucesor es mysql-5.5), postgresql-8.4 (cuyo sucesor es postgresql-9.1), python-2.5 (cuyo sucesor es python-2.7), portmap (cuyo sucesor es rpcbind), y sun-java6 (cuyo sucesor es openjdk-7), entre los más importantes.

Si existe alguna pieza de software a medida que no es compatible con las nuevas versiones, se deberá adaptar o reemplazar antes de continuar.

Backup

Es necesario guardar una copia de respaldo de toda la información importante. Realizar un backup de absolutamente todos los archivos de datos aplicaciones, bases de datos y configuración del servidor. Si es posible guardar una copia de seguridad de cada uno de los discos.

Procedimiento

El upgrade de versión en sistemas operativos Debian no es una tarea trivial y pueden surgir varios inconvenientes. Aunque afortunadamente, entre las release notes de Debian 7 se encuentra un extenso y detallado capítulo dedicado a la migración desde Debian 6. Esta documentación es un procedimiento base para una migración a Debian 7, y en la práctica el procedimiento variará de acuerdo a la selección de paquetes instalados en el servidor, el rol que cumple (Web, mail, DNS, host de máquinas virtuales, etc.), y los repositorios utilizados (ya que pueden haber conflictos con repositorios no oficiales).

En el momento de ejecutar la migración se deberá contar con espacio suficiente en disco en el servidor (para descargar e instalar todos los nuevos paquetes).

Si se trata de un servidor remoto, se deberá disponer de una conexión a Internet confiable y segura. Preferentemente se debe contar con el acceso a una consola remota del tipo iDRAC de DELL o iLO de HP. Estas consolas proveen el acceso directo al bus de sistema desde una interfaz de red (como si estuviésemos sentados físicamente en la consola del equipo). Esto es necesario para no dejar al sistema en un estado de actualización inconsistente en caso de producirse un fallo de red.

Si se trata de un servidor virtual, ejecutar el procedimiento desde la consola del sistema, accediendo directamente a través de las herramientas provistas por el hipervisor (depende de cada tecnología, por ejemplo en QEMU/KVM se utiliza el cliente "virt-manager").

Escenario de prueba

Crear un laboratorio (puede ser una máquina virtual) replicando exactamente la configuración actual del servidor (corriendo Debian 6), para luego ejecutar y verificar una migración a Debian 7.

Es posible obtener la selección de paquetes instalados ejecutando el siguiente comando en el servidor en producción:

# dpkg -l | grep ^ii | awk '{print $2}' | tr '\n' ' ' > sel.txt

Luego, para instalar la misma selección en el servidor de prueba en el laboratorio, ejecutar:

# cat sel.txt | xargs apt-get install

Siguiendo el procedimiento, migrar el servidor de prueba, detectar fallos, y documentar todo detalladamente.

La documentación generada en este paso será utilizada como base para la migración en producción.

Planificar la migración en producción

Si no surgen inconvenientes irreconciliables en el laboratorio, se deberá definir una fecha para la migración en el servidor en producción. El upgrade a Debian 7 implicará un corte en el servicio, por lo que se debe planificar con tiempo y avisar a todos los usuarios involucrados.

A partir de las pruebas en el laboratorio, tiempos de descarga, y una evaluación de riesgo, se deberá estimar un downtime del servicio durante la migración.

Backup

¿Olvidé mencionar que es necesario hacer una copia de seguridad de toda la información alojada en el servidor?

Migración

El proceso de migración está conformado por las siguientes tareas:

  1. Hacer un backup
  2. Hacer un backup
  3. Notificar a los usuarios de los diferentes sitios y aplicaciones hospedadas, mediante canales de comunicación oficiales, acerca del downtime del servicio.
  4. Hacer un backup
  5. Descargar un último backup de los datos modificados a último momento antes de la migración.
  6. Ejecutar la migración siguiendo la documentación creada previamente en el laboratorio.
  7. Verificar el correcto funcionamiento de todos los componentes y dar aviso a los usuarios acerca de la restauración de los servicios.

Notificar con la debida anticipación, a los usuarios de los servicios provistos por el servidor, acerca del corte del servicio (de acuerdo a los tiempos prudenciales calculados durante las pruebas de laboratorio). Es deseable coordinar con aquellos usuarios que cargan datos en los diferentes sistemas, para que no realicen modificaciones desde el momento de la generación del backup completo, hasta el momento posterior a la migración (para minimizar el tamaño del último backup antes de comenzar la migración). Para determinar el alcance y limitaciones será necesario reunirse con los referentes de cada sistema/servicio.

Antes de comenzar la migración se deberá descargar un último backup fresco de los datos que hayan sido modificados por usuarios externos (sobre los que no se puede ejercer control) o por el sistema.

Ejecutar la migración siguiendo la documentación generada en el laboratorio. Antes de comenzar, se deberá verificar el acceso a la consola de sistema del servidor (si se trata de un servidor remoto y se cuenta con acceso a la misma), y los números de contacto telefónico del soporte técnico e información del cliente, si se trata de un servidor en la nube (para el caso de que surja una emergencia o situación inesperada).

Al finalizar la migración se deberá verificar el correcto funcionamiento de todos los servicios y aplicaciones. Una vez que se compruebe que todo funciona correctamente, se deberá notificar a los usuarios sobre la restauración del servicio.

Migrando un servidor LAMP desde Debian 6

A modo de ejemplo voy a demostrar cómo migrar un servidor Web LAMP (Linux+Apache+MySQL+PHP) desde Debian 6 a Debian 7, siguiendo la documentación oficial.

NOTA: Este procedimiento está asociado a una instalación en particular y, tal como mencioné anteriormente, depende de la selección de paquetes instalada, el rol del servidor, y los repositorios utilizados. Para cada sistema en particular se debe seguir la documentación oficial de Debian 7 al respecto: Upgrades from Debian 6.0 (squeeze). Este sitio no se hace responsable por cualquier pérdida de datos provocada por el contenido de este artículo.

Manos a la obra

Luego de haber descargado el último backup, es recomendable detener todos los servicios que puedan interferir con la actualización. Se asume que los usuarios han sido debidamente notificados y el corte ha sido programado:

service apache2 stop
service mysql stop
service exim4 stop
service cron stop

Detener cualquier otro servicio correspondiente a aplicaciones desarrolladas a medida. Verificar qué puertos quedan escuchando peticiones ejecutando netstat -nl. Si es necesario, agregar reglas en el firewall para prevenir cualquier tráfico entrante hacia puertos asociados a aplicaciones o servicios, hasta finalizada la actualización.

Tal como se observa se trata de un servidor Debian versión 6.0.9:

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

Luego de comprobar la compatibilidad de la selección de paquetes actual, he determinado que el paquete php5-suhosin ha sido removido de Debian 7. Por lo tanto, para evitar inconvenientes (ya que no es utilizado y no es una pieza esencial) procedo a removerlo:

root@debian6:~# apt-get remove php5-suhosin
root@debian6:~# dpkg --purge php5-suhosin

Es necesario actualizar a la última versión disponible de Debian 6, antes de proceder con la migración a la versión 7:

root@debian6:~# apt-get update
root@debian6:~# apt-get upgrade
root@debian6:~# apt-get clean
root@debian6:~# apt-get autoremove

Verificar que no queden paquetes "on hold":

root@debian6:~# dpkg --get-selections | grep 'hold$'
root@debian6:~# 

Ahora el servidor está listo para proceder con la actualización a la versión 7. Para ello es necesario editar el archivo de configuración de repositorios del gestor de paquetes apt (/etc/apt/sources.list):

root@debian6:~# nano /etc/apt/sources.list

Reemplazar todas las apariciones de "squeeze" (codename de Debian 6) por "wheezy" (codename de Debian 7), debe quedar como se muestra a continuación:

También es posible realizar la misma tarea en una única línea de comando utilizando el editor sed:

root@debian6:~# sed -i 's/squeeze/wheezy/' /etc/apt/sources.list

Antes de comenzar la actualización de paquetes es deseable guardar en un archivo script el contenido de la sesión, para que nos quede un registro o log de la actualización. Grabar la sesión ejecutando:

root@debian6:~# script -t 2>~/upgrade-wheezy.time -a ~/upgrade-wheezy.script

NOTA: a partir de este momento estoy trabajando directamente desde la consola del sistema (física o virtual), o desde la interfaz iDRAC/ILO si se trata de un sistema remoto.

Inclusive es posible reproducir la sesión en vivo en otra terminal, tal como expliqué en el artículo Cómo clonar y reproducir una sesión bash, en caso de estar trabajando en equipo o remotamente.

NOTA: para ver luego la sesión grabada, respetando los tiempos, ejecutar: scriptreplay ~/upgrade-wheezy.time ~/upgrade-wheezy.script.

Una vez modificados los repositorios, comenzar con la actualización mínima de Debian:

root@debian6:~# apt-get update

root@debian6:~# apt-get upgrade

Esto tiene el efecto de actualizar sólo aquellos paquetes que puedan ser actualizados sin requerir la instalación o desinstalación de otros paquetes. Esto puede ser útil si el sistema está ajustado de espacio en disco y no hay lugar para hacer un upgrade full en un solo paso.

Dependiendo de la selección de paquetes instalada en el sistema, se deberá intervenir varias veces durante la configuración de ciertos paquetes. En el caso de este servidor LAMP fue necesario intervenir en la configuración de eglibc, sysstat, phpmyadmin y libc6.

Durante la configuración del paquete eglibc presionar la tecla 'Q' para cerrar el mensaje que indica los cambios significativos:

Durante la configuración del paquete sysstat será necesario borrar TODOS los archivos de log dentro del directorio /var/log/sysstat debido a un cambio en el formato de los archivos de log, por ello es importante haber hecho un backup previo a la migración:

Durante la configuración de phpmyadmin ofrece la opción de configurar la base de datos, omitir este paso ya que seguramente haya sido configurada previamente (al instalarlo por primera vez):

Durante la configuración de libc6 será necesario actualizar glibc y detener algunos servicios:

Fin de la actualización básica de paquetes:

Luego ejecutar la actualización principal:

root@debian6:~# apt-get dist-upgrade

Este comando ejecuta una actualización completa del sistema, instalando las versiones más recientes de todos los paquetes, y resolviendo todos los posibles cambios de dependencias entre paquetes en las diferentes versiones. Si es necesario instala nuevas dependencias (nuevas versiones de librerías o paquetes que han cambiado de nombre), y elimina paquetes obsoletos.

Una vez más, dependiendo de la selección de paquetes instalada en el sistema, puede que sea necesario intervenir varias veces durante la configuración de ciertos paquetes. En el caso de este servidor LAMP fue necesario intervenir en la configuración de mysql-5.5:

Para que no cambie la contraseña de superusuario (root) de MySQL, dejar el campo en blanco:

Fin de la actualización principal:

Al finalizar la actualización, reiniciar el sistema:

NOTA: en este punto es posible cruzar los dedos, tocar madera, hacer la señal de la cruz, tocarse el huevo izquierdo, o apelar a cualquier otro tipo de cábala o superstición que pueda hacer sentirnos más confiados y relajados.

root@debian6:~# reboot

Para comprobar que se ha actualizado correctamente, es posible ejecutar:

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

Para determinar la versión del kernel Linux:

root@debian6:~# uname -mrs
Linux 3.2.0-4-amd64 x86_64

Verificar que no se hayan producido errores revisando los archivos de log del sistema:

tail -f /var/log/messages
egrep -i --color 'err|warn|crit' /var/log/*

Luego es necesario verificar el correcto funcionamiento de todos los servicios y aplicaciones, uno por uno. Si todo funciona correctamente, ¡a festejar! que se han ganado unas buenas frescas.


Tal vez pueda interesarte


Compartí este artículo