Ajouter le support OCI8 à php sous Centos 5

L’extension OCI8 permet ajoute à php des fonctionnalités permettant de communiquer avec une base Oracle.
OCI8 n’est pas fourni de base avec php, il convient de l’installer manuellement.

Avant toute chose, nous allons installer apache-php :

yum install php php-devel httpd
/etc/init.d/httpd start

Nous créons ensuite un fichier /var/www/html/phpinfo.php contenant :

<?php
phpinfo();
?>

Cette page est donc accessible depuis l'adresse http://127.0.0.1/phpinfo.php

Il faut ensuite télécharger et décompresser l'extension oci8 pour php :

wget http://pecl.php.net/get/oci8-1.4.5.tgz
tar zxf oci8-1.4.5.tgz

Pour installer l'extension OCI8, deux cas de figures peuvent se présenter. Soit la machine possède déjà un serveur oracle configuré (cf article sur l'installation d'un serveur oracle) soit la machine ne possède pas de serveur oracle local et devra accéder à un serveur oracle distant.

Si un serveur oracle local est installé :

cd oci8-1.4.5
phpize
./configure --with-oci8=shared,$ORACLE_HOME
make 
make install

Si aucun serveur oracle n'est présent sur la machine :
Il faut alors installer oracle_instantclient. Nous choisirons la version 11.2-basic et 11.2-devel en rpm depuis cette page

rpm -ivh oracle-instantclient11.2-basic-11.2.0.2.0.i386.rpm
rpm -ivh oracle-instantclient11.2-devel-11.2.0.2.0.i386.rpm

Nous pouvons maintenant compiler l'extension OCI8 :

cd oci8-1.4.5
phpize
./configure --with-oci8=shared,instantclient,/usr/lib/oracle/11.2/client/lib
make
make install

Configuration de php

Cette étape est commune aux deux méthodes d'installation précédentes.

Ajouter au fichier /etc/php.ini la ligne :

extension=oci8.so

et redémarrer le serveur apache :

/etc/init.d/httpd restart

Maintenant, en allant sur la page http://127.0.0.1/phpinfo.php, vous devez avoir une section oci8 de ce style :

Installation d’Oracle 11gR2 sur Centos 5

Il est possible d’installer une base Oracle 11g a des fins de test.
L’OTN Developer License Terms spécifie :

We grant you a nonexclusive, nontransferable limited license to use the programs only for the purpose of developing, testing, prototyping and demonstrating your application.

Il faut donc télécharger les deux fichiers LinuxX86 présents sur la page des téléchargements et les décompresser dans le répertoire /tmp

Préparation du système d’exploitation :

Le système (CentOS 5) doit être à jour.

Nous allons suivre les recommandations d’oracle concernant le nommage des répertoires d’installation.
Nous allons donc modifier le fichier /etc/profile et y ajouter :

export ORACLE_BASE="/opt/oracle"
export ORACLE_HOME="$ORACLE_BASE/product/11.2.0/db_1"
export ORACLE_HOSTNAME="mamachine.be-root.com"
export ORACLE_SID="beroot"

Nous pouvons ensuite faire un source /etc/profile afin d’avoir les variables positionnées précédemment actives sous la session courante.
Nous allons ensuite installer les dépendances ;

yum install binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers kernel-headers libaio libaio-devel libgomp libstdc++ libstdc++-devel make numactl sysstat unixODBC-devel pdksh

Il faut maintenant créer l’utilisateur « oracle » ainsi que les groupes rattachés :

/usr/sbin/groupadd oinstall
/usr/sbin/groupadd dba
/usr/sbin/groupadd asmadmin
/usr/sbin/groupadd asmdba
/usr/sbin/useradd -g oinstall -G dba,asmdba,asmadmin oracle

Et positionner un mot de passe pour l’utilisateur oracle :

passwd oracle

Modifions ensuite le fichier /etc/security/limits.conf :

oracle              soft    nproc   2047
oracle              hard    nproc   16384
oracle              soft    nofile  1024
oracle              hard    nofile  65536
oracle              soft    stack   10240

Ces limites sont fixées dans la documentation officielle d’oracle :

Nous allons ensuite créer la structure des répertoires :

mkdir -p $ORACLE_BASE/oradata
mkdir -p  $ORACLE_BASE/recovery_area
chown -R oracle:oinstall $ORACLE_BASE
chmod -R 775 $ORACLE_BASE
mkdir -p /opt/oraInventory
chmod 775 /opt/oraInventory
chown oracle:oinstall  /opt/oraInventory

La documentation officielle d’oracle donne les paramètres du noyau à modifier ainsi que le fichier concerné :

Ainsi, pour vérifier le paramètre shmmni, il suffit de faire un cat /proc/sys/kernel/shmmni

Pour fixer les valeurs , nous allons modifier le fichier /etc/sysctl.conf :

fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 2123476992
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586

On applique les valeur à l’aide d’un petit sysctl -p

Pour lancer l’installation, il faut un environnement graphique correctement configuré. Soit on se loggue sous le compte oracle directement, soit on fait un su – oracle en ayant fait au préalable un xhost +. J’ai choisi cette dernière solution :

xhost +
su - oracle
/tmp/database/runInstaller

Tout d’abord, on choisit de créer une base de données :

… en classe serveur :

… en mono-instance :

… une installation standard :

Il suffit ensuite de définir le mot de passe d’administration ainsi que de mettre le nom de la base de donnée à la même valeur que la variable ORACLE_SID :

A la fin de l’installation, il suffit juste d’exécuter sous l’identité root depuis un terminal le ou les scripts stipulés dans la dernière fenêtre d’installation :

Directement après installation, Oracle Enterprise Manager est accessible depuis un navigateur web à l’adresse https://127.0.0.1:1158/em/

Il est possible de se connecter en SYS/SYSDBA à l’aide du mot de passe rentré lors de l’installation.

Arret du serveur Oracle en ligne de commande :

En tant qu’utilisateur oracle :

Démarrage du serveur Oracle en ligne de commande :

Le démarrage de l’instance se fait en plusieurs étape. Tout d’abord le listener qui gère la partie réseau puis ensuite le démarrage de la base à proprement parler. Toutes ces étapes se font sous l’identité oracle :

Démarrage du listener

Démarrage de la base

Ensuite, on peut éventuellement redémarrer Oracle Enterprise Manager pour administrer la base depuis l’interface web vue précédemment :

Un peu de couleur pour le prompt de bash …

Dans cet exemple, nous allons mettre un peu de couleur au prompt du bash. L’exemple est réalisé sous une centos 5 mais il est bien entendu adaptable à d’autres distributions.

Editons le fichier /etc/bashrc et ajoutons à la fin de ce fichier :

alias ls="ls --color"
alias grep="grep --color"

if [[ ${EUID} == 0 ]] ; then
PS1='\
\[\033[0;00m\][\
\[\033[1;37m\]\[\033[41m\]\u\
\[\033[0;00m\]@\
\[\033[0;35m\]\h\
\[\033[0;00m\]:\
\[\033[0;34m\]\w\
\[\033[0;00m\]]\
\[\033[0;00m\]\$\
 '
else
PS1='\
\[\033[0;00m\][\
\[\033[0;31m\]\u\
\[\033[0;00m\]@\
\[\033[0;35m\]\h\
\[\033[0;00m\]:\
\[\033[0;34m\]\w\
\[\033[0;00m\]]\
\[\033[0;00m\]\$\
 '
fi

Les deux premières lignes définissent des alias pour coloriser les commandes ls et grep.
Ensuite nous définissons deux prompts différents : un pour le root et un autre pour les utilisateurs lambda.
La variable d’environnement PS1 permet de definir l’affichage du prompt.

Les codes couleurs sont les suivants :

\033[0;30m : Noir
\033[0;31m : Rouge
\033[0;32m : Vert
\033[0;33m : Jaune
\033[0;34m : Bleu
\033[0;35m : Magenta
\033[0;36m : Cyan
\033[0;37m : Gris clair

Si l’on remplace le [0 par [1, on obtient l’équivalent de la couleur en plus clair. Ainsi 0;37 étant le gris clair, 1;37 donnera du blanc.
En remplacant [0 par [4, le texte sera souligné.

Il est également possible de définir la couleur de fond de texte :

\033[40m : Noir
\033[41m : Rouge
\033[42m : Vert
\033[43m : Jaune
\033[44m : Bleu
\033[45m : Magenta
\033[46m : Cyan
\033[47m : Gris clair

Les variables sont :
\h : le hostname (jusqu’au premier ‘.’ )
\H : le hostname complet
\t : l’heure au format HH:MM:SS sur 24H
\T : l’heure au format HH:MM:SS sur 12H
\u : le username
\w : chemin complet vers le répertoire courant
\W : répertoire courant (format court)
\$ : # si root ou $ si utilisateur lambda
\d : la date
\# : le numéro de la commande dans la session courante
\! : le numéro de la commande dans l’historique.