Last active
October 29, 2024 08:29
-
-
Save brahimmachkouri/b51f5e9aef3cbb0c57b236df568ef761 to your computer and use it in GitHub Desktop.
Installation de oci8
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# BM 20240830 | |
# Testé avec Ubuntu 22.04, PHP 8.3 (Ondrej Sury) & Oracle Instant Client 21.15 | |
# Vérification que le script est exécuté en tant qu'administrateur (root) | |
if [[ $EUID -ne 0 ]]; then | |
echo "Ce script doit être exécuté en tant qu'administrateur (root)." | |
exit 1 | |
fi | |
# Vérification de l'installation de PHP | |
if ! command -v php &> /dev/null; then | |
echo "PHP n'est pas installé. Merci d'installer PHP avant d'exécuter ce script." | |
exit 1 | |
fi | |
# Configuration du serveur web et du répertoire de destination | |
web_server="nginx" | |
destination="/usr/lib/oracle" | |
# Détection de la version de PHP | |
php_version=$(php -v | grep -oP 'PHP \K[0-9]+\.[0-9]+') | |
# Détection de l'architecture | |
architecture=$(dpkg --print-architecture) | |
if [ "$architecture" == "amd64" ]; then | |
instantclient_url="https://download.oracle.com/otn_software/linux/instantclient/2115000/instantclient-basic-linux.x64-21.15.0.0.0dbru.zip" | |
instantclient_sdk_url="https://download.oracle.com/otn_software/linux/instantclient/2115000/instantclient-sdk-linux.x64-21.15.0.0.0dbru.zip" | |
else | |
echo "Architecture non supportée : $architecture" | |
exit 1 | |
fi | |
# Installation des dépendances nécessaires | |
export DEBIAN_FRONTEND=noninteractive | |
apt-get update -q | |
apt-get install -y -q php$php_version-dev build-essential autoconf libaio-dev unzip wget | |
# Téléchargement des fichiers du client Oracle | |
wget --quiet --no-check-certificate $instantclient_url | |
if [ ! -f "$(basename "$instantclient_url")" ]; then | |
echo "Erreur : téléchargement du client Oracle Instant Client échoué." | |
exit 1 | |
fi | |
wget --quiet --no-check-certificate $instantclient_sdk_url | |
if [ ! -f "$(basename "$instantclient_sdk_url")" ]; then | |
echo "Erreur : téléchargement du client Oracle SDK échoué." | |
exit 1 | |
fi | |
# Création du répertoire pour les bibliothèques Oracle et extraction des fichiers | |
mkdir -p $destination | |
unzip -q "$(basename "$instantclient_url")" -d "$destination" | |
unzip -q "$(basename "$instantclient_sdk_url")" -d "$destination" | |
# Recherche du répertoire instantclient dans /usr/lib/oracle | |
path=$(find $destination -maxdepth 1 -type d -name 'instantclient_*' -print -quit) | |
# Vérification que le répertoire a été trouvé | |
if [ -n "$path" ]; then | |
version=$(echo "$path" | grep -oP '\d+_\d+') | |
echo "Version détectée : $version" | |
else | |
echo "Répertoire Instant Client introuvable dans /usr/lib/oracle." | |
exit 1 | |
fi | |
# Configuration des variables d'environnement pour Oracle | |
export ORACLE_HOME="$destination/instantclient_$version" | |
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME | |
# Installation de l'extension OCI8 avec PECL | |
printf "instantclient,$ORACLE_HOME\n" | pecl install -f oci8 | |
# Ajout des chemins de bibliothèque OCI8 au système | |
echo $ORACLE_HOME > /etc/ld.so.conf.d/oracle-instantclient.conf | |
ldconfig | |
# Détection du chemin de configuration PHP pour CLI et FPM | |
php_ini_cli_path=$(php -i | grep "Loaded Configuration File" | awk -F' => ' '{print $2}') | |
php_ini_fpm_path=$(echo $php_ini_cli_path | sed 's/cli/fpm/g') | |
# Vérification et modification des fichiers de configuration PHP | |
if [ -f "$php_ini_cli_path" ]; then | |
echo 'extension=oci8.so' >> "$php_ini_cli_path" | |
else | |
echo "Fichier de configuration PHP CLI introuvable." | |
exit 1 | |
fi | |
if [ -f "$php_ini_fpm_path" ]; then | |
echo 'extension=oci8.so' >> "$php_ini_fpm_path" | |
else | |
echo "Fichier de configuration PHP FPM introuvable." | |
exit 1 | |
fi | |
# Ajout des variables d'environnement à la configuration www.conf de PHP-FPM | |
echo "env[ORACLE_HOME] = $ORACLE_HOME" >> /etc/php/$php_version/fpm/pool.d/www.conf | |
echo "env[LD_LIBRARY_PATH] = $LD_LIBRARY_PATH" >> /etc/php/$php_version/fpm/pool.d/www.conf | |
# Création d'un lien symbolique pour libaio car n'existe pas sous Ubuntu 22.04 | |
if [ ! -e /usr/lib/x86_64-linux-gnu/libaio.so.1 ]; then | |
ln -sf /usr/lib/x86_64-linux-gnu/libaio.so.1t64 /usr/lib/x86_64-linux-gnu/libaio.so.1 | |
fi | |
# Redémarrage du serveur web et du serveur PHP-FPM | |
systemctl restart $web_server | |
systemctl restart php$php_version-fpm | |
# Vérification de l'installation de l'extension OCI8 | |
if php -m | grep -q "oci8"; then | |
echo "L'extension OCI8 a été installée avec succès." | |
else | |
echo "Une erreur s'est produite lors de l'installation de l'extension OCI8." | |
exit 1 | |
fi | |
# Installation de l'extension PDO_OCI | |
echo "Installation de l'extension PDO_OCI..." | |
cd ~ | |
PHP_VERSION=$(php -v | grep -oP 'PHP \K[0-9]+\.[0-9]+\.[0-9]+') | |
apt-get install -y -q php-dev | |
wget -q https://www.php.net/distributions/php-${PHP_VERSION}.tar.bz2 | |
tar xvfj php-${PHP_VERSION}.tar.bz2 > /dev/null | |
cp -r php-${PHP_VERSION}/ext/pdo_oci . | |
cd pdo_oci | |
phpize > /dev/null | |
./configure --with-pdo-oci=instantclient,/usr/lib/oracle/instantclient_$version > /dev/null | |
make > /dev/null | |
make install > /dev/null | |
# Modification des fichiers de configuration PHP pour PDO_OCI | |
if [ -f "$php_ini_cli_path" ]; then | |
echo 'extension=pdo_oci.so' >> "$php_ini_cli_path" | |
else | |
echo "Fichier de configuration PHP CLI introuvable." | |
exit 1 | |
fi | |
if [ -f "$php_ini_fpm_path" ]; then | |
echo 'extension=pdo_oci.so' >> "$php_ini_fpm_path" | |
else | |
echo "Fichier de configuration PHP FPM introuvable." | |
exit 1 | |
fi | |
# Redémarrage du serveur web et du serveur PHP-FPM | |
systemctl restart $web_server | |
systemctl restart php$php_version-fpm | |
# Vérification de l'installation de l'extension PDO_OCI | |
if php -m | grep -i "pdo_oci"; then | |
echo "L'extension PDO_OCI a été installée avec succès." | |
# Nettoyage des fichiers temporaires | |
cd ~ | |
rm -f php-${PHP_VERSION}.tar.bz2 | |
rm -rf php-${PHP_VERSION} | |
else | |
echo "Une erreur s'est produite lors de l'installation de l'extension PDO_OCI." | |
exit 1 | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment