giovedì 2 novembre 2017

Server Apache+PHP su ubuntu che accede ad iSeries


Dopo anni (post analogo su questo blog è del 2008) ho rifatto un server ubuntu con Apache e php che accede ad un database DB2 su iSeries.

1 - ho fatto una installazione standard di un ubuntu 17.10 con apache e php7.1

2 - ho installato alcuni pacchetti utili unixodbc, php7.1-odbc, odbcinst e dipendenze

3 - installato ibm-iaccess-1.1.0.7-1.0.amd64.deb scaricato da IBM (non facile trovarlo!)

4 - ho creato i link simbilici alle librerie introdotte da IBM con
sudo ln -s /opt/ibm/iSeriesAccess/lib64/libcwb* /usr/lib

5 - ho lanciato
odbcinst -j


6 - ho modificato il file /etc/odbcinst.ini:
[ODBC Drivers]
IBM i Access ODBC Driver
Description = IBM i Access for Linux ODBC Driver
Driver = /opt/ibm/iSeriesAccess/lib/libcwbodbc.so
Setup = /opt/ibm/iSeriesAccess/lib/libcwbodbcs.so
Driver64 = /opt/ibm/iSeriesAccess/lib64/libcwbodbc.so
Setup64 = /opt/ibm/iSeriesAccess/lib64/libcwbodbcs.so
Threading = 0
DontDLClose = 1
UsageCount = 2

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

7 - ho modificato il file /etc/odbc.ini:
[ODBC Data Sources]
DEV = DEV

[DEV]
Description = iSeries Access ODBC Driver
Driver = IBM i Access ODBC Driver
System = 10.1.0.4
UserID = qui il nome utente
Password = qui la password
Naming = 1
DefaultLibraries = QGPL
Database =
ConnectionType = 2
CommitMode = 2
ExtendedDynamic = 1
DefaultPkgLibrary =
DefaultPackage = A/DEFAULT(IBM),2,0,1,0,512
AllowDataCompression = 1
LibraryView = 0
AllowUnsupportedChar = 1
ForceTranslation = 1
Trace = 0
il significato delle opzioni principali è:

[DEV] è il nome che si vuole assegnare alla Data Source

Description è una descrizione generica

System identifica il nome o l’indirizzo del sistema AS400. Esempio mioAS.miodomino.local o 192.168.xxx.xxx

UsedID e Password sono le credenziali per l’accesso al sistema. Vengono utilizzati solo se l’applicazione che utilizza la Data Source non ne specifica altri, altrimenti valgono quelli specificati nell’applicazione

Naming serve ad indicare la convenzione dei nomi per riferirsi a librerie e files.

  Naming=0 utilizza la convenzione classica ANSI SQL. Esempio select * from libreria.file.
  Naming=1 utilizza la convezione del sistema AS400: select * from librerie/file

DefaultLibreries permette di indicare la lista delle librerie di default. Come detto in precedenza, l’intera lista viene considerata solo se la convezione dei nomi utilizzata è 1 (Naming=1) altrimenti viene considerata solo la prima libreria. ATTENZIONE: ogni libreria dev’essere separata dalla virgola e l’intera lista deve iniziare con la virgola altrimenti considera solo la prima libreria ignorando le altre. Esempio: se indico lib1,lib2,lib3 in realtà viene vista solo lib1, viceversa se inizio la lista con la virgola, quindi ,lib1,lib2,lib3 viene considerata l’intera lista.

Un modo alternativo di far vedere una lista librerie è quello di NON indicare niente in questo parametro in modo tale che venga vista la lista librerie indicata nella job description (JOBD) abbinata all’utente che fa la connessione.

ConnectionType permette di specificare le azioni eseguibili sui dati (default=0):

  0 = lettura e scrittura. Sono permesse tutte le istruzioni SQL
  1 = lettura ed esecuzione. Sono permesse le istruzioni SELECT e CALL
  2 = solo lettura

CommitMode permette di specificare come gestire la transazioni (deafult=2):

  0 = Commit immediate (*NONE)
  1 = Read committed (*CS)
  2 = Read uncommitted (*CHG)
  3 = Reapetable read (*ALL)
  4 = Serializable (*RR)


