Build RPM WSO2 WSF/PHP 2.1 per Zend Server 5
Da parecchio tempo ho adottato WSO2 WSF/PHP come framework di rifermento per lo sviluppo di Web Services in ambienti di tipo enterprise, da non sottovalutare è l'aspetto che riguarda l'adesione ai più comuni standard WS-*. In ambienti di tipo enterprise è facile trovare applicazioni web (sia front-end sia back-end) il cui container di esecuzione è l'application server basato sulla soluzione offerta da Zend Server.
In quest'articolo vedremo come realizzare il package RPM del framework WSO2 WSF/PHP 2.1 da installare in seguito sulla macchina che esegue l'application server Zend Server. I requisiti necessari per ottenere il package RPM contenente i binari di WSO2 WSF/PHP 2.1 sono:
- Una macchina di sviluppo Linux con l'installazione dei tool di development;
- Zend Server 5.x (Enterprise Edition o Community Edition)
- RPM Spec file per WSO2 WSF/PHP 2.1
Per l'operazione di creazione del package RPM è buona norma utilizzare una delle distribuzioni consigliate da Zend, tra quelle che supportano il formato RPM. Fare riferimento al documento Choosing Which Distribution to Install che mostra la tabella completa delle distribuzioni Linux che supportano l'installazione di package RPM. Consiglio inoltre l'utilizzo della stessa distribuzione utilizzata in ambiente di collaudo e produzione di Zend Server
1. Creazione del package RPM WSO2 WSF/PHP
La piattaforma (di sviluppo) di riferimento adottata per la stesura di quest'articolo è la seguente:
- Distribuzione Linux CentOS 5.6 x86_64 su VirtualBox 4.0.6
- Zend Server 5.1 Enterprise Edition (PHP 5.2)
I passi necessari per terminare il processo di building del package RPM sono i seguenti:
- Download dei sorgenti (tar.gz) di WSO2 WSF/PHP 2.1 dal sito http://wso2.org/downloads/wsf/php
- Export dello spec file dal repository Contrib SVN https://svn.wso2.org/repos/contrib
- Build del package RPM
1. Download dei sorgenti WSO2 WSF/PHP 2.1
# cd /usr/src/redhat/SOURCES
# wget http://dist.wso2.org/products/wsf/php/2.1.0/wso2-wsf-php-src-2.1.0.tar.gz
2. Checkout RPM spec file wsf-zend-server.spec
# cd /usr/src/redhat/SPECS
# svn export https://svn.wso2.org/repos/contrib/wsf/php/trunk/build/packaging/rpm/wsf-zend-server.spec
3. Build del package RPM
# cd /usr/src/redhat
# rpmbuild -bb SPECS/wsf-zend-server.spec
L'ultimo comando, rpmbuild, esegue tutte le azioni indicate sullo spec file, generando alla fine del build il package RPM posizionandolo in /usr/src/redhat/RPMS/x86_64/. Il pacchetto generato prende il nome di wso2-wsf-php-2.1.0-1.x86_64.rpm. E' possibile verificare una serie d'informazioni sul package appena creato utilizzando il comando:
# cd /usr/src/redhat
# rpm -qp RPMS/x86_64/wso2-wsf-php-2.1.0-1.x86_64.rpm
L'output del comando dovrebbe essere simile a quanto illustrato di seguito:
Name : wso2-wsf-php Relocations: (not relocatable)
Version : 2.1.0 Vendor: WSO2 Inc. http://wso2.org
Release : 1 Build Date: Tue 03 May 2011 06:55:34 PM CEST
Install Date: (not installed) Build Host: shirus-fe-testlab.localdomain
Group : Development/Tools Source RPM: wso2-wsf-php-2.1.0-1.src.rpm
Size : 24598922 License: Apache License V2.0
Signature : (none)
Packager : Antonio Musarra
URL : http://wso2.com/products/web-services-framework/php/
Summary : WSO2 WSF/PHP 2.1 Web Services Framework for PHP
(Build for Zend Server 5.1)
Description : WSO2 Web Services Framework for PHP (WSO2 WSF/PHP), a
binding of WSO2 WSF/C into PHP is a PHP extension for
providing and consuming Web Services in PHP. WSO2 WSF/PHP
supports SOAP 1.1, SOAP 1.2, WSDL 1.1, WSDL 2.0, REST style
invocation as well as some of the key WS-* stack specifications
such as: SOAP MTOM, WS-Addressing, WS-Security,WS-SecurityPolicy
and WS-ReliableMessaging.
2. Installazione del package WSO2 WSF/PHP
Il package creato in precedenza è quindi pronto per essere installato sulla macchina target, nel nostro caso la macchina target è la stessa utilizzata per il build del package. L'installazione del package compie i seguenti passi:
- Installa il software base nella directory /opt/wso2
- Installa gli esempi di codice e la documentazione nella document root del server web
- Installa il modulo wsf in /usr/local/zend/lib/php_extensions/
- Crea ed installa in /etc/profile.d/ il file che imposta le variabili di ambiente necessarie
- Crea ed installa in /usr/local/zend/etc/conf.d/ il file wsf.ini che contiene la configurazione del modulo wsf/php
- Esegue la configurazione del Dynamic Linker attraverso il comando ldconfig
- Esegue il restart di Zend Server per caricare il modulo wsf.so
Per l'installazione del package è sufficiente eseguire il comando illustrato a seguire. E' possibile comunque eseguire una verifica d'installazione utilizzando l'opzione --test del comando rpm.
# cd /usr/src/redhat
# rpm -ihv RPMS/x86_64/wso2-wsf-php-2.1.0-1.x86_64.rpm
L'installazione esegue tutti i passi elencati in precedenza, l'output ottenuto dalla fase d'installazione dovrebbe essere simile al seguente:
Preparing... ############################# [100%]
1:wso2-wsf-php ############################# [100%]
Running ldconfig...
Restart Zend Server...Restarting Zend Server 5.1.0 ..
Stopping Zend Server Monitor node [OK]
Stopping httpd: [ OK ]
Stopping Session Clustering daemon [OK]
Stopping JobQueue [OK]
Stopping Zend Server GUI [Lighttpd] [OK]
Starting Zend Server Monitor node [OK]
[ 06.05.2011 14:12:54 SYSTEM] watchdog for monitor is running.
[ 06.05.2011 14:12:54 SYSTEM] monitor is running.
Starting httpd: [ OK ]
Starting Session Clustering daemon [OK]
[ 06.05.2011 14:12:56 SYSTEM] watchdog for scd is running.
[ 06.05.2011 14:12:56 SYSTEM] scd is running.
Starting JobQueue [OK]
[ 06.05.2011 14:12:57 SYSTEM] watchdog for jqd is running.
[ 06.05.2011 14:12:57 SYSTEM] jqd is running.
spawn-fcgi: child spawned successfully: PID: 29907
Starting Zend Server GUI [Lighttpd] [OK]
[ 06.05.2011 14:12:59 SYSTEM] watchdog for lighttpd is running.
[ 06.05.2011 14:12:59 SYSTEM] lighttpd is running.
Zend Server started...
Copied samples folders in /opt/wso2/wsf_php to your Web Root /var/www/html
Added directory /opt/wso2/wsf_php/scripts/ to include_path directory
eg. include_path = ".:/opt/wso2/wsf_php/scripts/"
Una veloce verifica della corretta installazione può essere fatta eseguendo il comando php -i accertandosi che il modulo wsf sia stato caricato correttamente (vedere il comando completo a seguire).
# /usr/local/zend/bin/php -i|grep wsf
/usr/local/zend/etc/conf.d/wsf.ini,
wsf
wsf support => enabled
wsf version => 2.1.0
wsf.attachment_cache_dir => /tmp => /tmp
wsf.enable_attachment_caching => 0 => 0
wsf.home => /opt/wso2/wsf_c => /opt/wso2/wsf_c
wsf.log_level => 4 => 4
wsf.log_path => /tmp => /tmp
wsf.rm_db_dir => /tmp => /tmp
L'output del comando mostra la versione del modulo (in questo caso 2.1) e la configurazione, quest'ultima definita all'interno file /usr/local/zend/etc/conf.d/wsf.ini. E' possibile, eseguire la stessa verifica utilizzando la console offerta da Zend Server, la console è raggiungibile all'indirizzo http://localhost:10081/ (vedi Figura 1)
Il contenuto del file /usr/local/zend/etc/conf.d/wsf.ini (mostrato di seguito) imposta la configurazione del modulo wsf, oltre a sovrascrivere l'attuale impostazione del parametro include_path aggiungendo la directory /opt/wso2/wsf_php/scripts/. Consiglio la verifica del parametro, onde evitare eventuali malfunzionamenti sulla vostra attuale configurazione.
include_path = ".:/usr/local/zend/share/ZendFramework/library:
/usr/local/zend/share/pear:/opt/wso2/wsf_php/scripts/
"[wsf]
extension=wsf.so
wsf.home="/opt/wso2/wsf_c"
wsf.log_path="/tmp"
wsf.rm_db_dir="/tmp"
Il manuale del framework e gli esempi di codice sono stati installati nella document root del web server, entrambi raggiungibili ai rispettivi indirizzi, http://localhost/docs e http://localhost/samples. In Figura 2 la pagina degli esempi installati, invece in Figura 3 è mostrato l'esempio di una calcolatrice che sfrutta i servizi web realizzati con WSF/PHP per eseguire le operazioni aritmetiche elementari.
4. Risorse
Credo possa essere utile a tutti avere a disposizione la Virtual Appliance da me utilizzata per la stesura di quest'articolo, ho quindi esportato la Virtual Appliance in formato OVF e pubblicata al seguente indirizzo:
- Cent OS 5.6 OVF https://rapidshare.com/files/461521692/centos5.6-wsfphp2.1-zde5.1-1.tar.gz
- MD5 Hash: https://rapidshare.com/files/461518340/centos5.6-wsfphp2.1-zde5.1-1.md5.txt
A seguire tutte le info necessarie per l'utilizzo della Virtual Appliance (in Figura 4 è illustrato il desktop della Virtual Appliance comprese le icone di WSO2 e Zend Server):
- Username/Password: wso2/linuxwso2
- Password root user: linuxwso2
- Zend Server 5.1
- Installato in /usr/local/zend
- Web Console: http://localhost:10081
- Password Web Console: zend
- Init script in /etc/init.d/zend-server
- WSO2 WSF/PHP
- Installato in /opt/wso2
- Sample in /var/www/samples
- Docs in /var/www/docs
- Configurazione /usr/local/zend/etc/conf.d/wsf.ini
- Modulo in /usr/local/zend/lib/php_extensions/
L'utilizzo della Virtual Appliance con il software di virtualizzazione Virtual Box è praticamente immediato, occorre eseguire la procedura d'importazione, per maggiori informazioni seguire la guida Importing and exporting virtual machines. Qualora invece abbiate la necessità di dover importare la Virtual Appliance su VMWare, potreste utilizzare il tool VMware OVF Tool.
3. Conclusioni
In questa breve guida abbiamo visto tutti i passi necessari per realizzare il package RPM contenente i binari del conosciuto framework WSO2 WSF/PHP. La procedura è semplice e immediata, il package RPM ottenuto è così pronto per essere installato sulle proprie installazioni di Zend Server 5.x.