iSeries Access for Linux

lunedì, 18 dicembre 2006

AS/400

iSeries Access for Linux della IBM, consente di accedere a un DB2 Universal Database da una macchina linux separata tramite un driver ODBC (e volendo anche di stabilire sessioni 5250 ma questo è un argomento su cui sorvolerò).

L’applicazione è scaricabile gratuitamente dal sito della IBM ma distribuita solo in formato RPM. In questo post cercherò di spiegarvi come ho fatto ad installarla prima su una Debian Sarge, poi su una Etch, e come fare ad utilizzarla per sfruttare la connessione ODBC al database sull’AS/400 tramite PHP.

Per prima cosa va scaricato l’RPM. Lo potete fare da qua: http://www-03.ibm.com/servers/eserver/iseries/access/linux/downloads.html (è necessario registrarsi gratuitamente). Una volta scaricato il pacchetto, dobbiamo convertirlo nel formato .deb utilizzato dalla Debian. Per farlo useremo alien che andremo adesso ad installare assieme ad alcuni pacchetti essenziali che utilizzeremo in seguito:

sudo aptitude install libmotif3 alien unixodbc fakeroot

Ora possiamo convertire il pacchetto:

fakeroot alien -k -d iSeriesAccess-5.4.0-1.6.i386.rpm

Convertito il pacchetto, possiamo installarlo:

sudo dpkg -i iseriesaccess_5.4.0-1.6_i386.deb

Ora facciamo in modo che le librerie installate siano disponibili per le applicazioni che le richiedono. Per fare questo, basta aggiungere la seguente linea al file /etc/ld.so.conf (createlo se non esiste):

/opt/ibm/iSeriesAccess/lib

Per rendere effettive le modifiche a questo file, eseguire ldconfig:

sudo ldconfig

Potrebbe essere una buona idea verificare se sono soddisfatte le dipendenze per ognuna delle librerie installate in /opt/ibm/iSeriesAccess/lib. Possiamo farlo tramite l’applicazione dltest (possibile solo con la distribuzione Sarge, in Etch dltest è stata rimossa):

dltest /opt/ibm/iSeriesAccess/lib/libcwbcore.so
dltest /opt/ibm/iSeriesAccess/lib/libcwbodbc.so
dltest /opt/ibm/iSeriesAccess/lib/libcwbodbcs.so
dltest /opt/ibm/iSeriesAccess/lib/libcwbrc.so
dltest /opt/ibm/iSeriesAccess/lib/libcwbxda.so

Se come output per ogni dltest ottenete qualcosa del genere…

SUCCESS: Loaded /opt/ibm/iSeriesAccess/lib/libcwbcore.so

…allora vuol dire che è tutto a posto e che possiamo passare alla vera e propria configurazione del driver ODBC. Eseguendo questo comando…

sudo odbcinst -i -d -f /opt/ibm/iSeriesAccess/unixodbcregistration

…si aggiungono automaticamente al file /etc/odbcinst.ini le seguenti linee:

[iSeries Access ODBC Driver]
Description             = iSeries Access for Linux ODBC Driver
Driver          = /opt/ibm/iSeriesAccess/lib/libcwbodbc.so
Setup           = /opt/ibm/iSeriesAccess/lib/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
FileUsage               = 1

Vanno più che bene. Possiamo passare alla configurazione dell’ODBC Data Source Name (DSN). Aggiungere le seguenti linee al file /etc/odbc.ini:

[as400]
Description          = iSeries Access ODBC Driver DSN for iSeries
Driver               = iSeries Access ODBC Driver
System               = 192.168.1.1
ConnectionType       = 2
DefaultLibraries     = QGPL
Naming               = 0
Decimal              = 1
CommitMode           = 2
ExtendedDynamic      = 1
DefaultPkgLibrary    = QGPL
DefaultPackage       = A/DEFAULT(IBM),2,0,1,0,512
AllowDataCompression = 1
LibraryView          = 0
AllowUnsupportedChar = 0
ForceTranslation     = 0
Trace                = 0

Dove in System va specificato l’IP del server AS/400. Per le altre opzioni (in particolare per ConnectionType e Naming) vi rimando a questa pagina della IBM: http://publib.boulder.ibm.com/…

La connessione è configurata. Per testarla possiamo utilizzare isql in questo modo:

isql -v as400 utente password

…dove ovviamente va utilizzato un utente e una password vailda. Se come output ottenere qualcosa del genere…

+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL>

…allora ce l’avete fatta! Complimenti.

Ora, se volete accedere alla sorgente dati tramite degli script PHP, vi basta installare il pacchetto php4-odbc o php5-odbc…

sudo aptitude install php4-odbc

…ricordandovi di “ricaricare” Apache2 dopo averlo fatto:

sudo invoke-rc.d apache2 reload

Eccovi per chiudere un esempio di codice PHP per accedere a una tabella del DB:

<html>
<head></head>
<body>
<?php
$ASdbname = "as400";
$ASdbuser = "utente";
$ASdbpwd = "password";
$ASdb = odbc_connect($ASdbname, $ASdbuser, $ASdbpwd) or die ("ERRORE");
 
if ($ASdb == FALSE) die ("Errore nella connessione all'as400\n");
 
$result = odbc_exec($ASdb , 'SELECT * FROM w2wstd_dat.ANCLI00F');
 
while ($rows = odbc_fetch_array($result)) {
        print_r($rows);
}
 
odbc_close($ASdb);
?>
</body>
</html>

(distribuzioni Linux di riferimento: Debian GNU/Linux 3.1r8 Sarge e Debian GNU/Linux 4.0r6 Etch)

Puoi lasciare un commento, oppure fare il trackback dal tuo sito.

18 comments

 1 
JMarco:

Ottimo post! Grazie!
Mi è stato di grande aiuto!

Ciao!

luglio 4th, 2007 at 10:44
 2 

Grande Post
non vedo l’ora di provarlo

thanks

luglio 30th, 2007 at 23:24

Provato: Funziona alla Grande!!!!!!!
Grazie

PS Sai se esiste, oltre a Telnet un client per collegarsi come terminale ad AS400

dicembre 4th, 2007 at 18:49
 4 
pitusso:

La guida e’ ottima:
essenziale e chiara.

@cosmo:
puoi usare la tn5250, che esiste sia per Linux che per WIn$.

dicembre 6th, 2007 at 23:52
 5 
Francesco:

Ciao Flocca,

non riesco a completare la guida di iseries perchè quando arrivo a digitare
dltest /opt/ibm/iSeriesAccess/lib/libcwbcore.so
dltest /opt/ibm/iSeriesAccess/lib/libcwbodbc.so
dltest /opt/ibm/iSeriesAccess/lib/libcwbodbcs.so
dltest /opt/ibm/iSeriesAccess/lib/libcwbrc.so
dltest /opt/ibm/iSeriesAccess/lib/libcwbxda.so

la shell mi da
errore bash command not found
sapresti dirmi come mai viene fuori questo errore

grazie mille
Francesco

agosto 13th, 2008 at 23:05
 6 

Ciao Francesco.

Il comando dltest è nel pacchetto unixodbc. Lo hai installato? Verificalo con…

dpkg –list unixodbc

Oppure prova a specificare da riga di comando il path completo…

/usr/bin/dltest

Fammi sapere,
Ciao!

P.S.: questo post fa riferimento alla distribuzione Debian Sarge

agosto 14th, 2008 at 01:15
 7 
Francesco:

Ciao Flocca.

Nella cartella dei comandi non c’è dltest.
unixodbc l’ho installato come da procedura però
la versione che ho installato e la Debian Etch.
Riproverò ad installare la Sarge.

Un secondo problema sta nel fatto che dove lavoro in agenzia viaggio
non ho la macchina fisica as400, ma lavoro da terminale in remoto
e probabilmente il firewall siap mi impedisce l’accesso!

grazie mille per l’aiuto
Ciao

agosto 14th, 2008 at 11:47
 8 
Francesco:

Ciao Flocca.

Ho installato la versione sarge e adesso dltest funziona.

Quando do il comando isql -v as400 nome passwd
mi appare

[unixODBC]
[ISQL]ERROR: Could not SQLConnect

Sai per caso cosa vuol dire??

grazie
Ciao

agosto 14th, 2008 at 14:30
 9 

Evidentemente non riesce a connettersi… è un po’ difficile dire perché però. Hai fatto altri tentativi nel frattempo?

agosto 19th, 2008 at 09:08
 10 

nel caso di questo errore

[unixODBC][Driver Manager]Can’t open lib ‘/opt/ibm/iseriesaccess/lib/libcwbodbc.so’ : libcwbcore.so: cannot open shared object file: No such file or directory
[ISQL]ERROR: Could not SQLConnect

fate questo

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/ibm/iseriesaccess/lib/.

settembre 26th, 2008 at 10:42
 11 

e in questo caso

[01000][unixODBC][Driver Manager]Can’t open lib ‘/opt/ibm/iSeriesAccess/lib/libcwbodbc.so’ : libstdc++.so.5: cannot open shared object file: No such file or directory

usate questo comando

apt-get install libstdc++5

settembre 26th, 2008 at 10:45
 12 

qualche idea per questo problema?

root@ticketsystem:~# isql -v AS400 USER PASSWORD
[S1000][unixODBC][IBM][iSeries Access ODBC Driver]Errore interno programma di controllo.

settembre 27th, 2008 at 09:04
 13 
Mauro:

Grazie, post perfetto e utilissimo!

ottobre 14th, 2008 at 10:39
 14 

Ho aggiornato il post attualizzandolo per l’utilizzo con la distribuzione Debian Etch. Happy hacking!

dicembre 26th, 2008 at 17:55
 15 

Un post impeccabile.
Una domanda: la connessione con l’AS/400 e’ lentissima: mi chiedevo se e’ possibile fare in modo che la connessione sia sempre attiva o addirittura
mettere in piedi un connection pool.

gennaio 21st, 2009 at 12:50
 16 
Francisco:

Gracias. Muy bien explicado, sin saber italiano me funciona. :) )

marzo 13th, 2009 at 19:30
 17 
Edoardo Serra:

Ciao,
grazie per l’howto, complimenti!

Per verificare il dynamic linking, visto che molti lamentano la mancanza di dltest, si può usare ldd

ldd /opt/ibm/iSeriesAccess/lib/libcwbcore.so

e controllare che nell’elenco che restituisce non ci sia nessun ‘not found’

Spero di essere stato utile. Saluti!

Saluti

gennaio 27th, 2010 at 18:36
 18 
need:

Grazie step by step preciso e funzionante su una distr ubuntu non recentissima e ottimo anche il trouble-shooting per gli errori di esecuzione

saluti
need

febbraio 17th, 2010 at 13:20

One Trackback/Ping

  1. Accedere ad un database su AS400/iSeries via ODBC « Ubuntu Trucchi    apr 12 2008 / 3pm

Leave a reply

Name (*)
Mail (will not be published) (*)
URI
Comment