Thursday, March 08, 2007

PHP4 con soporte OCI

Hace mucho tiempo, yo solía bajar los fuentes del PHP4, para luego conseguir una copia del Oracle 8i y empezar la larga (y triste) labor de compilar un PHP con soporte Oracle.

En ese tiempo, utilizaba SuSE 7.2 y cuando habían actualizaciones de seguridad, tenía que volver a repetir todo el proceso.

Luego de cambiarme a Debian 3.0 (Woody), la forma no cambió mucho, igual seguía la vieja receta.

Recién con Debian 3.1 (Sarge), y con la disponibilidad del Oracle-XE, se me ocurrió investigar si existía algún atajo para evitar la vieja y tediosa receta, y he aquí lo que encontré:

  1. Actualizar el repositorio para poder bajar el Oracle-XE, agregando al archivo /etc/apt/sources.list, lo siguiente:
    deb http://oss.oracle.com/debian/ unstable main non-free
  2. Luego actualizar el repositorio con:
    apt-get update
  3. Verificar que el swap sea mayor a 1024MB, si no el cliente Oracle-XE no instalará. Temporalmente puedes hacer esto:
    $ dd if=/dev/zero of=/tmp/swap00 bs=512k count=1024
    $ mkswap /tmp/swap00 && swapon /tmp/swap00

    (si necesitas más, repite lo anterior con un número distinto a "00").
  4. Instala el cliente Oracle-XE con el comando:
    apt-get install oracle-xe-client
  5. Cargar el entorno del cliente Oracle-XE con el comando:
    $ . /usr/lib/oracle/xe/app/oracle/product/10.2.0/client/bin/oracle_env.sh

Hasta aquí la primera parte, ahora recién vamos a compilar lo estrictamente necesario para obtener el soporte OCI en PHP:

  1. Instala las herramientas necesarias:
    $ apt-get install dpkg-dev php4-dev
  2. Bajamos los fuentes del PHP4:
    $ apt-get source libapache-mod-php4
  3. Ingresamos al directorio donde está lo que necesitamos:
    $ cd php4-2.3.10/ext/oci
  4. Configuramos la extensión:
    $ phpize
    Configuring for:
    PHP Api Version: 20020918
    Zend Module Api No: 20020429
    Zend Extension Api No: 20021010
    $ sh configure
    (..)
    checking for Oracle-OCI8 support... yes, shared
    checking Oracle Install-Dir... /usr/lib/oracle/xe/app/oracle/product/10.2.0/client
    checking Oracle version... 10.1
    checking for OCILobIsTemporary in -lclntsh... yes
  5. Compilamos:
    $ make
    (..)
    Build complete.
    (It is safe to ignore warnings about tempnam and tmpnam).
  6. Instalamos:
    $ make install
    Installing shared extensions: /usr/lib/php4/20020429/
  7. Configuramos nuestro php para utilizar el módulo recién creado:
    $ echo "extension=oci8.so" >> /etc/php4/apache/php.ini
  8. Recargamos el apache:
    $ /etc/init.d/apache reload

Y listo, eso es todo lo que hay que hacer, sin complicarse la vida editando el debian/rules y luego peleándose con el aburrido dpkg-buildpackage -rfakeroot -b.

Ahora, esta receta debe funcionar sin mayores cambios en las demás distribuciones de Linux.

KIT

Labels: , , ,