viernes, 20 de marzo de 2015

Error Courier IMAP y Outlook Express en Windows XP: actualizando courier-imap usando repositorios oneiric y wheezy "fijados" (pinned)

Aunque parezca mentira no sólo me quejo en este apartado de que aún haya clientes que sigan usando Windows XP (que de por sí es una irresponsabilidad). El problema en sí es que el sistema operativo del servidor también es anticuado.

Aunque estoy en proceso de migrar a Debian 7 (y en la mayoría de los casos a una configuración basada en ISPConfig) todos los viejos ubuntu server que tenía instalados (hace un par de años migré una ubuntu 10.04, el año pasado un par de ubuntus 12.04, etc), aún tengo un servidor que se resiste debido a que una de las páginas principales del cliente no funciona en versiones actuales de PHP, por lo que pasar de PHP 5.3 a 5.4 supone perder la funcionalidad del negocio y se considera una catástrofe.

Dejando a parte que actualizar dicha aplicación no sería demasiado costoso, tuve que actualizar el hardware y aproveché para hacerlo sobre una instalación limpia (y obsoleta, sin soporte ni actualizaciones de seguridad) de Ubuntu 11.10 Server (oneiric).

Hecha la locura (una espina que tengo clavada y que me costará tiempo quitarla) fui a migrar el servidor de correo y todo iba de maravilla hasta que uno de los clientes empezó a llamar alertado porque su cliente Outlook Express de Windows XP le decía que no podía descargar nuevos mensajes.

Hasta donde me alcanzaba la memoria recordé que ese fue un problema que ya pasamos y que tras buscar mucho por Internet solucioné instando una versión ligeramente superior de courier-imap. Se trataba de un bug conocido que habían arreglado en una versión posterior, por lo que de una instalación originalmente con estos paquetes:

ii  courier-base             0.66.1-1ubuntu3                 Courier mail server - base system
ii  courier-imap             4.9.1-1ubuntu3                  Courier mail server - IMAP server
ii  courier-imap-ssl         4.9.1-1ubuntu3                  Courier mail server - IMAP over SSL
ii  courier-ssl              0.66.1-1ubuntu3                 Courier mail server - SSL/TLS Support

Terminé dejando esto instalado en el servidor, sin recordar de dónde saqué los paquetes.

ii  courier-base             0.66.3-2                        Courier mail server - base system
ii  courier-imap             4.9.3-2                         Courier mail server - IMAP server
ii  courier-imap-ssl         4.9.3-2                         Courier mail server - IMAP over SSL
ii  courier-ssl              0.66.3-2                        Courier mail server - SSL/TLS Support

Mucho me temo, basándome en que ya no aparecen las palabras "ubuntu" en los paquetes, que generé los paquetes actualizados desde el código fuente y sólo instalé los paquetes DEB necesarios en el servidor. El problema es que de ello hace ya tanto tiempo que ya no dispongo de esos paquetes, ¡ni quiero tenerlos!, prefiero que se actualicen junto con el "sistema operativo" durante un apt-get update, aunque obviamente no voy a tener demasiadas actualizaciones.

¿Cómo hice la actualización en el nuevo servidor?: usar repositorios de oneiric y wheezy (debian 7) de manera simultánea.

Como he dicho, quería evitar usar paquetes generados desde las fuentes para evitar "tragarme" un agujero de seguridad que hubiera sido subsanado por una actualización. Con esta solución al menos el servidor de imap estará actualizado y al día.

¿Cómo se hace esta proeza? Fácil si seguimos las instrucciones que aparecen en la propia página de ubuntu: Pinning Howto

Para empezar definimos la distribución objetivo por defecto ("oneiric") en un archivo llamado, por ejemplo, /etc/apt/apt.conf.d/00default:

APT::Default-Release "oneiric";

Posteriormente configuramos el repositorio de Debian Wheezy (obtenido a través de este generador, cambiando "stable" por "wheezy" para evitar sorpresas en un futuro cercano) en /etc/apt/sources.list.d/wheezy.list:

deb http://ftp.es.debian.org/debian wheezy main

Creamos el archivo /etc/apt/preferences.d/wheezy.pref con el siguiente contenido:

Package: courier-imap courier-imap-ssl courier-base courier-ssl
Pin: release n=wheezy
Pin-Priority: 1000

Package: *
Pin: release n=wheezy
Pin-Priority: -1

Y posteriormente creamos el archivo /etc/apt/preferences.d/oneiric.pref con el siguiente contenido:

Package: *
Pin: release n=oneiric
Pin-Priority: 990

Hay que notar que en otros "howtos" de debian y apt-preferences fija las prioridades mediante la "suite" ("archive") a=stable, mientras que en la guía de ubuntu y mi solución usamos "codename" n=wheezy para ser homogéneos.

Bien, ¿qué son esas prioridades?

  • 1000: Toma preferencia sobre cualquier otra versión disponible de igual o superior versión. Sólo la prioridad 1001 permite bajar de versión un paquete previamente instalado. De este modo nos aseguraremos que la versión de los paquetes requeridos será la disponible en los repositorios de wheezy.
  • 990: Prioridad normal, con especial cuidado de que no será actualizado por ningún paquete que no sea de la distribución objetivo configurada. Sólo se instalarán paquetes nuevos y se actualizarán los existentes con aquellos pertenecientes a "oneiric".
  • -1: Sólo puedes instalar un paquete de este repositorio si manualmente lo indicas. Por ejemplo, se podría hacer un apt-get install traceroute/wheezy para forzar la instalación del traceroute disponible en wheezy, y no en oneiric.

Ahora basta con hacer un apt-get update para que se actualicen sólo los paquetes deseados a la versión disponible en los repositorios wheezy.

Solución alternativa 1: poniendo una prioridad a wheezy inferior a oneiric (por ejemplo 500 o 100) todo funcionaría igual con apt-get update (no se metería de manera automática un paquete más actual de wheezy). Sin embargo si hacemos un apt-get dist-upgrade podremos "liarla parda" ya que deja de hacer uso la distribución objetivo y usa las versiones de paquete más actuales, por lo que prefiero dejarle una prioridad -1.

Solución alternativa 2: dejando únicamente una prioridad -1 para wheezy y no configurando prioridad 1000 para los paquetes de courier deseados podríamos hacer una instalación "forzada" de los paquetes de wheezy usando el siguiente comando: apt-get install courier-ssl/wheezy courier-imap/wheezy courier-imap-ssl/wheezy courier-base/wheezy.

Al final todo ha quedado de la siguiente manera:

ii  courier-base             0.68.2-1                        Courier mail server - base system
ii  courier-imap             4.10.0-20120615-1               Courier mail server - IMAP server
ii  courier-imap-ssl         4.10.0-20120615-1               Courier mail server - IMAP over SSL
ii  courier-ssl              0.68.2-1                        Courier mail server - SSL/TLS Support

No hay comentarios:

Publicar un comentario