Guida all’installazione di Oracle 10G XE + Apache + PHP sulla vostra Linux Box 30 marzo 2007 - 22:14
Inviato da Antonio De Luci (imu) in : Contributi, Debian, Fedora, GNU, Guide, Linux, O.S. Revolution, Suse , trackback
Contributo di Simone Saravalli
Questa guida si propone di seguirvi passo passo nell’installazione di un web server e di un db server (anche sulla stessa macchina, perchè no!), utilizzando:
- GNU/Linux;
- il web server Apache;
- Oracle (sì, proprio Oracle e non MySQL, avete letto bene) in versione 10g Express Edition, rilasciata per il pinguino.
- il linguaggio di scripting server side PHP.
L’idea nasce dal desiderio di provare Oracle anche in ambiente GNU/Linux e non perchè io lo ritenga superiore a MySQL, che per me resta sempre la soluzione di default come DBMS. Tuttavia, al lavoro mi hanno chiesto espressamente di utilizzare Oracle per gestire la base di dati di backend di un’applicazione web, lasciandomi comunque libertà nella scelta del sistema operativo, così, appena sono venuto a conoscenza dell’esistenza di una versione di Oracle (la 10g XE, per l’appunto) per GNU/Linux (non è software open source, ma chiudiamo un occhio dai!), mi sono cimentato nella sua installazione e configurazione.
I comandi illustrati di seguito sono stati eseguiti sia su Fedora Core 4, sia su Ubuntu 6.10, dato che per entrambe le distribuzioni esiste il corrispondente pacchetto di Oracle Database Server 10g XE.
Requisiti di sistema e limitazioni di Oracle Database XE:
Oracle Database XE presenta una serie di limitazioni relativamente all’hardware su cui il sistema viene installato e, in particolare:
- se Oracle Database XE è installato su un computer con più di una CPU (incluse anche le CPU dual core), esso utilizzerà esclusivamente le risorse di una sola CPU;
- su un singolo computer può essere effettuata l’installazione di una sola copia di Oracle Database XE; in aggiunta, gli utenti possono far girare una sola istanza del database Oracle su ciascun computer. Quest’ultima limitazione può comunque essere aggirata in quanto, anche sulla stessa installazione di Oracle Database XE possono convivere più schemi, ciascuno dei quali contenente le proprie tabelle. Di fatto, è come se sulla stessa macchina fossero presenti più database simultaneamente;
- la quantità massima di dati contenuta in un database Oracle 10g XE non può superare i 4 gigabytes di spazio disco, tuttavia se i dati degli utenti dovessero superare tale quota, il sistema invia l’errore ORA-12592;
- la quantità massima di memoria RAM che il server Oracle Database XE utilizza non può eccedere un gigabytes, anche se ne è disponibile una quantità maggiore sul sistema usato come server. La quantità di memoria totale utilizzata dal server Oracle viene ricavata come somma della System Global Area (SGA) e della Program Global Area (PGA) aggregata;
- il protocollo HTTPS (Secure HTTP) non è supportato nativamente dal listener HTTP presente in Oracle XE, quindi è necessario far uso di un web server, come Apache, che supporti tale protocollo.
Di seguito vi illustro i requisiti hardware e software che il vostro sistema deve soddisfare per poter portare a termine correttamente l’installazione di Oracle Database Server:
Requisiti di sistema:
| Requisiti | Valore |
| Sistema Operativo | |
| Red Hat Enterprise | |
| Linux RHEL3 e RHEL4 | |
| Suse SLES-9 | |
| Fedora Core 4 | |
| Ubuntu | |
| Debian 3.1 | |
| Protocollo di rete | TCP/IP |
| RAM | Richiesti almeno 256 MB, ma se ne consigliano almeno 512 |
| Spazio disco | 1.5 GB |
| Packages aggiuntivi richiesti | glibc-2.3.2 libaio-0.3.96 |
Spazio di swap richiesto per Oracle Database XE Server:
| Memoria RAM presente sul server | Spazio di swap richiesto |
| Tra 0 e 256 MB | 3 volte la dimensione della RAM |
| Tra 256 e 512 MB | 2 volte la dimensione della RAM |
| 512 MB e oltre | 1024 MB di RAM |
Installazione e configurazione di Oracle Database XE Server:
La procedura di installazione e configurazione della componente server di Oracle Database XE si suddivide in tre passaggi fondamentali (il primo, a dire il vero, è solo un controllo che potete eseguire sul vostro server per verificare che alcuni parametri del kernel siano correttamente impostati. Io ho eseguito i comandi riportati di seguito sia su Fedora, sia su Ubuntu e non ho dovuto variare alcunchè):
1. Impostazione dei parametri del kernel:
Dalla documentazione reperibile sul sito di Oracle, si legge che è necessario settare alcuni parametri del kernel per un funzionamento ottimale di Oracle. Nella tabella seguente riporto i parametri necessari ed il corrispondente valore che essi dovrebbero assumere:
Parametri del kernel richiesti
| Parametro del kernel | Valore |
| sem | 250 |
| semmns | 32000 |
| semopn | 100 |
| semmni | 128 |
| shmmax | 536870912 |
| shmmni | 4096 |
| shmall | 2097152 |
| file-max | 65536 |
| ip_local_port_range | 1024-65000 |
| rmem_default | 262144 |
| wmem_default | 262144 |
| rmem_max | 262144 |
| wmem_max | 262144 |
Per prima cosa diamo un’occhiata per verificare che il valore impostato di default sulla nostro distribuzione per questi parametri del kernel sia coerente con quanto indicato nella tabella precedente. Il comando sysctl ci viene in aiuto:
# /sbin/sysctl -a | grep shm
kernel.shmmni = 4096
kernel.shmall = 2097152
kernel.shmmax = 536870912
kernel.shm-use-bigpages = 0
# /sbin/sysctl -a | grep sem
kernel.sem = 250 32000 100 128
# /sbin/sysctl -a | grep file-max
fs.file-max = 65536
# /sbin/sysctl -a | grep ip_local_port_range
net.ipv4.ip_local_port_range = 1024 65000
# /sbin/sysctl -a | grep rmem_default
net.core.rmem_default = 262144
# /sbin/sysctl -a | grep rmem_max
net.core.rmem_max = 262144
# /sbin/sysctl -a | grep wmem_default
net.core.wmem_default = 262144
# /sbin/sysctl -a | grep wmem_max
net.core.wmem_max = 262144
Nel mio caso, il valore dei parametri del kernel richiesti per il corretto funzionamento di Oracle Server è ok, quindi si può procedere con il punto successivo, ma se per voi non dovesse essere così, sarà necessario editare il file sysctl.conf con il vostro editor preferito (sempre da root), oppure con il comando seguente:
# cat >> /etc/sysctl.conf <<EOF
kernel.sem = 250 32000 100 128
kernel.shmmax = 536870912
kernel.shmmni = 4096
kernel.shmall = 2097152
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default=262144
net.core.wmem_default=262144
net.core.rmem_max=262144
net.core.wmem_max=262144
EOF
2. Installazione e configurazione di Oracle Database XE:
Supponendo di aver già effettuato la registrazione presso il sito di Oracle, si può ridirigere il proprio browser web all’indirizzo:
http://www.oracle.com/technology/software/products/database/xe/htdocs/102xelinsoft.html
Accettato il contratto di licenza, potrete procedere con l’installazione del pacchetto; se state utilizzando Fedora, è necessario installare prima di tutto la libreria libaio, come indicato precedentemente (la libreria glibc, infatti, è presente di default in questa distribuzione), quindi potete procedere all’installazione dell’rpm di Oracle Database Server XE come utente root:
# rpm –ivh oracle-xe-[versione].rpm
Per chi usa Debian, o Ubuntu, invece, una volta scaricato il deb corrispondente sempre dalla pagina web indicata, il comando da lanciare è il classico dpkg:
# dpkg –i oracle-xe-[versione].deb
In questo secondo caso, non è necessaria l’installazione di alcuna libreria aggiuntiva.
Bene, ora è giunto il momento di passare alla configurazione del nostro Oracle Database Server nuovo nuovo; nella directory /etc/init.d/ si trova uno script di configurazione di Oracle chiamato oracle-xe, da lanciare con l’opzione configure:
# ./oracle-xe configure
- Lo script vi richiede una serie di informazioni per la configurazione del database Oracle tra cui:
il numero di porta (per default la 8080) tramite cui è possibile raggiungere l’interfaccia web per la configurazione di Oracle all’url:
http://[hostname o indirizzo IP]:8080/htmldb
- il numero di porta (per default la 1521) su cui si mette in attesa il “listener” di Oracle Server, ossia un demone preposto a ricevere e servire le richieste di connessione al server Oracle, appunto. Se il vostro firewall è configurato in modo tale da filtrare la porta di default per il listener di Oracle, specificate un valore a voi più congeniale!
- quando far partire l’istanza di Oracle Database Server; si può decidere se schedulare la partenza di Oracle al boot del sistema (e questo implica anche la partenza immediata del DBMS), oppure se eseguirla manualmente di volta in volta.
Di seguito riporto l’output dello script di configurazione con i parametri da me inseriti:
Oracle Database 10g Express Edition Configuration
This will configure on-boot properties of Oracle Database 10g Express
Edition. The following questions will determine whether the database should
be starting upon system boot, the ports it will use, and the passwords that
will be used for database accounts. Press <Enter> to accept the defaults.
Ctrl-C will abort.Specify the HTTP port that will be used for HTML DB [8080]: 8080
Specify a port that will be used for the database listener [1521]: 1521
Specify a password to be used for database accounts. Note that the same
password will be used for SYS, SYSTEM and FLOWS_020100. Oracle recommends
the use of different passwords for each database account. This can be done
after initial configuration:
Confirm the password:Do you want Oracle Database 10g Express Edition to be started on boot (y/n) [y]: y
Configuring Database…
Starting Oracle Net Listener.
Starting Oracle Database 10g Express Edition Instance.
Fine, il vostro database server è funzionante e attivo. Complimenti!
Come non ne siete sicuri? Vabbè, un bel giro con netstat, oppure rieseguendo lo script oracle-xe con l’opzione “status” fugherà ogni vostro dubbio residuo.
# ./oracle-xe status
LSNRCTL for Linux: Version 10.2.0.1.0 – Beta on 14-FEB-2007 10:14:01
Copyright (c) 1991, 2005, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))) <— EVVAI IL LISTENER E’ ATTIVO!!!
STATUS of the LISTENER
————————
Alias LISTENER
Version TNSLSNR for Linux: Version 10.2.0.1.0 – Beta
Start Date 14-FEB-2007 10:13:44
Uptime 0 days 0 hr. 0 min. 17 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Default Service XE
Listener Parameter File /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/network/admin/listener.ora
Listener Log File /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/network/log/listener.log
Listening Endpoints Summary…
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))
Services Summary…
Service “PLSExtProc” has 1 instance(s).
Instance “PLSExtProc”, status UNKNOWN, has 1 handler(s) for this service…
The command completed successfully
3. Impostazione delle variabili d’ambiente:
Ok, ora Oracle è installato e configurato sulla vostra linux box, ma manca ancora un ultimo passo, ossia la configurazione delle variabili d’ambiente, senza cui non è possibile accedere nemmeno al prompt di SQL*Plus per le classiche operazioni di gestione del database come inserimenti, modifiche, cancellazioni e consultazioni di dati e così via.
Per procedere in questo senso, è sufficiente lanciare uno script di configurazione delle variabili d’ambiente di Oracle Database XE, disponibile in due distinte versioni a seconda della shell che si utilizza.
Lo script in questione, che si trova nella directory:
/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/
è oracle_env.sh (valido anche per le shell Bourne e Korn, mentre per C e tcsh shell, lo script da usare è oracle_env.csh, presente sempre nella medesima directory). Io ho lanciato questo script sempre come utente root, ma lo si può eseguire anche come utente normale:
# cd /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/
# ./oracle_env.sh
Lo script oracle_env.sh, si occupa di:
- impostare la variabile ORACLE_HOME con il path dell’installazione di Oracle Database XE;
- impostare la variabile ORACLE_SID che conterrà il nome del database;
- impostare la variabile NLS_LANG con il valore ritornato dallo script nls_lang.sh; quest’ultimo si occupa di determinare il character set predefinito con cui i dati verranno inseriti nel database e visualizzati tramite un’applicazione client come, ad esempio SQL*Plus. Il parametro NLS_LANG utilizza il seguente formato:
NLS_LANG = LANGUAGE_TERRITORY.CHARACTER_SET
LANGUAGE specifica il linguaggio con cui vengono visualizzati i messaggi di Oracle ed i nomi dei giorni e dei mesi; TERRITORY specifica le convenzioni culturali per date, numeri, tempo e formati monetari, mentre il valore CHARACTER_SET indica la lingua da utilizzare per l’inserimento e la visualizzazione dei dati nel database di Oracle.
Nel caso specifico del mio server, ad esempio, il valore settato dallo script nls_lang.sh per la variabile d’ambiente NLS_LANG è il seguente:
# echo $NLS_LANGITALIAN_ITALY.AL32UTF8
4. impostare la variabile PATH con il percorso che porta alla directory contenente gli eseguibili di Oracle database XE;
5. impostare la variabile LD_LIBRARY_PATH con il percorso della directory contenente le librerie principali per Oracle XE.
Va ricordato che riavviando il computer, i settaggi impostati con lo script oracle_env.sh vengono persi, perciò è buona norma inserire la stringa:
/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/bin/oracle_env.sh
all’interno del file .bash_profile; inoltre, per poter mantenere le stesse impostazioni all’apertura di ogni nuova shell durante la sessione corrente, è conveniente aggiungerlo anche all’interno del file .bashrc.
Installazione e configurazione di Apache, PHP e PEAR:
Una volta che il db server Oracle è installato e configurato, si può procedere con l’installazione del web server Apache tramite i pacchetti forniti dalla vostra distro oppure da sorgenti (io ho optato per quest’ultima scelta, nonostante la sfiga che spesso mi perseguita con la ricompilazione del codice sorgente).
Questi sono i comandi che ho lanciato per il download, lo scompattamento e l’installazione di Apache sul mio server:
# wget -c http://apache.fis.uniroma2.it/httpd/httpd-2.2.3.tar.gz
# tar xzf httpd-2.2.3.tar.gz /usr/local/src/
# ./configure --prefix=/usr/local/apache2/
# make && make install
il parametro –prefix passato al comando configure richiede il path in cui verrà installato il web server Apache. Dalla documentazione del web server si legge che il percorso di default è /usr/local/apache2/ e io ho usato proprio questo.
Terminata la compilazione di Apache, è necessario modificare opportunamente il file di configurazione httpd.conf (per chi ha compilato da sorgenti senza specificare un path di installazione diverso da quello di default proposto nella documentazione di Apache, questo file è posizionato in /usr/local/apache2/conf/)
Ora db server e web server sono installati, quindi si può passare all’installazione di PHP per la creazione delle pagine web dinamiche.
Va detto che PHP mette a disposizione delle funzioni che consentono la comunicazione con una base di dati, ma esse dipendono strettamente dal tipo di DBMS con cui le pagine web scritte in PHP devono interagire, motivo per cui vi consiglio di utilizzare PEAR (PHP Extension and Application Repository), ossia un repository di package con cui è possibile estendere le funzionalità del linguaggio. In particolare, il package DB (ora sostituibile dal package MDB2), fornisce un’API che si frappongono tra PHP e la vostra base di dati, permettendo di slegare le vostre applicazioni web dal DBMS sottostante (quindi poco importa che usiate MySQL, Oracle, vattelapesca… le funzioni di connessione e di gestione dei dati contenuti nel database saranno sempre le stesse). Il vantaggio è che se in futuro dovrete o vorrete migrare il database da voi gestito verso un DBMS diverso da quello di partenza, questo non vi obbligherà a dover modificare di conseguenza tutte le funzioni di interazione con il database stesso per doverle adattare al nuovo DBMS. Una GRANDE comodità ed un notevole risparmio di tempo no?
Per consentire a PHP di comunicare con una base di dati gestita con MySQL, oppure con Oracle, eccetera, è necessario abilitarne il relativo supporto passando il parametro opportuno in fase di compilazione dei sorgenti. La procedura che io ho seguito per PHP è del tutto simile a quella vista per Apache e si avvale sempre dei comandi “configure”, “make” e “make install”:
# wget -c http://it2.php.net/get/php-5.1.6.tar.gz/from/it.php.net/mirror
# tar xzf php-5.1.6.tar.gz /usr/local/src/
# ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --with-config-file-path=/usr/local/apache2/conf --with-oci8=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server --enable-sigchild --without-mysql
# make && make install
Come si può notare dai comandi sopra riportati, dopo aver scaricato e scompattato il tarball con i sorgenti di PHP, ho passato alcuni parametri utili per la configurazione del software; in particolare, ho abilitato il supporto ad Oracle tramite la direttiva –with-oci8 che richiede di specificare il path all’installazione di Oracle Database Server.
Dando un’occhiata al log della compilazione di PHP potete vedere che anche PEAR è stato installato sul sistema; in particolare, questo software si presenta con i packages Archive_Tar e Console_Getopt già inclusi di default.
Installing man pages: /usr/local/php/man/man1/
page: phpize.1
page: php-config.1
Installing PEAR environment: /usr/local/php/lib/php/
[PEAR] Archive_Tar - installed: 1.3.1
[PEAR] Console_Getopt - installed: 1.2
pear/PEAR can optionally use package "pear/XML_RPC" (version >= 1.4.0)
[PEAR] PEAR - installed: 1.4.9
Wrote PEAR system config file at: /usr/local/php/etc/pear.conf
You may want to add: /usr/local/php/lib/php to your php.ini include_path
Installing PDO headers: /usr/local/php/include/php/ext/pdo/
Per concludere l’installazione di PHP è sufficiente inserire il percorso /usr/local/php/lib/php all’interno del file php.ini, il quale deve essere successivamente copiato dalla directory dei sorgenti di PHP nella directory /usr/local/lib. Ah, una nota importante! Ho scoperto che le ultime versioni di Apache richiedono che una copia del php.ini venga inserita anche in /usr/local/apache2/conf/ (supponendo che abbiate compilato il web server da sorgenti e che abbiate indicato /usr/local/apache2/ come path per l’installazione, altrimenti sostituite con la vostra situazione), pena la mancata visualizzazione delle pagine PHP da parte del browser. Non dimenticatevi di questo punto, che tra l’altro ho scoperto girovagando per forum in rete perchè sulla documentazione di Apache e PHP non è riportato, altrimenti rischiate di perdere molto tempo per nulla.
Se la compilazione di PHP è adata a buon fine, nell’httpd.conf, il file di configurazione di Apache, troverete una stringa di questo tipo:
LoadModule php5_module modules/libphp5.so
Questa riga indica che Apache ha caricato il modulo per il funzionamento delle pagine web contenenti codice PHP (nella versione 5) e che queste verranno visualizzate correttamente dal browser.
Mi permetto a questo punto di scendere un pò più nel dettaglio, sperando di non annoiarvi. MySQL ed Oracle considerano l’apice(’) da utilizzare come delimitatore di stringhe, o per racchiudere le date, eccetera. Se dovete memorizzare una stringa all’interno di una tabella e questa stringa contiene una o più occorrenze del carattere apice, entrambi i DBMS ritorneranno un errore a meno che non eseguiate un escape di tale carattere. Questa operazione si rende, ovviamente, necessaria anche per i dati che gli utenti inseriscono, ad esempio, tramite i form di un sito e che poi andranno inseriti all’interno di un database, con la differenza che mentre MySQL effettua l’escape del carattere apice con il carattere backslash, Oracle utilizza un ulteriore apice.
PHP consente l’escape del carattere apice, se presente nei dati passati tramite GET, POST o persino cookie, per mezzo delle seguenti direttive contenute nel php.ini:
; Magic quotes for incoming GET/POST/Cookie data.magic_quotes_gpc = Off
; Magic quotes for runtime-generated data, e.g. data from SQL, from exec(), etc.magic_quotes_runtime = Off
; Use Sybase-style magic quotes (escape ' with '' instead of ').magic_quotes_sybase = On
Impostando magic_quotes_gpc e magic_quotes_sybase a “On” otterrete l’escape del carattere apice alla maniera di Oracle, se magic_quotes_sybase a “Off”, otterete l’escape alla maniera di MySQL.
Bene, chiusa la parentesi pizzosa, concludo con la configurazione di PEAR che, se PHP è stato installato correttamente, sarà già presente sul vostro server.
Il comando pear list permette di ottenere una lista dei package di PEAR presenti sul sistema, mentre con:
pear install [nome_pacchetto]
potete installare un package prelevandolo direttamente dai repository di PEAR, appunto. In particolare, per l’interazione di PHP, tramite PEAR, con Oracle, è necessario il già citato DB, per cui si può procedre alla sua installazione:
# ./pear install DB
downloading DB-1.7.6.tgz ...
Starting to download DB-1.7.6.tgz (124,807 bytes)
............................done: 124,807 bytes
install ok: DB 1.7.6
# ./pear list
Installed packages:
===================
Package Version State
Archive_Tar 1.1 stable
Console_Getopt 1.2 stable
DB 1.7.6 stable
Beh, questa è la mia prima guida e spero che possa tornare utile a qualcuno come lo è stata per me! Alla prossima.
Simone Saravalli
Tutto il contenuto di questo 

Commenti»
nessun commento ancora - vuoi essere il primo?