8 - Verifico che linuxodbc stia funzionando con
isql -v DEV
e funziona

9 - Metto di seguito un estratto del php che fa una query:
$db = new PDO('odbc:DEV');
$sql = "SELECT * FROM LIB.TB FETCH FIRST 100000 ROWS ONLY";

foreach ($db->query($sql) as $row)
{
  print_r($row);
}

Leggi post intero...

giovedì 16 ottobre 2008

Supporto del framework PHP Prado in Netbeans

Vedo sul blob della plugin di php per Netbeans alcune schermate che illustrano il prossimo rilascio di un supporto per il framework Prado.

Trovo Prado molto bello, credo sia l'unico framework per php stabile, MVC e con programmazione ad eventi. Tra l'altro è molto simile ad aspx di microsoft... che vuole dire meno fatica per chi ha esperienza di programmazione su visual studio ad usare anche php, magari su linux.


Netbeans poi è un IDE stupendo, anche meglio del tanto amato/odiato dai programmatori nostrani ms visual studio.

Bando alle ciance. Per facilitare lo sviluppo con il prado ho fatto anche io un piccolo script che uso in associazione con il netbeans e plugin php. Serve a "sincronizzare" la pagina di prado che descrive l'interfaccia (nome.page) e la pagina php con la logica associata agli eventi (nome.php). Cosa fa lo script:

1 - aggiunge commenti tipo "/** property Type name */" che consentono l'autocompletamento del codice php dei nomi delle componenti inserite nell'interfaccia page;

2 - aggiunge le dichiarazioni dei metodi che implementano gli eventi dichiarati nell'interfaccia .page.

Poco ma utile.

Ecco i link allo script:

http://web.tiscali.it/diegobazzanella/pageSync.php


e al progetto di modulo per netbeans che integra lo script php in netbeans attraverso un cmando del menu contestuale in una pagina .page:


http://web.tiscali.it/diegobazzanella/pageSync.zip



Leggi post intero...

mercoledì 17 settembre 2008

tn5250

'tn5250' è un software che si connette agli IBM iseries AS/400 con sistema operativo i5/OS ed emula il terminale 5250, quello con la schermata verde... sul mio Ubuntu (8.04) direi che 'tn5250' è molto meglio del client access ufficiale di IBM. Vediamo come configurarlo:

1 - per prima cosa va installato, quindi con privilegi di amministrazione da terminale dare il comando:

apt-get install tn5250

2 - nella propria home creare il file di configurazione di tn5250 che dovrà chiamarsi '.tn5250rc' con il comando ad esempio:

gedit ~/.tn5250rc

e digitare il seguente contenuto, sostituendo 'ip_as' con l'indirizzo della macchina AS/400:

mioas {
host = ip_as
env.TERM = IBM-3477-FC
env.DEVNAME = MYDISPLAY
map = 280
+underscores
+uninhibited
}

3 - infine risolvo un piccolo problema di encoding con un workaround buono per 'gli italiani'. Con diritti di amministrazione:

gedit /usr/bin/xt5250

nel file indicato verso la fine (righe 104-109) vado a sostituire il comando:

# Try to use xterm with our custom key mappings.
if command -v xterm >/dev/null 2>&1; then
XUSERFILESEARCHPATH="$pkgdatadir/%N" \
exec xterm -name "xt5250" -bg black -fg white -T "xt5250 - $XT5250_HOST" \
+sb -geometry 80x25 -e "$0" -BOOT "$@"
fi

con

# Try to use xterm with our custom key mappings.
if command -v xterm >/dev/null 2>&1; then
LANG=en_US.ISO-8859-1 \
XUSERFILESEARCHPATH="$pkgdatadir/%N" \
exec xterm -en ISO-9660-1 -name "xt5250" -bg black -fg white -T "xt5250 - $XT5250_HOST" \
+sb -geometry 80x25 -e "$0" -BOOT "$@"
fi

