Installer un PHP plus récent dans CentOS grâce à SCL

Cet article a été mis à jour, vous consultez ici une archive de cet article!




Introduction



Les distributions Linux d'Entreprise, dont fait partie RedHat (et sa variante gratuite CentOS) ont pour but de durer dans le temps et d'être supportées sur du long terme. De fait, les versions de logiciels sont souvent arrêtées pour garantir une grande stabilité et compatibilité des applicatifs installés. Parfois, en 10 ans, les versions évoluent.
SCL pour l'anglais Software Collections est une collection de logiciels qui permet d'installer, en plus de la version livrée par le système, d'autre versions pour des besoins spécifiques.
Prenons exemple (qui sert de base à cette page) : CentOS6 est livrée avec PHP5.3. Or, le support est terminé. RedHat patch encore PHP 5.3 pour combler les failles de sécurité. Mais on peut installer en parallèle PHP 5.4.

SCL n'est utilisable que dans les éditions 64bits de CentOS et Red Hat Entreprise Linux !


Initialiser SCL dans CentOS



Tout d'abord, on installe le support SCL :

Code BASH :
yum --enablerepo=extras install  centos-release-scl


Code TEXT :
Installé:
  centos-release-scl.noarch 10:6-6.el6.centos
Dépendance(s) installée(s) :
  centos-release-scl-rh.noarch 0:1-1.el6.centos 


Ensuite, nous avons à disposition tout ceci (Pour CentOS 6) :

  • httpd24 - Apache 2.4
  • mariadb55 - MariaDB 5.5
  • mysql55 - MySQL 5.5
  • nodejs010 - Node.js 0.10
  • perl516 - Perl 5.16.3
  • php54 - PHP 5.4
  • postgresql92 - PostgreSQL 9.2
  • python27 - Python 2.7
  • python33 - Python 3.3
  • ruby193 - Ruby 1.9.3
  • ....


Source : http://mirror.centos.org/centos/6/sclo/x86_64/rh/ - http://mirror.centos.org/centos/7/sclo/x86_64/rh/


Installation de PHP5.4 à côté de 5.3 sur CentOS 6



Installation de PHP 5.4



Quand j'ai installé PHP 5.3, j'avais procédé ainsi :
Code BASH :
 yum install php php-mysql php-gd php-pdo


Le PHPINFO donnait :
Citation:
Apache Version Apache/2.2.15 (CentOS)
PHP Version 5.3.3
Loaded Configuration File /etc/php.ini


Et bien pour la collection php54, on ajoute le préfixe php54 à tous les paquets) :
Code BASH :
yum install php54-php php54-php-mysql php54-php-gd php54-php-pdo


Code TEXT :
Installé:
  php54-php.x86_64 0:5.4.40-3.el6                         php54-php-gd.x86_64 0:5.4.40-3.el6                 
  php54-php-mysqlnd.x86_64 0:5.4.40-3.el6                 php54-php-pdo.x86_64 0:5.4.40-3.el6                
Dépendance mise à jour:
  php54-php-cli.x86_64 0:5.4.40-3.el6                    php54-php-common.x86_64 0:5.4.40-3.el6               
  php54-php-process.x86_64 0:5.4.40-3.el6                php54-php-xml.x86_64 0:5.4.40-3.el6


Pour info :

Code BASH :
php -v
PHP 5.3.3 (cli) (built: Feb  9 2016 10:36:17) 
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies


Code BASH :
/opt/rh/php54/root/usr/bin/php -v
PHP 5.4.40 (cli) (built: Oct  5 2015 12:14:01) 
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies



Configurer Apache avec le nouveau PHP



On remarque qu'un fichier de config a été créé dans le dossier d'Apache :

Code BASH :
ls /etc/httpd/conf.d/
php54-php.conf  php.conf  README  welcome.conf


Si on redémarre de suite apache, on a une erreur [warn] module php5_module is already loaded, skipping :

Code BASH :
/etc/init.d/httpd restart
Arrêt de httpd :                                           [  OK  ]
Démarrage de httpd : [Thu Mar 24 16:46:33 2016] [warn] module php5_module is already loaded, skipping
                                                           [  OK  ]


