Compilar PHP de 32 bits en Red Hat de 64 bits

Por una incopatibilidad entre aplicaciones he tenido que compilar la última versión de PHP en un servidor de 64 bits. El proceso es bastante sencillo si se tienen correctamente instaladas las librerias de 32 bit en el sistema. 

En este sistema ya tenia una serie de librerias de 32 bits instaladas, pero ha sido necesario instalar algunas mas para poder compilar correctamente. En concreto, las que hacian falta eran:

libstdc++-devel.i686
glib2.i686
zlib-devel.i686

Para instalarlas se puede hacer con yum.
Descargar el codigo fuente de la última versión de php desde la web de php.net en el servidor. Una vez verificado el MD5 procederíamos a descomprimir el código fuente en /var/tmp:

# md5sum php-5.6.4.tar.bz2
d31629e9c2fb5f438ab2dc0aa597cd82 php-5.6.4.tar.bz2
# tar xjvf php-5.6.4.tar.bz2

Una vez en la carpeta del codigo fuente exportaremos las variables CFLAGS, CXXFLAGS y LDFLAGS donde indicaremos que la arquitectura sobre la que se debe compilar es de 32 bits:

# export CFLAGS=’-m32′
# export CXXFLAGS=’-m32′
# export LDFLAGS=’-m32′

Si ya habíamos intentado compilar deberemos ejecutar un “make clean” y a continuación configurar la compilación:

# ./configure –libdir=/lib  –prefix=/usr/local/php-5.6.4 –with-libdir=/lib

Este proceso finaliza con la recomendación de ejecutar un test antes del install, con lo que ejecutaremos lo siguiente:

# make test && make install

Al finalizar la compilación la nueva versión de PHP quedará instalada en /usr/local/php-5.6.4 y veremos que es un binario de arquitectura de 32 bits:

# pwd
/usr/local/php-5.6.4/bin
# ./php -v
PHP 5.6.4 (cli) (built: Dec 23 2014 11:43:42)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2014 Zend Technologies
# file php
php: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped

El servidor web se deberá configurar para que apunte a este binario.
Una vez sabemos que compila se debería recompilar con las opciones de configuración que sean necesarias en cada caso (módulos y extensiones).

#TIP

Como he comentado anteriormente, este sistema ya tenia una serie de librerias de 32 bits instaladas:

zlib.i686
libstdc++-devel.i686
libxcb.i686
libaio.i686
libXtst.i686
libstdc++.i686
libzip.i686
libXau.i686
libXi.i686
libxml2-devel.i686
glibc-devel.i686
gamin.i686
nss-softokn-freebl.i686
libXext.i686
compat-libstdc++-33.i686
glibc.i686
libselinux.i686
glib2.i686
zlib-devel.i686
libuuid.i686
libxml2.i686
libgcc.i686
libX11.i686
libaio-devel.i686
libXrender.i686
libzip-devel.i686
compat-libcap1.i686
libXp.i686

Para instalarlas todas con un comando lo que se puede hacer es copiar el listado en un fichero e instalarlo con yum de la siguiente manera:

# vi /tmp/paquetes
# yum install $(cat /tmp/paquetes)