in pratica ho aggiunto due 'ISO-9660-1'. Ciò consente di vedere bene le lettere accentate (se poi si aggiunge dopo "xterm" anche "-fn 10x20" il terminale viene fuori con font huge, cioé caratteri molto grandi).

4 - ho finito, posso avviare la versione grafica del programma con

xt5250 mioas

ed usare il menu che viene fuori facendo 'ctrl+tasto destro del mouse' magari per ingrandire un po' il carattere (consiglio LARGE). Ci sono anche altri due menu su 'ctrl+tasto centrale del mouse' e 'ctrl+tasto sinistro del mouse'.

Buon lavoro!




Leggi post intero...

martedì 16 settembre 2008

LAMP su ubuntu che usa DB2 su AS400

Scenario: AS/400 con OS/400 V5.4 con DB2 + Ubuntu linux 8.04 con Apache e php

Cosa fare per usare da PHP il database DB2 utilizzando il PDO via ODBC? Per prima cosa bisogna installare l'iseries access su ubuntu come descritto in un post precedente. Quindi:

1 - da terminale installo unix-odbc:

apt-get install unix-odbc

2 - configuro unix-odbc, apro/creo il file /etc/odbc.ini come di seguito, sostituendo la riga in grassetto con l'ip del server AS/400:


[AS400]
Description = iSeries Access ODBC Driver
Driver = iSeries Access ODBC Driver
System = 192.168.0.7
Naming = 0
DefaultLibraries = QGPL
Database =
ConnectionType = 0
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

NB: il contenuto del file sopra è scopiazzato dal blog di Matteo Moro. Thanks.

Ora da php sul linux si dovrebbe poter accedere al database DB2 su AS/400 via PDO. Vediamo un po' di codice PHP:

infophp();

Con questo si vede la schermata delle info relative al php. Dovrei fra l'altro trovare la voce PDO con indicati vari driver, fra questi deve esserci ODBC (se no va installato il pacchetto php_odbc).
Un'altra voce che devo trovare è PDO_ODBC (che dovrebbe comparire dato che ho messo UnixODBC).

foreach(PDO::getAvailableDrivers() as $driver)
{
echo $driver . " ";
}

Così dovrebbe apparire la lista dei driver che dava anche infophp().
Di seguito proviamo a fare una query, quanto scritto in grassetto va adattato con il nome dell'utente e la password, il nome del database, della tabella su cui fare la query di prova ed il nome di un paio di colonne:

try
{
$db=new TDbConnection("odbc:DSN=AS400;UID=user;PWD=password;","user","password");
echo "Connessione riuscita";
}
catch(PDOExeption $e)
{
echo $e->getMessage();
}

$sql = "SELECT * FROM NOMEDB.NOMETBL";

foreach ($db->query($sql) as $row)
{
print $row['COL1'] .' - '. $row['COL2'] . '
';
}

Fine. Ciao.


Leggi post intero...

Installare iseries acces su ubuntu

Iseries Acces (o Client Access) di IBM serve per accede alla "schermata verde" degli AS/400. Da Ubuntu (uso la 8.04) è molto meglio usare tn5250, open source e presente nei pacchetti di ubuntu (e personalizzarlo un po'... farò un altro post su questo...).

1 - scaricare da IBM l'iseries acces per linux, è necessaria iscrizione al sito IBM, ma il download 'dovrebbe' essere gratuito. Una volta scaricato si dovrebbe avere un file con un nome tipo: 'iSeriesAccess-5.4.0-1.6.i386.rpm';

2 - convertire il pacchetto rpm in pacchetto debian; per fare ciò bisogna avere installato 'alien' sul ubuntu, da terminale:

apt-get install alien (se non è già installato)
alien -d --scripts pacchetto_scaricato.rpm

3 - installare il pacchetto generato da alien:

apt-get install pacchetto_prodotto_da_alien.deb

Fatto, l'iseries access è installato, ma non funge! Per farlo partire serve ancora installare un paio di pacchetti:

apt-get install libmotif3 libxaw6

Ora (a me) parte con:

ibm5250


Leggi post intero...