Inicio > Linux > Modulo OCI8 para PHP 5.5 Software Collections en Red Hat 7

Modulo OCI8 para PHP 5.5 Software Collections en Red Hat 7

Lunes, 22 de Febrero de 2016

En el servidor web que administro, ha surgido la necesidad de actualizar a PHP 5.5 para dar soporte a las nuevas versiones de productos como phpMyAdmin, Piwik y similares.

Para facilitar las tareas de mantenimiento del servidor utilizamos la versión de PHP distribuida con el sistema operativo Red Hat. En este caso, hemos decidido aprovechar esta actualización para también actualizar el SO a Red Hat 7 Enterprise Linux (en adelante RH7).

Sin embargo, la versión de PHP que viene con RH7 es la 5.4 y no nos sirve. Para resolver este problema Red Hat proporciona las Software Collections que incluyen la versión 5.5 y 5.6 de PHP. De momento vamos a optar por actualizar a la versión 5.5, ya que actualmente tenemos PHP 5.3 y el cambio a la 5.5 va a ser más sencillo que actualizar directamente a la 5.6 (más adelante ya abordaremos la actualización a PHP 5.6).

Aunque con las Software Collections se incluyen muchos módulos de PHP, no están todos los que utilizamos, en este caso concreto no está el modulo OCI8 para acceder a BBDD Oracle.

Por este motivo vamos a generarnos un nuevo paquete RPM compatible con el PHP 5.5 de las Software Collections que nos añada el modulo OCI8.

Este paquete lo vamos a generar en un servidor con RH7 que tenga la herramienta rpmbuild instalada.

En primer lugar hemos de instalarnos el Instant Client de Oracle para Linux. Necesitamos los paquetes RPM *-devel y *-basic de este cliente. He utilizado la versión 12 de Oracle y estos paquetes se pueden descargar desde la web de Oracle.

Ahora buscamos un RPM source del modulo OCI8 para PHP 5.5. Oracle nos proporciona uno para Red Hat 6 en la dirección: https://oss.oracle.com/projects/php/files/EL6/. Nos lo descargamos y lo descomprimimos en /root/rpmbuild/SOURCES con el siguiente comando:

# rpm2cpio php55-oci8-5.5.10-2.el6.src.rpm | cpio -idmv

Este paquete utiliza la versión 2.0.8 del OCI8 para PHP y existe la 2.0.10. Descargamos esta última versión y ubicamos el fichero en /root/rpmbuild/SOURCES.

Ahora hemos de adaptar el fichero SPEC (php55oci8.spec)  para generar los RPMs que necesitamos.  Modificamos lo siguiente:

1,2d0
< %{?scl:%scl_package php-oci8}
<
4c2
< # Builds the latest DTrace disabled PHP OCI8 extension on top of PHP 5.5
---
> # Builds the latest DTrace enabled PHP OCI8 extension on top of PHP 5.5
7,8c5,6
< %global apiver %{php55_php_core_api}
< %global zendver %{php55_php_zend_api}
---
> %global apiver 20121113
> %global zendver 20121212
12c10
< %define oci8peclver 2.0.10
---
> %define oci8peclver 2.0.8
24c22
< Name: %{?scl_prefix}php-oci8
---
> Name: php55-oci8
26,27c24,25
< Version: 5.5.21
< Release: 1%{?dist}
---
> Version: 5.5.10
> Release: 2%{?dist}
44a43
> Obsoletes: php53-oci8-11gR1 php53-oci8-12cR1
48c47
< Requires: %{?scl_prefix}php-common >= %{version}, oracle-instantclient12.1-basic >= %{oci12cR1ver}
---
> Requires: php55-common >= %{version}, oracle-instantclient12.1-basic >= %{oci12cR1ver}
50,53d48
<
< Requires: %{?scl_prefix}php(zend-abi) = %{php55_php_zend_api}
< Requires: %{?scl_prefix}php(api) = %{php55_php_core_api}
<
55c50,51
< BuildRequires: %{?scl_prefix}php-devel >= %{version}
---
> BuildRequires: dtrace-utils >= 0.4.0-5
> BuildRequires: php55-devel >= %{version}
57c53
< Provides: %{?scl_prefix}php-oci
---
> Provides: php55_database, php55-oci, mod_php = %{version}-%{phprelease}
68d63
< %setup -q -c -T -n %{pkg_name}-%{version}
71a67,82
> # Safety check for API version change.
> vapi=`phpize -v | sed -n '/PHP Api Version:/{s/.* //;p}'`
> if test "x${vapi}" != "x%{apiver}"; then
> : Error: Upstream API version is now ${vapi}, expecting %{apiver}.
> : Update the apiver macro and rebuild.
> exit 1
> fi
>
> # Safety check for Zend API version change.
> vzend=`phpize -v | sed -n '/Zend Module Api No:/{s/^[^0-9]*//;p;}'`
> if test "x${vzend}" != "x%{zendver}"; then
> : Error: Upstream Zend module ABI version is now ${vzend}, expecting %{zendver}.
> : Update the zendver macro and rebuild.
> exit 1
> fi
>
74c85
< %{_bindir}/phpize
---
> phpize
80c91
< PHP_DTRACE=no
---
> PHP_DTRACE=yes
86c97
< %configure --with-php-config=%{_bindir}/php-config --with-oci8=shared,instantclient,/usr/lib/oracle/$VER/client64/lib
---
> %configure --with-oci8=shared,instantclient,/usr/lib/oracle/$VER/client64/lib
164,168d174
< * Fri Feb 19 2016 David Fernandez <david.fernandez@ehu.eus> 5.5.21
< - Use Red Hat Enterprise Linux 7
< - Use PHP 5.5.21
< - Use OCI8 2.0.10
<
209c215
< * Sun Nov 1 2009 Christopher Jones <christopher.jones@oracle.com> 5.2.11
---
> * Mon Nov 1 2009 Christopher Jones <christopher.jones@oracle.com> 5.2.11
215c221
< * Tue Apr 28 2009 Christopher Jones <christopher.jones@oracle.com> 5.2.9
---
> * Wed Apr 28 2009 Christopher Jones <christopher.jones@oracle.com> 5.2.9
227,228c233,235
< * Fri Aug 8 2008 Srinivas Maturi <srinivas.maturi@oracle.com> 5.1.6-20.el5_2.1
< - Update BuildRequires for oracle-instantclient-devel and Conflicts for oracle-instantclient-basic
---
> * Tue Aug 08 2008 Srinivas Maturi <srinivas.maturi@oracle.com> 5.1.6-20.el5_2.1
> - Update BuildRequires for oracle-instantclient-devel and Conflicts for
> oracle-instantclient-basic
230c237
< * Tue Aug 5 2008 Srinivas Maturi <srinivas.maturi@oracle.com> 5.1.6-20.el5_2.1
---
> * Tue Aug 05 2008 Srinivas Maturi <srinivas.maturi@oracle.com> 5.1.6-20.el5_2.1
233c240
< * Mon Jul 21 2008 Srinivas Maturi <srinivas.maturi@oracle.com> 5.1.6-20.el5_2.1
---
> * Fri Jul 21 2008 Srinivas Maturi <srinivas.maturi@oracle.com> 5.1.6-20.el5_2.1
237c244,245
< - Update rpm name, add libaio as runtime dependency, remove code to run tests at build time
---
> - Update rpm name, add libaio as runtime dependency, remove code to run
> tests at build time

Una vez que ya tenemos el fichero spec, generamos los ficheros RPMs con el siguiente comando:

# rpmbuild -ba php55oci8.spec --define "scl php55"

Si todo ha ido bien, los RPMs estarán en /root/rpmbuild/RPMS y ya los podremos instalar con YUM.

Linux , , , , , ,

  1. Sin comentarios aún.
  1. Sin trackbacks aún.