Skip to content

Instantly share code, notes, and snippets.

@brahimmachkouri
Last active August 30, 2024 08:43
Show Gist options
  • Save brahimmachkouri/b51f5e9aef3cbb0c57b236df568ef761 to your computer and use it in GitHub Desktop.
Save brahimmachkouri/b51f5e9aef3cbb0c57b236df568ef761 to your computer and use it in GitHub Desktop.
Installation de oci8
#!/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