iSeries Access for Linux
lunedì, 18 dicembre 2006
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 ldconfigPotrebbe 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 reloadEccovi 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)

18 comments
One Trackback/Ping
Leave a reply