Si queremos desarrollar una web en PHP, desde la que vamos a hacer consultas a una base de datos DB2 usando ODBC, antes hemos de configurar el servidor web correctamente.

Basicamente lo que hemos de hacer es instalar el gestor unixODBC e instalar el driver específico de IBM que se encuentra dentro del paquete iSeriesAccess y configurarlo. Vamos a partir de un servidor Debian 7.5 (wheezy) con Apache ya funcionando y PHP5 instalado y configurado.

1. Instalamos el módulo php5-odbc. Si ya lo tenemos instalado nos saltamos este paso. La versión que dispone wheezy es a fecha de hoy la 5.4.4.

# apt-get install php5-odbc


2. A continuación necesitamos instalar los paquetes odbcinst1debian2, odbcinst y libodbc1 desde los repositorios de Debian testing, esto es porque la versión que trae Wheezy no nos sirve. Para ello primero editamos el archivo /etc/apt/sources.list y modificamos los repositorios para que apunten a testing. Hecho esto instalamos los paquetes.

# apt-get install odbcinst1debian2 odbcinst libodbc1

Volvemos a editar /etc/apt/sources.list y dejamos los repositorios como estaban, apuntando a Wheezy.

3. Descargamos la versión más actual de unixODBC manager y lo compilamos, a fecha de hoy es la v2.3.2. Aquí voy a usar wget para descargarlo a la carpeta temporal. También podemos entrar en su web y descargarlo desde ahí.

# cd /tmp
# wget ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-2.3.2.tar.gz
# tar -xvzf unixODBC-2.3.2.tar.gz
# ./configure
# make
# make install

4. Nos vamos a la web de descargas de IBM y nos descargamos el IBM i Access for Linux en su última versión. Tendremos que darnos de alta como usuario registrado, sino es imposible descargar nada.

Entramos en IBM Software Downloads, en el cuadro de búsquedas escribimos «i series access» y nos mostrará los programas disponibles. Descargamos «IBM i Access for Linux (V7R1)». Seguramente en alguna de las pantallas siguientes nos vuelva a pedir que introduzcamos nuestro ID de usuario de IBM y la contraseña, lo hacemos y podremos continuar. En la siguiente pantalla nos pide que aceptemos los acuerdos de la licencia.

A continuación podremos ya seleccionar el paquete que deseamos en función de nuestra arquitectura, i386 o amd64. En esta pantalla es preferible seleccionar primero como método de descarga http, pulsando sobre la pestaña «Download using http». Nos descargamos el paquete.

El i Series Access está en formato .rpm, por lo que para poder instalarlo en Debian primero tenemos que crear el paquete .deb usando el comando alien. Después ya podemos instalar normalmente por medio de dpkg. En este caso usamos la versión para 64 bits.

# alien iSeriesAccess-7.1.0-1.0.x86_64.rpm
# dpkg -i iseriesaccess-7.1.0-2_amd64.deb

El iSeriesAccess se instala por defecto en la carpeta /opt/ibm/iSeriesAccess.

5. El siguiente paso es registrar el driver ODBC de IBM que acabamos de instalar, para ello primero vamos a identificar las rutas de los archivos de configuración de ODBC.

$ odbcinst -j
unixODBC 2.3.2
DRIVERS............: /usr/local/etc/odbcinst.ini
SYSTEM DATA SOURCES: /usr/local/etc/odbc.ini
FILE DATA SOURCES..: /usr/local/etc/ODBCDataSources
USER DATA SOURCES..: /home/alberto/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8

Arriba podemos ver que el archivo de configuración de los drivers, está en /usr/local/etc/odbcinst.ini

6. Registramos el driver ODBC de IBM.

# odbcinst -i -d -f /opt/ibm/iSeriesAccess/unixodbcregistration64

Este comando registra el driver añadiendo el siguiente contenido al archivo /usr/local/etc/odbcinst.ini.

[iSeries Access ODBC Driver]
Description = iSeries Access for Linux ODBC Driver
Driver      = /opt/ibm/iSeriesAccess/lib64/libcwbodbc.so
Setup       = /opt/ibm/iSeriesAccess/lib64/libcwbodbcs.so
NOTE1= If using unixODBC 2.2.11 or later and you want the 32 and 64-bit ODBC drivers to share DSN's,
NOTE2= the following Driver64/Setup64 keywords will provide that support.
Driver64    = /opt/ibm/iSeriesAccess/lib64/libcwbodbc.so
Setup64     = /opt/ibm/iSeriesAccess/lib64/libcwbodbcs.so
Threading   = 2
DontDLClose = 1

[iSeries Access ODBC Driver 64-bit]
Description = iSeries Access for Linux 64-bit ODBC Driver
Driver      = /opt/ibm/iSeriesAccess/lib64/libcwbodbc.so
Setup       = /opt/ibm/iSeriesAccess/lib64/libcwbodbcs.so
Threading   = 2
DontDLClose = 1

Los archivos de configuración que hay en la carpeta /usr/local/etc son a nivel de usuario. Para root es conveniente también registrar el driver en el archivo /etc/odbcinst.ini, para ello simplemente copiamos.

# cp /usr/local/etc/odbcinst.ini /etc/odbcinst.ini

7. Ahora tenemos que añadir la ruta de las librerías del iSeriesAccess al path y recargar el cache de liberías. Para ello ejecutamos lo siguiente.

# echo "/opt/ibm/iSeriesAccess/lib64/" > /etc/ld.so.conf.d/iSeriesAccess.conf
# ldconfig

Ya está finalizado. Con esto debería quedar el servidor configurado para poder conectar con una base de datos DB2 en un servidor iSeries, usando ODBC desde PHP.

Referencias y enlaces:

IBM i Access for Linux – Installation and usage guide
Restrictions when using ODBC with iSeries Access for Linux
IBM Software Downloads
Web de unixODBC
Accessing a DB2 from PHP