En ocasiones puede ocurrir que una actualización de PHP haga que algunas funcionalidades de una aplicación Web dejen de funcionar. Esto es lógico cuando se avanza a una versión superior (por ejemplo si ciertas funciones dejan de ser soportadas), aunque no lo es cuando se trata de una actualización de seguridad, donde se mantiene la misma versión y simplemente se parchan vulnerabilidades. Eso fue lo que me sucedió hoy en un servidor de producción y me obligó a retroceder de versión en unos cuantos paquetes de PHP de manera urgente (shame on Squeeze LTS).

A partir del log de APT (/var/log/apt/history.log) es posible obtener información acerca de la actualización:

Start-Date: 2015-09-08  07:36:36
Commandline: apt-get -q -y upgrade
Upgrade: php5-xsl:amd64 (5.3.3.1-7+squeeze26, 5.3.3.1-7+squeeze27), php5:amd64 (5.3.3.1-7+squeeze26, 5.3.3.1-7+squeeze27), libapache2-mod-php5:amd64 (5.3.3.1-7+squeeze26, 5.3.3.1-7+squeeze27), php5-gd:amd64 (5.3.3.1-7+squeeze26, 5.3.3.1-7+squeeze27), php5-curl:amd64 (5.3.3.1-7+squeeze26, 5.3.3.1-7+squeeze27), php5-pgsql:amd64 (5.3.3.1-7+squeeze26, 5.3.3.1-7+squeeze27), php5-mcrypt:amd64 (5.3.3.1-7+squeeze26, 5.3.3.1-7+squeeze27), php5-cli:amd64 (5.3.3.1-7+squeeze26, 5.3.3.1-7+squeeze27), php5-dev:amd64 (5.3.3.1-7+squeeze26, 5.3.3.1-7+squeeze27), php5-common:amd64 (5.3.3.1-7+squeeze26, 5.3.3.1-7+squeeze27)
End-Date: 2015-09-08  07:36:48

Se observa que se actualizó el paquete php5 desde la versión "5.3.3.1-7+squeeze26" a la versión "5.3.3.1-7+squeeze27". No hay cambio de versión, por ende no debería haber cambiado ninguna característica o funcionalidad del motor PHP. Se trata de una actualización de seguridad. Evidentemente algo rompieron al parchar.

También es posible utilizar la herramienta apt-show-versions:

# apt-show-versions -a -p php5

Desde el momento en que se ha determinado que es necesario retroceder de versión, se puede recurrir al comando apt-cache showpkg php5 para conocer qué otras versiones hay disponibles (si es que hay otras):

Package: php5
Versions: 
5.3.3.1-7+squeeze27 (/var/lib/apt/lists/ftp.ca.debian.org_debian_dists_squeeze-lts_main_binary-amd64_Packages)
 Description Language: 
                 File: /var/lib/apt/lists/ftp.ca.debian.org_debian_dists_squeeze-lts_main_binary-amd64_Packages
                  MD5: ef85f921acd1e3c2678691dcdd900acf

5.3.3-7+squeeze19 (/var/lib/apt/lists/ftp.ca.debian.org_debian_dists_squeeze_main_binary-amd64_Packages) (/var/lib/apt/lists/security.debian.org_dists_squeeze_updates_main_binary-amd64_Packages) (/var/lib/dpkg/status)
 Description Language: 
                 File: /var/lib/apt/lists/ftp.ca.debian.org_debian_dists_squeeze_main_binary-amd64_Packages
                  MD5: ef85f921acd1e3c2678691dcdd900acf

La versión instalada ("5.3.3.1-7+squeeze27") proviene del repositorio LTS y está disponible la versión del repositorio Security ("5.3.3-7+squeeze19", anterior).

Para cambiar a la versión anterior, provista por el repositorio Security, ejecutar:

# apt-get install php5=5.3.3-7+squeeze19

De esta forma se está haciendo efectivamente un downgrade, ya que la versión provista por el repositorio Security es anterior.

Lo siguiente consiste en mantener la versión instalada (evitar actualizaciones) hasta tener la certeza de que hayan corregido los errores en la versión más actual. Para ello recurrir al subcomando "hold" de qaptitude:

# aptitude hold php5

Para comprobar que el paquete está siendo retenido a la versión instalada, ejecutar:

root@debian6:~# aptitude show php5 | grep "State"
State: installed [held]

La palabra "held" indica que no será actualizado hasta que deje de ser retenido (aptitude unhold).


Tal vez pueda interesarte


Compartí este artículo