C'est tout simplement qu'on essaie de charger 2 modules PHP.
On peut ne plus charger le PHP 5.3 en désinstallant PHP 5.3 ou en renommant le fichier de config afin qu'il ne termine plus par conf :

Code BASH :
 mv /etc/httpd/conf.d/php.conf /etc/httpd/conf.d/php53.off


On redémarre ensuite Apache et c'est OK :
Code BASH :
/etc/init.d/httpd restart
Arrêt de httpd :                                           [  OK  ]
Démarrage de httpd :  


Maintenant, le PHPINFO donne :
Citation:
Apache Version Apache/2.2.15 (CentOS)
PHP Version 5.4.40
Loaded Configuration File /opt/rh/php54/root/etc/php.ini



Installation de PHP5.6 et d'Apache 2.4 sur CentOS 7



Installation d'Apache 2.4



Il est conseillé de désinstaller httpd du dépôt de base, ou bien de le désactiver et le stopper.

On installe ensuite le httpd 2.4 des dépôts SCL :

Code BASH :
yum install httpd24-httpd


Une fois fait :
Code TEXT :
Installé :
  httpd24-httpd.x86_64 0:2.4.18-11.el7  


On démarre et on active le service au démarrage :
Code BASH :
 systemctl start httpd24-httpd
systemctl enable httpd24-httpd


On peut voir le statut :
Code BASH :
systemctl status httpd24-httpd


Code TEXT :
 httpd24-httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd24-httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since sam. 2017-01-14 10:43:16 CET; 10s ago
 Main PID: 1719 (httpd)
   Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"
   CGroup: /system.slice/httpd24-httpd.service
           ├─1719 /opt/rh/httpd24/root/usr/sbin/httpd -DFOREGROUND
           ├─1720 /opt/rh/httpd24/root/usr/sbin/httpd -DFOREGROUND
           ├─1721 /opt/rh/httpd24/root/usr/sbin/httpd -DFOREGROUND
           ├─1722 /opt/rh/httpd24/root/usr/sbin/httpd -DFOREGROUND
           ├─1723 /opt/rh/httpd24/root/usr/sbin/httpd -DFOREGROUND
           └─1724 /opt/rh/httpd24/root/usr/sbin/httpd -DFOREGROUND
 
janv. 14 10:43:16 centos systemd[1]: Starting The Apache HTTP Server...
janv. 14 10:43:16 centos httpd-scl-wrapper[1719]: AH00558: httpd: Could not reliably determine the server's fully qualified domain ...essage
janv. 14 10:43:16 centos systemd[1]: Started The Apache HTTP Server.
Hint: Some lines were ellipsized, use -l to show in full.


Si la connexion échoue, pensez à ouvrir le pare-feu aussi !

Code BASH :
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload


Par défaut une "arborescence" spécifique est créée : /opt/rh/httpd24/root/
Donc le site par défaut se trouve dans : /opt/rh/httpd24/root/var/www/html
Il est possible de modifier le fichier /opt/rh/httpd24/root/etc/httpd/conf/httpd.conf pour remettre /var/www/html ou l'emplacement de vos fichiers de votre site web par défaut.


Installation de PHP 5.6



Si vous avez installé PHP de cette manière :

Code BASH :
yum install php php-pdo php-gd ...


Il suffit de préfixer chaque paquet de rh-phpXX XX est la version. Voici un exemple :

Code BASH :
yum install rh-php56-php rh-php56-php-pdo rh-php56-php-gd rh-php56-php-dom rh-php56-php-xml rh-php56-php-mb rh-php56-php-mbstring  rh-php56-php-mysqlnd


Redémarrer httpd pour prendre en compte le PHP nouvellement installé

Code BASH :
systemctl restart httpd24-httpd


Si on fait une page avec la fonction phpinfo, on obtient : Apache/2.4.18 (Red Hat) PHP/5.6.25

À noter: le fichier de config : /etc/opt/rh/rh-php56/php.ini

Aussi, les logs se trouvent dans /var/log/httpd24/error_log et /var/log/httpd24/access_log